С помощью приведенных ниже запросов MDX я пытаюсь вернуть сравнение показателей продаж.
Я хочу сравнить YTD с LYTD, определенным следующим образом:
YTD: 01 января этого года (01 января 2011 года) до сегодняшнего дня (17 августа 2011 года)
LYTD: 01 января прошлого года (01 января 2010 года) до сегодняшней даты прошлого года (17 августа 2010 года)
Оба периода должны содержать одинаковое количество дней (для високосных лет - один или один день).
До сих пор я пытался использовать функцию 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?