SSAS如何将计算出的成员度量范围限定为多个特定成员?

时间:2014-10-03 22:05:47

标签: scope ssas mdx olap-cube

我正在尝试为一组位置的子集创建计算成员度量。所有其他成员应为null。我可以限制范围但在客户端(在这种情况下表现优异)该度量不会显示总计([Group]。[Group]。[All])。

CREATE MEMBER CURRENTCUBE.[Measures].[Calculated Measure]
 AS (
     Null
    ),
FORMAT_STRING = "$#,##0.00;-$#,##0.00", 
NON_EMPTY_BEHAVIOR = { [Measures].[Places] } 
,VISIBLE = 1 ,    ASSOCIATED_MEASURE_GROUP = 'Locations';

-----------------------------------------------------------------------------------------
 SCOPE ({([Group].[Group].&[location 1]),
        ([Group].[Group].&[location 2]),  
        ([Group].[Group].&[location 3]),
        ([Group].[Group].&[location 4]),
        ([Group].[Group].&[location 5])
        }, [Measures].[Calculated Measure]);

// Location Calculations 

THIS = (
      [Measures].[Adjusted Dollars] - [Measures].[Adjusted Dollars by Component] + [Measures].[Adjusted OS Dollars]
    ); 

END SCOPE;

好像[Group]。[Group]。[All]成员超出了范围,因此它不会聚合其余的成员。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

计算在所有计算已经发生后应用。假设您的时间维度命名为Root([Time]),您可以通过向范围添加[Time]来解决此问题。如果您想要在更多维度上进行汇总,则必须将它们全部添加到SCOPE

在大多数情况下,如果您在聚合之前进行了计算,则更容易定义计算e。 G。在DSV中,e。 G。用表达式

CASE WHEN group_location in(1, 2, 3, 4) THEN
          Adjusted_dollars - adjusted_dollars_by_comp + adjusted_os_dollars
     ELSE NULL
END

并从中制作标准的可聚合度量。

答案 1 :(得分:0)

我已经搜索了这个答案的高低。在阅读了上述建议后,我想出了这个:

  1. 计算源视图表中列的度量
    (isnull(a,0) - isnull(b,0)) + isnull(c,0) = x
  2. 将未过滤的计算列(x)添加到dsv
  3. 在dsv中创建一个命名计算,该计算使用case语句筛选原始计算度量CASE WHEN location IN ( 1,2,3)
    THEN x
    ELSE NULL
    END
  4. 将指定的计算添加为度量
  5. 我选择这样做以先捕获未经过滤的度量,如果需要添加另一个过滤器或者需要取消一个过滤器,我可以这样做而不会再次弄乱视图。我只是将新成员添加到我的命名计算案例语句中。我尝试将计算直接插入到dsv中的命名计算中,该计算也对其进行过滤,但计算结果不正确。