MDX中的年化
导言 目前,我正在对一个度量值进行维护,该度量值将另一个(YTD)度量值年度化。度量的粒度为个月。年度化在月份级别上运行良好,但当我们在日期层次结构中使用父级时,计算不起作用 它应该是这样工作的:MDX中的年化,mdx,Mdx,导言 目前,我正在对一个度量值进行维护,该度量值将另一个(YTD)度量值年度化。度量的粒度为个月。年度化在月份级别上运行良好,但当我们在日期层次结构中使用父级时,计算不起作用 它应该是这样工作的: MeasureAnnualized = YTDMeasure * (CurrentMonth / 12) CurrentMonth实现为 ClosingPeriod([Date].[DateHierarchy].[Month], [Date].[DateHierarchy]).MemberValue
MeasureAnnualized = YTDMeasure * (CurrentMonth / 12)
CurrentMonth实现为
ClosingPeriod([Date].[DateHierarchy].[Month], [Date].[DateHierarchy]).MemberValue
在月份级别上,这可以正常工作:
Month MeasureYTD MeasureAnnualized ClosingPeriod
july -50 -85,71 7
august -60 -90,00 8
september (null) (null) 9
月测量TD测量年度结算期
7月50日至85日,71 7
八月至六十至九十,00 8
九月(零)(零)9日
但在DateHierarchy的更高级别上,这不起作用。例如,在季度级别:
Quarter MeasureYTD MeasureAnnualized ClosingPeriod
3 -60 -80,00 (should be : -90,00) 9 (should be: 8)
季度计量TD计量年度结算期
3-60-80,00(应该是:-90,00)9(应该是:8)
如您所见,它选择了第三季度(=9)的结算期,而这应该是最后一个“非空”结算期(=8)。这同样适用于年份级别:
Year MeasureYTD MeasureAnnualized ClosingPeriod
2016 -60 -60,00 (should be : -90,00) 12 (should be: 8)
年度计量TD计量年度结算期
2016-60-60,00(应为:-90,00)12(应为:8)
因此,问题是:如何使此ClosingPeriod成为YTD度量值不为(空)的最后一个期间?在
ClosingPeriod
的msdn定义中,它给出了相同逻辑的等效嵌套版本:
Tail(Descendants(Member_Expression, Level_Expression), 1)
下面与此类似,添加了一个非空的:
WITH
MEMBER Measures.[LastNonEmpty] AS
Tail
(
NonEmpty
(
(EXISTING
[Date].[Calendar].[Month])
,[Measures].[Internet Sales Amount]
)
,1
).Item(0).MemberValue
SELECT
Measures.[LastNonEmpty] ON 0
,[Date].[Calendar].[Calendar Year].MEMBERS ON 1
FROM [Adventure Works];
它返回以下内容:
在ClosingPeriod
的msdn定义中,它给出了相同逻辑的等效嵌套版本:
Tail(Descendants(Member_Expression, Level_Expression), 1)
下面与此类似,添加了一个非空的:
WITH
MEMBER Measures.[LastNonEmpty] AS
Tail
(
NonEmpty
(
(EXISTING
[Date].[Calendar].[Month])
,[Measures].[Internet Sales Amount]
)
,1
).Item(0).MemberValue
SELECT
Measures.[LastNonEmpty] ON 0
,[Date].[Calendar].[Calendar Year].MEMBERS ON 1
FROM [Adventure Works];
它返回以下内容:
让人惊讶的是:ClosingPeriod([Date].[DateHierarchy].[Month],[Date].[DateHierarchy]).MemberValue
根据定义()第二个参数应该是一个成员表达式-因此它必须假设[Date].[DateHierarchy].[All]
或[Date]。[DateHierarchy].CURRENTMEMBER
对此感到惊讶:ClosingPeriod([Date].[DateHierarchy].[Month],[Date].[DateHierarchy]).MemberValue
根据定义()第二个参数应该是一个成员表达式-因此必须假设[Date].[DateHierarchy]
是其他的,可能是[Date].[DateHierarchy]。[全部]
或[Date].[DateHierarchy].CURRENTMEMBER
非常感谢,它很有效!!!对于QTD值的年度化,我还需要将解决方案的结果(一年中最后一个非空月)转换为“季度月”。例如:3>3,4>1,12>3等等。我注意到MDX没有模函数,你知道怎么做吗?@Rutger给你:(随时提供有用的答案,如果你满意的话,请将其标记为正确)非常感谢,它很有效!!!对于QTD值的年度化,我还需要转换你的解决方案的结果(一年中最后一个非空的月份)到“季度月份”。例如:3>3、4>1、12>3等等。我注意到MDX没有模函数,你知道怎么做吗?@Rutger给你:(如果你满意的话,请随意给出有用的答案,并将它们标记为正确)