我正在尝试为一组位置的子集创建计算成员度量。所有其他成员应为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]成员超出了范围,因此它不会聚合其余的成员。任何帮助将不胜感激。
答案 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)
我已经搜索了这个答案的高低。在阅读了上述建议后,我想出了这个:
(isnull(a,0) - isnull(b,0)) + isnull(c,0) = x
CASE WHEN location IN ( 1,2,3)
THEN x
ELSE NULL
END
我选择这样做以先捕获未经过滤的度量,如果需要添加另一个过滤器或者需要取消一个过滤器,我可以这样做而不会再次弄乱视图。我只是将新成员添加到我的命名计算案例语句中。我尝试将计算直接插入到dsv中的命名计算中,该计算也对其进行过滤,但计算结果不正确。