Создание связей и управление ими в Power BI DesktopCreate and manage relationships in Power BI Desktop

При импорте нескольких таблиц, скорее всего, вам понадобится провести анализ, используя данные из них.When you import multiple tables, chances are you'll do some analysis using data from all those tables. Связи между этими таблицами необходимы, чтобы точно вычислить результаты и отобразить правильные сведения в отчетах.Relationships between those tables are necessary to accurately calculate results and display the correct information in your reports. Power BI Desktop значительно упрощает создание таких связей.Power BI Desktop makes creating those relationships easy. Фактически в большинстве случаев вам не нужно ничего делать — функция автообнаружения сделает все автоматически.In fact, in most cases you won’t have to do anything, the autodetect feature does it for you. Однако в некоторых случаях может потребоваться создать связи вручную или внести некоторые изменения в полученные связи.However, sometimes you might have to create relationships yourself, or need to make changes to a relationship. В любом случае очень важно понимать связи в Power BI Desktop, а также способы их создания и изменения.Either way, it’s important to understand relationships in Power BI Desktop and how to create and edit them.

Автообнаружение при загрузкеAutodetect during load

Если вы одновременно запрашиваете несколько таблиц, при загрузке данных Power BI Desktop автоматически пытается найти и создать связи.If you query two or more tables at the same time, when the data is loaded, Power BI Desktop attempts to find and create relationships for you. Параметры связи Кратность, Направление кросс-фильтрации и Сделать эту связь активной устанавливаются автоматически.The relationship options Cardinality, Cross filter direction, and Make this relationship active are automatically set. Power BI Desktop анализирует имена столбцов в запрашиваемых таблицах, чтобы определить, существуют ли потенциальные связи.Power BI Desktop looks at column names in the tables you're querying to determine if there are any potential relationships. Если это так, эти связи создаются автоматически.If there are, those relationships are created automatically. Если Power BI Desktop не может определить соответствие с высоким уровнем достоверности, он не создает связи.If Power BI Desktop can't determine with a high level of confidence there's a match, it doesn't create the relationship. Но вы по-прежнему можете использовать диалоговое окно Управление связями для создания и изменения связей вручную.However, you can still use the Manage relationships dialog box to manually create or edit relationships.

Создание связи с помощью автообнаруженияCreate a relationship with autodetect

На вкладке Главная щелкните Управление связями > Автообнаружение.On the Home tab, select Manage Relationships > Autodetect.

Создание связи с помощью автообнаружения

Создание связи вручнуюCreate a relationship manually

  1. На вкладке Главная щелкните Управление связями > Создать.On the Home tab, select Manage Relationships > New.

  2. В диалоговом окне Создание связи в раскрывающемся списке "Первая таблица" выберите таблицу.In the Create relationship dialog box, in the first table drop-down list, select a table. Выберите столбец, который необходимо использовать в связи.Select the column you want to use in the relationship.

  3. В раскрывающемся списке "Вторая таблица" выберите другую таблицу, которая будет использоваться в связи.In the second table drop-down list, select the other table you want in the relationship. Выберите другой столбец, который необходимо использовать, и нажмите ОК.Select the other column you want to use, and then elect OK.

    Создание связи вручную

По умолчанию Power BI Desktop автоматически настраивает параметры Кратность (направление), Направление кросс-фильтрации и Сделать эту связь активной для новой связи.By default, Power BI Desktop automatically configures the options Cardinality (direction), Cross filter direction, and Make this relationship active for your new relationship. Однако при необходимости эти параметры можно изменить.However, you can change these settings if necessary. Дополнительные сведения см. в разделе Основные сведения о дополнительных параметрах.For more information, see Understanding additional options.

Если ни одна из таблиц, выбранных для связи, не имеет уникальных значений, вы увидите следующую ошибку: Один из столбцов должен содержать уникальные значения.If none of the tables selected for the relationship has unique values, you'll see the following error: One of the columns must have unique values. По крайней мере одна из таблиц, участвующих в связи, должна иметь уникальный список ключевых значений. Это стандартное требование для любых реляционных баз данных.At least one table in a relationship must have a distinct, unique list of key values, which is a common requirement for all relational database technologies.

Устранить эту проблему можно несколькими способами.If you encounter that error, there are a couple ways to fix the issue:

  • Используйте функцию Удалить дубликаты, чтобы получить столбец с уникальными значениями.Use Remove Duplicates to create a column with unique values. Недостаток такого подхода в том, что при удалении повторяющихся строк часть данных теряется, хотя часто на дублирование ключей (строк) есть причины.The drawback to this approach is that you might lose information when duplicate rows are removed; often a key (row) is duplicated for good reason.
  • Добавьте промежуточную таблицу, состоящую из списка отдельных ключевых значений модели, а затем свяжите ее с обоими исходными столбцами, участвующими в связи.Add an intermediary table made of the list of distinct key values to the model, which will then be linked to both original columns in the relationship.

Дополнительные сведения см. в этой записи блога.For more information, see this blog post.

Изменение связиEdit a relationship

  1. На вкладке Главная щелкните Управление связями.On the Home tab, select Manage Relationships.

  2. В диалоговом окне Управление связями выберите связь, а затем нажмите кнопку Изменить.In the Manage relationships dialog box, select the relationship, then select Edit.

Настройка дополнительных параметровConfigure additional options

При создании или изменении связи вы можете настроить дополнительные параметры.When you create or edit a relationship, you can configure additional options. По умолчанию Power BI Desktop автоматически настраивает дополнительные параметры с использованием наиболее подходящих значений, которые могут отличаться для каждой связи в зависимости от данных в столбцах.By default, Power BI Desktop automatically configures additional options based on its best guess, which can be different for each relationship based on the data in the columns.

КратностьCardinality

Параметр Кратность может иметь одно из следующих значений.The Cardinality option can have one of the following settings:

Многие к одному (*:1) . Связь "многие к одному" является наиболее распространенным типом связи по умолчанию.Many to one (*:1): A many-to-one relationship is the most common, default type of realtionship. Это означает, что у столбца в отдельной таблице может быть несколько экземпляров значения, а у другой связанной таблицы, которую часто называют таблицей подстановки, есть только один экземпляр значения.It means the column in a given table can have more than one instance of a value, and the other related table, often know as the lookup table, has only one instance of a value.

Один к одному (1:1) . В связи "один к одному" у столбца в этой таблице есть только один экземпляр определенного значения, а у связанной таблицы также только один экземпляр определенного значения.One to one (1:1): In a one-to-one relationship, the column in one table has only one instance of a particular value, and the other related table has only one instance of a particular value.

Один ко многим (1:*) . В связи "один ко многим" у столбца в этой таблице есть только один экземпляр определенного значения, а у связанной таблицы может быть несколько экземпляров значения.One to many (1:*): In a one-to-many relationship, the column in one table has only one instance of a particular value, and the other related table can have more than one instance of a value.

Многие ко многим (*:*) . В составных моделях между таблицами можно установить связи "многие ко многим", которые избавляют от необходимости поддерживать уникальные значения в таблицах.Many to many (*:*): With composite models, you can establish a many-to-many relationship between tables, which removes requirements for unique values in tables. Также они позволяют обойтись без предыдущих обходных путей, таких как создание новых таблиц исключительно для образования связей.It also removes previous workarounds, such as introducing new tables only to establish relationships. Дополнительные сведения см. в статье Связи с кратностью "многие ко многим".For more information, see Relationships with a many-many cardinality.

Дополнительные сведения об изменении кратности см. в разделе Общие сведения о дополнительных параметрах.For more information about when to change cardinality, see Understanding additional options.

Направление кроссфильтрацииCross filter direction

Параметр Направление кросс-фильтрации может иметь одно из следующих значений.The Cross filter direction option can have one the following settings:

Двунаправленная. При фильтрации обе таблицы обрабатываются так же, как одна.Both: For filtering purposes, both tables are treated as if they're a single table. Параметр Двунаправленная хорошо работает с одной таблицей, которую окружает несколько таблиц подстановки.The Both setting works well with a single table that has a number of lookup tables that surround it. Примером может служить таблица фактических данных по продажам с таблицей подстановки для отделов.An example is a sales actuals table with a lookup table for its department. Такая конфигурация часто называется схемой типа "звезда" (центральная таблица с несколькими таблицами подстановки).This configuration is often called a star schema configuration (a central table with several lookup tables). При наличии нескольких таблиц, у которых также есть таблицы подстановки (некоторые из которых являются общими), не следует использовать параметр Двунаправленная.However, if you have two or more tables that also have lookup tables (with some in common) then you wouldn't want to use the Both setting. Продолжая предыдущий пример, предположим, что в этом случае также есть таблица бюджета, содержащая целевой бюджет для каждого отдела.To continue the previous example, in this case, you also have a budget sales table that records target budget for each department. Таблица отделов подключена к таблице продаж и таблице бюджета.And, the department table is connected to both the sales and the budget table. Избегайте направления связи Двунаправленная для конфигурации такого вида.Avoid the Both setting for this kind of configuration.

Однонаправленная. Это наиболее распространенное стандартное направление означает, что фильтрация вариантов в подключенных таблицах выполняется в таблице, где значения агрегируются.Single: The most common, default direction, which means filtering choices in connected tables work on the table where values are being aggregated. При импорте модели данных Power Pivot в Excel 2013 или более ранней версии все связи будут однонаправленными.If you import a Power Pivot in Excel 2013 or earlier data model, all relationships will have a single direction.

Дополнительные сведения об изменении направления кросс-фильтрации см. в разделе Общие сведения о дополнительных параметрах.For more information about when to change cross filter direction, see Understanding additional options.

Активировать связьMake this relationship active

Если этот флажок установлен, связь служит в качестве активной связи по умолчанию.When checked, the relationship serves as the active, default relationship. Если между двумя таблицами есть несколько связей, активная связь позволяет Power BI Desktop автоматически создавать визуализации, включающие обе таблицы.In cases where there is more than one relationship between two tables, the active relationship provides a way for Power BI Desktop to automatically create visualizations that include both tables.

Дополнительные сведения о назначении активной связи см. в разделе Общие сведения о дополнительных параметрах.For more information about when to make a particular relationship active, see Understanding additional options.

Основные сведения о связяхUnderstanding relationships

После соединения двух таблиц с помощью связи вы можете работать с данными в обеих таблицах так, будто они находятся в одной таблице, что позволяет не беспокоиться о связях или преобразовании таблиц в плоскую структуру перед их импортом.Once you've connected two tables together with a relationship, you can work with the data in both tables as if they were a single table, freeing you from having to worry about relationship details, or flattening those tables into a single table before importing them. Во многих случаях Power BI Desktop может автоматически создавать связи.In many situations, Power BI Desktop can automatically create relationships for you. Но если Power BI Desktop не может с высокой степенью точности определить, должна ли быть определенная связь между двумя таблицами, то он не создает ее автоматически.However, if Power BI Desktop can’t determine with a high-degree of certainty that a relationship between two tables should exist, it doesn't automatically create the relationship. Вам нужно будет сделать это вручную.In that case, you must do so.

Кратко рассмотрим, как связи работают в Power BI Desktop.Let’s go through a quick tutorial, to better show you how relationships work in Power BI Desktop.

Совет

Этот урок можно пройти самостоятельно.You can complete this lesson yourself:

  1. Скопируйте следующую таблицу ProjectHours в лист Excel (за исключением заголовка), выберите все ячейки, а затем выберите Вставить > Таблица.Copy the following ProjectHours table into an Excel worksheet (excluding the title), select all of the cells, and then select Insert > Table.
  2. В диалоговом окне Создание таблицы нажмите кнопку ОК.In the Create Table dialog box, select OK.
  3. Выберите любую ячейку таблицы, выберите Конструктор таблиц > Имя таблицы, а затем введите ProjectHours.Select any table cell, select Table Design > Table Name, and then enter ProjectHours.
  4. То же сделайте для таблицы CompanyProject.Do the same for the CompanyProject table.
  5. Импортируйте данные, нажав кнопку Получить данные в Power BI Desktop.Import the data by using Get Data in Power BI Desktop. Выберите две таблицы в качестве источника данных, а затем нажмите Загрузить.Select the two tables as a data source, and then select Load.

Первая таблица, ProjectHours, представляет собой запись рабочих заданий, в которых зафиксировано время работы пользователя над определенным проектом.The first table, ProjectHours, is a record of work tickets that record the number of hours a person has worked on a particular project.

ProjectHoursProjectHours

TicketTicket SubmittedBySubmittedBy HoursHours ProjectProject DateSubmitDateSubmit
10011001 Brewer, AlanBrewer, Alan 2222 СинийBlue 1.01.20131/1/2013
10021002 Brewer, AlanBrewer, Alan 2626 КрасныйRed 1.02.20132/1/2013
10031003 Ito, ShuIto, Shu 3434 ЖелтыйYellow 4.12.201212/4/2012
10041004 Brewer, AlanBrewer, Alan 1313 ОранжевыйOrange 1.2.20121/2/2012
10051005 Bowen, EliBowen, Eli 2929 ФиолетовыйPurple 01.10.201310/1/2013
10061006 Bento, NunoBento, Nuno 3535 ЗеленыйGreen 1.02.20132/1/2013
10071007 Hamilton, DavidHamilton, David 1010 ЖелтыйYellow 01.10.201310/1/2013
10081008 Han, MuHan, Mu 2828 ОранжевыйOrange 2.01.20121/2/2012
10091009 Ito, ShuIto, Shu 2222 СиреневыйPurple 1.02.20132/1/2013
10101010 Bowen, EliBowen, Eli 2828 ЗеленыйGreen 1.10.201310/1/2013
10111011 Bowen, EliBowen, Eli 99 СинийBlue 15.10.201310/15/2013

Вторая таблица, CompanyProject, — это список проектов с назначенным приоритетом: A, B или C.This second table, CompanyProject, is a list of projects with an assigned priority: A, B, or C.

CompanyProjectCompanyProject

ProjNameProjName PriorityPriority
СинийBlue АA
КрасныйRed BB
ЗеленыйGreen CC
ЖелтыйYellow CC
СиреневыйPurple BB
ОранжевыйOrange CC

Обратите внимание, что каждая таблица содержит столбец проекта.Notice that each table has a project column. Имена столбцов немного отличаются, но значения выглядят одинаковыми.Each is named slightly different, but the values look like they’re the same. Это важно, и мы вернемся к этому немного позже.That’s important, and we’ll get back to it in soon.

После импорта двух таблиц в модель создадим отчет.Now that we have our two tables imported into a model, let’s create a report. Первое, что мы хотим получить, — количество часов, выделенное проектам по приоритету, поэтому мы выберем Priority и Hours в области Поля.The first thing we want to get is the number of hours submitted by project priority, so we select Priority and Hours from the Fields pane.

Выбор значений Priority и Hours в области "Поля"

Если взглянуть на нашу таблицу на холсте отчета, можно увидеть количество часов — 256 для каждого проекта, а также итоговое значение.If we look at our table in the report canvas, you’ll see the number of hours is 256 for each project, which is also the total. Очевидно, что число неверно.Clearly this number isn’t correct. Почему?Why? Потому что мы не можем вычислить сумму значений из одной таблицы (Hours в таблице Project), разделенных по значениям из другой таблицы (Priority в CompanyProject), без связи между этими двумя таблицами.It’s because we can’t calculate a sum total of values from one table (Hours in the Project table), sliced by values in another table (Priority in the CompanyProject table) without a relationship between these two tables.

Поэтому давайте создадим связь между этими двумя таблицами.So, let’s create a relationship between these two tables.

Помните, мы видели в обеих таблицах столбцы с именем проекта и похожими значениями?Remember those columns we saw in both tables with a project name, but with values that look alike? Мы используем их для создания связи между нашими таблицами.We'll use these two columns to create a relationship between our tables.

Почему именно эти столбцы?Why these columns? Если рассмотреть столбец Project в таблице ProjectHours, мы увидим такие значения, как "Синий", "Красный", "Желтый", "Оранжевый" и т. д.Well, if we look at the Project column in the ProjectHours table, we see values like Blue, Red, Yellow, Orange, and so on. Фактически несколько строк имеют одинаковое значение.In fact, we see several rows that have the same value. На самом деле у нас множество значений цветов для столбца Project.In effect, we have many color values for Project.

Если мы рассмотрим столбец ProjName в таблице CompanyProject, мы увидим, что в нем используется только одно из значений цветов для проекта.If we look at the ProjName column in the CompanyProject table, we see there’s only one of each of the color values for the project name. На самом деле каждое значение цвета в этой таблице уникально, и это важно, поскольку мы можем создать связь между этими двумя таблицами.Each color value in this table is unique, and that’s important, because we can create a relationship between these two tables. Это будет связь "многие к одному".In this case, a many-to-one relationship. В такой связи хотя бы один столбец в одной из таблиц должен содержать уникальные значения.In a many-to-one relationship, at least one column in one of the tables must contain unique values. Есть несколько дополнительных параметров для некоторых связей, которые мы рассмотрим позже.There are some additional options for some relationships, which we'll look at later. Сейчас давайте создадим связь между столбцами проекта в каждой из двух таблиц.For now, let’s create a relationship between the project columns in each of our two tables.

Создание связиTo create the new relationship

  1. На вкладке Главная щелкните Управление связями.Select Manage Relationships from the Home tab.

  2. В окне Управление связями щелкните элемент Создать, чтобы открыть диалоговое окно Создание связи, в котором можно выбрать таблицы, столбцы и дополнительные параметры для нашей связи.In Manage relationships, select New to open the Create relationship dialog box, where we can select the tables, columns, and any additional settings we want for our relationship.

  3. В первом раскрывающемся списке выберите ProjectHours в качестве первой таблицы, а затем выберите столбец Project.In the first drop-down list, select ProjectHours as the first table, then select the Project column. Это сторона связи многие.This side is the many side of our relationship.

  4. Во втором раскрывающемся списке уже выбрана CompanyProject в качестве второй таблицы.In the second drop-down list, CompanyProject is preselected as the second table. Выберите столбец ProjName.Select the ProjName column. Это сторона связи один.This side is the one side of our relationship.

  5. Оставьте значения по умолчанию для других параметров связи и нажмите кнопку ОК.Accept the defaults for the relationship options, and then select OK.

    Диалоговое окно "Создание связи"

  6. В диалоговом окне Управление связями нажмите кнопку Закрыть.In the Manage relationships dialog box, select Close.

В целях обучения мы создали связь трудным способом.In the interest of full disclosure, you just created this relationship the hard way. Мы могли просто нажать Автообнаружение в диалоговом окне Управление связями.You could have just selected Autodetect in the Manage relationships dialog box. То есть автообнаружение автоматически создало бы связи при загрузке данных, если бы у обоих столбцов было одно и то же имя.In fact, autodetect would have automatically created the relationship for you when you loaded the data if both columns had the same name. Но это же слишком просто, не так ли?But, what’s the challenge in that?

Теперь снова рассмотрим таблицу на холсте отчета.Now, let’s look at the table in our report canvas again.

Созданная связь со столбцами Priority и Hours

Теперь все выглядит гораздо лучше, правда?That looks a whole lot better, doesn’t it?

Когда мы суммируем часы по столбцу Prioroty, Power BI Desktop найдет каждый экземпляр уникального значения цвета в таблице подстановки CompanyProject, затем найдет каждый экземпляр этих значений в таблице ProjectHours и вычислит сумму для каждого уникального значения.When we sum up hours by Priority, Power BI Desktop looks for every instance of the unique color values in the CompanyProject lookup table, looks for every instance of each of those values in the ProjectHours table, and then calculates a sum total for each unique value.

Это достаточно просто.That was easy. А с автообнаружением вам пришлось бы делать еще меньше.In fact, with autodetect, you might not even have to do that much.

Общие сведения о дополнительных параметрахUnderstanding additional options

При создании связи, будь то с помощью автообнаружения или вручную, Power BI Desktop автоматически настраивает дополнительные параметры на основе данных в таблицах.When a relationship is created, either with autodetect or one you create manually, Power BI Desktop automatically configures additional options based on the data in your tables. Вы можете настроить эти дополнительные параметры связи в нижней части диалоговых окон Создание связи и Изменение связи.These additional relationship options are located in the lower portion of the Create relationship and Edit relationship dialog boxes.

Параметры связи

Power BI обычно задает эти параметры автоматически, и вам не нужно их изменять. Но в некоторых ситуациях может потребоваться настроить дополнительные параметры самостоятельно.Power BI typically sets these options automatically and you won’t need to adjust them; however, there are several situations where you might want to configure these options yourself.

Автоматическое обновление связейAutomatic relationship updates

Вы можете управлять тем, как Power BI обрабатывает и автоматически корректирует связи в отчетах и моделях.You can manage how Power BI treats and automatically adjusts relationships in your reports and models. Чтобы указать, как Power BI следует обрабатывать параметры связи, выберите Файл > Параметры и настройки > Параметры в Power BI Desktop, а затем щелкните Загрузка данных в области слева.To specify how Power BI handles relationships options, select File > Options and settings > Options from Power BI Desktop, and then select Data Load in the left pane. Появятся параметры для связей.The options for Relationships appear.

Параметры связей

Есть три параметра, которые можно выбрать и включить.There are three options that can be selected and enabled:

  • Импорт связей из источников данных при первой загрузке. Этот параметр выбран по умолчанию.Import relationships from data sources on first load: This option is selected by default. Если этот флажок установлен, Power BI проверяет связи, определенные в источнике данных, такие как связи внешнего и первичного ключей в хранилище данных.When it's selected, Power BI checks for relationships defined in your data source, such as foreign key/primary key relationships in your data warehouse. Если такие связи существуют, они отражаются в модели данных Power BI при начальной загрузке данных.If such relationships exist, they're mirrored into the Power BI data model when you initially load data. Этот параметр позволяет быстро начать работу с моделью, не требуя поиска или определения этих связей самостоятельно.This option enables you to quickly begin working with your model, rather than requiring you find or define those relationships yourself.

  • Обновление или удаление связей при обновлении данных. Этот параметр не выбран по умолчанию.Update or delete relationships when refreshing data: This option is unselected by default. Если установить этот флажок, Power BI проверяет наличие изменений в связях источника данных при обновлении набора данных.If you select it, Power BI checks for changes in data source relationships when your dataset is refreshed. Если эти связи изменены или удалены, Power BI отражает эти изменения в собственной модели данных, обновляя или удаляя их соответственно.If those relationships changed or are removed, Power BI mirrors those changes in its own data model, updating or deleting them to match.

    Предупреждение

    Если используется безопасность на уровне строк, основанная на определенных связях, мы не рекомендуем выбирать этот параметр.If you're using row-level security that relies on the defined relationships, we don't recommend selecting this option. Если удалить связь, от которой зависят параметры RLS, модель может стать менее безопасной.If you remove a relationship that your RLS settings rely on, your model might become less secure.

  • Автоматически искать новые связи после загрузки данных. Этот параметр описан в разделе Автообнаружение при загрузке.Autodetect new relationships after data is loaded: This option is described in Autodetect during load.

Последующие обновления данных требуют другой кратностиFuture updates to the data require a different cardinality

Обычно Power BI Desktop может автоматически определить лучшую кратность для связи.Normally, Power BI Desktop can automatically determine the best cardinality for the relationship. Если вам необходимо переопределить автоматические настройки, поскольку вам известно, что данные будут изменяться в будущем, можно выбрать нужное значение в элементе управления Кратность.If you do need to override the automatic setting, because you know the data will change in the future, you can change it with the Cardinality control. Рассмотрим пример, где нам необходимо выбрать другую кратность.Let’s look at an example where we need to select a different cardinality.

Таблица CompanyProjectPriority — это список всех проектов компании и их приоритетов.The CompanyProjectPriority table is a list of all company projects and their priority. Таблица ProjectBudget — это набор проектов, для которых был утвержден бюджет.The ProjectBudget table is the set of projects for which a budget has been approved.

CompanyProjectPriorityCompanyProjectPriority

ProjNameProjName PriorityPriority
СинийBlue АA
КрасныйRed BB
ЗеленыйGreen CC
ЖелтыйYellow CC
СиреневыйPurple BB
ОранжевыйOrange CC

ProjectBudgetProjectBudget

Approved ProjectsApproved Projects BudgetAllocationBudgetAllocation AllocationDateAllocationDate
СинийBlue 40 00040,000 1.12.201212/1/2012
КрасныйRed 100 000100,000 1.12.201212/1/2012
ЗеленыйGreen 50 00050,000 1.12.201212/1/2012

Если мы создаем связь между столбцом Approved Projects в таблице ProjectBudget и столбцом ProjectName таблицы CompanyProjectPriority, Power BI автоматически устанавливает Кратность Один к одному (1:1) и Направление кросс-фильтрации — Двунаправленная.If we create a relationship between the Approved Projects column in the ProjectBudget table and the ProjectName column in the CompanyProjectPriority table, Power BI automatically sets Cardinality to One to one (1:1) and Cross filter direction to Both.

Создание связи между столбцами таблиц

Power BI устанавливает эти параметры, потому что для Power BI Desktop лучшей комбинацией двух таблиц является следующая.The reason Power BI makes these settings is because, to Power BI Desktop, the best combination of the two tables is as follows:

ProjNameProjName PriorityPriority BudgetAllocationBudgetAllocation AllocationDateAllocationDate
СинийBlue АA 40 00040,000 1.12.201212/1/2012
КрасныйRed BB 100 000100,000 1.12.201212/1/2012
ЗеленыйGreen CC 50 00050,000 1.12.201212/1/2012
ЖелтыйYellow CC

СиреневыйPurple BB

ОранжевыйOrange CC

Между двумя таблицами существует связь "один к одному", поскольку в объединенном столбце ProjName таблицы отсутствуют повторяющиеся значения.There's a one-to-one relationship between our two tables because there are no repeating values in the combined table’s ProjName column. Столбец ProjName уникальный, так как каждое значение проявляется только один раз, поэтому строки из двух таблиц можно объединить напрямую без дублирования.The ProjName column is unique, because each value occurs only once; therefore, the rows from the two tables can be combined directly without any duplication.

Однако предположим, что вы знаете, что данные изменятся при следующем обновлении.But, let’s say you know the data will change the next time you refresh it. Обновленная версия таблицы ProjectBudget теперь содержит дополнительные строки для синего и красного цвета.A refreshed version of the ProjectBudget table now has additional rows for the Blue and Red projects:

ProjectBudgetProjectBudget

Approved ProjectsApproved Projects BudgetAllocationBudgetAllocation AllocationDateAllocationDate
СинийBlue 40 00040,000 1.12.201212/1/2012
КрасныйRed 100 000100,000 1.12.201212/1/2012
ЗеленыйGreen 50 00050,000 1.12.201212/1/2012
СинийBlue 80 00080,000 1.06.20136/1/2013
КрасныйRed 90 00090,000 1.06.20136/1/2013

Эти дополнительные строки означают, что наилучшее сочетание двух таблиц теперь выглядит следующим образом.These additional rows mean the best combination of the two tables now looks like this:

ProjNameProjName PriorityPriority BudgetAllocationBudgetAllocation AllocationDateAllocationDate
СинийBlue АA 40 00040,000 1.12.201212/1/2012
КрасныйRed BB 100 000100,000 1.12.201212/1/2012
ЗеленыйGreen CC 50 00050,000 1.12.201212/1/2012
ЖелтыйYellow CC

СиреневыйPurple BB

ОранжевыйOrange CC

СинийBlue АA 80 00080000 1.06.20136/1/2013
КрасныйRed BB 90 00090000 1.06.20136/1/2013

В этой новой объединенной таблице столбец ProjName содержит повторяющиеся значения.In this new combined table, the ProjName column has repeating values. У двух исходных таблиц не будет связи "один к одному" после обновления таблицы.The two original tables won’t have a one-to-one relationship once the table is refreshed. Так как мы знаем, что будущие изменения приведут к появлению повторяющихся значений в столбце ProjName, нам нужно выбрать Кратность Многие к одному (*:1) . При этом сторона многие — это ProjectBudget, а сторона одинCompanyProjectPriority.In this case, because we know those future updates will cause the ProjName column to have duplicates, we want to set the Cardinality to be Many to one (*:1), with the many side on ProjectBudget and the one side on CompanyProjectPriority.

Настройка направления кросс-фильтрации для сложного набора таблиц и связейAdjusting Cross filter direction for a complex set of tables and relationships

Для большинства связей направление кросс-фильтрации имеет значение Двунаправленная.For most relationships, the cross filter direction is set to Both. Однако в некоторых редких обстоятельствах вам могут потребоваться значения, отличные от настроек по умолчанию, например при импорте модели из более старой версии Power Pivot, где каждая связь однонаправленная.There are, however, some more uncommon circumstances where you might need to set this option differently from the default, like if you’re importing a model from an older version of Power Pivot, where every relationship is set to a single direction.

Параметр Двунаправленная позволяет Power BI Desktop обрабатывать все аспекты связанных таблиц так, будто они представляют одну таблицу.The Both setting enables Power BI Desktop to treat all aspects of connected tables as if they're a single table. Тем не менее в некоторых ситуациях Power BI Desktop не может задать направление Двунаправленная и одновременно сохранить однозначный набор значений по умолчанию для отчетов.There are some situations, however, where Power BI Desktop can't set a relationship’s cross filter direction to Both and also keep an unambiguous set of defaults available for reporting purposes. Если двунаправленное направление кросс-фильтрации не задано, обычно это объясняется тем, что иначе возникла бы неоднозначность.If a relationship cross filter direction isn't set to Both, then it’s usually because it would create ambiguity. Если настройка по умолчанию для параметра кросс-фильтрации не работает в вашей ситуации, попробуйте установить его на определенную таблицу или выбрать значение Двунаправленная.If the default cross filter setting isn’t working for you, try setting it to a particular table or to Both.

Однонаправленная кроссфильтрация подходит для многих ситуаций.Single direction cross filtering works for many situations. Фактически, если вы импортировали модель из Power Pivot в Excel 2013 или более ранней версии, все связи будут однонаправленными.In fact, if you’ve imported a model from Power Pivot in Excel 2013 or earlier, all of the relationships will be set to single direction. Однонаправленная связь означает, что фильтрация вариантов в подключенных таблицах выполняется в той таблице, где данные агрегируются.Single direction means that filtering choices in connected tables work on the table where aggregation work is happening. В некоторых случаях понять кроссфильтрацию довольно сложно, так что давайте рассмотрим пример.Sometimes, understanding cross filtering can be a little difficult, so let’s look at an example.

Если вы используете однонаправленную кросс-фильтрацию и создаете отчет, суммирующий часы проекта, вы можете выбрать суммирование (или фильтрацию) по таблице CompanyProject и ее столбцу Priority или таблице CompanyEmployee и ее столбцу City.With single direction cross filtering, if you create a report that summarizes the project hours, you can then choose to summarize (or filter) by the CompanyProject table and its Priority column or the CompanyEmployee table and its City column. Если же вам нужно подсчитать число сотрудников по проектам (менее типичный вопрос), это не сработает.If however, you want to count the number of employees per projects (a less common question), it won’t work. Вы получите столбец с одинаковыми значениями.You’ll get a column of values that are all the same. В примере ниже направление кросс-фильтрации обеих связей задано как однонаправленное — к таблице ProjectHours.In the following example, both relationship's cross filtering direction is set to a single direction: towards the ProjectHours table. В значениях для поля Project установлено Количество.In the Values well, the Project field is set to Count:

Направление кросс-фильтрации

Фильтрация теперь будет направлена от CompanyProject к ProjectHours (как показано на рисунке ниже), но не будет достигать CompanyEmployee.Filter specification will flow from CompanyProject to ProjectHours (as shown in the following image), but it won’t flow up to CompanyEmployee.

Пример кросс-фильтрации

Но если выбрать двунаправленную кросс-фильтрацию, то это будет работать.However, if you set the cross filtering direction to Both, it will work. Параметр Двунаправленная позволяет спецификации фильтра подниматься до таблицы CompanyEmployee.The Both setting allows the filter specification to flow up to CompanyEmployee.

Поток спецификации фильтра

Если для кросс-фильтрации выбран параметр Двунаправленная, наш отчет будет отображаться правильно.With the cross filtering direction set to Both, our report now appears correct:

Для кросс-фильтрации задано значение "Двунаправленная"

Кросс-фильтрация в обоих направлениях хорошо работает для связей между таблицами, которые похожи на шаблон выше.Cross filtering both directions works well for a pattern of table relationships such as the pattern above. Чаще всего такую конфигурацию называют схемой "звезда".This schema is most commonly called a star schema, like this:

Кросс-фильтрация в оба направления в схеме "звезда"

Направление кроссфильтрации плохо подходит для более общего случая, который часто встречается в базах данных, как показано на этой диаграмме:Cross filtering direction does not work well with a more general pattern often found in databases, like in this diagram:

Кросс-фильтрация в оба направления в шаблоне базы данных

При наличии подобного шаблона с циклами кроссфильтрация может создать неоднозначный набор связей.If you have a table pattern like this, with loops, then cross filtering can create an ambiguous set of relationships. Например, если просуммировать поле из таблицы X и затем выбрать фильтрацию по какому-либо полю в таблице Y, будет неясно, как фильтр должен перемещаться: по верхней таблице или по нижней.For instance, if you sum up a field from TableX and then choose to filter by a field on TableY, then it’s not clear how the filter should travel, through the top table or the bottom table. Типичный пример шаблона этого типа: таблица X — таблица продаж с фактическими данными, а таблица Y — с данными бюджета.A common example of this kind of pattern is with TableX as a sales table with actuals data and for TableY to be budget data. Еще пример: таблицы в середине являются таблицами подстановки, которыми пользуются две таблицы, например таблица подразделений и таблица регионов.Then, the tables in the middle are lookup tables that both tables use, such as division or region.

Как и для активных и неактивных связей, Power BI Desktop не позволит установить двунаправленную связь, если она вызовет неоднозначность в отчетах.As with active/inactive relationships, Power BI Desktop won’t allow a relationship to be set to Both if it will create ambiguity in reports. В этой ситуации существует несколько решений.There are several different ways you can handle this situation. Два наиболее распространенныхHere are the two most common:

  • Удалите или отметьте связи как неактивные, чтобы избежать неоднозначности.Delete or mark relationships as inactive to reduce ambiguity. Затем вы сможете установить для связи двунаправленную кросс-фильтрацию.Then, you might be able to set a relationship cross filtering as Both.
  • Внесите таблицу дважды (с другим именем во второй раз), чтобы исключить циклы.Bring in a table twice (with a different name the second time) to eliminate loops. Тогда шаблон связей будет похож на схему "звезда".Doing so makes the pattern of relationships like a star schema. В этой схеме для всех связей можно выбрать параметр Двунаправленная.With a star schema, all of the relationships can be set to Both.

Неверная активная связьWrong active relationship

Когда Power BI Desktop автоматически создает связи, иногда между двумя таблицами встречается несколько связей.When Power BI Desktop automatically creates relationships, it sometimes encounters more than one relationship between two tables. В этом случае только одна из них должна быть активной.When this situation happens, only one of the relationships is set to be active. Активная связь служит связью по умолчанию, чтобы при выборе полей из двух различных таблиц Power BI Desktop мог автоматически создать визуализацию.The active relationship serves as the default relationship, so that when you choose fields from two different tables, Power BI Desktop can automatically create a visualization for you. Однако в некоторых случаях автоматически может быть выбрана неверная связь.However, in some cases the automatically selected relationship can be wrong. В диалоговом окне Управление связями можно сделать связь активной или неактивной. Кроме того, сделать связь активной можно в диалоговом окне Изменение связи.Use the Manage relationships dialog box to set a relationship as active or inactive, or set the active relationship in the Edit relationship dialog box.

Чтобы гарантировать, что существует связь по умолчанию, Power BI Desktop допускает только одну активную связь между двумя таблицами в определенный момент времени.To ensure there’s a default relationship, Power BI Desktop allows only a single active relationship between two tables at a given time. Поэтому сначала необходимо установить текущую связь как неактивную, а затем задать связь, которая будет активной.Therefore, you must first set the current relationship as inactive and then set the relationship you want to be active.

Рассмотрим следующий пример.Let’s look at an example. Первая таблица — ProjectTickets, а вторая таблица — EmployeeRole.The first table is ProjectTickets, and the second table is EmployeeRole.

ProjectTicketsProjectTickets

TicketTicket OpenedByOpenedBy SubmittedBySubmittedBy HoursHours ProjectProject DateSubmitDateSubmit
10011001 Perham, TomPerham, Tom Brewer, AlanBrewer, Alan 2222 СинийBlue 1.01.20131/1/2013
10021002 Roman, DanielRoman, Daniel Brewer, AlanBrewer, Alan 2626 КрасныйRed 1.02.20132/1/2013
10031003 Roth, DanielRoth, Daniel Ito, ShuIto, Shu 3434 ЖелтыйYellow 4.12.201212/4/2012
10041004 Perham, TomPerham, Tom Brewer, AlanBrewer, Alan 1313 ОранжевыйOrange 1.2.20121/2/2012
10051005 Roman, DanielRoman, Daniel Bowen, EliBowen, Eli 2929 ФиолетовыйPurple 01.10.201310/1/2013
10061006 Roth, DanielRoth, Daniel Bento, NunoBento, Nuno 3535 ЗеленыйGreen 1.02.20132/1/2013
10071007 Roth, DanielRoth, Daniel Hamilton, DavidHamilton, David 1010 ЖелтыйYellow 01.10.201310/1/2013
10081008 Perham, TomPerham, Tom Han, MuHan, Mu 2828 ОранжевыйOrange 2.01.20121/2/2012
10091009 Roman, DanielRoman, Daniel Ito, ShuIto, Shu 2222 СиреневыйPurple 1.02.20132/1/2013
10101010 Roth, DanielRoth, Daniel Bowen, EliBowen, Eli 2828 ЗеленыйGreen 1.10.201310/1/2013
10111011 Perham, TomPerham, Tom Bowen, EliBowen, Eli 99 СинийBlue 15.10.201310/15/2013

EmployeeRoleEmployeeRole

EmployeeEmployee RoleRole
Bento, NunoBento, Nuno Project ManagerProject Manager
Bowen, EliBowen, Eli Project LeadProject Lead
Brewer, AlanBrewer, Alan Project ManagerProject Manager
Hamilton, DavidHamilton, David Project LeadProject Lead
Han, MuHan, Mu Project LeadProject Lead
Ito, ShuIto, Shu Project LeadProject Lead
Perham, TomPerham, Tom Project SponsorProject Sponsor
Roman, DanielRoman, Daniel Project SponsorProject Sponsor
Roth, DanielRoth, Daniel Project SponsorProject Sponsor

Фактически здесь две связи.There are actually two relationships here:

  • Между Employee в таблице EmployeeRole и SubmittedBy в таблице ProjectTickets.Between Employee in the EmployeeRole table and SubmittedBy in the ProjectTickets table.
  • Между OpenedBy в таблице ProjectTickets и Employee в таблице EmployeeRole.Between OpenedBy in the ProjectTickets table and Employee in the EmployeeRole table.

Пример с двумя связями

Если мы добавим обе связи в модель (сначала OpenedBy), в диалоговом окне Управление связями будет показано, что связь OpenedBy активна.If we add both relationships to the model (OpenedBy first), then the Manage relationships dialog box shows that OpenedBy is active:

Активная связь OpenedBy в диалоговом окне "Управление связями"

Если мы создадим отчет, использующий поля Role и Employee из таблицы EmployeeRole и поле Hours из ProjectTickets в визуализации таблицы на холсте отчета, мы увидим только спонсоров проекта, так как только они открывали билет проекта.Now, if we create a report that uses Role and Employee fields from EmployeeRole, and the Hours field from ProjectTickets in a table visualization in the report canvas, we see only project sponsors because they’re the only ones that opened a project ticket.

Выбранные поля Employee, Role и Hours

Мы можем изменить активную связь и получить SubmittedBy вместо OpenedBy.We can change the active relationship and get SubmittedBy instead of OpenedBy. В окне Управление связями отмените выбор связи ProjectTickets(OpenedBy) с EmployeeRole(Employee) , а затем выберите связь EmployeeRole(Employee) с Project Tickets(SubmittedBy) .In Manage relationships, uncheck the ProjectTickets(OpenedBy) to EmployeeRole(Employee) relationship, and then check the EmployeeRole(Employee) to Project Tickets(SubmittedBy) relationship.

Изменение активной связи в диалоговом окне "Управление связями"

Просмотр всех связей в представлении связейSee all of your relationships in Relationship view

Иногда модель содержит несколько таблиц и сложные связи между ними.Sometimes your model has multiple tables and complex relationships between them. Представление Связи в Power BI Desktop показывает все связи в модели, их направление и кратность, используя легкие для понимания, настраиваемые диаграммы.Relationship view in Power BI Desktop shows all of the relationships in your model, their direction, and cardinality in an easy to understand and customizable diagram.

Дополнительные сведения см. в разделе Работа с представлением связей в Power BI Desktop.To learn more, see Work with Relationship view in Power BI Desktop.