使用范围分配显示日历年初至今值

时间:2015-03-07 07:27:11

标签: date scope ssas mdx hierarchy

当我使用SSAS编写scopes语句来计算多维数据集中的Calendar Year-To-Date值时,我遇到了问题。

这是我的日期维度及其层次结构: enter image description here enter image description here

在度量组中,我有一个名为[Sales Amount]的度量,它是日期中每个项目的销售额。我想计算年初至今的价值。这是我的范围说明,但它不能很好地运作。

   SCOPE(MEASURES.[YTD Sales]);
         --Calendar YTD
         SCOPE([DimDates].[Year-Qtr-Month-Day].MEMBERS, [DimDates].[Year].[Year].MEMBERS);
             THIS = AGGREGATE(
                     PERIODSTODATE([Date].[Year].[Year], [Date].[Year].CURRENTMEMBER), 
                     [Measures].[Sales Amount]);
         END SCOPE; 
END SCOPE;

2 个答案:

答案 0 :(得分:0)

(我自己不玩多维数据集脚本,所以在黑暗中稍微感觉一下)

我认为你需要将一年成员作为PERIODSTODATE函数中的第二个参数:它需要一个较低级别的成员来了解在哪里进行ytd计算至。所以看看你当前的脚本,我认为你应该在函数内使用 user 层次结构[Year-Qtr-Month-Day]而不是属性层次结构[Year]

SCOPE(MEASURES.[YTD Sales]);
         --Calendar YTD
         SCOPE([DimDates].[Year-Qtr-Month-Day].MEMBERS, [DimDates].[Year].[Year].MEMBERS);
             THIS = AGGREGATE(
                     PERIODSTODATE([DimDates].[Year-Qtr-Month-Day].[Year], [DimDates].[Year-Qtr-Month-Day].CURRENTMEMBER), 
                     [Measures].[Sales Amount]);
         END SCOPE; 
END SCOPE;

这可以通过YTD功能简化吗? 查看MSDN我可以看到以下内容:https://msdn.microsoft.com/en-us/library/ms146039.aspx
应用到您的脚本可能会提供如下内容:

SCOPE(MEASURES.[YTD Sales]);
         --Calendar YTD
         SCOPE([DimDates].[Year-Qtr-Month-Day].MEMBERS, [DimDates].[Year].[Year].MEMBERS);
             THIS = AGGREGATE(YTD(), [Measures].[Sales Amount]);
         END SCOPE; 
END SCOPE;

答案 1 :(得分:0)

感谢您的回答以及您对我的帖子的更正:-D

我看过你关于YTD()函数的教程,它并不是我想要的想法,但它给我的工作提供了一些想法。最后,我的脚本效果很好。我进一步分享了另一个人的代码 (谢谢你能为我纠正我的英语:p)

CALCULATE;

SCOPE([Measures].[Sales Amount YTD]);
   --Calendar YTD
   SCOPE([DimDates].[Date].MEMBERS, [DimDates].[Year].[Year].MEMBERS);
     THIS = AGGREGATE(
               PERIODSTODATE([DimDates].[Year-Qtr-Month-Day].[Year], [DimDates].[Year-Qtr-Month-Day].CURRENTMEMBER), 
[Measures].[Sales Amount]);
   END SCOPE;
End scope;