Столбец ранжирования в Power BI, который динамически изменяется

При попытке создать организационную диаграмму с помощью настраиваемых визуальных элементов в Power BI Desktop необходимо показать диаграмму с отфильтрованными данными, которые применяются срезом в столбце отдела.

Я столкнулся с ограничением настраиваемого визуального элемента (что логично), чтобы получить правильную диаграмму в визуальном, в наборе данных должен быть корневой узел. В моем сценарии столбец ReportsTo должен быть null, чтобы идентифицировать его как корневой узел.

Удалось создать Reportsto столбец null в каждом отделе в представлении SQL с использованием логики ROW_NUMBER () OVER (PARTITION BY EmpDepartment Order by EmpGrade desc и CASE. Но это уже обработанные данные, я что-то ищу во время выбора фильтра, чтобы при выборе пользователем 2 отделов в пользовательском визуальном элементе слайсера не произошло сбоя.

Я пробовал следовать DAX на рабочем столе Power BI, чтобы получить RANK на основе Grade с отфильтрованными данными. К сожалению, DAX работает как Измерение, а не как Расчетный столбец , и с этой мерой я не могу получить ожидаемый результат при попытке вычислить столбец с использованием IF([RANK]=1,BLANK(), ('Table'[ReportsTo]))

Примечание. В Power BI Desktop добавлен столбец индекса - страница редактирования запросов

RANK = 
MINX (
    FILTER (
        SELECTCOLUMNS (
            ALLSELECTED ('Table'),
            "index", 'Table'[Index],
            "rank", RANKX ( ALLSELECTED ( 'Table' ), 'Table'[Grade],, DESC, DENSE )
        ),
        [index] = MAX ( 'Table'[Index] )
    ),
    [rank]
    )
)

Вот пример данных, согласно следующей таблице, когда отдел отфильтрован с помощью ИТ (срез), EmpID 107 будет корневым узлом на основе столбца ReportsTo_2. Но визуально не будет работать, если выбрано 2 отдела.

+-----------+------------+-------+---------------+---------+--------------+
| EmpID     | ReportsTo  | Grade | EmpDepartment | EmpName | ReportsTo_2
+-----------+------------+-------+---------------+---------+--------------+
| 101       | 107        | A1    | IT            | Emp1    | 107         
| 102       | 107        | A1    | IT            | Emp2    | 107        
| 103       | 107        | A1    | IT            | Emp3    | 107        
| 104       | 108        | A2    | Proc.         | Emp1    | 108        
| 105       | 108        | A2    | Proc.         | Emp1    | 108        
| 106       | 108        | A2    | Proc.         | Emp1    | 108        
| 107       | 109        | B1    |  IT           | Mgr1    |
| 108       | 109        | B1    | Proc.         | Mgr2    |
| 109       | 110        | C2    | Management    | Director|
| 110       |            | D9    | Sr.Management | CEO     |
+-----------+------------+-------+---------------+---------+--------------+

Ожидаемый результат: Моя идея состоит в том, чтобы получить значение null в столбце ReportsTo_2 для наивысшего Grade в отфильтрованных данных (фильтр по отделам).

Оценил ваш совет по достижению этого. Спасибо

Дополнительная информация для пояснений по запросу в комментариях

Использование следующих визуальных элементов:
Пользовательский визуал 1
Пользовательский Визуальный 2

Сценарии:

  1. При фильтрации с несколькими отделами (корневой узел недоступен), если я использую ReportsTo_2 в качестве родительского, отображается ошибка "несколько корневых узлов": Ссылка на изображение
  2. Если в отделах НЕ применяется фильтр: Ссылка на изображение

Те же сценарии с Custom Visual 2:

  1. Ссылка на изображение
  2. Ссылка на изображение

Дополнительное примечание 2:
Основная проблема, с которой я столкнулся: в качестве меры мы можем легко получить ожидаемый результат, а в качестве вычисляемого столбца то же выражение. не дает ожидаемого результата.
Ссылка на изображение


person Shekar Kola    schedule 05.08.2019    source источник
comment
Меры могут работать динамически, вычисляемые столбцы - нет. Итак, вы говорите, что визуальные сбои, разве это не ваша настоящая проблема?   -  person Aldert    schedule 05.08.2019
comment
Я согласен, но в данном случае я так не думаю, пока в отфильтрованном наборе данных есть корневой узел, визуальный элемент работает. На этом этапе я не с нетерпением жду исправления в визуальном плане.   -  person Shekar Kola    schedule 05.08.2019
comment
Можете ли вы показать, каков был бы ваш желаемый результат, если бы и IT, и Proc. отделы выбираются? Я не могу вывести его, не зная, какой образ вы пытаетесь использовать. Хотя, похоже, проблема решаемая.   -  person Jelle Hoekstra    schedule 05.08.2019
comment
Вы пробовали это на мере: RANKX (ALLSELECTED (Таблица), Таблица [Grade] ,, DESC, DENSE) Столбцы не могут быть динамическими. Вы можете использовать такую ​​меру в визуализации, такой как таблица, для имитации столбца.   -  person ibarrau    schedule 05.08.2019
comment
Уважаемый @Nacho, я уже пробовал это, но это дало бы мне RANK на основе всей таблицы, требование состоит в том, чтобы получить RAN только для отфильтрованных данных и использовать RANK в условии IF, чтобы заменить наивысшую оценку на null   -  person Shekar Kola    schedule 06.08.2019
comment
Уважаемый @JelleHoekstra, мне были добавлены дополнительные детали вместе со скриншотами, пожалуйста, посмотрите мой отредактированный пост. Спасибо   -  person Shekar Kola    schedule 06.08.2019


Ответы (1)


Я думаю, что понимаю вашу проблему, мера, которая вам нужна, указана ниже. Однако обратите внимание на ограничения ваших визуальных эффектов. Им обоим явно нужен один начальный узел. Множественные или никакие начальные узлы не допускаются. Таким образом, даже с этой мерой, выбрав как IT, так и Proc. в вашем фильтре приведет к ошибке, поскольку он дает обоим визуальным элементам два возможных начальных узла. Эта мера решит проблему отсутствия начального узла, поскольку в результате всегда будет хотя бы одно пустое значение в вашем ReportsTo_2.

Вы можете заменить "" на BLANK (), когда это явно необходимо, я не тестировал это на визуальных элементах.

ReportsTo_2 =

var _highestSelectedRank = CALCULATE( MAX ( 'Table'[Grade] ) ; ALLSELECTED( 'Table' ) )

RETURN
    IF (
        MAX( 'Table'[Grade] ) = _highestSelectedRank ;
        "" ;
        MAX ( 'Table'[ReportsTo] )
    )

Обновление на основе комментариев. Или принудительное использование меры как вычисляемого столбца.

ReportsTo_2 =

var _highestSelectedRank = CALCULATE( MAX ( 'Table'[Grade] ) ; ALLSELECTED( 'Table' ) )

RETURN
    MAXX (
        'Table' ; 
        IF (
            'Table'[Grade] = _highestSelectedRank ;
            "" ;
            'Table'[ReportsTo]
        )
    )
person Jelle Hoekstra    schedule 06.08.2019
comment
Я думаю, что цель этого выражения - получить аналогичный результат, который я получаю с помощью ReportsTo_2 = IF ([RANK] = 1, BLANK (), MAX ('Table' [ReportsTo])). К сожалению, в моем случае мера не поможет, пожалуйста, посмотрите отредактированный пост. Спасибо! - person Shekar Kola; 06.08.2019
comment
Невозможно создать динамический вычисляемый столбец, как ранее указывал @Aldert. Они рассчитываются при обновлении, и их значение фиксировано. Единственный обходной путь, который вы могли бы попробовать, - это измерение с принудительным контекстом строки, см. Мое обновление через несколько минут. Если это не сработает, боюсь, я не смогу помочь вам найти решение вашей проблемы. - person Jelle Hoekstra; 06.08.2019
comment
Опять же, выражение работает, когда я добавлен как Мера, но не работает, когда то же выражение добавлено как Расчетный столбец. Я думаю, что я должен считать ограничение настраиваемым визуалом (он мог бы принять меры) и представить этот отчет, отмечая ограничение, что он работает только с фильтром единого отдела, которым я могу легко управлять в T-SQL как Представление SQL - это фактический источник данных. - person Shekar Kola; 06.08.2019
comment
Мне просто интересно (поправьте меня, если я ошибаюсь), если бы нам удалось закодировать SELECTEDVALUE('Table'[EmpDepartment]) внутри выражения переменной, чтобы эта переменная была заполнена с наивысшей оценкой в ​​отфильтрованных данных! - person Shekar Kola; 06.08.2019
comment
Фактический код не имеет значения, проблема здесь в выводе. То, что мы пытаемся сделать, может быть выполнено только в определенной мере, в то время как ваш визуал принимает только вычисляемые столбцы. Если нет возможности изменить то, что принимает ваш визуал, то именно то, что вы просите, невозможно с учетом этих ограничений. Вы пробовали запустить вторую версию приведенного выше кода в качестве меры и добавить ее к визуальному элементу? Он не будет работать как вычисляемый столбец, поскольку он оценивается по-другому. - person Jelle Hoekstra; 06.08.2019
comment
Да, я пробовал вторую версию в качестве меры, но даже с этим не повезло, кажется, она принимает только столбцы или вычисляемые столбцы - person Shekar Kola; 06.08.2019