mdx - 虚拟多维数据集未显示所有结果

时间:2015-02-10 12:03:08

标签: mdx mondrian

我有2个共享维度的二维立方体(SalesCube和StockCube):商店名称,文章ID。每个多维数据集都有自己的特定维度:SalesCube具有SalesDim,StockCube具有StockDim。此外,每个多维数据集都有自己的度量:SalesCube具有“销售价值”,StockCube具有“股票价值”。我创建了一个虚拟多维数据集,其中包含所有维度(2个共享和2个特定)和两个度量。问题是,如果我使用特定维度,结果将仅包含来自具有该特定维度的多维数据集的度量的数据(第二个度量为空)。如果我仅使用共享维度,则报告将为这两个度量带来结果。 我错过了什么?

实际上,对于不来自同一父多维数据集的维度下的度量值,虚拟值为空白

我找到了类似但没有答案的内容:http://forums.pentaho.com/showthread.php?130932-Virtual-Cube-Measure-Behaviour-Question

<Schema name="Shop_Sales_and_Stock">
  <Dimension name="SalesDim">
    <Hierarchy hasAll="true">
      <Table name="Sales" primaryKey="Article_Id"/>
      <Level name="SalesDim" uniqueMembers="false" column="SalesDim" type="String">
      </Level>
    </Hierarchy>
  </Dimension>
  <Dimension name="StockDim">
    <Hierarchy hasAll="true">
      <Table name="Stocks" primaryKey="Article_Id"/>
      <Level name="StockDim" uniqueMembers="false" column="StockDim" type="String">
      </Level>
    </Hierarchy>
  </Dimension>

<Cube name="SalesCube">
  <Table name="Sales"/>
  <Dimension name="Shop_name">
    <Hierarchy visible="true" hasAll="true">
      <Table name = "Sales"/>
    <Level name="Shop name" uniqueMembers="false" column="Shop_name" type="String">
    </Level>
      </Hierarchy>
  </Dimension>
  <Dimension name="Article Id">
    <Hierarchy visible="true" hasAll="true">
      <Table name = "Sales"/>
    <Level name="Article Id" uniqueMembers="false" column="Article_Id" type="String">
    </Level>
      </Hierarchy>
  </Dimension>
    <DimensionUsage name="SalesDim" source="SalesDim" foreignKey="Article_Id"/>
    <Measure name="Sales value" column="Sales value" aggregator="sum" formatString="&#x23;"/>
</Cube>

<Cube name="StockCube">
  <Table name="Stocks"/>
  <Dimension name="Shop_name">
    <Hierarchy visible="true" hasAll="true">
      <Table name = "Stocks"/>
    <Level name="Shop name" uniqueMembers="false" column="Shop_name" type="String">
    </Level>
      </Hierarchy>
  </Dimension>
  <Dimension name="Article Id">
    <Hierarchy visible="true" hasAll="true">
      <Table name = "Stocks"/>
    <Level name="Article Id" uniqueMembers="false" column="Article_Id" type="String">
    </Level>
      </Hierarchy>
  </Dimension>
    <DimensionUsage name="StockDim" source="StockDim" foreignKey="Article_Id"/>
    <Measure name="Stocks value" column="Stocks value" aggregator="sum" formatString="&#x23;"/>
</Cube>

<VirtualCube name="Shop_Sales_and_Stock">
    <CubeUsages>
        <CubeUsage cubeName="SalesCube"/>
        <CubeUsage cubeName="StockCube"/>
    </CubeUsages>
    <VirtualCubeDimension name="Shop name"/>
    <VirtualCubeDimension name="Article Id"/>
    <VirtualCubeMeasure cubeName="SalesCube" name="[Measures].[Sales value]"/>
    <VirtualCubeMeasure cubeName="StockCube" name="[Measures].[Stocks value]"/>
</VirtualCube>
</Schema>

2 个答案:

答案 0 :(得分:0)

在特定于多维数据集的维度上使用ignoreUnrelatedDimensions参数(虚拟多维数据集中的所有多维数据集都不共享维度)。 在Mondrian Schema documentation中了解有关此参数的详情。

<VirtualCube name="Shop_Sales_and_Stock">
  <CubeUsages>
    <CubeUsage cubeName="SalesCube" ignoreUnrelatedDimensions="true"/>
    <CubeUsage cubeName="StockCube" ignoreUnrelatedDimensions="true"/>
  </CubeUsages>
  <VirtualCubeDimension name="Shop name"/>
  <VirtualCubeDimension name="Article Id"/>
  <VirtualCubeMeasure cubeName="SalesCube" name="[Measures].[Sales value]"/>
<VirtualCubeMeasure cubeName="StockCube" name="[Measures].[Stocks value]"/>

答案 1 :(得分:0)

您描述的行为完全正常且预期。如果要求[Measures].[Sales value]要求{OL} Article Id,则OLAP不知道如何计算Sales。这没有任何意义。您无法知道Article Id表中的哪些事实(记录/行)可以获取每个{{1}}值。

如果您想分别分析这两个度量 - 使用两个单独的多维数据集或接受这样的事实:当您按非共享维度进行细分时,您将只获得一个度量

如果您想根据两个不同立方体中的两个来计算另一个度量 - 您只能使用它们之间共享的公共维度。如果你考虑一下,其他的计算无论如何都没有意义。