Расчет процентилей по группам в Power BI

Ниже приведены образцы данных, и я ищу решение для расчета процентилей (25, 50, 75, 100) для количества проданных товаров, сгруппированных по странам.

введите описание изображения здесь

Таким образом, в основном добавляйте страны в разные сегменты от низкого, среднего 1, среднего 2 или высокого, в зависимости от unit_quantity. Итак, если я создам таблицу, показанную ниже в power bi, я хочу создать вычисляемую меру, которая добавляет страны в эти разные сегменты.

введите описание изображения здесь

В настоящее время я пробовал создать 3 разных квартиля в измерении ниже dax, а затем, используя функцию IF, я попытался поместить их в разные сегменты:

Quartile = 
var FirstQ = 
    CALCULATE(
        PERCENTILE.INC('Sample Table'[unit_quantity], .25),
        ALLSELECTED('Sample Table')
    )
var SecondQ = 
    CALCULATE(
        PERCENTILE.INC('Sample Table'[unit_quantity], .5),
        ALLSELECTED('Sample Table')
    )
var ThirdQ = 
    CALCULATE(
        PERCENTILE.INC(Sample Table'[unit_quantity], .75),
        ALLSELECTED(Sample Table')
    )
var currentVal = SELECTEDVALUE(Sample Table'[unit_quantity])
return
 IF(currentVal <= FirstQ, "Low",
        IF(currentVal > FirstQ && currentVal <= SecondQ, "Mid",
            IF(currentVal > SecondQ && currentVal <= ThirdQ, "Mid 2", "High")
    )
)

Но вышеуказанная мера рассчитывает квартили для всей таблицы, а не сгруппированы по странам. Также я хочу, чтобы это было динамически, так как у меня будет срез для столбца категорий, поэтому значения процентилей должны динамически изменяться в соответствии с категорией. Я новичок в Power BI, поэтому, пожалуйста, не теряйте терпения.


person iLoveYou3000    schedule 01.04.2021    source источник


Ответы (1)


Вы можете использовать PERCENTILEX для запуска вычисления таблицы, в данном случае для всех стран. Я добавил условие ISFILTERED, чтобы результаты отображались только при наличии поля country.

Расчет

Quartile = 
VAR SelectedUnit =
    SUM ( 'Table'[unit_quantity] )
VAR p25 =
    PERCENTILEX.INC (
        ALLSELECTED ( 'Table'[country] ),
        CALCULATE ( SUM ( 'Table'[unit_quantity] ) ),
        0.25
    )
VAR p50 =
    PERCENTILEX.INC (
        ALLSELECTED ( 'Table'[country] ),
        CALCULATE ( SUM ( 'Table'[unit_quantity] ) ),
        0.5
    )
VAR p75 =
    PERCENTILEX.INC (
        ALLSELECTED ( 'Table'[country] ),
        CALCULATE ( SUM ( 'Table'[unit_quantity] ) ),
        0.75
    )
RETURN
    SWITCH (
        ISFILTERED('Table'[country]),
        SelectedUnit <= p25, "Low",
        SelectedUnit > p25
            && SelectedUnit <= p50, "Mid",
        "High"
    )

Выход

country Unit Sum Quartile
Bulgaria 2 Low
Canada 83 High
Croatia 49 Mid
India 75 High
Russia 38 Low
United States 69 High
person Angelo Canepa    schedule 01.04.2021
comment
Привет, Анджело. Он работает как шарм с небольшими изменениями. Большое спасибо за решение. - person iLoveYou3000; 01.04.2021
comment
Слайсер категорий будет локальным срезом для одного из визуальных элементов таблицы, но у меня есть вариант использования, когда мне нужно добавить глобальный срез product_id. Он отлично работает со слайсером категорий, но дает неверные результаты, когда глобальный слайсер product_id фильтруется. Есть ли способ создать его динамически, чтобы при фильтрации таблицы по продуктам сегменты также динамически изменялись в соответствии с unit_quantity? - person iLoveYou3000; 12.04.2021
comment
Можете ли вы добавить новый вопрос к образцу набора данных? - person Angelo Canepa; 12.04.2021
comment
Я мог бы запутать вопрос, но вариант использования, который я пытаюсь создать, очень прост. У меня есть матрица, в которой будут страны в строках и unit_quantity в значениях. Когда я фильтрую его с помощью столбца категорий, он работает нормально, поскольку каждая страна имеет значение unit_quantity для всех категорий, но фильтрация его через столбец product_id не дает правильных результатов, поскольку каждый продукт продается не в каждой стране. Надеюсь, вы сможете это представить. - person iLoveYou3000; 13.04.2021