Отображать совпадающие и несоответствующие значения на основе значения среза Power BI - PullRequest
0 голосов
/ 07 июля 2019

Я работаю над таблицей просмотра, которая сообщает, какой клиент следит за каким активом. Основываясь на фильтре активов, мне нужно отобразить клиентов, которые смотрели шоу, и клиентов, которые не смотрели шоу. ниже приведен пример таблицы

enter image description here

Если asset_id выбран как 1 в слайсере, желаемый результат будет как ниже

enter image description here

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

1 Ответ

1 голос
/ 08 июля 2019

Сначала создайте новую таблицу «Актив»:

enter image description here

Эта таблица содержит уникальные активы, и мы будем использовать ее для создания слайсера, которыйвлияет на измерение DAX, но не влияет на визуальное (таблица).Для этого таблица активов должна быть отключена от таблицы просмотра (без связей).

В вашей таблице просмотра я просто переименовал «asset» в «asset_id», чтобы соответствовать:

enter image description here

Далее создайтемера:

Status = 
  VAR Selected_Asset = SELECTEDVALUE(Asset[asset_id])
  VAR Customer_Asset = SELECTEDVALUE(Viewership[asset_id])
RETURN
IF(Customer_Asset = Selected_Asset, "Watched", "Not Watched")

Результат:

enter image description here

Слайсер здесь создается из таблицы «Актив», а таблица являетсявизуальная таблица с customer_id и asset_id из таблицы Viewership (установите для них значения «не суммировать»).Я выключил «Всего», предполагая, что вам это не нужно.

В этом проекте требуется установить слайсер активов в режим «одиночного выбора», чтобы убедиться, что вы получаете только одно значение из него.Если вы хотите, чтобы модель работала с мультиселектором, измените меру DAX следующим образом:

Multi Status = 
  VAR Selected_Assets = ALLSELECTED(Asset[asset_id])
  VAR Customer_Asset = SELECTEDVALUE(Viewership[asset_id])
RETURN
IF(Customer_Asset IN Selected_Assets, "Watched", "Not Watched")

Результат:

enter image description here

Редактировать:

Чтобы заставить его работать на уровне клиента:

Customer Status = 
  VAR Selected_Assets = ALLSELECTED(Asset[asset_id])
  VAR Customer_Assets = VALUES(Viewership[asset_id])
  VAR Assets_Watched = COUNTROWS(INTERSECT(Customer_Assets, Selected_Assets))
RETURN
IF(Assets_Watched > 0, "Watched", "Not Watched")

Результат:

enter image description here

Объяснение: сохранить выбранные активы в табличной переменной.Затем сохраните активы, видимые для каждого клиента, в другой табличной переменной.Найти пересечение двух таблиц (что у них общего) и подсчитать количество пересеченных строк.Если нет - не смотрел, иначе смотрел.Если вы хотите, вы можете отобразить количество просмотренных фильмов (просто верните «Assets_Watched» вместо оператора IF).

...