MDX查询以汇总所有列/行的度量

时间:2011-07-27 16:10:25

标签: sql-server ssas mdx olap bids

我有一个立方体:

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并且很难理解它是如何工作的。

1 个答案:

答案 0 :(得分:3)

你混淆了一些MDX概念,很抱歉误导你。我建议你花些时间阅读一些MDX文档。您已快速了解MDX here,阅读此page也很有意思;不要错过下一页 - 高级。

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

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

我们举一个例子:

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

现在你问元组([Dim Entity]。[Flat]。[Entity 1],[Dim Entity]。[包含A]。[with a]),它总是为null,因为这个元组不存在此组合的多维数据集中没有坐标。为什么? [实体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]