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

При импорте нескольких таблиц вам, скорее всего, потребуется провести анализ данных из них всех.When you import multiple tables, chances are you’re going to do some analysis using data from all those tables. Связи между этими таблицами необходимы, чтобы точно вычислить результаты и отобразить правильные сведения в отчетах.Relationships between those tables are necessary in order 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 can do it for you. Однако в некоторых случаях может потребоваться создать связи вручную или внести некоторые изменения в полученные связи.However, in some cases you might have to create relationships yourself, or you might need to make some 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 will attempt to find and create relationships for you. Свойства "Кратность", "Направление кроссфильтрации" и "Активная" задаются автоматически.Cardinality, Cross filter direction, and Active properties are automatically set. Power BI Desktop анализирует имена столбцов в запрашиваемых таблицах, чтобы определить, существуют ли потенциальные связи.Power BI Desktop looks at column names in the tables you are querying to determine if there are any potential relationships. Если это так, эти связи создаются автоматически.If there are, those relationships are created automatically. Если Power BI Desktop не может определить соответствие с высоким уровнем достоверности, он не создаст связи автоматически.If Power BI Desktop cannot determine with a high-level of confidence there is a match, it will not automatically create the relationship. Вы по-прежнему можете использовать диалоговое окно "Управление связями" для создания и изменения связей.You can still use the Manage Relationships dialog to create or edit relationships.

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

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

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

  1. На вкладке Главная щелкните Управление связями > Создать.On the Home tab, click Manage Relationships > New.
  2. В диалоговом окне Создание связи в раскрывающемся списке первой таблицы выберите таблицу, а затем выберите столбец, который требуется использовать в связи.In the Create Relationship dialog, in the first table drop-down list, select a table, and then select the column you want to use in the relationship.
  3. В раскрывающемся списке второй таблицы сначала выберите другую таблицу для связи, а затем выберите нужный столбец и нажмите кнопку ОК.In the to second table drop-down list, select the other table you want in the relationship, then select the other column you want to use, and then click OK.

По умолчанию Power BI Desktop автоматически настраивает свойства "Кратность" (направление), "Направление кроссфильтрации" и активность для новой связи, но при необходимости вы можете их изменить.By default, Power BI Desktop will automatically configure the Cardinality (direction), Cross filter direction, and Active properties for your new relationship; however, you can change these if necessary. Дополнительные сведения см. в разделе "Основные сведения о дополнительных параметрах" далее в этой статье.To learn more, see the Understanding additional options section later in this article.

Если ни в одной из таблиц, выбранных для связи, нет уникальных значений, появится сообщение об ошибке Один из столбцов должен содержать уникальные значения.Note that you'll see an error that states One of the columns must have unique values if none of the tables selected for the relationship has 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 Duplicate Rows" to create a column with unique values. Недостаток такого подхода в том, что при удалении повторяющихся строк часть данных теряется, хотя часто на дублирование ключей (строк) есть причины.The drawback to this approach is that you will lose information when duplicate rows are removed, and 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 detailed information, see the blog post that discusses this in detail.

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

  1. На вкладке Главная щелкните Управление связями.On the Home tab, click Manage Relationships.
  2. В диалоговом окне Управление связями выберите связь, а затем нажмите кнопку Изменить.In the Manage Relationships dialog, select the relationship, then click Edit.

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

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

КратностьCardinality

Многие к одному (*:1)  — это наиболее распространенный тип, используемый по умолчанию.Many to One (*:1) - This is the most common, default type. Это означает, что у столбца в одной таблице может быть несколько экземпляров значения, а у другой связанной таблицы, которую часто называют таблицей подстановки, есть только один экземпляр значения.This means the column in one 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) - This means 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.

Дополнительные сведения об изменении кратности см. в разделе "Общие сведения о дополнительных параметрах" далее в этой статье.See the Understanding additional options section later in this article for more details about when to change cardinality.

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

Двунаправленная — это наиболее распространенное направление, используемое по умолчанию.Both - This is the most common, default direction. Это означает, что при фильтрации обе таблицы обрабатываются так, будто они представляют одну таблицу.This means for filtering purposes, both tables are treated as if they're a single table. Это хорошо работает с одной таблицей, которую окружает несколько таблиц подстановки.This 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 department. Такая конфигурация часто называется схемой типа "звезда" (центральная таблица с несколькими таблицами подстановки). При наличии нескольких таблиц, у которых также есть таблицы подстановки (некоторые из которых являются общими), не следует использовать параметр "Двунаправленная".This 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 - This means that 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.

Дополнительные сведения об изменении направления кроссфильтрации см. в разделе "Общие сведения о дополнительных параметрах" далее в этой статье.See the Understanding additional options section later in this article for more details about when to change cross filter direction.

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

Если этот флажок установлен, связь служит в качестве активной связи по умолчанию.When checked, this means 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.

Дополнительные сведения о том, когда нужно сделать определенную связь активной, см. в разделе "Общие сведения о дополнительных параметрах" далее в этой статье.See the Understanding additional options section later in this article for more details about when to make a particular relationship active.

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

После соединения двух таблиц с помощью связи вы можете работать с данными в обеих таблицах так, будто они находятся в одной таблице, что позволяет не беспокоиться о связях или преобразовании таблиц в плоскую структуру перед их импортом.Once you have 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, so creating those relationships yourself might not even be needed. Но если 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 will not automatically create the relationship. В этом случае связь необходимо создать вам.In that case, you will need to create the relationship.

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

Совет

Этот урок можно пройти самостоятельно.You can complete this lesson yourself. Скопируйте таблицу ProjectHours ниже на лист Excel, выберите все ячейки и щелкните Вставка > Таблица.Copy the ProjectHours table below into an Excel worksheet, select all of the cells, click INSERT > Table. В диалоговом окне Создание таблицы просто нажмите кнопку ОК.In the Create Table dialog, just click OK. Затем в поле Имя таблицывведите ProjectHours.Then in Table Name, type ProjectHours. То же сделайте для таблицы CompanyProject.Do the same for the CompanyProject table. Затем вы можете импортировать данные, нажав кнопку Получить данные в Power BI Desktop.You can then import the data by using Get Data in Power BI Desktop. Выберите книгу и таблицы в качестве источника данных.Select your workbook and tables as a data source.

Первая таблица, ProjectHours, представляет собой карточки учета рабочего времени, в которых зафиксировано время работы пользователя над определенным проектом.This 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 1.10.201310/1/2013
10061006 Bento, NunoBento, Nuno 3535 ЗеленыйGreen 1.02.20132/1/2013
10071007 Hamilton, DavidHamilton, David 1010 ЖелтыйYellow 1.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 AA
Красный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 a little bit.

После импорта двух таблиц в модель создадим отчет.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 Fields.

Если взглянуть на нашу таблицу на холсте отчета, можно увидеть количество часов 256,00 для каждого проекта, а также итоговое значение.If we look at our table in the Report canvas, you’ll see the number of hours is 256.00 for each project, and it’s also the total. Очевидно, что это неверно.Clearly this 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’re going to 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 project. На самом деле каждое значение цвета в этой таблице уникально, и это важно, поскольку мы можем создать связь между этими двумя таблицами.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. Для некоторых связей существуют дополнительные параметры, и мы рассмотрим их позже. Сейчас мы попробуем создать связь между столбцами Project в каждой из двух таблиц.There are some additional options for some relationships, and we’ll look at those later, but for now, let’s create a relationship between the Project columns in each of our two tables.

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

  1. Щелкните Управление связями.Click Manage Relationships.
  2. В окне Управление связяминажмите кнопку Создать.In Manage Relationships, click New. Откроется диалоговое окно Создание связи, в котором можно выбрать таблицы, столбцы и дополнительные параметры для нашей связи.This opens the Create Relationship dialog, where we can select the tables, columns, and any additional settings we want for our relationship.
  3. В первой таблице выберите ProjectHours, а затем выберите столбец Project .In the first table, select ProjectHours, then select the Project column. Это сторона связи "многие".This is the many side of our relationship.
  4. Во второй таблице выберите CompanyProject, а затем выберите столбец ProjName .In the second table, select CompanyProject, then select the ProjName column. Это сторона связи "один".This is the one side of our relationship.
  5. Нажмите кнопку ОК в диалоговых окнах Создание связи и Управление связями .Go ahead and click OK in both the Create Relationship dialog and the Manage Relationships dialog.

В целях обучения мы создали связь трудным способом.In the interest of full disclosure, you really just created this relationship the hard way. Мы могли просто нажать кнопку "Автообнаружение" в диалоговом окне "Управление связями".You could've just clicked on the Autodetect button in the Manage Relationships dialog. То есть, автообнаружение уже сделало бы все автоматически при загрузке данных, если бы у обоих столбцов было одно и то же имя.In fact, Autodetect would have already done it 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.

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

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

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

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

При создании связи, будь то с помощью автообнаружения или вручную, Power BI Desktop автоматически настраивает дополнительные параметры на основе данных в таблицах.When a relationship is created, either with Autodetect or one you create manually, Power BI Desktop will automatically configure additional options based on the data in your tables. Вы можете настроить эти дополнительные параметры связи в нижней части диалогового окна "Создание и изменение связи".You can configure these additional relationship properties located in the lowest portion of the Create/Edit relationship dialog.

Как мы уже говорили, обычно они задаются автоматически, и вам не нужно их изменять. Но в некоторых ситуациях может потребоваться настроить дополнительные параметры самостоятельно.As we said, these are usually set automatically and you won’t need to mess with them; however, there are several situations where you might want to configure these options yourself.

Последующие обновления данных требуют другой кратности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 select it in the Cardinality control. Рассмотрим пример, где нам необходимо выбрать другую кратность.Let’s look at an example where we need to select a different cardinality.

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

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

CompanyProjectPriorityCompanyProjectPriority

ProjectProject PriorityPriority
СинийBlue AA
КрасныйRed BB
ЗеленыйGreen CC
ЖелтыйYellow CC
ФиолетовыйPurple BB
ОранжевыйOrange CC

Мы создадим связь между столбцом Project в таблице CompanyProjectPriority и столбцом ApprovedProjects в таблице ProjectBudget следующим образом:If we create a relationship between the Project column in the CompanyProjectPriority table and ApprovedProjects column in the ProjectBudget table, like this:

Кратность автоматически будет установлена как "один к одному" (1:1), а направление кроссфильтрации — "двунаправленное" (как и показано).Cardinality is automatically set to One-to-One (1:1), and cross filtering to be Both (as shown). Это происходит, потому что для Power BI Desktop наилучшее сочетание двух таблиц выглядит следующим образом:This is because to Power BI Desktop, the best combination of the two tables really looks like this:

ProjectProject PriorityPriority BudgetAllocationBudgetAllocation AllocationDateAllocationDate
СинийBlue AA 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

Между двумя таблицами существует связь "один к одному", поскольку в столбце Project объединенной таблицы отсутствуют повторяющиеся значения.There is a one-to-one relationship between our two tables because there are no repeating values in the combined table’s Project column. Столбец Project является однозначным, так как каждое значение встречается только один раз, поэтому строки из двух таблиц можно объединить напрямую без дублирования.The Project column is unique, because each value occurs only once, so, 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 Blue and Red:

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

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

ProjectProject PriorityPriority BudgetAllocationBudgetAllocation AllocationDateAllocationDate
СинийBlue AA 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 AA 80 00080000 6.1.20136/1/2013
КрасныйRed BB 90 00090000 6.1.20136/1/2013

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

Настройка направления кроссфильтрации для сложного набора таблиц и связей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 different 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 are a single table. Тем не менее в некоторых ситуациях Power BI Desktop не может задать направление "Двунаправленная" и одновременно сохранить однозначный набор значений по умолчанию для отчетов.There are some situations, however, where Power BI Desktop cannot 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 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 CompanyProject, Priority or CompanyEmployee, City. Если же вам нужно подсчитать число сотрудников по проектам (менее типичный вопрос), это не сработает.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 example below, both relationships cross filtering direction is set to a single direction – towards the ProjectHours table:

Фильтрация теперь будет направлена от CompanyProject к CompanyEmployee (как показано на рисунке ниже), но не будет достигать CompanyEmployee.Filter specification will flow from CompanyProject to CompanyEmployee (as shown in the image below) but, it won’t flow up to CompanyEmployee. Но если выбрать двунаправленную кроссфильтрацию, это будет работать.However, if you set the cross filtering direction to Both it will work. Параметр "Двунаправленная" направляет фильтрацию к Employee.The Both setting allows the filter specification to flow up to Employee.

Если для кроссфильтрации выбран параметр "Двунаправленная", наш отчет будет отображаться правильно: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 that look like the pattern above. Чаще всего такую конфигурацию называют схемой "звезда":This 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 не позволит установить двунаправленную связь, если она вызовет неоднозначность в отчетах.Just like with active/inactive relationships, Power BI Desktop won’t allow a relationship to be set as Both if it will create ambiguity in reports. С этим можно справиться несколькими способами. Вот два самых типичных.There are several different ways you can deal with this and 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. Тогда шаблон связей будет похож на схему "звезда".This 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 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. В диалоговом окне "Управление связями" можно сделать связь активной или неактивной. Кроме того, сделать связь активной можно в диалоговом окне "Изменение связи".You can use the Manage Relationships dialog to set a relationship as active or inactive, or you can set the active relationship in the Edit relationship dialog.

Чтобы гарантировать, что существует связь по умолчанию, Power BI Desktop допускает только одну активную связь между двумя таблицами в определенный момент времени.To ensure there’s a default relationship, Power BI Desktop only allows a single active relationship between two tables at a given time. Поэтому сначала необходимо установить текущую связь как неактивную, а затем задать связь, которая будет активной.So, 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.This first table is ProjectTickets, and the next 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 1.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 1.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. Одна — между SubmittedBy в таблице ProjectTickets и Employee в таблице EmployeeRole, а другая — между OpenedBy в таблице ProjectTickets и Employee в таблице EmployeeRole.One is between SubmittedBy in the ProjectTickets table and Employee in the EmployeeRole table, and the other is 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 will show that OpenedBy is active:

Если мы создадим отчет, использующий поля 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’ll see only project sponsors because they’re the only ones that opened a project ticket.

Мы можем изменить активную связь и получить SubmittedBy вместо OpenedBy.We can change the active relationship and get SubmittedBy instead of OpenedBy. В окне "Управление связями" отмените выбор связи ProjectTickets(OpenedBy) с EmployeeRole(Employee), а затем выберите связь Project Tickets(SubmittedBy) с EmployeeRole(Employee).In Manage Relationships, we uncheck the ProjectTickets(OpenedBy) to EmployeeRole(Employee) relationship, and then we check the Project Tickets(SubmittedBy) to EmployeeRole(Employee) 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 Relationship View in Power BI Desktop.