通过以下MDX查询,我试图返回销售数据的比较。
我想将YTD与LYTD进行比较,定义如下:
YTD:今年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的替代策略?
答案 0 :(得分:0)
使用类似的东西:
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
...
,其中
答案 1 :(得分:0)
在发布问题和进一步实验后不久,以下结构似乎返回了我正在寻找的结果:
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感谢您的投入,看起来您有同样的想法。因此,即使我使用自己的实现,你也会得到公认的答案。