Power BI alapok : szűrőkontextus és a sorkontextus (az értékelési kontextus)
A DAX értékelési kontextus az a környezet, amelyben a DAX kifejezések kiértékelésre kerülnek. A két fő értékelési kontextus a szűrőkontextus és a sorkontextus. Ezek alapvetően meghatározzák, hogyan számítja ki a Power BI az adatokat, és milyen hatással vannak a számított oszlopokra, mértékekre és táblaszintű műveletekre.
1. Szűrőkontextus (Filter Context)
A szűrőkontextus azt határozza meg, hogy milyen adatok kerülnek kiválasztásra a számítás során. Egy adott DAX kifejezés mindig egy adott kontextusban fut, amelyet a jelentésben használt szűrők, szeletek (slicerek), oldalszűrők és vizualizációs tengelyek befolyásolhatnak.
Típusai
- Mátrix sor kijelölés
- mátrix oszlop kijelölése
- Szeletelő kiválasztása
- Oldalsó szűrés mező Szűrés kijelölése
- vizuális elem kiválasztás (oszlopdiagramon klikkelés)
Általánosságban a szűrők csak a kapcsolatokon keresztül terjednek automatikusan lefelé (1-> több ágon).
Szűrőkontextus működése – Példa
Tegyük fel, hogy van egy Sales nevű táblánk az alábbi oszlopokkal:
OrderID | Year | Product | SalesAmount |
---|---|---|---|
1 | 2023 | Laptop | 1,000 |
2 | 2023 | Phone | 500 |
3 | 2024 | Laptop | 1,200 |
4 | 2024 | Phone | 700 |
Ha az alábbi mértéket hozzuk létre:
Ez az összes eladást összeadja. Ha a vizualizációban év szerint csoportosítjuk, akkor a Power BI év szerint szűrőkontextust alkalmaz, és az alábbi eredményt kapjuk:
Year | Total Sales |
---|---|
2023 | 1,500 |
2024 | 1,900 |
Ebben az esetben a szűrőkontextus automatikusan létrejött, mert az oszlopdiagram év szerint lett csoportosítva.
Manuális szűrőkontextus alkalmazása
DAX-ban manuálisan is megadhatunk szűrőkontextust a CALCULATE függvény használatával:
Ez a mérték függetlenül attól, hogy a vizualizációban milyen szűrők vannak beállítva, csak a 2023-as év adatait fogja visszaadni.
2. Sorkontextus (Row Context)
A sorkontextus egy adott sorra vonatkozó kontextus, amely automatikusan létrejön számított oszlopok esetében. A sorkontextus azt határozza meg, hogy az adott sor értékei hogyan befolyásolják a számításokat.
A sorkontextus egy speciális iteráló függvény vagy számított oszlop azon képességére utal, hogy a képletértékelés egyes szakaszaiban „tudatában van” annak, hogy melyik soron működik.
Az iterátor függvényeknek (X névvégű) és a számított oszlopoknak (Calculated Column) is van sorkontextusa. A fő különbség az iterátor függvény (pl. SUMX()) és a számított oszlop között az, hogy a számított oszlop magában az oszlopban tárolja az iterációs folyamat minden sorában kiszámított értéket. Az számított mezők (Measure) ezt nem teszik meg.
Sorkontextus működése – Példa
Tegyük fel, hogy van egy ProductSales táblánk:
Product | Unit Price | Quantity | Total Price |
---|---|---|---|
Laptop | 1,000 | 2 | ? |
Phone | 500 | 3 | ? |
Ha a Total Price oszlopot a következő számított oszlopként hoznánk létre:
Itt a Power BI minden egyes sor esetében kiértékeli a ProductSales[Unit Price] és a ProductSales[Quantity] értékeket, majd megszorozza őket. Az eredmény:
Product | Unit Price | Quantity | Total Price |
---|---|---|---|
Laptop | 1,000 | 2 | 2,000 |
Phone | 500 | 3 | 1,500 |
Ez egy sorkontextuson belüli számítás, mivel minden egyes sor külön kerül kiértékelésre.
3. Szűrőkontextus és Sorkontextus együttműködése
Egyes esetekben a szűrőkontextus és a sorkontextus kombinálódhat. A sorkontextus nem tudja automatikusan továbbadni a szűrőkontextust, ezért a RELATEDTABLE vagy a FILTER függvényeket kell használnunk.
Példa:
Tegyük fel, hogy van egy Customers és egy Sales táblánk:
Customers tábla:
CustomerID | CustomerName |
---|---|
1 | John |
2 | Anna |
Sales tábla:
SaleID | CustomerID | SalesAmount |
---|---|---|
101 | 1 | 500 |
102 | 1 | 700 |
103 | 2 | 1,000 |
Ha szeretnénk egy számított oszlopot a Customers táblában, amely az adott ügyfél összes vásárlását mutatja, ezt a következőképpen tehetjük meg:
Itt:
- A sorkontextus a Customers tábla minden egyes sorára vonatkozik.
- A FILTER függvény biztosítja, hogy az adott ügyfélhez tartozó összes vásárlást összesítsük.
- A CALCULATE függvény átalakítja a sorkontextust szűrőkontextussá, így biztosítva, hogy a SUM függvény az összes releváns sort figyelembe vegye.
4. Összegzés – Táblázatos összehasonlítás
Jellemző | Szűrőkontextus | Sorkontextus |
---|---|---|
Definíció | Meghatározza, hogy mely adatok kerülnek kiválasztásra a számítás során. | Meghatározza, hogy az adott sor kontextusa milyen hatással van a számításra. |
Hol jön létre? | Jelentés szűrői, vizualizációs tengelyek, CALCULATE függvény használata. | Számított oszlopokban és iteratív függvényekben (pl. SUMX, FILTER). |
Mikor aktív? | Automatikusan alkalmazódik, ha egy oszlopot vagy kategóriát használunk a vizualizációban. | Akkor jön létre, ha a DAX egy adott sorra vonatkozó számítást végez. |
Példa függvény | CALCULATE(SUM(Sales[SalesAmount]), Sales[Year] = 2023) | Total Price = Sales[Unit Price] * Sales[Quantity] |
Használata | Mértékek (Measures) esetén elengedhetetlen. | Számított oszlopokban jellemző. |
Összegzés
- A szűrőkontextus határozza meg, hogy milyen adatokat vegyünk figyelembe a számítás során.
- A sorkontextus egy adott sor kontextusát kezeli, ami számított oszlopok esetén kulcsfontosságú.
- A CALCULATE függvény lehetőséget biztosít arra, hogy szűrőkontextust alkalmazzunk, míg a FILTER és RELATEDTABLE függvények a sorkontextus bővítésére szolgálnak.
Ezek megértése elengedhetetlen a hatékony Power BI modellezéshez! 🚀
Számított mező, számított oszlop összehasonlítása
1. Számított oszlop (Calculated Column)
Mi az a számított oszlop?
A számított oszlopok olyan új oszlopok, amelyeket egy meglévő táblához adunk hozzá. Az oszlop minden egyes sorához kiszámítunk egy értéket, amely a többi oszlop adataiból vagy más táblák adataiból származhat.
Fontos tulajdonságai:
✅ Sor szintű számítások – minden sorhoz külön érték kerül kiszámításra.
✅ Táblán belül tárolt értékek – az eredmény minden sorban el van mentve.
✅ Relációs hivatkozások kezelése – hivatkozhat más táblák oszlopaira is.
✅ Fix kontextus – nem változik az interaktív szűrések vagy vizualizációk hatására.
Példa – Számított oszlop
Tegyük fel, hogy van egy Sales tábla az alábbi oszlopokkal:
OrderID | Product | Unit Price | Quantity | Total Price (calculated column) |
---|---|---|---|---|
1 | Laptop | 1000 | 2 | ? |
2 | Phone | 500 | 3 | ? |
Egy új számított oszlopot adhatunk hozzá a Total Price kiszámításához:
A fenti képlet minden egyes sorra külön kerül kiértékelésre:
OrderID | Product | Unit Price | Quantity | Total Price |
---|---|---|---|---|
1 | Laptop | 1000 | 2 | 2000 |
2 | Phone | 500 | 3 | 1500 |
A számított oszlop előnye, hogy az értékek tárolva vannak, így gyorsabban lekérdezhetőek. Hátránya viszont, hogy a modell méretét növeli, és minden egyes frissítésnél újraszámítódik.
2. Számított mező (Measure)
Mi az a számított mező?
A számított mező egy dinamikusan kiszámított érték, amelyet mindig az aktuális szűrőkontextus befolyásol. Mértékeket tipikusan összesítésekhez, dinamikus számításokhoz használunk.
Fontos tulajdonságai:
✅ Dinamikus számítások – az aktuális vizualizációs kontextustól függ.
✅ Nincs tárolt érték – minden alkalommal újra kiszámításra kerül.
✅ Hatékony memóriahasználat – csak a számításokat tárolja, nem a kiszámított eredményeket.
✅ Interaktív szűrésekhez igazodik – például, ha szűrőt alkalmazunk a jelentésben, a számított mező eredménye ennek megfelelően változik.
Példa – Számított mező
Vegyük újra a Sales táblát, és hozzunk létre egy mértéket az összes értékesítés kiszámítására:
Ha egy oszlopdiagramot készítünk év szerint, akkor az egyes évekhez tartozó eladások összegét kapjuk vissza.
Példa kimenet egy vizualizációban:
Year | Total Sales |
---|---|
2023 | 1500 |
2024 | 1900 |
Ha viszont termék szerint csoportosítjuk az adatokat, akkor ezt kapjuk:
Product | Total Sales |
---|---|
Laptop | 2200 |
Phone | 1200 |
A számított mező tehát mindig az aktuális vizualizációtól és szűrőktől függően számítódik ki.
3. Számított oszlop vs. Számított mező – Táblázatos összehasonlítás
Tulajdonság | Számított oszlop (Calculated Column) | Számított mező (Measure) |
---|---|---|
Hogyan tárolódik? | Az adatmodell részeként, minden sorban. | Nem tárolódik, dinamikusan számítódik ki. |
Mikor számítódik ki? | Az adatok frissítésekor egyszer, és az oszlop minden sorára. | Folyamatosan, az aktuális vizualizáció és szűrőkontextus alapján. |
Milyen kontextusban működik? | Sorkontextus – minden sorhoz egyedi érték. | Szűrőkontextus – összesítés és aggregációk. |
Hatással van rá a szűrés? | Nem, a számított értékek mindig ugyanazok maradnak. | Igen, az aktuális szűrők és csoportosítások alapján változik. |
Példa képlet | Sales[Total Price] = Sales[Unit Price] * Sales[Quantity] | Total Sales = SUM(Sales[Total Price]) |
Mikor használjuk? | Ha egy oszlop új értékeire van szükségünk, és az eredmény minden sorhoz eltérő. | Ha dinamikusan kiszámított értéket akarunk az aktuális szűrőkontextus alapján. |
Memóriahasználat | Több memóriát használ, mert minden sorhoz tárol értéket. | Kevesebb memóriát használ, mert az eredmények nincsenek előre tárolva. |
Teljesítményhatás | Megnöveli a modell méretét, és lassíthatja az adatmodell teljesítményét. | Jobb teljesítmény szempontjából, mivel csak számításokat tartalmaz. |
Tipikus használat | Új oszlopok létrehozása (pl. kategóriák, egyéni azonosítók). | Összegzések, arányok, százalékos számítások. |
4. Mikor használjunk számított oszlopot, és mikor számított mezőt?
✅ Használjunk számított oszlopot, ha:
- Új oszlopértékeket szeretnénk hozzáadni egy táblához.
- Az oszlopok közvetlenül egy másik oszlop alapján számítódnak.
- Az oszlopértékeket szűrőktől függetlenül akarjuk használni.
✅ Használjunk számított mezőt, ha:
- Összesítéseket, arányokat vagy dinamikus értékeket szeretnénk számolni.
- Az aktuális szűrők és csoportosítások alapján változó értékekre van szükségünk.
- Optimalizálni szeretnénk a teljesítményt és minimalizálni a modell méretét.
Összegzés
A számított oszlopokat inkább az adatmodell előkészítéséhez használjuk, míg a számított mezőket az adatok dinamikus elemzéséhez. A hatékony Power BI modell kialakításához fontos megérteni ezek közötti különbségeket! 🚀
Példa kontextusátmenetre (számított oszlopnál)
A sorkontextus önmagában nem hoz létre szűrőkontextust. Tekintettel arra, hogy nincs szűrőkontextus, az Értékesítés táblán.
Kiindulásként a táblázat teljesen szűretlen, ezért a SUM(Eladás[KibővítettÖsszeg])-nek vissza kell adnia a szűretlen Értékesítési tábla eredményét
A sorkontextus ebből a számított oszlopból szűrőkontextussá alakítani egy kontextusátmenetnek nevezett folyamat segítségével. Ehhez egyszerűen csomagolja be a fenti képletet egy CALCULATE() függvénybe, az alábbiak szerint : CALCULATE (SUM(Eladás[KibővítettÖsszeg]))
A kontextusátmenet koncepciója mindenhol működik, ahol sorkontextus létezik – azaz a számított oszlopokban, valamint az olyan iterátorokban, mint a FILTER() és a SUMX().
Ez speciális használati eset, amikor a CALCULATE()-n belül egyáltalán nincs szükség szűrőkre, hanem a CALCULATE() egy új szűrőkontextust hoz létre a sorkontextusból a kontextusátmenet segítségével.
Ha akarja vagy kell, további szűrőket is felvehet a CALCULATE()-be, de ezekre nincs szükség.
De viszont minden számított mezőnek/mértéknek van implicit belső CALCULATE() függvény hívása.
Megjegyzések
Megjegyzés küldése