在多个日期维度层次结构上查找平均值
Posted
技术标签:
【中文标题】在多个日期维度层次结构上查找平均值【英文标题】: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 可能是问题所在)。
对不起,伙计们,我真的很陌生。
【问题讨论】:
【参考方案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
(您可以重新考虑并根据您的要求放置)。
注意:当任何层次结构的currentmember
是All
成员时,这意味着层次结构不在范围内(不是切片器或轴的一部分)
【讨论】:
我收到#Error。您的条件看起来运行良好,但在执行 AVG 功能时,似乎有些东西不起作用。我已经在 IFF 函数之外测试了 avg 函数,它们的工作很有趣,只要它们在其中,就会产生 #Error。 它可能是从拼写错误到标准语法错误的任何东西。我还没有测试过。让我。 效果很好。非常感谢。您的代码不仅正确,而且您的解释很有教育意义。 MDX 学习起来很痛苦。 如果我们有[Date].[Calendar].MEMBERS
ON ROWS,这项措施是否有效?
@SouravA +1 为您解答。唯一的问题是,当您在过滤器中选择多个成员(例如两个日历年)时,Excel 会将它们发送到子查询(子多维数据集)中,并且 SSAS 不会知道正在使用日历年,从而导致它返回空值。以上是关于在多个日期维度层次结构上查找平均值的主要内容,如果未能解决你的问题,请参考以下文章