Версия: 1.9

Расширенная перекрёстная фильтрация

Во многих случаях обычной перекрёстной фильтрации Deneb достаточно. Расширенный режим предназначен для авторов, которым нужен больший контроль над её поведением в своих визуалах.

Кратко о работе расширенного режима

Результат спецификации может существенно отличаться от исходного набора данных. Поэтому проследить связь примитива с исходной точкой — то, что делает простая перекрёстная фильтрация, — не всегда легко. Расширенный режим позволяет:

  • Точно задавать события через Vega.
  • Вместо использования только текущей точки события задать фильтр для исходного набора, переданного Power BI. Его условия могут зависеть от этой точки или от фиксированной логики.
  • Применить перекрёстную фильтрацию к строкам, возвращённым фильтром, обновив __selected__ для соответствующих точек данных.
  • Использовать в качестве фильтра допустимое преобразование Vega filter.

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

Включение расширенной перекрёстной фильтрации

Vega предоставляет подробный контроль над событиями визуала через потоки событий. С их помощью можно менять значения сигналов, используя выражения. Это позволяет задавать разные способы взаимодействия с визуалом и передачи перекрёстного фильтра другим визуалам страницы.

  • В разделе Vega → Power BI Interactivity панели Settings редактора визуала включите Expose cross-filtering values for dataset rows. Настройка определяет, должен ли Deneb сопоставлять точки данных при щелчке по примитивам.
  • По умолчанию настройка выключена.
  • Deneb создаёт для каждой строки "dataset" специальное поле "__selected__" и обновляет его при событиях выбора или подходящих внешних событиях — например, восстановлении закладки с активным выбором.
  • В настройке Cross-filtering management выберите Advanced.

Управление событиями в спецификации

Для каждого события, которое вы связываете с Vega, определите нужное действие:

  1. Очистить текущий выбор перекрёстной фильтрации — функция выражений pbiCrossFilterClear.
  2. Применить или обновить выбор — функция выражений pbiCrossFilterApply.

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

Примитиву задано имя data-point, а сигналу управления состоянием выбора — pbiCrossFilterSelection:

{
  "marks": [
    {
      /* Примитив, события которого нужно отслеживать */
      "name": "data-point",
      ...
    }
  ],
  ...
  "signals": [
    {
      "name": "pbiCrossFilterSelection",
      "value": [],
      "on": [
        /* При щелчке по указанному примитиву применить перекрёстный фильтр */
        {
          "events": {
            "source": "scope",
            "type": "mouseup",
            "markname": "data-point"
          },
          "update": "pbiCrossFilterApply(event)"
        },
        /* При щелчке по представлению вне этого примитива очистить фильтр */
        {
          "events": {
            "source": "view",
            "type": "mouseup",
            "filter": [
              "!event.item || event.item.mark.name != 'data-point'"
            ]
          },
          "update": "pbiCrossFilterClear()"
        }
      ]
    }
  ],
  ...
}

Обратите внимание ещё на два правила:

  • Первый параметр pbiCrossFilterApply — связанная переменная event. Она содержит тип события и данные примитива или элемента, с которым взаимодействует пользователь.
  • Без дополнительных параметров pbiCrossFilterApply работает с текущим datum, если он доступен, и повторяет простую перекрёстную фильтрацию, включая выбор нескольких точек с Ctrl или Shift.

Подробное описание функций выражений

pbiCrossFilterClear()

Функция явно просит Power BI очистить активный выбор точек для перекрёстной фильтрации.

Вызов функции

Это отдельная операция, для которой параметры не нужны.

pbiCrossFilterApply()

Функция применяет выбор перекрёстной фильтрации в Power BI.

Вызов функции

pbiCrossFilterApply(event, filter?, options?)

Параметры описаны ниже.

event — связанная переменная event, доступная функциям выражений.

  • Содержит сведения о типе события и данные примитива или элемента, с которым взаимодействуют.
  • Содержит текущий datum, если Vega может его определить.
  • Если переданный объект не является допустимым event, перекрёстная фильтрация не применяется, а в панели Logs появляется предупреждение.

filter — необязательное строковое выражение фильтра Vega для базового набора данных визуала. При составлении выражения ориентируйтесь именно на этот набор.

  • Если параметр отсутствует или пуст ('', undefined, null), Deneb использует простую фильтрацию: определяет точку из event и выполняет обычный выбор. Состояние клавиш-модификаторов управляет множественным выбором, как описано выше.
  • При исключении фильтр не применяется, а в панели Logs появляется предупреждение.
  • Синтаксис должен соответствовать допустимому преобразованию Vega filter.
  • Внутри строки datum.field обращается к полю базового набора, к которому вы применяете условие, как при обычном преобразовании filter в спецификации.
  • Чтобы использовать значение datum самого примитива, с которым взаимодействует пользователь, можно:
    • Самостоятельно подставить значение, правильно закрыв и экранировав строки.
    • Использовать обозначение подстановки, которое Deneb разрешит автоматически. Это избавляет от самостоятельного составления экранированного синтаксиса.

Следующие варианты дают одинаковое внутреннее выражение после обработки Deneb, если datum['Product'] текущего примитива равно 'Paseo':

// Самостоятельное составление строки
"pbiCrossFilterApply ( event, \"datum['Product'] == '\" + datum['Product'] + \"'\")";

// Синтаксис подстановки
"pbiCrossFilterApply ( event, \"datum['Product'] == _{Product}_\" )";

// Полученное выражение фильтра
"datum['Product'] == 'Paseo'";
  • Подстановка ограничивается символами _{ и }_. Всё между ними считается именем поля. Поэтому поле с пробелами или специальными символами, например $ Sales, указывается как _{$ Sales}_.
  • При ошибках разбора filter Deneb старается вывести соответствующие сообщения в панели Logs, чтобы помочь с отладкой.
  • Внутри Deneb создаёт спецификацию Vega без визуального вывода. Она содержит только базовый набор данных, сигналы верхнего уровня и полученное преобразование. После разбора спецификации результирующие строки передаются обработчику перекрёстной фильтрации и становятся текущим выбором.
  • Поскольку filter — допустимое преобразование Vega, можно объединять предикаты для более сложного выбора строк.
  • При вычислении фильтра доступны текущие значения всех сигналов верхнего уровня вашей спецификации.

options — необязательный объект дополнительных настроек поведения.

  • Если он отсутствует, Deneb использует значения по умолчанию для поддерживаемых свойств, описанные ниже.
  • Если нужны настройки без собственного фильтра — например, простой выбор с другими клавишами-модификаторами, — передайте пустое значение filter.
  • Объект поддерживает свойства limit и multiSelect.

limit — максимальное число точек данных для перекрёстной фильтрации.

  • По назначению соответствует настройке Data Point Limit режима Simple.
  • Минимум — 1, максимум — 2 500.
  • Верхняя граница обусловлена производительностью: обработка большого выбора требует значительных ресурсов Power BI. Разработчики могут пересмотреть её при наличии обоснованных результатов экспериментов, но визуал не должен аварийно завершаться — это препятствует сертификации.
  • По умолчанию — 50.

multiSelect — массив клавиш, включающих множественный выбор для этой операции.

  • Допустимые значения: ctrl, shift, alt.
  • Если перечислено несколько клавиш, достаточно удерживать любую из них.
  • По умолчанию — ['ctrl', 'shift'], то есть привычный множественный выбор Power BI при удержании Ctrl или Shift.
  • Можно настроить разные взаимодействия через отдельные сигналы и события клавиатуры или мыши: например, обычный выбор щелчком и выбор лассо с Alt. Для выбора можно использовать и перетаскивание — цель механизма в том, чтобы предоставить автору свободу настройки.