Power BI 7 min czytania 13 maja 2026

Star schema (schemat gwiazdy) — dlaczego dane w raporcie wyglądają inaczej niż w systemie ERP

Klienci czasem pytają: "dlaczego te dane wyglądają inaczej niż w Optimie?" To nie jest błąd — to efekt celowej decyzji o tym, jak dane są ułożone. Star schema, po polsku schemat gwiazdy, to fundament, który sprawia, że raport odpowiada w sekundę zamiast w minutę i że liczby z różnych raportów zawsze się zgadzają.

Jak system ERP przechowuje dane — i dlaczego tak musi być

System ERP jest zoptymalizowany pod jedno zadanie: efektywne wprowadzanie i aktualizowanie danych. Jeśli zmienię adres kontrahenta w jednym miejscu, zmiana jest widoczna wszędzie — w fakturach, rozrachunkach, historii. To się nazywa normalizacja danych i jest właściwym rozwiązaniem dla systemu, który obsługuje setki transakcji dziennie.

Konsekwencja jest taka, że jedna faktura w systemie ERP to minimum kilka powiązanych zbiorów danych: nagłówek dokumentu z numerem, datą i kwotą, pozycje faktury z każdym towarem lub usługą, informacja o płatności z terminem i stanem rozrachunku, dane kontrahenta z adresem i NIP-em. Żeby wyświetlić jedno zdanie — "faktura od ABC Sp. z o.o., 12 000 zł, zaległa od 30 dni" — system musi złączyć je wszystkie w jednym zapytaniu.

To działa doskonale gdy system obsługuje 10–20 takich zapytań dziennie. Działa fatalnie gdy raport analityczny musi odpowiedzieć na to pytanie dla 500 faktur z ostatnich 2 lat, z filtrem po budynku, miesiącu i statusie płatności — i zrobić to przy każdym kliknięciu użytkownika.

Czym jest star schema

Star schema — schemat gwiazdy — to model danych zoptymalizowany pod odpowiadanie na pytania analityczne. Zamiast normalizować dane (każda informacja raz, wszędzie jako odniesienie), star schema spłaszcza je do dwóch typów tabel.

Tabele faktów przechowują zdarzenia biznesowe — każde jako jeden rekord z mierzalnymi wartościami. fact_invoices to każda faktura z kwotą, datą, statusem i identyfikatorami wskazującymi na kontrahenta, budynek i datę. fact_payments to każda płatność. fact_costs to każdy koszt. Jeden rekord — jedno zdarzenie.

Tabele wymiarów przechowują atrybuty do filtrowania i grupowania. dim_tenant to każdy kontrahent z nazwą, NIP-em, segmentem i typem działalności. dim_building to każdy budynek z nazwą, miastem i typem. dim_date to każdy dzień w kalendarzu z rokiem, kwartałem, miesiącem, tygodniem i informacją czy to dzień roboczy. Użytkownik Power BI nigdy nie widzi tych tabel bezpośrednio — widzi filtry, suwaki i segmenty danych. Star schema to fundament, który sprawia, że te filtry działają natychmiastowo.

To samo pytanie — dwa podejścia

Pytanie: "Pokaż mi wszystkie niezapłacone faktury per budynek per miesiąc za ostatnie dwa lata."

Bezpośrednio z systemu ERP

  1. 1. Pobierz nagłówki dokumentów — tylko faktury, nie korekty, nie proformy
  2. 2. Powiąż z rozrachunkami — sprawdź które są niezapłacone
  3. 3. Powiąż z danymi kontrahenta
  4. 4. Dołącz budynek — ale budynku nie ma w żadnej z tych tabel, jest w osobnym miejscu
  5. 5. Pogrupuj po miesiącu i budynku

Wynik: kilka sekund lub kilkadziesiąt sekund. Powtarzane przy każdym kliknięciu filtru.

Ze star schema

  1. 1. Weź rekordy z fact_invoices gdzie status = niezapłacona i data w zakresie 2 lat
  2. 2. Pogrupuj po dim_building.name i dim_date.year_month

Wynik: poniżej sekundy. Budynek i miesiąc są już atrybutami w wymiarach — nie trzeba niczego łączyć w locie.

Różnica jest odczuwalna od razu. Przy 10 filtrach w raporcie — budynek, rok, miesiąc, kontrahent, status faktury, waluta, kategoria kosztu — każde kliknięcie to nowe zapytanie. Na star schema: natychmiastowa odpowiedź. Na bazie operacyjnej ERP: użytkownik czeka po każdym kliknięciu i w końcu przestaje klikać.

Co to oznacza w praktyce

Raporty działają szybko

Każdy filtr w Power BI odpowiada natychmiast — niezależnie od tego ile rekordów jest w bazie i ile filtrów używa użytkownik jednocześnie.

Nowe pytania nie wymagają przebudowy

Jeśli za 3 miesiące klient powie "chcę teraz widzieć dane per zarządca, nie tylko per budynek" — dodanie nowego wymiaru do dim_building to kwestia dni. Bez star schema każde nowe pytanie analityczne to nowe, odrębne zapytanie pisane od zera.

Jedna definicja dla całej firmy

Co to jest "faktura niezapłacona"? Jak liczy się aging? Te definicje są zapisane raz, przy budowaniu fact_invoices. Każdy raport w Power BI korzysta z tej samej logiki. Nie ma sytuacji, gdzie jeden raport liczy 43 zaległości, a drugi — 47.

Czerwona lampka w ofercie dostawcy

Jeżeli dostawca systemu BI proponuje "podłączymy Power BI bezpośrednio do Optimy" — bez wzmianki o modelu danych, warstwie pośredniej czy strukturze analitycznej — to jest sygnał ostrzegawczy. Oznacza:

  • Wolne raporty — Power BI odpytuje operacyjną bazę przy każdym kliknięciu filtru
  • Niespójne liczby — każdy raport definiuje logikę osobno, różne działy widzą różne wartości
  • Brak historii — zmiany w systemie ERP (aktualizacja adresu kontrahenta, korekta dokumentu) mogą nadpisywać dane historyczne retroaktywnie
  • Każde nowe pytanie od zera — brak wspólnego modelu danych oznacza brak możliwości łatwego rozszerzenia raportów

To nie jest kwestia gustu architektonicznego — to kwestia funkcjonalności raportu w codziennym użyciu.

Podsumowanie

Star schema to nie techniczna fanaberia — to powód, dla którego raport działa w sekundę zamiast w minutę i dlaczego liczby z raportu zawsze się zgadzają niezależnie od tego, kto je generuje. Każdy porządnie zbudowany system BI ma ją pod spodem, nawet jeśli użytkownik nigdy nie słyszał tej nazwy. Użytkownik Power BI widzi filtry i wykresy — star schema sprawia, że każdy klik na nie odpowiada natychmiastowo.

Najczęstsze pytania

Czy użytkownik Power BI widzi star schema?

Nie. Widzi raporty, filtry i wykresy. Star schema to fundament pod spodem — niewidoczny, ale odpowiedzialny za to, że każdy klik w filtr odpowiada natychmiast.

Czym różni się star schema od danych w systemie ERP?

ERP jest zoptymalizowany pod wprowadzanie danych (OLTP) — dane są znormalizowane, każda informacja w jednym miejscu, wszystko powiązane relacjami. Star schema jest zoptymalizowana pod analizę danych (OLAP) — dane są spłaszczone do tabel faktów i wymiarów, gotowych do natychmiastowego filtrowania i grupowania.

Co to są tabele faktów i tabele wymiarów?

Tabele faktów przechowują zdarzenia biznesowe z mierzalnymi wartościami — każda faktura, każda płatność, każdy koszt jako jeden rekord. Tabele wymiarów przechowują atrybuty do filtrowania: kontrahenci, budynki, kalendarz. Analogia z Excela: lista faktur w jednej tabeli, lista klientów w drugiej, lista budynków w trzeciej — star schema to ta sama zasada, ale na poziomie bazy danych z milionami rekordów.

Jak star schema wygląda w projekcie z Optimą?

ETL czyta powiązane tabele systemu ERP i scala je w fact_invoices — jeden rekord na fakturę z obliczoną kwotą zaległości, datą i statusem. Dane kontrahentów tworzą dim_tenant z oczyszczonymi i deduplikowanymi rekordami. Kalendarz zasila dim_date. Power BI widzi gotową, czystą strukturę i nie wie nic o tabelach Optimy — i nie musi.

Chcesz wiedzieć jak jest zbudowany model danych w Twoim projekcie?

Opisz z jakiego systemu korzystasz — odpiszę co konkretnie wchodzi w model i jakie raporty z tego wychodzą.

Porozmawiajmy

Wpisz szukane słowo…