【问题标题】:Finding Avg on multiple Date Dimension Hierarchies在多个日期维度层次结构上查找平均值
【发布时间】:2015-10-29 21:23:01
【问题描述】:

我有一个多维数据集,在该多维数据集中有一个具有以下属性的日期维度

日历年、日历月-年、会计年度、会计年度-季度、日期

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

第二个用户定义的层次结构是 Fiscal Hierarchy,具有会计年度、会计年度-季度、日历月年和日期

我想知道平均销售额,所以我创建了一个衡量指标

Member [Measures].[Sales Daily Avg]
AS Avg ( Descendants ( [Date].[Calendar].CURRENTMEMBER, [Date].[Calendar].[Date] ), CoalesceEmpty([Measures].[Total Sales] , 0) )  

这在运行类似

的东西时效果很好
SELECT {
[Measures].[Sales Daily Avg],
} ON COLUMNS,
{ [Date].[Calendar].[Calendar Year].Members } ON ROWS
FROM 
[SalesCube]

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

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

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

【问题讨论】:

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


    【解决方案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.
         )
         )
    

    基本上,这将首先检查“财政”层次结构中的任何成员是否在范围内。如果是这样,它将在所选成员的会计日期平均计算。如果第一个条件不满足,它会进一步检查“日历”层次结构中的任何成员是否在范围内。如果是这样,它在“日历”层次结构上的工作方式类似。最后,如果没有层次结构的成员在范围内,它将产生NULL(您可以重新考虑并根据您的要求放置)。

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

    【讨论】:

    • 我收到#Error。您的条件看起来运行良好,但在执行 AVG 功能时,似乎有些东西不起作用。我已经在 IFF 函数之外测试了 avg 函数,它们的工作很有趣,只要它们在其中,就会产生 #Error。
    • 它可能是从拼写错误到标准语法错误的任何东西。我还没有测试过。让我。
    • 效果很好。非常感谢。您的代码不仅正确,而且您的解释很有教育意义。 MDX 学习起来很痛苦。
    • 如果我们有[Date].[Calendar].MEMBERS ON ROWS,这项措施是否有效?
    • @SouravA +1 为您解答。唯一的问题是,当您在过滤器中选择多个成员(例如两个日历年)时,Excel 会将它们发送到子查询(子多维数据集)中,并且 SSAS 不会知道正在使用日历年,从而导致它返回空值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多