1

我有一个立方体:

DimEntity
EntityID
EntityName
EntityLongName

FactReturns
TotalReturn

我想要做的是对所有实体组合之间的 TotalReturns 求和,所以输出是这样的:

             NameA        NameB
LongNameA    sum(A, 1)    sum(A, 2)
LongNameB    sum(B, 1)    sum(B, 2)

(sum(A, 1) = sum(A, A),因为 EntityName "A" 和 EntityID "1" 指的是同一个实体)

我现在拥有的是这样的:

WITH MEMBER [Measures].[SumReturns] AS
    SUM([Dim Entity].[EntityID], [Measures].[TotalReturn])
SELECT 
    [Dim Entity].[EntityName].Children ON COLUMNS,
    [Dim Entity].[EntityLongName].Children ON ROWS  
FROM
    [Returns]
WHERE
    [Measures].[SumReturns]

但这只是给了我一张这样的表格:

             NameA            NameB
LongNameA    A.TotalReturn    null
LongNameB    null             B.TotalReturn
etc...

我只是在学习 MDX 并且很难理解它是如何工作的。

4

1 回答 1

3

您混合了一些 MDX 概念,抱歉误导您。我建议您花一些时间阅读一些 MDX 文档。您在这里快速介绍了 MDX,阅读此页面也很有趣;不要错过下一页 - 高级。

  • 由于元组不存在,因此构造为 null。

维度和层次结构之间有一个重要的区别。维度代表事实空间中的坐标(也就是你的立方体事实)。为了从这个空间(又名立方体)中检索一些值,您需要定义一个子空间(又名单元格)。层次结构是对维度的坐标(实体)进行分组的“另一种”方式。如果您定义相同维度的不同层次结构的两个实体,您将执行这两个实体之间的交集。这个交叉点可以是空的,这是你的情况。

让我们举个例子:

  • EntityName 是您的 [Dim Entity] 的坐标,此示例是以实体为坐标的平面尺寸。
  • 让我们想象一下,您想对这个维度的实体进行不同的分组:包含“a”的实体和不包含“a”的实体。这个新的层次结构有两个成员或实体 [with a] 和 [without a]。

现在你问元组([Dim Entity].[Flat].[Entity 1],[Dim Entity].[Contains A].[with a]),它总是空的,因为这个元组不存在,因为没有在这个组合的立方体中坐标。为什么 ?[实体 1] 不包含“a”。

我不确定你在计算什么,但你需要扭曲你的计算成员。在 santiii 的评论之后,我们需要一个新的维度:

 WITH MEMBER [Measures].[SumReturns] AS
   -- we're reseting here COLUMNS information, sum is not needed
  ([Dim Entity].[EntityName].defaultmember,[Measures].[TotalReturn])
  +
  -- we're reseting here ROWS
  ([Dim Entity 2].defaultmember,[Measures].[TotalReturn])
 SELECT 
  [Dim Entity].[EntityName].Children ON COLUMNS,
  [Dim Entity 2].[EntityName].Children ON ROWS  
 FROM [Returns]
于 2011-07-28T07:20:48.037 回答