通过下面的MDX查询,我尝试返回销售数字的比较。
我想将YTD和LYTD进行比较,定义如下:
今年1月1日(2011年1月1日)至今天(2011年8月17日)
LYTD:去年1月1日(2010年1月1日)至去年今天(2010年8月17日)
这两个周期应该包含相同的天数(对于闰年,给或取一天)。
到目前为止,我已经尝试使用YTD()函数来获取今年的数据,但是在包装YTD()函数以使其返回去年的相同日期方面并没有取得太大成功。我使用了LAG(1)和ParallelPeriod (参见下面的两个示例):
WITH
MEMBER [Measures].[Sales YTD] AS
'SUM(YTD(),[Measures].[Sales])'
MEMBER [Measures].[Sales LYTD] AS
'SUM((YTD(),[Measures].[Sales]).LAG(1))'
SELECT
{[Sales YTD], [Sales LYTD]} ON COLUMNS
...或
WITH
MEMBER [Measures].[Sales YTD] AS
'SUM(YTD(),[Measures].[Sales])'
MEMBER [Measures].[Sales LYTD] AS
'SUM(ParallelPeriod(YTD(),1),[Measures].[Sales])'
SELECT
{[Sales YTD], [Sales LYTD]} ON COLUMNS
...使用ParallelPeriod或LAG时,结果数据始终返回去年销售额的一列空值:
Customer Sales YTD Sales LYTD
ABC Screws $1024 (Null)
ABC Bolts $2392 (Null)
ABC Nuts $3735 (Null)有人可以建议对查询进行更改以返回正确的数据,或者提供使用LAG或ParallelPeriod的替代策略吗?
发布于 2011-08-18 03:35:37
使用类似这样的东西:
WITH
MEMBER [Measures].[Sales YTD] AS
'SUM(YTD(closingperiod([Date].[Calendar].[Date])),[Measures].[Sales])'
MEMBER [Measures].[Sales LYTD] AS
'SUM(YTD(PARALLELPERIOD([Date].[Calendar].[Calendar Year],1,closingperiod([Date].[Calendar].[Date]))),[Measures].[Sales])'
SELECT
{[Measures].[Sales YTD],[Measures].[Sales LYTD]} ON COLUMNS
...,其中
您的日期中的
发布于 2011-08-18 14:03:45
在发布这个问题和进一步的实验后不久,下面的结构似乎返回了我想要的结果:
WITH
MEMBER [Measures].[Sales YTD] AS
'SUM(YTD(),[Measures].[Sales])'
MEMBER [Measures].[Sales LYTD] AS
'SUM(YTD(ParallelPeriod([Time].[Year],1,[Time].CURRENTMEMBER)),[Measures].[Sales])'
SELECT
{[Sales YTD], [Sales LYTD]} ON COLUMNS
...我会在昨天晚上发布我的答案,但是低于100分的用户必须等待8个小时才能回答他们自己的问题。
@Max感谢你的意见,看起来你也有同样的想法。因此,即使我使用自己的实现,您也会得到可接受的答案。
https://stackoverflow.com/questions/7095242
复制相似问题