Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
Power BI - Model danych i relacje
Jedna płaska tabela czy model gwiazdy - dlaczego płaska tabela daje kłopoty
Z systemu przychodzi jeden szeroki eksport i najprościej byłoby zbudować raport Power BI od razu na nim, bez modelu gwiazdy. Na początku wszystko działa, a kłopoty zaczynają się przy pierwszej sumie atrybutu sklepu albo przy budżecie, który jest miesięczny, a nie przypisany do transakcji. Pokazujemy na modelu Nordvelli, jakie liczby daje tabela płaska, skąd się biorą i jak rozdzielić ją na fakty i wymiary.
Tabela płaska (ang. flat table) to jedna tabela, w której każdy wiersz transakcji ma doklejone opisy: nazwę produktu, kategorię, miasto i powierzchnię sklepu, a czasem także plan sprzedaży. Objawy to sumy bez sensu i liczby, które rosną po dopisaniu kolejnych transakcji, choć plan się nie zmienił. Odtworzyliśmy to zapytaniami na modelu Nordvelli, doklejając wartości z wymiarów do 108 675 wierszy sprzedaży.
Powierzchnia: w wymiarze DimSklepy 15 sklepów ma razem 8680 m², a ta sama kolumna doklejona do transakcji sumuje się do 50 126 550 m². Budżet: FaktBudzet ma 541 917 189,40 zł planu, a plan doklejony do transakcji daje 37 505 381 667,40 zł. W jednym przykładzie, Nordvella Warszawa Centrum, kategoria Komputery, marzec 2025, plan 187 770,22 zł trafia do 46 transakcji, więc w sumie liczy się 46 razy.
Fakty i wymiary mają inne ziarno, czyli poziom szczegółowości jednego wiersza. Wiersz sprzedaży to jedna pozycja transakcji, wiersz budżetu Nordvelli to sklep, kategoria i miesiąc, a wiersz DimSklepy to jeden sklep. Złączenie ich w jedną tabelę kopiuje każdą wartość wymiaru do wszystkich wierszy, które do niej pasują, a sumowanie mnoży ją przez liczbę tych wierszy. Ten sam mechanizm widać w Power Query przy scalaniu z tabelą, w której klucz się powtarza, co opisujemy w poście po scaleniu zapytań przybyło wierszy.
Druga strata jest mniej widoczna. Tabela płaska ma wiersz tylko tam, gdzie była transakcja. W Nordvelli 420 wierszy budżetu, czyli 65 134 492,50 zł planu na miesiące od czerwca do grudnia 2026, nie ma żadnej sprzedaży, więc po złączeniu z transakcjami po prostu znika. Według dokumentacji Microsoft dane z eksportu są zwykle zdenormalizowane, czyli mają opisy powtórzone przy kluczach, i warto je w Power Query rozdzielić na tabele faktów i wymiarów.
Zobacz też: Szkolenie Power BI - Desktop, DAX i Online + Copilot
FaktSprzedaz są cztery wymiary: DimProdukty (30 wierszy), DimSklepy (15), DimPracownicy (200) i DimKalendarz (1826).FaktBudzet ma 3600 wierszy (15 sklepów, 4 kategorie, 60 miesięcy) i relacje z DimSklepy, DimKategorie i DimKalendarz. Jak ułożyć miary na dwóch tabelach faktów, pokazujemy w poście sprzedaż i budżet w jednym raporcie.EVALUATE
ROW(
"Budżet w modelu", [Budżet sprzedaży],
"Budżet doklejony do transakcji",
SUMX(
FaktSprzedaz,
VAR Sklep = FaktSprzedaz[SklepID]
VAR Kategoria = RELATED(DimProdukty[KategoriaID])
VAR Miesiac = INT(FaktSprzedaz[DataID] / 100) * 100 + 1
RETURN LOOKUPVALUE(
FaktBudzet[BudzetSprzedazy],
FaktBudzet[SklepID], Sklep,
FaktBudzet[KategoriaID], Kategoria,
FaktBudzet[DataID], Miesiac
)
)
)Łączna sprzedaż = SUM(FaktSprzedaz[WartoscNetto]) po kategorii liczy się przez relacje z DimProdukty i 4-wierszową DimKategorie, a plan po kategorii przez relację FaktBudzet z tą samą DimKategorie. Dla kategorii Komputery to 130 476 189,61 zł sprzedaży i 150 729 438,59 zł planu, bez żadnego przeliczania duplikatów w formule.
Po rozdzieleniu sumy atrybutów i planu muszą się zgadzać z sumami w wymiarach i w tabeli budżetu. Zapytanie poniżej pokazuje różnicę dla powierzchni: 8680 m² w wymiarze i 50 126 550 m² po doklejeniu do transakcji. W modelu gwiazdy suma powierzchni po sklepach to 8680 m², a budżet 541 917 189,40 zł.
EVALUATE
ROW(
"Powierzchnia w wymiarze", SUM(DimSklepy[Powierzchnia_m2]),
"Powierzchnia doklejona do transakcji", SUMX(FaktSprzedaz, RELATED(DimSklepy[Powierzchnia_m2]))
)Lekcja o wydajności zestawia oba układy na tych samych danych: nazwa produktu występuje w gwieździe 30 razy, a w tabeli płaskiej 108 675 razy, a grupowanie po kategorii korzysta z 4 wierszy wymiaru zamiast całej tabeli faktów. Jak sprawdzić rozmiar modelu w VertiPaq Analyzer, pokazujemy w lekcji o optymalizacji modelu.
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...