默认会员 - SSAS

时间:2015-01-12 23:08:47

标签: ssas mdx

试图找出默认成员添加到此scipt的内容

([DateTool].[Aggregation].[Previous Month]) =
iif( 
([DateTool].[Aggregation].DefaultMember, ParallelPeriod(dim_RPT_period].[Yr-Qtr-Month].[RPT Period Month],1,[dim_RPT_period].[Yr-Qtr-Month].currentmember)) = null,        
NULL, 
([DateTool].[Aggregation].DefaultMember,ParallelPeriod([dim_RPT_period].[Yr-Qtr-Month].[RPT Period Month],1,[dim_RPT_period].[Yr-Qtr-Month].currentmember))
);     

这是来自实用程序维度。计算脚本。
我得到了IIF,我得到了ParallelPeriod。 但是"(DefaultMember,ParallelPeriod)"会产生什么影响?有?

2 个答案:

答案 0 :(得分:0)

它看起来像用来避免无限递归。这种技术用于这种动态计算。

假设我们使用WHERE [DateTool].[Aggregation].[Previous Month]运行一些MDX脚本。

服务器从您的公式中获取此计算(不包含[DateTool].[Aggregation].DefaultMember),它像往常一样使用ParallelPeriod,但需要[DateTool].[Aggregation].[Previous Month]作为其他维度的元组的一部分(我们的{{ 1}}过滤器),所以它一次又一次地使用这个公式...

所以我们总是需要一些固定的成员来避免无限递归。

这是我的理解,如果它在某处或完全错误,请更正。

答案 1 :(得分:0)

我的理解是,当切片器具有[dim_RPT_period].[Yr-Qtr-Month].[RPT Period Month]级别中的任何成员时,计算出的成员构建为仅具有值 。我的意见是模仿ISCROSSFILTERED DAX 功能。

构建成员使得[DateTool].[Aggregation].[Previous Month]仅在保留值时才会保留值 切片器的成员来自[dim_RPT_period].[Yr-Qtr-Month].[RPT Period Month]

[DateTool].[Aggregation].DefaultMember[DateTool].[Aggregation].[ALL]一样好 它与查询

中省略[DateTool].[Aggregation]层次结构一样好

如果切片器没有来自[dim_RPT_period].[Yr-Qtr-Month].[RPT Period Month]的成员, 然后[dim_RPT_period].[Yr-Qtr-Month].currentmember[dim_RPT_period].[Yr-Qtr-Month].[ALL]一样好 本例中的前一个成员(由ParallelPeriod函数返回)未定义,因此将返回NULL

如果切片器有成员,则会返回non null成员。

进一步说明: (请仔细阅读评论)

([DateTool].[Aggregation].[Previous Month]) =
iif( 
(
[DateTool].[Aggregation].[ALL], 
ParallelPeriod([dim_RPT_period].[Yr-Qtr-Month].[RPT Period Month],1,[dim_RPT_period].[Yr-Qtr-Month].currentmember)
) //If a member from dim_RPT_period].[Yr-Qtr-Month].[RPT Period Month] level is not in slicer then it would evaluate to NULL
= null,        
NULL, //In that case the previous month should evaluate to NULL
//Otherwise, it should give the "previous month"
([DateTool].[Aggregation].[ALL],
ParallelPeriod([dim_RPT_period].[Yr-Qtr-Month].[RPT Period Month],1,[dim_RPT_period].[Yr-Qtr-Month].currentmember))
);