PowerBI Dynami c биннинг (изменение диапазонов) в зависимости от значения меры - PullRequest
2 голосов
/ 06 мая 2020

Я пытаюсь представить некоторые непрерывные данные с помощью биннинга. Данные непрерывного взвешивания области должны быть разделены на следующие категории: VeryHigh, High, Low, VeryLow. Весовые значения основаны на взаимодействии между определенными типами событий, сгруппированными по области, и поэтому могут меняться в зависимости от типа, выбранного пользователем отчета.

Я включил некоторые образцы данных ниже и краткое описание того, что было сделано до сих пор.

Начните с пяти наборов данных области (AE). В каждом есть один или несколько типов инцидентов. У каждого инцидента есть вес и количество раз (количество), которое он происходит в зоне.

enter image description here

Добавьте вычисляемый столбец CC_ALL_WGT (вес * количество)

enter image description here

Создайте меру:

M_WGT = DIVIDE(SUM(sample_data[CC_ALL_WGT]), SUM(sample_data[4_count]))

Это имеет смысл, если сгруппировать по площади, и мы видим, что область получает общий весовой балл

enter image description here

Это можно изменить, разрезав данные на основе того, какой тип происшествия мы sh будем проверять:

enter image description here

Мы также можем настроить дополнительные меры для получения Мин; Максимум; Медиана от меры на основе выбора типа:

M_MIN_M_WGT = IF(
    countrows(values(sample_data[1_area])) = 1,
    sample_data[M_WGT],
    MINX(
        values(sample_data[1_area]),
        sample_data[M_WGT]
    )
)

enter image description here

Что изменится, как и ожидалось, при выборе слайсера

enter image description here

Также настройте меру для определения средней точки между минимумом и медианной и средней точки между максимумом и медианной

M_MidMinMed =
sample_data[M_MED_M_WGT] - ((sample_data[M_MED_M_WGT] - sample_data[M_MIN_M_WGT]) / 2)

Что я хотел бы сделать с этими значениями, так это создать полосу на основе следующего:

VeryLow: (от минимального до среднего среднего значения) Низкого: (от минимального до среднего) высокого: (от среднего до среднего максимального среднего) точка) VeryHigh: (MedMax to Maximum)

Таким образом, на основе следующего выбора

enter image description here

Бины будут настроены следующим образом

  1. Очень низкий (от 0,59 до 0,76)
  2. Низкий (от 0,76 до 0,93)
  3. Высокий (от 0,93 до 1,01)
  4. Очень высокий (от 1,01 до 1,1 )

Область A будет в ячейке 4 (очень высокая); Область B в корзине 2 (низкая); Площадь C в ячейке 1 (очень низкий); Область D в корзине 2 (низкая); Область E в ячейке 4 (очень высокая)

Если выбрать c Типы для просмотра (через слайсер), ячейки будут настроены следующим образом:

enter image description here

  1. Очень низкий (от 0,35 до 0,61)
  2. Низкий (от 0,61 до 0,88)
  3. Высокий (от 0,88 до 1,06)
  4. Очень высокий (1,06 to 1.24)

Итак, проверка M_WGT (с типами, указанными в срезе):

Область A будет в Bin 4 (VeryHigh); Область B в корзине 2 (низкая); Площадь C в ячейке 1 (очень низкий); Область D в корзине 1 (очень низкая); Область E в ячейке 4 (высокая)

ПРИМЕЧАНИЕ. - Изменение классификации ячейки для области D с низкой на очень низкой

Вот где я застрял. В этом сообщении указывается, как применить диапазон бункеров stati c: https://community.powerbi.com/t5/Desktop/Histogram-User-defined-bin-size/m-p/69854#M28961, но я не смог сделать это с помощью Dynami c или изменения значений (Min; Max; Media; Midpoint ) в зависимости от выбора.

Ближайшее, что мне удалось применить, выглядит следующим образом:

Range =
VAR temp =
    CALCULATE ( sample_data[M_WGT] )
RETURN
    IF (
        temp < 0.76,
        "1_VeryLow",
        IF (
            AND ( temp > 0.76, temp <= 0.93 ),
            "2_Low",
            IF (
                AND ( temp > 0.93, temp <= 1.01 ),
                "3_High",
                "4_VeryHigh"
            )
        )
    )

Что допускает следующее:

enter image description here

Тогда как я могу связать бункеры с визуалом, с ним есть несколько ошибок. Сначала биннинг происходит на уровне ТИПА, а не на уровне ОБЛАСТИ. Во-вторых, я вручную устанавливаю значения диапазона.

Когда я говорю «Уровни типов», я имею в виду, что они объединяются на этом уровне:

enter image description here

В то время как то, что я бы хотел, чтобы гистограмма представляла, это значения M_WGT на уровне области.

Если я разрежу только область A, то проблему будет легче увидеть:

enter image description here

Я бы хотел, чтобы в гистограмме было одно представление области A (ячейка для 1,10), а не три, отображаемые в настоящее время (для каждого типа 1.9; 1; 0.35)

Надеюсь, мне удалось передать проблему и требование.

Оцените любые советы или идеи.

РЕДАКТИРОВАТЬ: Ссылка на отчет + Источник данных находится здесь: https://www.dropbox.com/sh/oganwruacdzgtzm/AABlggr3-xqdMvPjuR9EyrMaa?dl=0

1 Ответ

2 голосов
/ 06 мая 2020

Вы можете определить сегмент для области в одном измерении:

Bucket = 
VAR Weights =
    SUMMARIZE ( ALLSELECTED ( sample_data ), sample_data[1_area], "Wgt", [M_WGT] )
VAR MinW = MINX ( Weights, [Wgt] )
VAR MaxW = MAXX ( Weights, [Wgt] )
VAR MedW = MEDIANX ( Weights, [Wgt] )
VAR MinMedW = ( MinW + MedW ) / 2
VAR MedMaxW = ( MedW + MaxW ) / 2
VAR CurrW = CALCULATE( [M_WGT], ALLSELECTED( sample_data[2_type] ) )
RETURN
    SWITCH (
        TRUE (),
        CurrW <= MinMedW, "1_VeryLow",
        CurrW <= MedW,    "2_Low",
        CurrW <= MedMaxW, "3_High",
        CurrW <= MaxW,    "4_VeryHigh"
    )

Это суммирует веса по всему в выбранных вами фильтрах (ALLSELECTED), а затем определяет ваши границы, как вы указали. Затем мы вычисляем вес для текущей области по всем выбранным типам и передаем его в переключатель, где мы проверяем значения от низкого до высокого.


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

Ranges =
DATATABLE (
    "Range", STRING,
    {
        { "1_VeryLow" },
        { "2_Low" },
        { "3_High" },
        { "4_VeryHigh" }
    }
)

Поместите Ranges[Range] на ось и определите подходящую меру подсчета.

CountArea =
COUNTROWS ( FILTER ( sample_data, [Range] = SELECTEDVALUE ( Ranges[Range] ) ) )

Я действительно не знаю, что вы пытаетесь подсчитать, должен ли это быть отдельный подсчет, или нужно ли 4_count задействовать или нет, но при необходимости измените эту меру подсчета.

...