Как составить сводные таблицы по уровням дат
У меня есть таблица фактов с датой измерения с уровнями 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]
в таблице агрегирования для уровня года и т. д. Я думаю, что это меры в кубе, но в этом случае эти меры будут работать только с таблицей агрегирования. Я думаю, что это не правильный путь.
1 ответ
Я не совсем понимаю ваш вопрос. Я думаю, что вы хотите получить [ПК в среднем по месяцам], [ПК в среднем по кварталам] так же, как [ПК в среднем по дням]. В этом случае добавление их в качестве мер к кубу может быть неправильным способом.
Поскольку вы сказали, что у вас есть сводная таблица для дня с мерой [Pc в сумме], вы можете добавить различные сводные таблицы для месяца, квартала и года и изменить запрос, как показано ниже, если вам нужно [Pc in avg by month]
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]
Мондриан должен быть достаточно умен, чтобы выбрать правильную таблицу агрегатов для выполнения запроса. В этом случае ежемесячный агрегат