MDX 年化
Annualization in MDX
简介
目前我正在对一项措施进行维护工作,该措施将另一项 (YTD) 措施年化。度量的粒度是月。年化在月份级别上工作正常,但是当我们在日期层次结构中使用 parents 时,计算不起作用。
它应该像这样工作:
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
但是在 DateHierarchy 的更高级别上,这不起作用。例如在季度级别:
Quarter MeasureYTD MeasureAnnualized ClosingPeriod
3 -60 -80,00 (should be : -90,00) 9 (should be: 8)
如您所见,它选择了第 3 季度的 ClosingPeriod (=9),而这应该是最后一个 "non-empty" ClosingPeriod (=8)。年级也是如此:
Year MeasureYTD MeasureAnnualized ClosingPeriod
2016 -60 -60,00 (should be : -90,00) 12 (should be: 8)
因此问题是: 我怎样才能让这个 ClosingPeriod 成为 YTD 度量不是(空)的最后一个 Period?
在 ClosingPeriod
的 msdn 定义中,它给出了相同逻辑的等效嵌套版本:
Tail(Descendants(Member_Expression, Level_Expression), 1)
下面跟这个类似加了NonEmpty
:
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];
它returns以下内容:
简介 目前我正在对一项措施进行维护工作,该措施将另一项 (YTD) 措施年化。度量的粒度是月。年化在月份级别上工作正常,但是当我们在日期层次结构中使用 parents 时,计算不起作用。
它应该像这样工作:
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
但是在 DateHierarchy 的更高级别上,这不起作用。例如在季度级别:
Quarter MeasureYTD MeasureAnnualized ClosingPeriod 3 -60 -80,00 (should be : -90,00) 9 (should be: 8)
如您所见,它选择了第 3 季度的 ClosingPeriod (=9),而这应该是最后一个 "non-empty" ClosingPeriod (=8)。年级也是如此:
Year MeasureYTD MeasureAnnualized ClosingPeriod 2016 -60 -60,00 (should be : -90,00) 12 (should be: 8)
因此问题是: 我怎样才能让这个 ClosingPeriod 成为 YTD 度量不是(空)的最后一个 Period?
在 ClosingPeriod
的 msdn 定义中,它给出了相同逻辑的等效嵌套版本:
Tail(Descendants(Member_Expression, Level_Expression), 1)
下面跟这个类似加了NonEmpty
:
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];
它returns以下内容: