A lyukacsos tér
Hozok egy teljesítmény romboló példát az adatmodell tervező tanfolyamról. Vaciláltam, (vacilálok még most is), hogy részévé tegyem-e a tanfolyamnak, mert az adatmodell tervezésre nincs közvetlen hatással, csak annak teljesítményét rombolja. Meglátjuk. De kidolgozom, opcionálisan lehet majd kérni ott is vagy akár a holnapi Power BI tanfolyamon is, illetve kiteszem ide a BI projekt blogba is, hogy miért káros beimportálni felesleges sorokat Power BI-ba.
Mikor felesleges egy sor?
- Ha elavult
- Ha nem használjuk
- Ha túl részletes
Elavult
A minap pedzegettem, hogy felesleges beimportálni a 3-4 évvel ezelőtti adatokat, mert olyan gyorsan változik a világ, hogy az esetek jelentős részében nincs értelme a távoli múlthoz hasonlítani. Ugye ennek volt típuspéldája a Covid utáni időszak, amikor teljesen felesleges volt a Covid előtti időszakhoz hasonlítani.
Nem használjuk
Van értelme a dátum táblába betölteni a következő évet? Nincs. Illetve, ha nem tartoznak hozzá számok a ténytáblákban, akkor nincs. Tudom, hogy majd jönni fog a következő év és akkor már szükség lesz rá, de majd betöltjük akkor.
A felesleges sorok betöltése több szempontból is káros:
- A felhasználóknak mindig át kell rágniuk magukat az üres éveken, mert a szeletelőkben, szűrökben megjelennek.
- Teljesítmény problémát okoznak
Miért okoz 1 plusz év teljesítmény problémát? 365 napról van szó, ami 365 plusz sor egy táblában…
Mert a DAX függvények a dimenziók által kifeszített teljes teret bejárják függetlenül attól, hogy tartozik-e hozzájuk adat vagy sem. A FILTER() függvény például minden egyes napra kiértékeli a szűrőfeltétel teljesülését függetlenül attól, hogy az adott naphoz tartozik-e adat vagy sem. Ráadásul a FILTER() függvény sorról sorra haladva értékeli ki a feltételeket. Nem tud kötegelve feldolgozni mint az SQL, nem tud párhuzamosítani, mindent egyes kiértékelést sorról sorra, egymás után sorosan hajt végre. Hiába van többprocesszoros gépünk, nem fogjuk tudni kihasználni, a FILTER() csak egyet szálat tud használni.
De ez nem csak a dátum táblára igaz mindez. Ha csak a belföldi értékesítést elemezzük, akkor nem kell az export cikket betölteni, elég azokat amelyeket belföldre értékesítünk. És igy tovább. Ahogy anno a többdimenziós adatbázis kezelők teljesítményének sem tett jót a lyukacsos kocka, úgy a DAX teljesítményét is rontja a lyukacsos tér.

Túl részletes
Ha aggregálással úgy tudjuk csökkenteni a sorok számát, hogy nem vesztünk értékes információt akkor érdemes a táblákat még import előtt előaggregálni. Ezzel a kardinalitás nem csökken, de a sorok számának csökkentése is pozitív hatással van a teljesítményre.
Összefoglalva: Ha csak azokat a sorokat töltjük be, amelyekre valóban szükségünk van, akkor azzal három dolgot is nyerünk:
- Kisebb lesz az adatbázisunk mérete
- Kedvezünk a felhasználóknak azzal, hogy nem kell a felesleges elemeken állandóan átrágniuk magukat
- Gyorsak lesznek a számított mezőink azáltal, hogy nekik sem kell az üres elemek által kifeszített többdimenziós teret feleslegesen bejárniuk
Kővári Attila - BI projekt

POWER BI WORKSHOP
Tudjon meg többet az itt elhangzottakról! Jöjjön el a 2026. május 13.-i Power BI workshopra vagy rendeljen kihelyezett képzést! Részletek >>

POWER BI ADATMODELL TERVEZŐ WORKSHOP
Tudjon meg többet az itt elhangzottakról! Jöjjön el a 2026. május 14.-i Power BI adatmodell tervező tanfolyamra! Részletek >>

TABULAR INSIDE VIDEÓKURZUS
Tudjon meg többet az itt elhangzottakról és jelentkezzen a Tabular Inside videókurzusra! Részletek >>

BI projekt: BI & DWH Tervezés, tanfolyam, tanácsadás - 


Új hozzászólás