Слайсер-выключатель для "многие к одному". (модель в комментариях к посту) Да да. Встала недавно именно такая задача. Те, кто из вас работал со сделками в СРМ системах, на сделку вешают несколько тэгов, и если нужно делать слайсер, то по фильтровать по тэгу можно. Однако, если вы какой-то тэг хотите снять, то сделки могут остаться, потому что другие тэги ещё поддерживают эту сделку (или сущность) в контексте фильтра. Поэтому надо найти способ, как убрать все сделки, которые имеют этот тэг из текущего контекста. Я нашёл следующий. Создаём доп таблицу:
tags exclude = VALUES('tags'[tag])
Базовая мера:
Sales: total amt = SUM(sales[amount])
А теперь пишем новую меру.
exclude =
Получаем таблицу сделок, находящихся в текущем контексте фильтра:
VAR _customers = ALLSELECTED('sales'[customer_id])
Вытаскиваем все сделки, которые имеют указанный тэг:
VAR _selected_by_tag = SELECTCOLUMNS(FILTER('tags', tags[tag] IN VALUES('tags exclude'[tag])),"customer_id",[customer_id])
Вычитаем одного из другого через EXCEPT:
VAR _except = EXCEPT(_customers, _selected_by_tag)
А теперь, нужно не забыть убрать проблему, когда вы ничего не выбрали. Для этого вставляем условие ISFILTERED на доп таблицу, так как если вы ничего не выбрали, вычисление будет пустым. А мне хотелось, чтобы если ничего не выбрано, показали бы всех, поэтому вставляем базовую меру на условие false(), а на тру, пишем нашу меру, модифицированную таблицей,
var result = IF(ISFILTERED('tags exclude'[tag]), CALCULATE([Sales: total amt], _except), [Sales: total amt]) RETURN result
И всё. Новая мера готова.
Что с ней делать то ?) Если вы фанат всяких UI примочек, можно создать Группу вычислений, где выставить нормальное вычисление и модифицированное. Делаем закладки с кнопочкой, где нужно запомнить видимость слайсеров с тэгами и доп таплицы тэгов. Одна видна другая нет. А группа вычислений должна просто менять положение слайсера с notmal на exclude, можно даже скрыть, чтобы не смущать никого.
Файл с кодом выложу в примеры