Руководство по двунаправленным отношениям
Эта статья предназначена для моделирователя данных, который работает с 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,Customer
Customer-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,CustomerCode
CUST-01,SKU
CL-01,Quantity
10 -
OrderDate
февраля 2019,CustomerCode
CUST-01,SKU
CL-02,Quantity
20 -
OrderDate
3 марта 2019,CustomerCode
CUST-02,SKU
CL-01,Quantity
30
-
Теперь рассмотрим следующую страницу отчета.
Страница состоит из двух срезов и визуального элемента карточки. Первый срез основан на поле Country-Region
, и он имеет два варианта: Австралия и Соединенные Штаты. В настоящее время она срезается Австралией. Второй срез основан на поле Product
, и он имеет три варианта: Шляпа, Джинсы и Футболка. Элементы не выбраны (это означает, что продукты не фильтруются). Визуальный элемент карточки отображает количество 30.
Когда пользователи отчетов выбирают Австралию, может потребоваться ограничить использование фильтра для продуктов, чтобы отобразить варианты, где данные связаны с австралийскими продажами. Это то, что означает отображение параметров среза "с данными". Вы можете добиться такого поведения, установив связь между таблицами Product
и Sales
для фильтрации в обоих направлениях.
Срез продукта теперь содержит один вариант: футболка. Этот вариант представляет единственный продукт, проданный австралийским клиентам.
Во-первых, рекомендуется тщательно учесть, работает ли эта конструкция для пользователей отчета. Некоторые пользователи отчета находят запутанный опыт, потому что они не понимают, почему параметры среза динамически отображаются или исчезают при взаимодействии с другими срезами.
Если вы решите отобразить параметры среза "с данными", мы не рекомендуем настроить двунаправленные связи. Двунаправленные связи требуют больше обработки, поэтому они могут негативно повлиять на производительность запросов, особенно по мере увеличения числа двунаправленных связей в модели.
Существует лучший способ достичь того же результата: вместо использования двунаправленных фильтров можно применить фильтр визуального уровня к самому срезу продукта.
Теперь рассмотрим, что связь между таблицами 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
представляет собой уникальное количество значений стран-регионов всех клиентов, которые приобрели продукт.
Связанный контент
Дополнительные сведения, связанные с этой статьей, см. в следующих ресурсах:
- Связи модели в Power BI Desktop
- Общие сведения о схеме звезд и важности Power BI
- Руководство по отношениям "один к одному"
- Руководство по связям "многие ко многим"
- Руководство по устранению неполадок связи
- Вопросы? попробуйте задать вопрос сообществу Fabric
- Есть предложения? Вносите идеи для улучшения Fabric