Tableau MarkLogic数据建模

Nik*_*iya 9 marklogic tableau-api marklogic-8

我正在使用Tableau和MarkLogic.我有以下XML结构

<CustomerInformation CustomerId="1">
        <CustomerBasicInformation>
            <CustomerTitle></CustomerTitle>
            <CustomerFirstName></CustomerFirstName>
            <CustomerMiddleName></CustomerMiddleName>
            <CustomerLastName></CustomerLastName>
        </CustomerBasicInformation>
        <CustomerEmplyomentDetails>
            <CustomerEmployer>
                <EmployerName IsCurrentEmployer=""></EmployerName>
                <CustomerDesignation></CustomerDesignation>
                <EmployerLocation></EmployerLocation>
                <CustomerTenure></CustomerTenure>
            </CustomerEmployer>
        <CustomerEmplyomentDetails>
        <PolcyDetails>
            <Policy PolicyId="">
                <PolicyName></PolicyName>
                <PolicyType></PolicyType>
                <PolicyCategory></PolicyCategory>
                <QuoteNumber></QuoteNumber>
                <PolicyClaimDetails>
                    <PolicyClaim ClaimId="">
                        <PolicyClaimedOn></PolicyClaimedOn>
                        <PolicyClaimType></PolicyClaimType>
                        <PolicyClaimantName></PolicyClaimantName>
                    </PolicyClaim>
                </PolicyClaimDetails>
                <PolicyComplaintDetails>
                    <PolicyComplaint ComplaintId="">
                        <PolicyComplaintStatus></PolicyComplaintStatus>
                        <PolicyComplaintOn></PolicyComplaintOn>
                    </PolicyComplaint>
                </PolicyComplaintDetails>
                <BillingDetails>
                    <Billing BillingId="">
                        <BillingAmount></BillingAmount>
                        <BillingMode></BillingMode>
                    </Billing>
                </BillingDetails>
            </Policy>
            <Policy PolicyId="">
            <PolicyName></PolicyName>
            <PolicyType></PolicyType>
            <PolicyCategory></PolicyCategory>
            <QuoteNumber></QuoteNumber>
            <PolicyClaimDetails>
                <PolicyClaim ClaimId="">
                    <PolicyClaimedOn></PolicyClaimedOn>
                    <PolicyClaimType></PolicyClaimType>
                    <PolicyClaimantName></PolicyClaimantName>
                </PolicyClaim>
            </PolicyClaimDetails>
            <PolicyComplaintDetails>
                <PolicyComplaint ComplaintId="">
                    <PolicyComplaintStatus></PolicyComplaintStatus>
                    <PolicyComplaintOn></PolicyComplaintOn>
                </PolicyComplaint>
            </PolicyComplaintDetails>
            <BillingDetails>
                <Billing BillingId="">
                    <BillingAmount></BillingAmount>
                    <BillingMode></BillingMode>
                </Billing>
            </BillingDetails>
        </Policy>
    </PolcyDetails>
</CustomerInformation>
Run Code Online (Sandbox Code Playgroud)

我已经在上面的结构上创建了一个视图.最初我为所有元素创建了一个视图,但在Tableau上我得到了重复值以及笛卡尔连接结果.所以为了解决这个问题,我使用了片段根的方法.由于单个客户可以有多个PolicyDetails.我在Policy上创建了片段根目录.类似声明,投诉,计费,报价对于单个策略可以是多个,我已经在每个策略上创建了片段根.

现在执行此操作后,它解决了重复问题以及笛卡尔连接结果集.它为每个实体(CustomerInfo,Policy,Claims,Complaints,Quote,Employer,Billing)提供了唯一的记录集.

但是,我无法将这些实体相互关联(如在foreign-primary key中).

我用元素范围和所有创建了以下视图.我只粘贴客户和政策详细信息,如果这解决了其他实体可以进行类似管理

view:create(
  "InsurancePOC",
  "CustomerBasicInfo",
  view:element-view-scope(xs:QName("CustomerInformation")),
  ( 
    view:column("CustomerId", cts:element-attribute-reference(xs:QName("CustomerInformation"), xs:QName("CustomerId"))),
    view:column("PolicyId", cts:element-attribute-reference(xs:QName("Policy"), xs:QName("PolicyId"))), 
    view:column("QuoteNumber", cts:element-attribute-reference(xs:QName("Quote"), xs:QName("QuoteNumber"))),
    view:column("ComplaintId", cts:element-attribute-reference(xs:QName("PolicyComplaint"), xs:QName("ComplaintId"))),
    view:column("BillingId", cts:element-attribute-reference(xs:QName("Billing"), xs:QName("BillingId"))),:)
    view:column("CustomerFirstName", cts:element-reference(xs:QName("CustomerFirstName"))),
    view:column("CustomerLastName", cts:element-reference(xs:QName("CustomerLastName")))                        
  ),
  (),
  () 
),
view:create(
  "InsurancePOC",
  "PolcyInfo",
  view:element-view-scope(xs:QName("Policy")),
  ( 
    view:column("PolicyId", cts:element-attribute-reference(xs:QName("Policy"), xs:QName("PolicyId"))),
    view:column("PolicyName", cts:element-reference(xs:QName("PolicyName"))),
    view:column("PolicyType", cts:element-reference(xs:QName("PolicyType")))                    
  ),
  (),
  () 
)
Run Code Online (Sandbox Code Playgroud)

所有先决条件,如元素范围索引和所有已完成.

我正在尝试使用view:column("PolicyId", cts:element-attribute-reference(xs:QName("Policy"), xs:QName("PolicyId")))in 来关联这些实体CustomerBasicInfo view.

如果我这样做,它在Tableau或Query控制台中显示零结果.如果我删除它,给出独特的记录,但彼此没有任何关系.我想要的只是实现Policy-Customer之间的关系

请仔细阅读代码段,如果需要更多说明,请告诉我

grt*_*tjn 1

笛卡尔连接结果的获取是 MarkLogic 中从范围索引驱动的 SQL 视图的一个已知问题,特别是对于上面的聚合文档。

解决 SQL 视图问题的最简单方法是将文档拆分为单独的策略,并嵌入客户的副本。如果客户经常有多个保单,这可能意味着大量的数据重复。

您还可以考虑将这些文档分开,并分别存储策略和客户详细信息,以及从策略到客户的 ID 引用,以便您随后可以在 Tableau 或 SQL 中将它们连接在一起。

不过,MarkLogic 9 附带了一项新功能,可以避免这一切的需要。它称为模板驱动提取。它还提供数据的 SQL 视图,但工作方式不同。context它由控制视图中的行的匹配模式(称为 )驱动。您将在本例中Policy使用。context从那里,您可以使用相对路径在树上向上到达客户详细信息,然后向下获取保单详细信息。

TDE 模板使用安装tde:template-insert。该函数的文档显示了此类 TDE 的简单示例:

http://docs.marklogic.com/tde:template-insert

您也可以先尝试一下tde:node-data-extract,以掌握窍门。

哈!