Как создавать сводные таблицы по уровням дат

#mdx #mondrian

#многомерные выражения #мондриан

Вопрос:

У меня есть таблица фактов с измерением даты с уровнями Year , Quarter , Month , Day , Hour , двумя мерами [Measure].[kind sum] [Measure].[kind avg] и сводная таблица для каждого уровня дат. Например, у меня есть период в несколько лет, и мне нужно получить среднее количество дней. В этом случае запрос будет выглядеть следующим образом

 WITH
    MEMBER [Measures].[Pc in avg by day] AS AVG({[Some dimension].Children * Descendants([Date].[2013] : [Date].[2016], [Date].[Day])}, [Measures].[Pc in sum])
SELECT {[Measures].[Pc in avg by day]} ON COLUMNS
FROM [Some cube]
  

Существует метод, как оптимизировать запрос. Мне нужно хранить такие значения, как [Pc in avg by day] , [Pc in avg by month] , [Pc in avg by quarter] В сводной таблице для уровня года и т. Д. Я думаю сделать это в кубе, но в этом случае эти меры будут работать только с aggregate table. Я думаю, что это неправильный путь.

Ответ №1:

Я не совсем понимаю ваш вопрос. Я думаю, вы хотите получить [ПК в среднем по месяцам], [ПК в среднем по кварталам] так же, как [ПК в среднем по дням]. Если это так, добавление их в качестве мер в куб может быть неправильным способом.

Как вы сказали, у вас есть сводная таблица для дня с мерой [ПК в сумме], вы можете добавить разные сводные таблицы для месяца, квартала и года и изменить запрос, как показано ниже, если вам нужно [ПК в среднем по месяцам]

     WITH
    MEMBER [Measures].[Pc in avg by month] AS AVG({[Some dimension].Children * Descendants([Date].[2013] : [Date].[2016], [Date].[Month])}, [Measures].[Pc in sum])
SELECT {[Measures].[Pc in avg by month]} ON COLUMNS
FROM [Some cube]
  

Мондриан должен быть достаточно умен, чтобы выбрать правильную сводную таблицу для выполнения запроса. В этом случае ежемесячный агрегат

Комментарии:

1. Я попробую этот вариант и расскажу о результате.

2. Он будет использовать только агрегат для измерения суммы.

3. Я думаю, что в определении схемы куба вы должны указать метод агрегирования (sum, avg и т. Д.). Это может быть причиной. Если вам нужны как сумма, так и среднее значение, вам, возможно, придется добавить еще одну меру для count и, возможно, вычислить меру для avg с помощью sum / count. Но я не уверен в этой опции.