2012-03-13 93 views
1

使用图示的实体模型运行总计仅覆盖细胞的范围与数据

注意不是所有DimB成员显示所以总为DIMA比显示DimB的总和,则忽略此):

查询是否显示在1 0(月收入),(迪马,dimb)从立方体 enter image description here

我想在创建计算成员的一些援助,这将跨越“月”在这里计算运行总和( n实时维度)。

前,我用这一个,但它是错的这么多层次:

[Measures].[Accumulated Revenue] = 
IIF(
     ([DimMonths].[Months].CurrentMember,[Measures].[Revenue]) = 0 
    AND ([DimMonths].[Months].CurrentMember.NextMember,[Measures].[Revenue]) = 0 
    , 
    IIF(
     AGGREGATE({ 
      [DimMonths].[Months].CurrentMember : 
      [DimMonths].[Months].Parent.LastChild 
     },[Measures].[Revenue]) = 0 
     , 
     NULL 
     , 
     Aggregate({ 
      [DimMonths].[Months].Parent.FirstChild : 
      [DimMonths].[Months].CurrentMember.PrevMember 
     } 
     ,[Measures].[Revenue]) 
     ) 
    , 
    Aggregate({ 
     [DimMonths].[Months].Parent.FirstChild : 
     [DimMonths].[Months].CurrentMember 
     } 
    ,[Measures].[Revenue]) 
) 

回答

2

听起来像一个“作用域分配”的工作。基本上,使用范围分配,您可以沿[Member_DimA_01]切片覆盖您计算的度量的值,以便这些值代表运行总数而不是子总和。

Here's a good tutorial from Chris Webb on scoped assignments to help get you started...

编辑:这里是为运行总量计算模板...

WITH 
SET [Months] AS 
    { 
     [Date].[Calendar Month].&[2011 - Jan] 
     : 
     [Date].[Calendar Month].&[2011 - Dec] 
    } 
MEMBER [Measures].[Running Total] AS 
    SUM(
     { 
      [Date].[Calendar Hierarchy].[Calendar Month].&[2011 - Jan] 
      : 
      [Date].[Calendar Hierarchy].CurrentMember 
     } 
     ,[Measures].[Revenue] 
    ) 
SELECT 
    NON EMPTY{ 
     [Months] 
    } ON 0, 
    NON EMPTY{ 
     [DimA].[Member].Allmembers * 
     [DimB].[Member].Allmembers 
    } ON 1 
FROM 
    [<<cube name>>] 
WHERE 
    [Measures].[Revenue Running Total] 
+0

感谢这个环节,我会花一些时间来分析它。但是我认为(并且可能是错误的) - 这里的主要问题是让ssas快速理解哪些单元应该被计算,哪些不应该。如果需要评估每个单元格,然后再确定它是否应该为空,则性能会下降。我可能只需要接受当前的性能和空白单元格(它很快,但有空格,例如month02的dimb5为空,因为收入是空的(NON_EMPTY_BEHAVOIR)。 – cairnz 2012-03-19 13:01:41

+0

道歉,我没有意识到网格中的单元格是也应该显示运行总数,我猜想我已经抓住了标题中的“单元格范围”短语,并且只注意到以小写形式应用到小计的总运行总数。 – 2012-03-19 13:58:47