在多个日期维度层次结构上查找平均值

时间:2015-10-29 21:23:02

标签: date sql-server-2012 mdx dimensional-modeling ssas-2012

我有一个立方体,在该立方体中有一个日期维度,其具有以下属性

日历年,日历月 - 年,财政年度,财年 - 季度,日期

现在有了这些属性,我有两个用户定义的层次结构,它们如下所示 日历层次结构,其中包含日历年,日历月 - 年,日期

第二个用户定义的层次结构是 财政层次结构,其中包含会计年度,会计年度季度,日历月份年度和日期

我想知道平均销售额,所以我创建了一个措施

["firstemail@mail.com", "secondmail@mail.com", "thirdmail@email.com"]

在运行类似

的内容时效果很好
    to_address = list(str(self.to_address_list).split(","))

如果我使用 [日期]。[日历]。[日历月 - 年]。成员,这将起作用,但除了Calendar Month-Year之外,它不适用于我的财务层次结构属性。如何修改我的度量以使其接受会计年度层次结构属性。

我尝试在会计年度之间进行交叉加入,因为如果该集合为空,它将只评估正在使用的那个。但它对我不起作用(我假设sytnax可能是问题)。

对不起伙计们,我真的很陌生。

1 个答案:

答案 0 :(得分:1)

将计算成员的定义更改为:

CREATE Member [Measures].[Sales Daily Avg]
AS 
IIF
  (
   NOT([Date].[Fiscal].CURRENTMEMBER IS [Date].[Fiscal].[All])
   ,
   Avg 
     ( 
      Descendants 
                (
                 [Date].[Fiscal].CURRENTMEMBER, 
                 [Date].[Fiscal].[Date] 
                )
     ,
     CoalesceEmpty([Measures].[Total Sales] , 0) 
    )
   ,
   IIF
     (
      NOT([Date].[Calendar].CURRENTMEMBER IS [Date].[Calendar].[All])
      ,
      Avg 
        ( 
         Descendants 
                (
                 [Date].[Calendar].CURRENTMEMBER, 
                 [Date].[Calendar].[Date] 
                )
        ,
        CoalesceEmpty([Measures].[Total Sales] , 0)
        ),
        NULL //Change this to whatever you want in case none of the hierarchies 'Calendar' or 'Fiscal' is involved.
     )
     )

基本上,这将首先检查来自" Fiscal"层次结构是否在范围内。如果是这样,它将在所选成员的财政日期中平均。如果不满足第一个条件,它会进一步检查来自"日历"层次结构在范围内。如果是这样,它的工作方式类似于"日历"层次结构。最后,如果层次结构的成员都不在范围内,则会产生NULL(您可能会根据您的要求重新思考并放置)。

注意:当任何层次结构的currentmemberAll成员时,这意味着层次结构不在范围内(不是切片器或轴的一部分)