Tworzenie relacji i zarządzanie nimi w programie Power BI DesktopCreate and manage relationships in Power BI Desktop

Gdy importujesz wiele tabel, istnieje prawdopodobieństwo, że wykonasz jakieś analizy z użyciem danych ze wszystkich tych tabel.When you import multiple tables, chances are you'll do some analysis using data from all those tables. Relacje między tymi tabelami są konieczne w celu dokładnego obliczenia wyników i wyświetlenia poprawnych informacji w raportach.Relationships between those tables are necessary to accurately calculate results and display the correct information in your reports. Dzięki programowi Power BI Desktop tworzenie relacji jest łatwe.Power BI Desktop makes creating those relationships easy. W większości przypadków nie musisz nawet nic robić, ponieważ wyręczy Cię funkcja autowykrywania.In fact, in most cases you won’t have to do anything, the autodetect feature does it for you. Jednak w niektórych przypadkach może być konieczne samodzielne utworzenie relacji lub wprowadzenie w niej pewnych zmian.However, sometimes you might have to create relationships yourself, or need to make changes to a relationship. W każdym razie ważne jest zrozumienie relacji w programie Power BI Desktop, a także poznanie sposobów ich tworzenia i edycji.Either way, it’s important to understand relationships in Power BI Desktop and how to create and edit them.

Autowykrywanie podczas ładowaniaAutodetect during load

Jeśli utworzysz zapytanie dotyczące co najmniej dwóch tabel jednocześnie, podczas ładowania danych program Power BI Desktop podejmie próbę znalezienia i utworzenia relacji.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. Opcje relacji Kardynalność, Kierunek filtrowania krzyżowego i Aktywuj tę relację są ustawiane automatycznie.The relationship options Cardinality, Cross filter direction, and Make this relationship active are automatically set. Program Power BI Desktop sprawdza nazwy kolumn w tabelach, których dotyczą Twoje zapytania, aby ustalić, czy istnieją jakieś potencjalne relacje.Power BI Desktop looks at column names in the tables you're querying to determine if there are any potential relationships. Jeśli tak, te relacje zostaną utworzone automatycznie.If there are, those relationships are created automatically. Jeśli program Power BI Desktop nie ustali z wysokim poziomem pewności, że istnieje dopasowanie, wówczas nie utworzy relacji.If Power BI Desktop can't determine with a high level of confidence there's a match, it doesn't create the relationship. Jednak nadal możesz użyć okna dialogowego Zarządzanie relacjami w celu ręcznego tworzenia i edytowania relacji.However, you can still use the Manage relationships dialog box to manually create or edit relationships.

Tworzenie relacji za pomocą autowykrywaniaCreate a relationship with autodetect

Na karcie Narzędzia główne wybierz pozycję Zarządzanie relacjami > Autowykrywanie.On the Home tab, select Manage Relationships > Autodetect.

Tworzenie relacji za pomocą autowykrywania

Ręczne tworzenie relacjiCreate a relationship manually

  1. Na karcie Narzędzia główne wybierz pozycję Zarządzanie relacjami > Nowa.On the Home tab, select Manage Relationships > New.

  2. W oknie dialogowym Tworzenia relacji na liście rozwijanej dla pierwszej tabeli wybierz tabelę.In the Create relationship dialog box, in the first table drop-down list, select a table. Wybierz kolumnę, której chcesz użyć w relacji.Select the column you want to use in the relationship.

  3. Z listy rozwijanej dla drugiej tabeli wybierz inną tabelę, której chcesz użyć w relacji.In the second table drop-down list, select the other table you want in the relationship. Zaznacz drugą kolumnę, której chcesz użyć, a następnie wybierz pozycję OK.Select the other column you want to use, and then elect OK.

    Tworzenie relacji ręcznej

Domyślnie program Power BI Desktop automatycznie konfiguruje opcje Kardynalność (kierunek), Kierunek filtrowania krzyżowego i Aktywuj tę relację dla nowej relacji.By default, Power BI Desktop automatically configures the options Cardinality (direction), Cross filter direction, and Make this relationship active for your new relationship. Możesz jednak zmienić te ustawienia w razie potrzeby.However, you can change these settings if necessary. Aby uzyskać więcej informacji, zobacz Omówienie opcji dodatkowych.For more information, see Understanding additional options.

Jeśli żadna z tabel wybranych dla relacji nie ma unikatowych wartości, zostanie wyświetlony następujący błąd: Jedna z tych kolumn musi zawierać unikatowe wartości.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. Co najmniej jedna tabela w relacji musi zawierać odrębną, unikatową listę wartości klucza, co jest typowym wymogiem w przypadku wszystkich technologii relacyjnych baz danych.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.

Jeśli wystąpi ten błąd, istnieje kilka sposobów, aby rozwiązać problem:If you encounter that error, there are a couple ways to fix the issue:

  • Użyj opcji Usuń duplikaty, aby utworzyć kolumnę z unikatowymi wartościami.Use Remove Duplicates to create a column with unique values. Wadą tego podejścia jest fakt, że może to spowodować utratę informacji podczas usuwania zduplikowanych wierszy, a często klucz (wiersz) jest zduplikowany w określonym celu.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.
  • Dodaj tabelę pośrednią utworzoną z listy unikatowych wartości kluczy do modelu, który następnie zostanie połączony z obydwoma oryginalnymi kolumnami w relacji.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.

Aby uzyskać więcej informacji, zobacz ten wpis w blogu.For more information, see this blog post.

Edycja relacjiEdit a relationship

  1. Na karcie Narzędzia główne wybierz pozycję Zarządzanie relacjami.On the Home tab, select Manage Relationships.

  2. W oknie dialogowym Zarządzanie relacjami wybierz relację, a następnie wybierz pozycję Edytuj.In the Manage relationships dialog box, select the relationship, then select Edit.

Konfigurowanie opcji dodatkowychConfigure additional options

Podczas tworzenia lub edytowania relacji można skonfigurować opcje dodatkowe.When you create or edit a relationship, you can configure additional options. Domyślnie program Power BI Desktop automatycznie konfiguruje opcje dodatkowe na podstawie najbardziej prawdopodobnego wyboru, który może różnić się dla poszczególnych relacji w oparciu o dane w kolumnach.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.

KardynalnośćCardinality

Opcja Kardynalność może mieć jedno z następujących ustawień:The Cardinality option can have one of the following settings:

Wiele do jednego (*:1) : Relacja wiele-do-jednego jest najbardziej popularnym, domyślnym typem relacji.Many to one (*:1): A many-to-one relationship is the most common, default type of realtionship. Oznacza to, że kolumna w jednej tabeli może zawierać więcej niż jedno wystąpienie wartości, a druga, powiązana tabela — często nazywana tabelą odnośników — zawiera tylko jedno wystąpienie wartości.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.

Jeden do jednego (1:1) : W relacji jeden-do-jednego kolumna w jednej tabeli zawiera tylko jedno wystąpienie określonej wartości, a druga, powiązana tabela, również zawiera tylko jedno wystąpienie określonej wartości.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.

Jeden do wielu (1:*) : W relacji jeden-do-wielu kolumna w jednej tabeli zawiera tylko jedno wystąpienie określonej wartości, a druga, powiązana tabela, może zawierać więcej niż jedno wystąpienie wartości.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.

Wiele do wielu (*:*) : Modele złożone umożliwiają ustanowienie relacji wiele-do-wielu między tabelami, co eliminuje wymagania dotyczące unikatowych wartości w tabelach.Many to many (*:*): With composite models, you can establish a many-to-many relationship between tables, which removes requirements for unique values in tables. Powoduje również usunięcie poprzednich obejść, np. wprowadzania nowych tabel tylko w celu ustanowienia relacji.It also removes previous workarounds, such as introducing new tables only to establish relationships. Aby uzyskać więcej informacji, zobacz Relacje z kardynalnością wiele-do-wielu.For more information, see Relationships with a many-many cardinality.

Aby uzyskać więcej informacji o tym, kiedy zmienić kardynalność, zobacz Omówienie opcji dodatkowych.For more information about when to change cardinality, see Understanding additional options.

Kierunek filtrowania krzyżowegoCross filter direction

Opcja Kierunek filtrowania krzyżowego może mieć jedno z następujących ustawień:The Cross filter direction option can have one the following settings:

Oba: Na potrzeby filtrowania obie tabele są traktowane jak jedna tabela.Both: For filtering purposes, both tables are treated as if they're a single table. Ustawienie Oba dobrze się sprawdza w przypadku pojedynczej tabeli z szeregiem tabel odnośników.The Both setting works well with a single table that has a number of lookup tables that surround it. Przykładem jest tabela rzeczywistej sprzedaży z tabelą odnośników dla każdego działu.An example is a sales actuals table with a lookup table for its department. Taka konfiguracja jest często nazywana konfiguracją w schemacie gwiazdy (centralna tabela z kilkoma tabelami odnośników).This configuration is often called a star schema configuration (a central table with several lookup tables). Jeśli jednak istnieją co najmniej dwie tabele, które również mają tabele odnośników (częściowo wspólne), wówczas użycie ustawienia Oba jest niewskazane.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. W tym przypadku, kontynuując poprzedni przykład, mamy również tabelę budżetu, która zawiera rekordy budżetu docelowego dla każdego działu.To continue the previous example, in this case, you also have a budget sales table that records target budget for each department. Tabela działu jest połączona z tabelą sprzedaży oraz tabelą budżetu.And, the department table is connected to both the sales and the budget table. W przypadku konfiguracji tego rodzaju należy unikać ustawienia Oba.Avoid the Both setting for this kind of configuration.

Jeden: Ten najczęściej spotykany, domyślny kierunek oznacza, że opcje filtrowania w połączonych tabelach dotyczą tabeli, w której następuje agregacja wartości.Single: The most common, default direction, which means filtering choices in connected tables work on the table where values are being aggregated. W przypadku zaimportowania modelu danych z dodatku Power Pivot w programie Excel 2013 lub wcześniejszym wszystkie relacje będą miały jeden kierunek.If you import a Power Pivot in Excel 2013 or earlier data model, all relationships will have a single direction.

Aby uzyskać więcej informacji o tym, kiedy zmienić kierunek filtrowania krzyżowego, zobacz Omówienie opcji dodatkowych.For more information about when to change cross filter direction, see Understanding additional options.

Aktywuj tę relacjęMake this relationship active

Jeśli ta opcja jest zaznaczona, relacja pełni rolę aktywnej, domyślnej relacji.When checked, the relationship serves as the active, default relationship. Gdy między dwiema tabelami istnieje więcej niż jedna relacja, aktywna relacja umożliwia programowi Power BI Desktop automatyczne tworzenie wizualizacji, które uwzględniają obie tabele.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.

Aby uzyskać więcej informacji o tym, kiedy aktywować konkretną relację, zobacz Opis opcji dodatkowych.For more information about when to make a particular relationship active, see Understanding additional options.

Omówienie relacjiUnderstanding relationships

Po połączeniu dwóch tabel relacją można pracować z danymi w obu tabelach w taki sposób, jakby były w jednej tabeli, dzięki czemu nie trzeba zajmować się szczegółami relacji ani przekształcać tych tabel w jedną przed zaimportowaniem.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. W wielu sytuacjach program Power BI Desktop może automatycznie tworzyć relacje.In many situations, Power BI Desktop can automatically create relationships for you. Jeśli program Power BI Desktop nie może ustalić z wysokim poziomem pewności, że relacja między dwiema tabelami powinna istnieć, wówczas nie utworzy relacji automatycznie.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. W takim przypadku należy to zrobić samodzielnie.In that case, you must do so.

Wykonamy teraz zadania z krótkiego samouczka, który pozwoli Ci lepiej zrozumieć działanie relacji w programie Power BI Desktop.Let’s go through a quick tutorial, to better show you how relationships work in Power BI Desktop.

Porada

Tę lekcję możesz ukończyć samodzielnie:You can complete this lesson yourself:

  1. Skopiuj następującą tabelę ProjectHours do arkusza programu Excel (z wyłączeniem tytułu), zaznacz wszystkie komórki, a następnie wybierz pozycję Wstaw > Tabela.Copy the following ProjectHours table into an Excel worksheet (excluding the title), select all of the cells, and then select Insert > Table.
  2. W oknie dialogowym Tworzenie tabeli wybierz pozycję OK.In the Create Table dialog box, select OK.
  3. Zaznacz dowolną komórkę tabeli, wybierz pozycję Projekt tabeli > Nazwa tabeli, a następnie wprowadź nazwę ProjectHours.Select any table cell, select Table Design > Table Name, and then enter ProjectHours.
  4. Te same czynności wykonaj w odniesieniu do tabeli CompanyProject.Do the same for the CompanyProject table.
  5. Zaimportuj dane, używając polecenia Pobierz dane w programie Power BI Desktop.Import the data by using Get Data in Power BI Desktop. Wybierz te dwie tabele jako źródło danych, a następnie wybierz pozycję Załaduj.Select the two tables as a data source, and then select Load.

Pierwsza tabela, ProjectHours, stanowi ewidencję czasu pracy zawierającą liczbę godzin przepracowanych przez daną osobę w ramach konkretnego projektu.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 NiebieskiBlue 1/1/20131/1/2013
10021002 Brewer, AlanBrewer, Alan 2626 RedRed 2/1/20132/1/2013
10031003 Ito, ShuIto, Shu 3434 YellowYellow 12/4/201212/4/2012
10041004 Brewer, AlanBrewer, Alan 1313 PomarańczowyOrange 1/2/20121/2/2012
10051005 Bowen, EliBowen, Eli 2929 PurplePurple 01.10.201310/1/2013
10061006 Bento, NunoBento, Nuno 3535 ZielonyGreen 2/1/20132/1/2013
10071007 Hamilton, DavidHamilton, David 1010 YellowYellow 01.10.201310/1/2013
10081008 Han, MuHan, Mu 2828 OrangeOrange 1/2/20121/2/2012
10091009 Ito, ShuIto, Shu 2222 PurplePurple 2/1/20132/1/2013
10101010 Bowen, EliBowen, Eli 2828 GreenGreen 10/1/201310/1/2013
10111011 Bowen, EliBowen, Eli 99 NiebieskiBlue 10/15/201310/15/2013

Druga tabela, CompanyProject, jest listą projektów z przypisanymi priorytetami: A, B lub C.This second table, CompanyProject, is a list of projects with an assigned priority: A, B, or C.

CompanyProjectCompanyProject

ProjNameProjName PriorityPriority
NiebieskiBlue AA
RedRed BB
ZielonyGreen CC
YellowYellow CC
PurplePurple BB
PomarańczowyOrange CC

Zwróć uwagę na to, że każda tabela zawiera kolumnę projektu.Notice that each table has a project column. Nazwy każdej z nich różnią się nieznacznie, ale wartości prawdopodobnie są takie same.Each is named slightly different, but the values look like they’re the same. Jest to ważne i niebawem do tego wrócimy.That’s important, and we’ll get back to it in soon.

Po zaimportowaniu obu tabel do modelu możemy utworzyć raport.Now that we have our two tables imported into a model, let’s create a report. Najpierw chcemy uzyskać liczbę zgłoszonych godzin według priorytetu projektu, dlatego wybieramy pozycje Priority (Priorytet) i Hours (Godziny) w okienku Pola.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.

Wybieranie pozycji Priority i Hours w okienku Pola

W tabeli na kanwie raportu widać, że liczba godzin to 256 dla każdego projektu. Jest to też łączna liczba godzin.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. Bez wątpienia te liczby są niepoprawne.Clearly this number isn’t correct. Dlaczego?Why? Ponieważ nie możemy obliczyć sumy wartości z jednej tabeli (Hours w tabeli Project) podzielonej według wartości z innej tabeli (Priority w tabeli CompanyProject) bez relacji między tymi dwiema tabelami.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.

Zatem utwórzmy relację między tymi dwiema tabelami.So, let’s create a relationship between these two tables.

Pamiętasz te kolumny z nazwami projektów, które widzieliśmy w obu tabelach, a których wartości wyglądały podobnie?Remember those columns we saw in both tables with a project name, but with values that look alike? Użyjemy tych dwóch kolumn, aby utworzyć relację między naszymi tabelami.We'll use these two columns to create a relationship between our tables.

Dlaczego te kolumny?Why these columns? Kolumna Project w tabeli ProjectHours zawiera wartości takie jak Blue, Red, Yellow, Orange itp.Well, if we look at the Project column in the ProjectHours table, we see values like Blue, Red, Yellow, Orange, and so on. Kilka wierszy zawiera nawet tę samą wartość.In fact, we see several rows that have the same value. W efekcie mamy wiele wartości kolorów w kolumnie Project.In effect, we have many color values for Project.

W kolumnie ProjName tabeli CompanyProject widzimy, że każda wartość koloru dla nazwy projektu występuje tylko jeden raz.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. Każda wartość koloru w tej tabeli jest unikatowa i jest to ważne, ponieważ dzięki temu możemy utworzyć relację między tymi dwiema tabelami.Each color value in this table is unique, and that’s important, because we can create a relationship between these two tables. W tym przypadku będzie to relacja wiele do jednego.In this case, a many-to-one relationship. W relacji wiele do jednego co najmniej jedna kolumna w jednej z tabel musi zawierać unikatowe wartości.In a many-to-one relationship, at least one column in one of the tables must contain unique values. Dla niektórych relacji istnieją pewne dodatkowe opcje, którym przyjrzymy się później.There are some additional options for some relationships, which we'll look at later. Na razie utwórzmy relację między kolumnami projektu w każdej z naszych dwóch tabel.For now, let’s create a relationship between the project columns in each of our two tables.

Aby utworzyć nową relacjęTo create the new relationship

  1. Wybierz pozycję Zarządzanie relacjami na karcie Narzędzia główne.Select Manage Relationships from the Home tab.

  2. W obszarze Zarządzanie relacjami wybierz pozycję Nowa, aby otworzyć okno dialogowe Tworzenie relacji, w którym można wybrać tabele, kolumny i dowolne ustawienia dodatkowe dla relacji.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. Z pierwszej listy rozwijanej wybierz pozycję ProjectHours jako pierwszą tabelę, a następnie wybierz kolumnę Project.In the first drop-down list, select ProjectHours as the first table, then select the Project column. To jest strona wiele naszej relacji.This side is the many side of our relationship.

  4. Na drugiej liście rozwijanej pozycja CompanyProject jest wstępnie wybrana jako druga tabela.In the second drop-down list, CompanyProject is preselected as the second table. Wybierz kolumnę ProjName.Select the ProjName column. To jest strona jeden naszej relacji.This side is the one side of our relationship.

  5. Zaakceptuj wartości domyślne dla opcji relacji, a następnie wybierz pozycję OK.Accept the defaults for the relationship options, and then select OK.

    Okno dialogowe Tworzenie relacji

  6. W oknie dialogowym Zarządzanie relacjami wybierz pozycję Zamknij.In the Manage relationships dialog box, select Close.

Aby wszystko było jasne, musimy przyznać, że ten sposób to niepotrzebne komplikowanie tworzenia relacji.In the interest of full disclosure, you just created this relationship the hard way. Wystarczyło wybrać przycisk Autowykrywanie w oknie dialogowym Zarządzanie relacjami.You could have just selected Autodetect in the Manage relationships dialog box. Prawdę mówiąc, autowykrywanie utworzyłoby relację automatycznie podczas ładowania danych, gdyby obie kolumny miały tę samą nazwę.In fact, autodetect would have automatically created the relationship for you when you loaded the data if both columns had the same name. Ale co to za wyzwanie?But, what’s the challenge in that?

Teraz przyjrzymy się ponownie tabeli na naszej kanwie raportu.Now, let’s look at the table in our report canvas again.

Utworzona relacja z pozycjami Priority i Hours

Wygląda to o wiele lepiej, prawda?That looks a whole lot better, doesn’t it?

W przypadku sumowania godzin według priorytetu (Priority) program Power BI Desktop wyszuka każde wystąpienie unikatowej wartości koloru w tabeli odnośników CompanyProject, wyszuka każde wystąpienie tych wartości w tabeli ProjectHours, a następnie obliczy sumę dla każdej unikatowej wartości.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.

To było łatwe.That was easy. A dzięki autowykrywaniu mogłoby być jeszcze łatwiejsze.In fact, with autodetect, you might not even have to do that much.

Omówienie opcji dodatkowychUnderstanding additional options

Podczas tworzenia relacji — z użyciem autowykrywania lub ręcznie — program Power BI Desktop automatycznie konfiguruje opcje dodatkowe na podstawie danych zawartych w tabelach.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. Te dodatkowe opcje relacji znajdują się w dolnej części okien dialogowych Tworzenie relacji i Edytowanie relacji.These additional relationship options are located in the lower portion of the Create relationship and Edit relationship dialog boxes.

Opcje relacji

Usługa Power BI na ogół ustawia te opcje automatycznie i nie trzeba ich dostosowywać. Istnieje jednak kilka sytuacji, w których konieczne może być samodzielne skonfigurowanie opcji dodatkowych.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.

Automatyczne aktualizowanie relacjiAutomatic relationship updates

Możesz zarządzać sposobem, w jaki usługa Power BI traktuje i automatycznie dostosowuje relacje w raportach i modelach.You can manage how Power BI treats and automatically adjusts relationships in your reports and models. Aby określi opcje obsługi relacji w usłudze Power BI, wybierz pozycję Plik > Opcje i ustawienia > Opcje w programie Power BI Desktop, a następnie wybierz pozycję Ładowanie danych w okienku po lewej stronie.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. Zostaną wyświetlone opcje w obszarze Relacje.The options for Relationships appear.

Opcje relacji

Dostępne są trzy opcje, które można wybrać i włączyć:There are three options that can be selected and enabled:

  • Importuj relacje ze źródeł danych podczas pierwszego ładowania: Ta opcja jest domyślnie zaznaczona.Import relationships from data sources on first load: This option is selected by default. Gdy ta opcja jest zaznaczona, usługa Power BI sprawdza relacje zdefiniowane w źródle danych, takie jak relacje klucza obcego / klucza podstawowego w magazynie danych.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. Jeśli takie relacje istnieją, są one dublowane w modelu danych usługi Power BI podczas początkowego ładowania danych.If such relationships exist, they're mirrored into the Power BI data model when you initially load data. Ta opcja umożliwia szybkie rozpoczęcie pracy z modelem i nie wymaga samodzielnego znajdowania lub definiowania tych relacji.This option enables you to quickly begin working with your model, rather than requiring you find or define those relationships yourself.

  • Aktualizuj lub usuwaj relacje podczas odświeżania danych: Zaznaczenie tej opcji jest domyślnie wyczyszczone.Update or delete relationships when refreshing data: This option is unselected by default. Jeśli ta opcja zostanie wybrana, usługa Power BI sprawdza zmiany w relacjach źródła danych podczas odświeżania zestawu danych.If you select it, Power BI checks for changes in data source relationships when your dataset is refreshed. Jeśli te relacje uległy zmianie lub zostały usunięte, usługa Power BI dubluje te zmiany w swoim modelu danych, aktualizując lub usuwając je w celu dopasowania.If those relationships changed or are removed, Power BI mirrors those changes in its own data model, updating or deleting them to match.

    Ostrzeżenie

    W przypadku korzystania z zabezpieczeń na poziomie wiersza, które opierają się na zdefiniowanych relacjach, nie zalecamy wybierania tej opcji.If you're using row-level security that relies on the defined relationships, we don't recommend selecting this option. Jeśli usuniesz relację, na której oparte są ustawienia zabezpieczeń na poziomie wiersza, model może stać się mniej bezpieczny.If you remove a relationship that your RLS settings rely on, your model might become less secure.

  • Automatycznie wykrywaj nowe relacje po załadowaniu danych: Ta opcja została opisana w temacie Autowykrywanie podczas ładowania.Autodetect new relationships after data is loaded: This option is described in Autodetect during load.

Przyszłe aktualizacje danych wymagają innej kardynalnościFuture updates to the data require a different cardinality

Zwykle program Power BI Desktop automatycznie określa najlepszą kardynalność dla relacji.Normally, Power BI Desktop can automatically determine the best cardinality for the relationship. Jeśli zachodzi potrzeba zastąpienia automatycznego ustawienia, ponieważ wiadomo, że dane ulegną zmianie w przyszłości, można wybrać odpowiednie ustawienie za pomocą kontrolki Kardynalność.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. Przyjrzyjmy się jednemu przykładowi, w którym konieczne jest wybranie innej kardynalności.Let’s look at an example where we need to select a different cardinality.

Tabela CompanyProjectPriority jest listą wszystkich projektów firmowych i ich priorytetów.The CompanyProjectPriority table is a list of all company projects and their priority. Tabela ProjectBudget jest zestawem projektów, dla których został zatwierdzony budżet.The ProjectBudget table is the set of projects for which a budget has been approved.

CompanyProjectPriorityCompanyProjectPriority

ProjNameProjName PriorityPriority
NiebieskiBlue AA
RedRed BB
ZielonyGreen CC
YellowYellow CC
PurplePurple BB
PomarańczowyOrange CC

ProjectBudgetProjectBudget

Approved ProjectsApproved Projects BudgetAllocationBudgetAllocation AllocationDateAllocationDate
NiebieskiBlue 40 00040,000 12/1/201212/1/2012
RedRed 100 000100,000 12/1/201212/1/2012
ZielonyGreen 50 00050,000 12/1/201212/1/2012

Jeśli utworzymy relację między kolumną Approved Projects (Zatwierdzone projekty) w tabeli ProjectBudget (Budżet projektu) a kolumną ProjectName (Nazwa projektu) w tabeli CompanyProjectPriority (Priorytet projektu firmy), usługa Power BI automatycznie ustawi opcję Kardynalność na wartość Jeden do jednego (1:1) , a opcję Kierunek filtrowania krzyżowego na wartość Oba.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.

Tworzenie relacji między kolumnami tabeli

Usługa Power BI konfiguruje te ustawienia w taki sposób, ponieważ dla programu Power BI Desktop najlepsza kombinacja tych dwóch tabel jest następująca: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
NiebieskiBlue AA 40 00040,000 12/1/201212/1/2012
RedRed BB 100 000100,000 12/1/201212/1/2012
ZielonyGreen CC 50 00050,000 12/1/201212/1/2012
YellowYellow CC

PurplePurple BB

PomarańczowyOrange CC

Między tymi dwiema tabelami istnieje relacja jeden do jednego, ponieważ kolumna ProjName połączonej tabeli nie zawiera powtarzających się wartości.There's a one-to-one relationship between our two tables because there are no repeating values in the combined table’s ProjName column. Kolumna ProjName jest unikatowa, ponieważ każda wartość występuje w niej tylko raz, dlatego wiersze z obu tabel mogą zostać połączone bezpośrednio bez duplikowania.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.

Jednak załóżmy, że wiesz, że dane ulegną zmianie po następnym odświeżeniu.But, let’s say you know the data will change the next time you refresh it. Odświeżona wersja tabeli ProjectBudget zawiera dodatkowe wiersze dla projektów Blue i Red:A refreshed version of the ProjectBudget table now has additional rows for the Blue and Red projects:

ProjectBudgetProjectBudget

Approved ProjectsApproved Projects BudgetAllocationBudgetAllocation AllocationDateAllocationDate
NiebieskiBlue 40 00040,000 12/1/201212/1/2012
RedRed 100 000100,000 12/1/201212/1/2012
ZielonyGreen 50 00050,000 12/1/201212/1/2012
NiebieskiBlue 80 00080,000 6/1/20136/1/2013
RedRed 90 00090,000 6/1/20136/1/2013

Te dodatkowe wiersze oznaczają, że najlepsza kombinacja tych dwóch tabel teraz wygląda następująco:These additional rows mean the best combination of the two tables now looks like this:

ProjNameProjName PriorityPriority BudgetAllocationBudgetAllocation AllocationDateAllocationDate
NiebieskiBlue AA 40 00040,000 12/1/201212/1/2012
RedRed BB 100 000100,000 12/1/201212/1/2012
ZielonyGreen CC 50 00050,000 12/1/201212/1/2012
YellowYellow CC

PurplePurple BB

PomarańczowyOrange CC

NiebieskiBlue AA 80 00080000 6/1/20136/1/2013
RedRed BB 90 00090000 6/1/20136/1/2013

W tej nowej połączonej tabeli kolumna ProjName zawiera powtarzające się wartości.In this new combined table, the ProjName column has repeating values. Gdy tabela zostanie odświeżona, dwie pierwotne tabele nie będą połączone relacją jeden do jednego.The two original tables won’t have a one-to-one relationship once the table is refreshed. Ponieważ w tym przypadku wiemy, że przyszłe aktualizacje spowodują duplikaty w kolumnie ProjName, chcemy ustawić właściwość Kardynalność na wartość Wiele do jednego (*:1) , przy czym stroną wiele będzie tabela ProjectBudget, a stroną jeden tabela 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.

Dostosowywanie kierunku filtrowania krzyżowego dla złożonego zestawu tabel i relacjiAdjusting Cross filter direction for a complex set of tables and relationships

W przypadku większości relacji kierunek filtrowania krzyżowego jest ustawiony na wartość Oba.For most relationships, the cross filter direction is set to Both. Istnieją jednak pewne mniej typowe sytuacje, w których może pojawić się potrzeba zastosowania ustawienia innego niż domyślne, na przykład w przypadku importowania modelu ze starszej wersji dodatku Power Pivot, w którym każda relacja jest ustawiona na jeden kierunek.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.

Ustawienie Oba umożliwia programowi Power BI Desktop traktowanie wszystkich aspektów połączonych tabel w taki sposób, jakby były jedną tabelą.The Both setting enables Power BI Desktop to treat all aspects of connected tables as if they're a single table. Jednak w niektórych sytuacjach program Power BI Desktop nie może jednocześnie ustawić kierunku filtrowania krzyżowego na wartość Oba i zachować jednoznacznego zestawu ustawień domyślnych dostępnych na potrzeby raportowania.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. Jeśli kierunek filtrowania krzyżowego relacji nie jest ustawiony na wartość Oba, najczęstszą przyczyną jest to, że takie ustawienie spowodowałoby powstanie niejednoznaczności.If a relationship cross filter direction isn't set to Both, then it’s usually because it would create ambiguity. Jeśli dane ustawienie filtrowania krzyżowego nie działa w danym przypadku, spróbuj ustawić je na konkretną tabelę lub wybrać ustawienie Oba.If the default cross filter setting isn’t working for you, try setting it to a particular table or to Both.

Filtrowanie krzyżowe w jednym kierunku działa w wielu sytuacjach.Single direction cross filtering works for many situations. W przypadku zaimportowania modelu z dodatku Power Pivot w programie Excel 2013 lub wcześniejszym wszystkie relacje zostaną ustawione na jeden kierunek.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. Jeden kierunek oznacza, że opcje filtrowania w połączonych tabelach dotyczą tabeli, w której odbywa się agregowanie.Single direction means that filtering choices in connected tables work on the table where aggregation work is happening. Czasami zrozumienie filtrowania krzyżowego może być trudne, dlatego przyjrzyjmy się przykładowi.Sometimes, understanding cross filtering can be a little difficult, so let’s look at an example.

W przypadku filtrowania krzyżowego w jednym kierunku, jeśli utworzysz raport, który podsumowuje godziny projektów, możesz wybrać podsumowanie (lub filtrowanie) według tabeli CompanyProject i jej kolumny Priority lub tabeli CompanyEmployee i jej kolumny 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. Jeśli jednak zechcesz policzyć liczbę pracowników w każdym projekcie (rzadziej występujące pytanie), to rozwiązanie nie zadziała.If however, you want to count the number of employees per projects (a less common question), it won’t work. Otrzymasz kolumnę wartości, które będą takie same.You’ll get a column of values that are all the same. W poniższym przykładzie kierunek filtrowania krzyżowego obu relacji jest ustawiony na jeden kierunek: do tabeli ProjectHours.In the following example, both relationship's cross filtering direction is set to a single direction: towards the ProjectHours table. W obszarze Wartości pole Projekt ma ustawioną wartość Liczba:In the Values well, the Project field is set to Count:

Kierunek filtrowania krzyżowego

Specyfikacja filtru będzie przepływać z tabeli CompanyProject do tabeli ProjectHours (co przedstawia poniższa ilustracja), ale nie będzie przepływać do tabeli CompanyEmployee.Filter specification will flow from CompanyProject to ProjectHours (as shown in the following image), but it won’t flow up to CompanyEmployee.

Przykład filtrowania krzyżowego

Jeśli jednak ustawisz kierunek filtrowania krzyżowego na wartość Oba, wszystko będzie działać prawidłowo.However, if you set the cross filtering direction to Both, it will work. Ustawienie Oba pozwoli na przepływ specyfikacji filtru do kolumny CompanyEmployee.The Both setting allows the filter specification to flow up to CompanyEmployee.

Filtrowanie przepływu specyfikacji

Po ustawieniu kierunku filtrowania krzyżowego na wartość Oba nasz raport jest teraz poprawny:With the cross filtering direction set to Both, our report now appears correct:

Kierunek filtrowania krzyżowego ustawiony na wartość Oba

Filtrowanie krzyżowe w obu kierunkach działa dobrze dla wzorca relacji tabel, takiego jak powyższy.Cross filtering both directions works well for a pattern of table relationships such as the pattern above. Taki schemat najczęściej jest nazywany schematem gwiazdy:This schema is most commonly called a star schema, like this:

Filtrowanie krzyżowe obu kierunków w schemacie gwiazdy

Kierunek filtrowania krzyżowego nie działa dobrze z bardziej ogólnym wzorcem, który często występuje w bazach danych, przedstawionym na poniższym diagramie:Cross filtering direction does not work well with a more general pattern often found in databases, like in this diagram:

Filtrowanie krzyżowe obu kierunków we wzorcu bazy danych

Jeśli masz wzorzec tabel podobny do powyższego, z pętlami, filtrowanie krzyżowe może spowodować powstanie niejednoznacznego zestawu relacji.If you have a table pattern like this, with loops, then cross filtering can create an ambiguous set of relationships. Jeśli na przykład obliczysz sumę pola z tabeli TableX, a następnie wykonasz filtrowanie według pola z tabeli TableY, nie będzie jasne, którędy powinno odbywać się filtrowanie — przez górną czy dolną tabelę.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. Typowy przykład wzorca tego rodzaju jest następujący: tabela TableX jest tabelą sprzedaży i zawiera dane rzeczywiste, a tabela TableY zawiera dane budżetu.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. Tabele w środku są tabelami odnośników zawierającymi na przykład dane o działach lub regionach, z których korzystają obie te tabele.Then, the tables in the middle are lookup tables that both tables use, such as division or region.

Podobnie jak w przypadku relacji aktywnych/nieaktywnych, program Power BI Desktop nie zezwoli na ustawienie relacji Oba, jeśli mogłoby to spowodować niejednoznaczność w raportach.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. Tę sytuację można rozwiązać na różne sposoby.There are several different ways you can handle this situation. Poniżej przedstawiono dwa najczęstsze:Here are the two most common:

  • Usunięcie relacji lub oznaczenie ich jako nieaktywnych, aby ograniczyć niejednoznaczność.Delete or mark relationships as inactive to reduce ambiguity. Wtedy być może uda się ustawić filtrowanie krzyżowe relacji na wartość Oba.Then, you might be able to set a relationship cross filtering as Both.
  • Dwukrotne wprowadzenie tabeli (z inną nazwą za drugim razem), aby wyeliminować pętle.Bring in a table twice (with a different name the second time) to eliminate loops. Dzięki temu wzorzec relacji będzie przypominał schemat gwiazdy.Doing so makes the pattern of relationships like a star schema. Schemat gwiazdy umożliwia ustawienie wszystkich relacji na wartość Oba.With a star schema, all of the relationships can be set to Both.

Niewłaściwa aktywna relacjaWrong active relationship

Gdy program Power BI Desktop automatycznie tworzy relacje, czasami napotyka więcej niż jedną relację między dwiema tabelami.When Power BI Desktop automatically creates relationships, it sometimes encounters more than one relationship between two tables. W takiej sytuacji tylko jedna relacja jest ustawiana jako aktywna.When this situation happens, only one of the relationships is set to be active. Aktywna relacja pełni rolę relacji domyślnej, aby w przypadku wybrania pól z dwóch różnych tabel program Power BI Desktop mógł automatycznie utworzyć wizualizację.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. Jednak w niektórych przypadkach automatycznie wybrana relacja może być nieprawidłowa.However, in some cases the automatically selected relationship can be wrong. W oknie dialogowym Zarządzanie relacjami można ustawić relację jako aktywną lub nieaktywną. Aktywną relację można także ustawić w oknie dialogowym Edytowanie relacji.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.

Aby zapewnić istnienie relacji domyślnej, program Power BI Desktop zezwala tylko na jedną aktywną relację między dwiema tabelami w danym momencie.To ensure there’s a default relationship, Power BI Desktop allows only a single active relationship between two tables at a given time. Dlatego najpierw należy ustawić bieżącą relację jako nieaktywną, a następnie ustawić relację, która ma być aktywna.Therefore, you must first set the current relationship as inactive and then set the relationship you want to be active.

Spójrzmy na przykład.Let’s look at an example. Pierwsza tabela ma nazwę ProjectTickets, a druga — 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 NiebieskiBlue 1/1/20131/1/2013
10021002 Roman, DanielRoman, Daniel Brewer, AlanBrewer, Alan 2626 RedRed 2/1/20132/1/2013
10031003 Roth, DanielRoth, Daniel Ito, ShuIto, Shu 3434 YellowYellow 12/4/201212/4/2012
10041004 Perham, TomPerham, Tom Brewer, AlanBrewer, Alan 1313 PomarańczowyOrange 1/2/20121/2/2012
10051005 Roman, DanielRoman, Daniel Bowen, EliBowen, Eli 2929 PurplePurple 01.10.201310/1/2013
10061006 Roth, DanielRoth, Daniel Bento, NunoBento, Nuno 3535 ZielonyGreen 2/1/20132/1/2013
10071007 Roth, DanielRoth, Daniel Hamilton, DavidHamilton, David 1010 YellowYellow 01.10.201310/1/2013
10081008 Perham, TomPerham, Tom Han, MuHan, Mu 2828 OrangeOrange 1/2/20121/2/2012
10091009 Roman, DanielRoman, Daniel Ito, ShuIto, Shu 2222 PurplePurple 2/1/20132/1/2013
10101010 Roth, DanielRoth, Daniel Bowen, EliBowen, Eli 2828 GreenGreen 10/1/201310/1/2013
10111011 Perham, TomPerham, Tom Bowen, EliBowen, Eli 99 NiebieskiBlue 10/15/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

W tym przypadku istnieją dwie relacje:There are actually two relationships here:

  • Między kolumną Employee w tabeli EmployeeRole i kolumną SubmittedBy w tabeli ProjectTickets.Between Employee in the EmployeeRole table and SubmittedBy in the ProjectTickets table.
  • Między kolumną OpenedBy w tabeli ProjectTickets i kolumną Employee w tabeli EmployeeRole.Between OpenedBy in the ProjectTickets table and Employee in the EmployeeRole table.

Przykład z dwoma relacjami

Jeśli dodamy obie te relacje do modelu (najpierw relację z kolumną OpenedBy), to w oknie dialogowym Zarządzanie relacjami aktywna będzie relacja z kolumną OpenedBy:If we add both relationships to the model (OpenedBy first), then the Manage relationships dialog box shows that OpenedBy is active:

Aktywna kolumna OpenedBy w oknie dialogowym Zarządzanie relacjami

Jeśli teraz utworzymy raport korzystający z pól Role i Employee z tabeli EmployeeRole oraz pola Hours z tabeli ProjectTickets w wizualizacji tabeli na kanwie Raport, zobaczymy tylko pracowników przypisanych do roli sponsorów projektu, ponieważ tylko oni otworzyli zgłoszenie dotyczące projektu.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.

Wybrane pola Employee, Role i Hours

Możemy zmienić aktywną relację na relację z kolumną SubmittedBy zamiast z kolumną OpenedBy.We can change the active relationship and get SubmittedBy instead of OpenedBy. W oknie dialogowym Zarządzanie relacjami usuwamy zaznaczenie relacji ProjectTickets(OpenedBy) z EmployeeRole(Employee) , a następnie zaznaczamy relację EmployeeRole(Employee) z 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.

Zmienianie aktywnej relacji w oknie dialogowym Zarządzanie relacjami

Wyświetlanie wszystkich relacji w widoku RelacjeSee all of your relationships in Relationship view

Czasami model obejmuje wiele tabel i złożone relacje między nimi.Sometimes your model has multiple tables and complex relationships between them. Widok Relacje w programie Power BI Desktop przedstawia wszystkie relacje w modelu wraz z kierunkami i kardynalnością w przejrzystym i dostosowywalnym diagramie.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.

Aby dowiedzieć się więcej, zobacz Praca z widokiem Relacja w programie Power BI Desktop.To learn more, see Work with Relationship view in Power BI Desktop.