MDX Query процентил 25-ти, 50-ти и 75-ти

Имам въпрос и не успях да намеря отговора (нито в този форум, нито в други) Търся:

  • Трябва да изчисля 25-ия персентил, медианата (50-ия персентил) и 75-ия персентил.

С други думи: трябва да напиша в MDX заявката в SSRS, за да ми каже кои данни са 25-то, медианата и 75-то

Всичко, което успях да намеря досега, не бяха точните стойности на всеки един от тях

Благодаря


person Francisco    schedule 18.04.2013    source източник


Отговори (1)


Работя по същия проблем за собствените си данни. Проблемът, който имах, е да разбера функцията Median(). Ето как интерпретирам параметрите на функцията:

Дефиниция на Microsoft: MEDIAN(Set_Expression [, Numeric_Expression])

Моята интерпретация: Set_Expression е набор от стойности, които определят зърното, към което се сумира мярката, преди да се оцени медианата

Numeric_Expression е мярката, която се сумира, кой набор от суми след това се сортира и оценява, за да се намери медианата

В моя случай за намиране на правата медиана в целия набор от данни изобщо не исках да сумирам стойностите. За да предотвратя изчисляването на суми, използвах ключовия атрибут за измерение, което имаше кардиналност 1-1 със записите в таблицата с факти, която съдържа мярката, която използвам. Единственият недостатък, който съм виждал досега, е, че понякога медианата връща цяло число, когато има четен брой записи и средната стойност на двата средни записа трябва да доведе до число, завършващо на .5. Например стойностите на двата средни записа са 16 и 17 и функцията връща 17 вместо 16,5. Тъй като това е малък недостатък, засега съм готов да го пренебрегна.

Ето как изглежда изчислението ми с функцията медиана:

WITH MEMBER Measures.[Set Median] AS MEDIAN(
    [Dimension].[Key Attribute].MEMBERS
    ,Measures.[Non-summable Measure]
)

Използвах комбинация от Median и TopCount, за да получа 75-ия процентил. Използвам TopCount, за да огранича набора за медианата до втората половина на данните, тъй като TopCount сортира данните в низходящ ред. Ще обясня как разбирам TopCount:

Дефиницията на Microsoft: TopCount(Set_Expression, Count [, Numeric_Expression])

Моята интерпретация: Set_Expression е наборът от стойности, от които ще бъде върнат желаният брой кортежи

Броят е броят на кортежите, които да се върнат от набора

Numeric_Expression е стойността, която ще се използва за сортиране на набора в низходящ ред

Искам функцията Median да използва последната половина от записите в таблицата с факти, които се връщат в заявката, така че отново използвам ключа за таблицата с измерения, който има кардиналност 1-1 с таблицата с факти и го сортирам по мярката, от която искам да намеря средната стойност.

Ето как кодирах члена:

MEMBER Measures.[75th Percentile] AS MEDIAN(
    TOPCOUNT(
        [Dimension].[Key Attribute].MEMBERS
        ,Measures.[Fact Table Record Count] / 2
        ,Measures.[Non-summable Measure]
    )
    ,Measures.[Non-summable Measure]
)

Досега тази комбинация от функции е върнала истински 75-ти процентил от моя набор от данни. За да получа 25-ия процентил, опитах да заменя TOPCOUNT в кода си с BOTTOMCOUNT, което трябва да направи същото, само сортирайки данните във възходящ ред, за да използвам първата половина от записите вместо втората половина. За съжаление, не успях да получа нищо друго освен NULL от тази комбинация от функции, така че съм отворен за предложения как да получа 25-ия процентил.

Ето как изглежда последното ми запитване:

SELECT
    {
        Measures.[Set Median]
        ,Measures.[25th Percentile]
        ,Measures.[75th Percentile]
    } ON 0
    ,[Dimensional row members here] ON 1
FROM [Cube]
WHERE
    [Non-axis dimensional filter members here]
person Ryan Schmitz    schedule 15.05.2014