Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
Power BI - Model danych i relacje
Nie można utworzyć relacji jeden do wielu, bo kolumna ma zduplikowane wartości
W oknie Nowa relacja zamiast Wiele do jednego (*:1) pojawia się Wiele do wielu (*:*), a ręczna zmiana kardynalności kończy się komunikatem, że jedna z kolumn musi zawierać unikatowe wartości. Winne są zduplikowane wartości w kluczu wymiaru, a problem wraca przy odświeżeniu, gdy w źródle pojawi się drugi wiersz z tym samym kluczem. Pokazujemy, jak znaleźć powtórzone i puste wartości, skąd się biorą i dlaczego przełączenie relacji na wiele do wielu zwykle tylko ukrywa błąd.
Power BI Desktop sam ustala kardynalność nowej relacji, sprawdzając, które kolumny mają unikatowe wartości. Gdy klucz wymiaru ma duplikaty, w oknie Nowa relacja zamiast Wiele do jednego (*:1) pojawia się Wiele do wielu (*:*). Power BI Desktop ma też dwa komunikaty dla relacji, której dane nie pozwalają na wybraną kardynalność: „Wybrana kardynalność nie jest prawidłowa dla tej relacji.” (w angielskiej wersji: „The cardinality you selected isn't valid for this relationship.”) oraz „Nie można utworzyć relacji między tymi dwiema kolumnami, ponieważ jedna z tych kolumn musi zawierać unikatowe wartości.” (w angielskiej wersji: „You can't create a relationship between these two columns because one of the columns must have unique values.”).
Gdy relacja już istnieje, a duplikat przyjdzie ze źródła, odświeżenie kończy się komunikatem silnika z nazwą kolumny i powtórzoną wartością: „Kolumna „ProduktID” w tabeli „DimProdukty” zawiera zduplikowaną wartość „1” i jest to niedozwolone dla kolumn po jednej stronie relacji wiele-do-jednego lub dla kolumn, które są używane jako klucz podstawowy tabeli.” (w angielskiej wersji: „Column 'ProduktID' in Table 'DimProdukty' contains a duplicate value '1' and this is not allowed for columns on the one side of a many-to-one relationship or for columns that are used as the primary key of a table.”). Dla pustego klucza silnik ma osobny komunikat: kolumna „zawiera puste wartości i nie jest to dozwolone w przypadku kolumn po jednej stronie relacji wiele-do-jednego” (w angielskiej wersji: „contains blank values and this is not allowed for columns on the one side of a many-to-one relationship”).
Zobacz też: Szkolenie Power BI - Desktop, DAX i Online + Copilot
Relacja jeden do wielu zakłada, że po stronie jeden każda wartość klucza występuje dokładnie raz. Wtedy każda transakcja z FaktSprzedaz trafia do jednego wiersza DimProdukty, a filtr z produktu spływa do faktów bez dwuznaczności. W modelu Nordvelli tak jest: DimProdukty ma 30 wierszy i 30 różnych wartości ProduktID, DimSklepy 15 i 15, DimKalendarz 1826 i 1826. Według dokumentacji Microsoft próba wczytania duplikatów do kolumny po stronie jeden przy odświeżeniu kończy się niepowodzeniem całego odświeżenia.
Duplikat bierze się zwykle z trzech sytuacji. Pierwsza to zła kolumna klucza: DimSklepy[Miasto] ma 11 różnych wartości na 15 sklepów (Warszawa 4 razy, Kraków 2 razy), więc relacja po mieście nie dostanie strony jeden. Druga to wiersz dopisany w źródle, na przykład ten sam produkt w drugiej kategorii. Trzecia to różnica, którą widzi Power Query, a nie widzi model. Według dokumentacji Microsoft Power Query rozróżnia wielkość liter, a silnik modelu nie rozróżnia, więc „KEL-01” i „kel-01” przechodzą przez Usuń duplikaty jako dwie wartości, a w modelu są jedną. W naszym zapytaniu DAX te dwa teksty dały jedną wartość DISTINCT, a tekst ze spacją na końcu osobną. Więcej o tych pułapkach w poście o duplikatach, których Usuń duplikaty nie usuwa.
EVALUATE
ROW(
"Wiersze", COUNTROWS(DimProdukty),
"Unikatowe", DISTINCTCOUNT(DimProdukty[ProduktID]),
"Puste", COUNTROWS(FILTER(DimProdukty, ISBLANK(DimProdukty[ProduktID])))
)DimSklepy[Miasto] dało dwa wiersze: Warszawa 4 i Kraków 2. Dla DimProdukty[ProduktID] nie zwróciło nic. Podstaw swoją tabelę i kolumnę klucza.EVALUATE
FILTER(
ADDCOLUMNS(
VALUES(DimSklepy[Miasto]),
"n", CALCULATE(COUNTROWS(DimSklepy))
),
[n] > 1
)DimProdukty z drugim wierszem produktu 1 (Laptop Kelvani Vela 13) w kategorii AGD/RTV, połączonej w zapytaniu z faktami funkcją TREATAS, czyli tak, jak łączy relacja wiele do wielu. Suma wierszy według kategorii wyniosła 486 802 641,96 zł zamiast 467 775 009,17 zł, a AGD/RTV urosło dokładnie o 19 027 632,79 zł, czyli o sprzedaż tego laptopa policzoną drugi raz. Kiedy taka relacja jest właściwa, opisujemy w poście o relacji wiele do wielu.Po poprawce uruchom ponownie zapytanie z kroku 1: liczba wierszy i liczba unikatowych wartości mają być równe, a kolumna pustych kluczy pusta. Wtedy po przeciągnięciu kolumny klucza na diagramie (Widok modelu) Power BI proponuje Wiele do jednego (*:1), a suma sprzedaży według kategorii wraca do 467 775 009,17 zł. Kroki z wielkimi literami, przycinaniem i usuwaniem duplikatów zostają w zapytaniu, więc działają przy każdym odświeżeniu.
Klucz wymiaru bierz z kolumny identyfikatora, nie z nazwy czy miasta, i trzymaj jego oczyszczanie w Power Query, jak w lekcji o usuwaniu duplikatów bez gubienia danych. Gdy odświeżenie mimo to zgłosi zduplikowaną wartość, komunikat podaje ją wprost: wyszukaj ją w źródle i zdecyduj, czy to błąd danych, czy drugi wiersz o innym znaczeniu.
Zachowanie programu sprawdziliśmy w Power BI Desktop 2.157 (wydanie z sierpnia 2026 r.) z polskim interfejsem, a przykłady na modelu sieci Nordvella z bezpłatnego kursu Power BI. Microsoft wydaje nową wersję Power BI Desktop co miesiąc, więc nazwy przycisków i limity usługi mogą się zmieniać. Aktualne wartości podaje dokumentacja Microsoft Learn.
Wróć do listy: 131 najczęstszych pytań i problemów związanych z Power BI
Komentarze (0)
Brak komentarzy...