SSAS MDX Медиана с временными рядами - PullRequest
0 голосов
/ 05 марта 2020

Я пытаюсь вычислить медиану для данных мониторинга временных рядов.

Куб OLAP имеет измерение даты (самый низкий уровень - дата) и отдельное измерение времени. (самый низкий уровень - минута)

Я обнаружил, что он правильно рассчитывает для данного дня, но он сворачивает значения за месяц. (должно быть ~ 1,55 для месяца)

WITH MEMBER [Measures].[Medianx] AS MEDIAN([Time].[Time Key].MEMBERS , [Measures].[Total of Values])      

SELECT NON EMPTY {
[Measures].[Count of Values], 
[Measures].[Minimum Value], 
[Measures].[Maximum Value], 
[Measures].[Total of Values], 
[Measures].[Medianx]
} ON COLUMNS,  

NON EMPTY ( [Date].[Date].[Date].MEMBERS )  ON ROWS 

FROM [Environmental Data]

Дает это:

enter image description here

Медиана за месяц может ' не может быть выше медианы 5 отдельных дней.

Как мне заставить OLAP правильно рассчитать медиану во временном диапазоне, выбранном при свертывании? (например, по дням и месяц и год)

Может ли это быть вызвано наличием отдельных измерений даты и времени?

Редактировать: Я обнаружил, что если я просто уменьшу размерность, то c будет иметь отношение 1: 1 к факту. Он правильно рассчитывается за месяц, но очень медленно. (2min30se c для 1429 строк данных)

WITH MEMBER [Measures].[Medianx] AS MEDIAN([Data Attributes].[DETL Key].MEMBERS, [Measures].[Total of Values])

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

1 Ответ

0 голосов
/ 20 марта 2020

Я обнаружил, что могу использовать функцию DESCENDANTS, чтобы развернуть оба измерения Дата и Время, чтобы получить среднее значение агрегата с гранулярностью 1 минута в день.

MEDIAN(NonEmptyCrossJoin(DESCENDANTS([Date].[Calendar Date].CurrentMember, , LEAVES), DESCENDANTS([Time].[Time Key].CurrentMember, , LEAVES)), [Measures].[Average Value])

Тестирование показало, что с учетом характера данных среднее значение в минуту дает надежную медиану. Поскольку он рассчитывается на основе агрегатов, а не необработанных данных, он выполняется очень быстро.

Я не совсем понимаю, почему, но теперь он вычисляет правильно для дня, месяца и года.

Предупреждение. Если я выберу 5 дней месяца, я получу правильную медиану для каждого дня и получу правильную медиану для всего месяца. (Вместо медианы 5 выбранных дней).

...