Поделиться через


Руководство по двунаправленным отношениям

Эта статья предназначена для моделирователя данных, который работает с Power BI Desktop. Он содержит рекомендации по созданию связей двунаправленной модели. Двунаправленная связь — это связь, которая фильтрует в обоих направлениях.

Примечание.

Общие сведения о связях модели не рассматриваются в этой статье. Если вы не знакомы с связями, их свойствами или настройкой, рекомендуем сначала прочитать связи модели в статье Power BI Desktop .

Важно также понимать схему звездочки. Дополнительные сведения см. в статье "Общие сведения о схеме звезды" и важности для Power BI.

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

Однако существует три сценария, когда двунаправленная фильтрация может решить конкретные требования:

Специальные связи модели

Двунаправленные связи играют важную роль при создании следующих двух специальных типов отношений модели:

  • Один к одному: все связи "один к одному" должны быть двунаправленными— невозможно настроить в противном случае. Как правило, мы не рекомендуем создавать эти типы связей. Для полного обсуждения и рассмотрения альтернативных шаблонов проектирования см. руководство по отношениям "один к одному" .
  • "многие ко многим": при связывании двух таблиц измерений требуется промежуточная таблица . Требуется двунаправленный фильтр, чтобы обеспечить распространение фильтров по всей таблице бриджинга. Дополнительные сведения см. в руководстве по связям типа "многие ко многим".

Параметры среза "с данными"

Двунаправленные связи могут предоставлять срезы, ограничивающие варианты, где данные присутствуют. (Если вы знакомы с сводными таблицами и срезами Excel, это поведение по умолчанию при выборе данных из семантической модели Power BI или модели служб Analysis Services. Чтобы объяснить, что это означает, сначала рассмотрим следующую схему модели.

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

Первая таблица называется Customer., и она содержит три столбца: Country-Region, Customerи CustomerCode. Вторая таблица называется Product, и она содержит три столбца: Color, Productи SKU. Третья таблица называется Sales, и она содержит четыре столбца: CustomerCode, OrderDate, Quantityи SKU. Таблицы Customer и Product являются таблицами измерений, и каждая из них имеет отношение "один ко многим" к таблице Sales. Каждый фильтр связей выполняется в одном направлении.

Чтобы узнать, как работает двунаправленная фильтрация, схема модели была изменена, чтобы отобразить строки таблицы. Все примеры в этой статье основаны на этих данных.

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

Сведения о строке для трех таблиц описаны в следующем маркированном списке:

  • В таблице Customer есть две строки:
    • CustomerCode CUST-01, CustomerCustomer-1, Country-RegionСША
    • CustomerCode КЛИЕНТ-02, CustomerКлиент-2, Country-RegionАвстралия
  • В таблице Product есть три строки:
    • SKU CL-01, Productфутболку, Colorзеленый
    • SKU CL-02, ProductДжинсы, ColorСиний
    • SKU AC-01, ProductШляпа, ColorСиний
  • В таблице Sales есть три строки:
    • OrderDate 1 января 2019, CustomerCodeCUST-01, SKUCL-01, Quantity10
    • OrderDate февраля 2019, CustomerCodeCUST-01, SKUCL-02, Quantity20
    • OrderDate 3 марта 2019, CustomerCodeCUST-02, SKUCL-01, Quantity30

Теперь рассмотрим следующую страницу отчета.

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

Страница состоит из двух срезов и визуального элемента карточки. Первый срез основан на поле Country-Region, и он имеет два варианта: Австралия и Соединенные Штаты. В настоящее время она срезается Австралией. Второй срез основан на поле Product, и он имеет три варианта: Шляпа, Джинсы и Футболка. Элементы не выбраны (это означает, что продукты не фильтруются). Визуальный элемент карточки отображает количество 30.

Когда пользователи отчетов выбирают Австралию, может потребоваться ограничить использование фильтра для продуктов, чтобы отобразить варианты, где данные связаны с австралийскими продажами. Это то, что означает отображение параметров среза "с данными". Вы можете добиться такого поведения, установив связь между таблицами Product и Sales для фильтрации в обоих направлениях.

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

Срез продукта теперь содержит один вариант: футболка. Этот вариант представляет единственный продукт, проданный австралийским клиентам.

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

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

Если вы решите отобразить параметры среза "с данными", мы не рекомендуем настроить двунаправленные связи. Двунаправленные связи требуют больше обработки, поэтому они могут негативно повлиять на производительность запросов, особенно по мере увеличения числа двунаправленных связей в модели.

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

Теперь рассмотрим, что связь между таблицами Product и Sales больше не фильтруется в обоих направлениях. И в таблицу Sales добавлено следующее определение меры.

Total Quantity = SUM(Sales[Quantity])

Чтобы отобразить параметры среза продукта "с данными", его просто необходимо отфильтровать с помощью меры Total Quantity, используя условие "не является пустым".

диаграмме, показывающая, что область

Анализ измерения к измерению

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

Используя пример модели в этой статье, рассмотрим, как можно ответить на следующие вопросы:

  • Сколько цветов было продано австралийским клиентам?
  • Сколько стран или регионов приобрели джинсы?

На оба вопроса можно ответить без суммирования данных в сводной таблице фактов. Однако для них требуется, чтобы фильтры распространялись из одной таблицы измерений на другую. При распространении фильтров через таблицу фактов можно добиться агрегации столбцов таблицы измерений с помощью функции DISTINCTCOUNT DAX и, возможно, функций MIN и MAX DAX.

Так как таблица фактов работает как бриджинговая таблица, вы можете применить руководство по связям "многие ко многим" для связи с двумя таблицами измерений. Для фильтрации в обоих направлениях потребуется настроить по крайней мере одну связь. Дополнительные сведения см. в руководстве по связям "многие ко многим".

Однако, как уже описано в этой статье, эта конструкция, скорее всего, приведет к негативному влиянию на производительность, а также последствия для пользовательского опыта, связанные с параметрами среза "с данными". Поэтому рекомендуется активировать двунаправленную фильтрацию в определении меры с помощью функции CROSSFILTER DAX. Функцию CROSSFILTER можно использовать для изменения направлений фильтрации или даже отключения связи во время оценки выражения.

Рассмотрим следующее определение меры, добавленное в таблицу Sales. В этом примере связь модели между таблицей Customer и таблицей Sales была настроена для фильтрации в одном направлении .

Different Countries Sold =
CALCULATE(
    DISTINCTCOUNT(Customer[Country-Region]),
    CROSSFILTER(
        Customer[CustomerCode],
        Sales[CustomerCode],
        BOTH
    )
)

Во время оценки меры Different Countries Sold отношение между таблицами Customer и Sales фильтруется в обоих направлениях.

В следующей таблице представлена статистика для каждого продукта, проданного. Столбец Quantity — это просто сумма значений количества. Столбец Different Countries Sold представляет собой уникальное количество значений стран-регионов всех клиентов, которые приобрели продукт.

Диаграмма показывает, что два продукта перечислены в таблице. В столбце

Дополнительные сведения, связанные с этой статьей, см. в следующих ресурсах: