Показать меру в зависимости от даты, объединить две меры из разных дат - PullRequest
0 голосов
/ 27 апреля 2020

Справочная информация. Я готовлю набор данных для отчета. Для упрощения предположим, что это две меры: одна категория и измерение времени. Основным параметром отчета является сегодняшняя дата. Я хотел бы видеть первый показатель вчерашнего дня (значение 000) и второй показатель позавчера (значение 001). Поскольку данные за предыдущие дни еще не доступны для значения 001.

Предположим, сегодня 2020-04-27 (передано из инструмента отчетности SSRS).

AS-IS

SELECT {[Measures].[Value 000], [Measures].[Value 001]} ON COLUMNS
    , ( {[DIM Category].[Category].&[1], [DIM Category].[Category].&[2]}, 
    [DIM Date].[Y-M-D ISO].[Date].[2020-04-27].LAG(2): [DIM Date].[Y-M-D ISO].[Date].[2020-04-27].LAG(1)
    )
 ON ROWS
FROM [My_Cube]

Вывод:

                        [Value 000]     [Value 001]     
Category 1  2020-04-25      88              16
Category 1  2020-04-26      89              (null)
Category 2  2020-04-25      90              14
Category 2  2020-04-26      92              (null)

Я попробовал два MDX-запроса для каждой даты и объединил наборы в инструменте отчетности, но мне интересно, есть ли удобный способ сделать это в одном запросе MDX. Следующим будет желаемый результат:

To-Be

Выход:

                [Value 000]     [Value 001]                 
Category 1          89              16          (Value from day before, for Value 0001) 
Category 2          92              14

Дата не должна отображаться в вывод (но может быть)

1 Ответ

2 голосов
/ 28 апреля 2020

Вы можете решить проблему, используя рассчитанные меры. Следующий пример основан на приключенческих работах. Я хочу перестроить ваш senario за 23 января 2013 года

. Первоначальный запрос предназначен для отображения значений за вчерашний и предыдущий день с измерениями членов. Вчера в виде суммы ([Дата]. [Дата] .currentmember.lag (1) ), [Меры]. [Inte rnet Сумма продаж])

member measures.DayBefore 
as 
sum([Date].[Date].currentmember.lag(2),[Measures].[Internet Sales Amount])
select 
{
[Measures].[Internet Sales Amount],measures.Yesterday ,measures.DayBefore
}
on columns,

{
([Product].[Category].[Category],[Date].[Date].&[20130120]:[Date].[Date].&[20130123])
}
on rows 
from 
[Adventure Works]
where [Date].[Date].&[20130123]

Результат

enter image description here

Теперь давайте удалим дата из строк и положить его в где

with 
member measures.Yesterday 
as 
sum([Date].[Date].currentmember.lag(1),[Measures].[Internet Sales Amount])

member measures.DayBefore 
as 
sum([Date].[Date].currentmember.lag(2),[Measures].[Internet Sales Amount])
select 
{
[Measures].[Internet Sales Amount],measures.Yesterday ,measures.DayBefore
}
on columns,

{
([Product].[Category].[Category])
}
on rows 
from 
[Adventure Works]
where [Date].[Date].&[20130123]

Результат

enter image description here

...