Проблема: У меня есть требование разработать отчет, который использует куб SQL Server Analysis Services в качестве источника данных. Отчет должен позволять пользователю выбирать месяц из выпадающего списка в параметре отчета. На основе выбранного месяца отчет должен показывать продажи за выбранный месяц, продажи с начала года по выбранный месяц, продажи за выбранный месяц прошлого года и продажи с начала года по выбранный месяц прошлого года. Можете ли вы дать мне некоторые идеи о том, как это сделать?
Решение: Исходя из требований, вам необходимо добавить некоторые вычисляемые члены в запрос вашего набора данных. Есть встроенные функции MDX, которые сделают то, что вам нужно.
Для переформулирования вашей проблемы, вы хотите создать отчет, который выглядит следующим образом:
| Столбец | Описание |
|---|---|
| Текущий месяц | Продажи за выбранный месяц |
| Текущий год | Общие продажи с января по выбранный месяц |
| Прошлый год текущий месяц | Продажи за выбранный месяц в предыдущем году |
| Прошлый год | Общие продажи с января по выбранный месяц в предыдущем году |
Для достижения этой цели вы можете определить вычисляемые члены в запросе вашего набора данных. Синтаксис MDX для определения вычисляемого члена внутри запроса MDX выглядит следующим образом:
WITH MEMBER [ИМЯ ЧЛЕНА ЗДЕСЬ] AS [ВЫЧИСЛЕНИЕ ЗДЕСЬ]
Например, вычисляемый член для продаж текущего года может быть определен следующим образом:
MEMBER [Measures].[Current Year Sales] AS
AGGREGATE (
YTD (
STRTOMEMBER( @CurrentMonth )
),
( [Measures].[Internet Sales Amount] )
)
Компоненты этого вычисления:
STRTOMEMBER– это функция MDX, которая принимает строку в качестве параметра и возвращает член измерения. В данном случае параметр – это месяц, выбранный пользователем.YTD– это функция MDX, которая возвращает набор членов измерения даты для года на основе первого параметра. В нашем случае она возвращает 9 месяцев, начиная с января и до выбранного месяца.AGGREGATE– это функция MDX, которая вычисляет сумму на основе агрегации, определенной для меры в кубе. В данном случае это сумма меры “Сумма продаж в Интернете”.
Аналогично, вы можете определить вычисляемые члены для Прошлый год текущий месяц и Прошлый год, используя функцию ParallelPeriod для получения того же периода в предыдущем году.
После определения вычисляемых членов вы можете создать набор данных, который извлекает данные для вашего отчета и фильтрует их на основе выбранного пользователем месяца. Вы можете использовать следующий запрос MDX в качестве отправной точки:
WITH
MEMBER [Measures].[Current Month Sales] AS
[Measures].[Internet Sales Amount]
MEMBER [Measures].[Current Year Sales] AS
AGGREGATE (
YTD (
STRTOMEMBER( @CurrentMonth )
),
( [Measures].[Internet Sales Amount] )
)
MEMBER [Measures].[Last Year Sales Current Month] AS
( ParallelPeriod (
[Date].[Calendar].[Calendar Year], 1, STRTOMEMBER( @CurrentMonth )
) ,
( [Measures].[Internet Sales Amount] )
)
MEMBER [Measures].[Last Year Sales] AS
AGGREGATE (
YTD (
ParallelPeriod (
[Date].[Calendar].[Calendar Year], 1, STRTOMEMBER( @CurrentMonth )
)
),
( [Measures].[Internet Sales Amount] )
)
SELECT
{
[Measures].[Current Month Sales] ,
[Measures].[Current Year Sales] ,
[Measures].[Last Year Sales Current Month] ,
[Measures].[Last Year Sales]
} ON COLUMNS,
{
[Product].[Category].MEMBERS
} ON ROWS
FROM [Adventure Works]
WHERE STRTOMEMBER( @CurrentMonth )
В этом запросе мы определили вычисляемые члены и использовали их в операторе SELECT для извлечения нужных столбцов. Оператор WHERE фильтрует данные на основе выбранного пользователем месяца.
Следуя этим шагам, вы можете создать отчет, который использует куб SQL Server Analysis Services в качестве источника данных и позволяет пользователю выбирать месяц, для которого они хотят просмотреть данные о продажах.
Не забудьте убедиться, что ваша измерительная размерность была настроена с информацией о типе Business Intelligence, так как вычисляемые члены зависят от правильной конфигурации измерительной размерности времени.
С помощью этих техник вы можете создавать мощные отчеты, которые предоставляют ценные инсайты в ваши данные.