Версия: 1.5

Перекрёстное выделение

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

Чем фильтрация отличается от выделения

Power BI предлагает три типа взаимодействия между визуалами: Filter («Фильтрация»), Highlight («Выделение») и None («Нет»).

Обычные визуалы Power BI скрывают от автора большую часть внутренней обработки. Чтобы управлять ею самостоятельно, нужно понять основные принципы. Ниже приведён простой разбор взаимодействий; более подробное описание есть в документации SDK пользовательских визуалов Power BI.

Предположим, есть диаграмма Sales («Продажи») по Country Code («Код страны»), а в Deneb мы хотим построить визуал Sales по Product («Продукт»). Пока представим его обычной таблицей:

Продажи по странам и таблица продаж по продуктам

Фильтрация

При взаимодействии Filter Power BI непосредственно обновляет поля набора данных визуала, передавая пересчитанные значения:

Выбрана страна US; в таблице показаны продажи продуктов только для US

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

Выделение

При взаимодействии Highlight нужно показать выделенные значения в контексте исходных. Набор данных будет выглядеть примерно так:

Исходные продажи по продуктам и выделенные продажи для US

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

Если поменять направление взаимодействия и выбрать строку таблицы, на столбчатой диаграмме появится похожий эффект:

Выбран продукт Amarilla; диаграмма показывает его продажи на фоне общих продаж

Если пока не учитывать подписи данных, для каждой страны видны:

  • Непрозрачный столбец — продажи выделенного продукта.
  • Более прозрачный столбец — исходные продажи страны по всем продуктам.

Именно такой подход следует рассмотреть при реализации перекрёстного выделения в Deneb.

Если активного фильтра или выделения нет, но поддержка перекрёстного выделения включена, оба набора значений существуют и равны друг другу:

Без активного выделения исходные и выделенные значения равны

Что это означает для Deneb

Прежде чем перейти к настройке и использованию перекрёстного выделения, рассмотрим ещё несколько особенностей.

Визуалом является Deneb

  • В отчёт вы добавляете пользовательский визуал Deneb. Power BI знает о возможностях, объявленных именно этим визуалом.
  • Ваша спецификация выполняется внутри среды Deneb.
  • Если визуал Power BI объявляет поддержку перекрёстного выделения, предполагается, что его код обработает соответствующие данные. Для отдельного специализированного визуала, который разрабатывается и распространяется как готовый пакет, это обычно естественно.
  • Deneb служит средой для языка, на котором автор создаёт свою визуализацию. Но для Power BI именно Deneb должен обрабатывать перекрёстное выделение: поддержка заявлена на уровне визуала.
  • Поэтому, чтобы предоставить возможность заинтересованным авторам, Deneb должен объявить её на уровне всего визуала.

Перекрёстное выделение требует дополнительного проектирования

Объявленная поддержка означает, что автору нужно учитывать эту возможность:

  • Вы можете захотеть включить её и потратить время на необходимые правила. Но можете и отказаться — это допустимо.
  • У многих пользователей Power BI в диалоге Options по умолчанию задано перекрёстное выделение, а не фильтрация:

Настройка взаимодействий по умолчанию в Power BI

  • Если спецификация не обрабатывает выделение, а взаимодействия других визуалов с Deneb не переключены явно на Filter, результат может вызвать недоумение.

По описанным выше правилам визуал обычно не изменится: базовые, исходные значения остаются прежними.

Это может быть непривычно, но технически соответствует выбранному режиму. Авторам приходится одновременно изучать язык визуализации и внутренние механизмы Power BI.

Предположения для поведения по умолчанию

Подход Deneb основан на следующем:

  1. Вряд ли вы захотите реализовать выделение, не понимая описанного механизма.
  2. До знакомства с ним поведение может быть неочевидным.
  3. После его изучения вы понимаете необходимые действия и готовы явно включить поддержку.

Поэтому перекрёстное выделение не включено автоматически. Чтобы добавить его в свой визуал, выполните два шага, описанные ниже.

Рекомендуемые подходы

Выберите подходящий вариант и настройте визуал в соответствии с задачей. Последующие разделы объясняют, почему он работает именно так и какие данные доступны внутри визуала.

Deneb не может управлять взаимодействиями в заголовке визуала. Они находятся вне его содержимого и должны настраиваться автором отчёта вручную.

Только перекрёстная фильтрация

Если поддержка выделения в спецификации не нужна:

  • Убедитесь, что Expose Cross-Highlight Values for Measures в разделе Vega → Power BI Interactivity панели Settings редактора выключена. По умолчанию она выключена, если только вы не загрузили шаблон, который её использует.
  • Проверьте, что в настройках взаимодействия другие визуалы воздействуют на Deneb через Filter.

Как Deneb помогает, если взаимодействия не настроены

Если Expose Cross-Highlight Values for Measures выключена, но взаимодействие в заголовке не настроено, Deneb пытается внутри сопоставить выделенные значения с обычными полями мер, используя их исходные имена:

Поведение при выключенной передаче отдельных значений выделения

Перекрёстное выделение

Если спецификация должна поддерживать выделение:

  • Включите Expose Cross-Highlight Values for Measures в разделе Vega → Power BI Interactivity панели Settings редактора. По умолчанию настройка выключена, если только её не использует загруженный шаблон.
  • Убедитесь, что другие визуалы воздействуют на Deneb через Highlight в настройках взаимодействия.

Далее рассмотрим внутренний механизм и поля набора данных, необходимые для реализации.

Как работает перекрёстное выделение

Некоторые пункты повторяют предыдущие разделы, чтобы все условия были собраны вместе.

  • Свойство Expose Cross-Highlight Values for Measures в разделе Vega → Power BI Interactivity панели Settings определяет, доступны ли значения выделения в наборе данных.
  • По умолчанию оно выключено.
  • Для каждой строки Deneb предоставляет специальные поля каждой меры. Используйте их в кодировании свойств примитивов, условиях или выражениях, чтобы различать выделенные и исходные значения.
  • Когда в другом визуале выбирают точки и его взаимодействие с Deneb настроено как Highlight:
    • Исходное значение меры сохраняется.
    • Поля выделения обновляются сведениями из главного окна Power BI.
  • Если активного выбора в другом визуале нет, выделенные значения мер существуют и равны исходным. Это показано выше.
  • Автор должен использовать эти поля для визуальных эффектов спецификации. Простой подход приведён в практическом примере, дополнительные — ниже.
  • Если настройка выключена, Deneb пытается передать выделенные значения через обычные поля.

Специальные поля __highlight

Перекрёстная фильтрация действует на строку целиком, а перекрёстное выделение — на отдельные меры. Если Expose Cross-Highlight Values for Measures включена, набор данных содержит дополнительные поля для каждой меры.

[measure name]__highlight — значение меры в контексте выделения. Исходное значение остаётся в обычном поле меры. Это позволяет отображать их отдельно.

[measure_name]__highlightStatus — состояние конкретной меры в контексте текущей строки. Оно похоже на __selected__, но относится к мере, а не ко всей строке. Возможные значения:

  • on — активно перекрёстное выделение, и эта мера выделена.
  • off — активно перекрёстное выделение, но эта мера не выделена. Это чаще встречается при использовании нескольких мер.
  • neutral — перекрёстного выделения нет. Исходное и выделенное значения равны.

[measure_name]__highlightComparator — заранее вычисленный результат сравнения выделенного и исходного значений. Он позволяет применять условное кодирование без отдельного calculate или аналогичного преобразования. Возможные значения:

  • eq — значения равны.
  • lt — выделенное значение меньше исходного.
  • gt — выделенное значение больше исходного.
  • neq — значения не равны или их нельзя непосредственно сравнить; обычно используется для текстовых мер.

Пример изменения полей при выделении из другого визуала

Возьмём столбец Product и меру $ Sales, как в предыдущем разборе. После включения Expose Cross-Highlight Values for Measures набор данных выглядит так:

Исходные и выделенные значения, состояния neutral и eq без активного выбора

При выборе точки в другом визуале Power BI обновляет выделенные значения, а Deneb — соответствующие дополнительные поля:

При выборе US статус меры on, результат сравнения lt

Отображение состояния выделения через кодирование

Как и при перекрёстной фильтрации, визуал и его кодирование должны понятно передавать состояние выделения. Для специализированных визуалов Power BI это часто новая задача: готовые образцы и привычные схемы могут отсутствовать.

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

Начать помогут простые практические примеры ниже. Они используют Vega-Lite, но обе версии шаблона Simple Bar Chart из диалога New Specification содержат базовые правила перекрёстного выделения.

Ограничения и особенности

  • Выделенные значения доступны только для мер. Power BI не применяет этот механизм к столбцам.

Простые практические примеры

Примеры используют Vega-Lite, но аналогичные принципы применимы и к Vega.

Встроенный отчёт показывает варианты визуалов в Power BI на основе демонстрационной финансовой модели Power BI Desktop. Подсказки раскрывают все данные, чтобы вы могли наблюдать состояние полей __highlight. Дополнительная таблица показывает, как они меняются при перекрёстном выделении из стандартного визуала слева. Ниже приведены две базовые JSON-спецификации.

Скачать файл отчёта PBIX

Пример 1. Перекрёстное выделение с помощью слоёв

Немного изменим подход к столбчатой диаграмме: через слои нарисуем два столбца — для исходного и выделенного значений. Положение x каждого связано с соответствующим полем:

{
  "data": { "name": "dataset" },
  "layer": [
    {
      "description": "Исходное значение",
      "mark": {
        "type": "bar",
        "opacity": 0.3
      },
      "encoding": {
        "x": { "field": "Sales" }
      }
    },
    {
      "description": "Выделенное значение",
      "mark": {
        "type": "bar"
      },
      "encoding": {
        "x": {
          "field": "Sales__highlight"
        }
      }
    }
  ],
  "encoding": {
    "y": {
      "field": "Product",
      "type": "nominal"
    },
    "x": { "type": "quantitative" }
  }
}

Пример 2. Добавление перекрёстной фильтрации

Первый пример поддерживает только перекрёстное выделение. Чтобы визуал мог также фильтровать другие визуалы, расширим кодирование opacity слоя выделения: если __selected__ равно off, его примитив скрывается. Под ним остаётся приглушённый примитив исходного значения:

{
  "data": { "name": "dataset" },
  "layer": [
    {
      "description": "Исходное значение",
      "mark": {
        "type": "bar",
        "opacity": 0.3
      },
      "encoding": {
        "x": { "field": "Sales" }
      }
    },
    {
      "description": "Выделенное значение",
      "mark": {
        "type": "bar"
      },
      "encoding": {
        "x": {
          "field": "Sales__highlight"
        },
        "opacity": {
          "condition": {
            "test": {
              "field": "__selected__",
              "equal": "off"
            },
            "value": 0
          },
          "value": 1
        }
      }
    }
  ],
  "encoding": {
    "y": {
      "field": "Product",
      "type": "nominal"
    },
    "x": { "type": "quantitative" }
  }
}