Что такое направление связи в Power BI?

Tags: Power BI

Связи в Power BI немного отличаются от других систем управления базами данных. В большинстве систем у вас просто есть связи, для которых нет «Направления». В Power BI, однако, есть направление связи. Оно играет важную роль в том, каким образом работает в Power BI фильтрация. Понимание направления связи является важным шагом к моделированию в Power BI. В этом посте вы узнаете о том, что такое направление связи, и какова разница между односторонними и двусторонними связями. Мы не будем говорить о том, как разрешать проблемы со связями в этом сообщении, потому что это сделает эту запись очень длинной.

Пример набора данных

Если вы хотите просмотреть пример этого сообщения, создайте новый файл Power BI Desktop и получите данные из AdventureWorksDW и выберите DimEmployee в качестве единственной таблицы для получения данных. Чтобы получить доступ к набору данных AdventureWorksDW, скачайте файл 

Откройте новый Power BI Desktop и получите данные из AdventureWorksDW и выберите эти таблицы: DimCustomer, DimProduct, FactInternetSales. Загрузите данные в Power BI. После загрузки данных в Power BI, на вкладке Relationships вы должны увидеть все три таблицы, связанные друг с другом. Вы можете видеть направление связи которое обычно происходит с одной стороны связи к «многим» его сторонам.

Что подразумевает направление связи?

Самым важным вопросом является то, что означает направление связи? Ответ: это означает «Фильтрация». Каким бы ни было направление отношений, это означает, что Power BI фильтрует данные. В приведенном выше скриншоте вы можете видеть, что направление связи идет от DimCustomer к FactInternetSales. Это означает, что любой столбец DimCustomer может фильтровать данные в FactInternetSales. В качестве примера; вы можете делать срезы и вырезы SalesAmount (в таблице FactInternetSales), используя команду EnglishEduction (в DimCustomer), как показано ниже.

Пока что ничего не кажется странным или непонятным. Вы можете нарезать данные таблицы фактов также используя столбцы из DimProduct, потому что есть направление связи от DimProduct к FactInternetSales. Проблема (или, скажем, странная часть) возникает, когда вы хотите произвести фильтрацию в направлении, отличным от того, которое определено в связях. Давайте посмотрим пример.

 

Направление отношения означает способ распространения фильтра в Power BI

 

Фильтрация на основе различного направления

Иногда бывает необходимо произвести фильтрацию против направления связи. Давайте посмотрим на пример. Предположим, вы хотите, чтобы количество продуктов было продано в каждой категории образованияВы можете создать таблицу с EnglishEduction (от DimCustomer) и ProductKey (от DimProduct) в качестве первого шага. Затем в списке видимых полей измените агрегацию ProductKey на Count, как показано на скриншоте ниже;

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

Как вы можете видеть на скриншоте выше, количество ProductKey составляет 606 для каждого EnglishEducation. Причина - НАПРАВЛЕНИЕ СВЯЗИ. Давайте посмотрим на направление снова.

Как вы можете видеть на приведенном выше снимке экрана, разрешена только фильтрация от DimProduct или DimCustomer до FactInternetSales с текущим направлением связи. Однако мы пытаемся достичь в этом примере немного другого. Мы хотим фильтровать DimProduct на основе выбора Education в DimCustomer.

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

 

Двунаправленные связи

Чтобы вышеприведенный пример работал, вам нужно изменить направление связи к обоим направлениям, чтобы заставить его работать. Обратите внимание, что вы НЕ ДОЛЖНЫ делать это все время. Двунаправленная связь имеет существенный недостаток в производительности (об этом мы поговорим позже). На данный момент, чтобы увидеть, что делает двусторонняя связь, дважды щелкните по линии связи между DimProduct и FactInternetSales и сделайте ее двунаправленной.

Теперь вы должны правильно видеть результат в таблице;




Причина, по которой здесь работает двусторонняя связь, заключается в том, что она позволяет осуществлять фильтрацию по отношению DimProduct, как показано на следующем скриншоте;

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

 

Осторожно! Ограничения производительности для двунаправленной связи!

После того, как вы выполнили этот пример, кажется, что отношения с двумя направлениями хороши! Вы наверное подумали; почему мы не можем использовать его все время? Если вы использовали Power BI Desktop в первые дни второй половины 2015 года, тип направления по умолчанию был двунаправленным. В то время у меня было много звонков и писем от людей, что их модель медленная! Как вы думаете почему? Из-за двунаправленных связей!

Двунаправленные связи - один из способов убить производительность вашей модели Power BI!

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

Способ 1. Измените модель данных! Проектируйте должным образом

Да, правильная модель данных не везде нуждается в двунаправленных связях. Если в вашей модели необходимы преимущественно такие связи, то ваша модель не достаточно хорошо разработана. Я немного объяснил принципы моделирования в этой статье. Я напишу об этом позже. Хорошее моделирование может разрешить необходимость двусторонних связей.

Способ 2. Использование функции CrossFilter DAX ТОЛЬКО ЕСЛИ первый метод не работает

Только в том случае, если вы правильно спроектировали свою модель и все еще не можете получить то, что вам нужно, тогда вы можете написать выражение DAX с помощью CrossFilter, чтобы получить желаемый результат. Применение этого способа по-прежнему использует связи с двумя направлениями для этого расчета. Однако эти связи будут использоваться только для вычисления этой единственной меры. Во всех остальных случаях, производительность должна быть нормальной. Я напишу больше о функции CrossFilter в DAX в другом сообщении.

Резюме

Направление связи играет очень важную роль в моделировании в Power BI. Направление  связи означает способ распространения фильтра в Power BI. Однонаправленная связь будет фильтровать одну таблицу на основе другой. Иногда вам нужно осуществить фильтрацию в другом направлении, то есть когда вступает в действие двустороннее отношение. Тем не менее, обе направления связаны со стоимостью проблем с производительностью. Не используйте слепо. Прежде всего убедитесь, что вы правильно разработали свою модель, и если это не сработает, попробуйте другие методы, такие как функции CrossFilter DAX. Я напишу позже о том, как решить проблему с двумя направлениями в модели Power BI.

No Comments

Add a Comment