Published on

May 18, 2020

Создание отчета с использованием куба SQL Server Analysis Services в качестве источника данных

Проблема: У меня есть требование разработать отчет, который использует куб 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, так как вычисляемые члены зависят от правильной конфигурации измерительной размерности времени.

С помощью этих техник вы можете создавать мощные отчеты, которые предоставляют ценные инсайты в ваши данные.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.