我有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="#"/>
</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="#"/>
</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>
答案 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}}值。
如果您想分别分析这两个度量 - 使用两个单独的多维数据集或接受这样的事实:当您按非共享维度进行细分时,您将只获得一个度量
如果您想根据两个不同立方体中的两个来计算另一个度量 - 您只能使用它们之间共享的公共维度。如果你考虑一下,其他的计算无论如何都没有意义。