🎯 Definicja
Granulacja danych (ziarno, ang. grain) to jasno zdefiniowany poziom szczegółowości, na jakim rejestrujemy pojedynczy wiersz w tabeli faktów w hurtowni danych. Określa ona, co dokładnie reprezentuje każdy rekord – np. pojedynczą transakcję, zamówienie dzienne, kliknięcie użytkownika itp. Wybór granulacji jest fundamentem każdego modelu wymiarowego i warunkuje późniejsze wybory wymiarów oraz miar.
🔑 Kluczowe punkty
- Deklaracja granulacji to pierwszy, niezbędny krok projektowania tabeli faktów.
- Określa, czego dokładnie dotyczy każdy rekord (np. sprzedaż na poziomie linii faktury vs. agregacja dzienna).
- Wszystkie wybrane wymiary i miary muszą być zgodne z zadeklarowaną granulacją.
- Zbyt niska granulacja (za dużo szczegółów) prowadzi do bardzo dużych tabel, a zbyt wysoka (za bardzo zagregowana) ogranicza możliwości analityczne.
- Spójnie zadeklarowana granulacja zapewnia stałość modelu w czasie i klarowność dla użytkowników BI.
📚 Szczegółowe wyjaśnienie
Jak określać granulację?
- Zadaj pytanie: Co dokładnie ma reprezentować pojedynczy wiersz tabeli?
- Przykład: jeden wiersz = pojedyncza linia transakcji sklepu internetowego.
- Deklaruj przed wymiarami: Najpierw określasz ziarno (granulację), potem wybierasz wymiary (np. data, produkt), a nie odwrotnie.
- Sprawdź zgodność: Każdy wymiar czy miara musi być dostępna na poziomie zadeklarowanej granulacji (np. jeśli ziarno to “dzienna sprzedaż sklepu”, nie można podpiąć wymiaru “godzina”).
Równoważenie niskiej i wysokiej granulacji
- Niska granulacja (np. rekord = pojedyncze kliknięcie): maksymalna szczegółowość, ogromne zbiory danych, pełna analityka, ale większe koszty przechowywania i złożoność modelu.
- Wysoka granulacja (np. rekord = suma sprzedaży tygodniowej): mniejsza tabela, tańsze przechowywanie, szybkie zapytania, ale ograniczona elastyczność analityczna.
- Decyzja zależy od wymagań biznesowych, kosztów przechowywania i spodziewanych pytań analitycznych.
Efekty uboczne złej definicji ziarna
- Dodanie każdego nowego wymiaru (kolumny pod kątem wymiaru) prowadzi do wykładniczego wzrostu liczby wierszy (tzw. “eksplozja kombinatoryczna”).
- Próba przechowywania wszystkich możliwych rollupów (np. suma dla każdej kombinacji wymiarów) jest niewydajna – lepiej tworzyć je dynamicznie w warstwie semantycznej lub OLAP.
Rola granulacji w nowoczesnych architekturach (warstwa semantyczna, warstwa transformacji)
- Najlepszą praktyką jest utrzymywanie wysokiej szczegółowości w warstwie przetwarzania, a agregacji dokonywać dynamicznie “w locie” (np. OLAP cubes).
- Warstwa semantyczna i narzędzia BI pozwalają na elastyczną analizę bez konieczności trzymania każdego rollupu na dysku.
💡 Przykład zastosowania
Przykład projektowania tabeli faktów w e-commerce:
Zespół definiuje granulację: “Pojedynczy wiersz = sprzedaż jednej linii produktu w ramach pojedynczego zamówienia klienta”. Tylko takie wymiary i miary, które są dostępne na tym poziomie szczegółowości, mogą być podpięte do tabeli. Wyższe agregacje (np. dzienne, miesięczne) wykonywane są na żądanie przez narzędzia OLAP i BI – nie zachodzi potrzeba przetwarzania ani przechowywania każdej możliwej zagregowanej wersji danych.
📌 Źródła
- Kimball Group – Dimensional Modeling Techniques: Grain
- IBM – Identify the measures
- SQLBI – Define the granularity of a fact table
👽 Brudnopis
- Granulacja = poziom szczegółu rekordu tabeli faktów; ziarno - deklaracja, co reprezentuje wiersz
- Granulacja → wybieram wymiary i miary, nie odwrotnie
- Im więcej wymiarów, tym większa eksplozja liczby kombinacji = problem wydajnościowy/przechowywania
- Operuj na najniższej sensownej granulacji, wyższe agregaty “w locie” (OLAP, BI)
- Przykład: clickstream (maksymalna), sprzedaż dzienna (agregacja), itp.
- Warstwa semantyczna = elastyczna analiza, nie musisz preagregować wszystkiego z wyprzedzeniem