Ugrás a fő tartalomra

Power BI alapok : szűrőkontextus és a sorkontextus (az értékelési kontextus)

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:

OrderIDYearProductSalesAmount
12023Laptop1,000
22023Phone500
32024Laptop1,200
42024Phone700

Ha az alábbi mértéket hozzuk létre:

---DAX

Total Sales = SUM(Sales[SalesAmount])

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:

YearTotal Sales
20231,500
20241,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:

---DAX

Total Sales 2023 = CALCULATE( SUM(Sales[SalesAmount]), Sales[Year] = 2023 )

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:

ProductUnit PriceQuantityTotal Price
Laptop1,0002?
Phone5003?

Ha a Total Price oszlopot a következő számított oszlopként hoznánk létre:

---DAX

Total Price = ProductSales[Unit Price] * ProductSales[Quantity]

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:

ProductUnit PriceQuantityTotal Price
Laptop1,00022,000
Phone50031,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:

CustomerIDCustomerName
1John
2Anna

Sales tábla:

SaleIDCustomerIDSalesAmount
1011500
1021700
10321,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:

---DAX

Total Sales Per Customer = CALCULATE( SUM(Sales[SalesAmount]), FILTER(Sales, Sales[CustomerID] = Customers[CustomerID]) )

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őkontextusSorkontextus
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ényCALCULATE(SUM(Sales[SalesAmount]), Sales[Year] = 2023)Total Price = Sales[Unit Price] * Sales[Quantity]
HasználataMé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:

OrderIDProductUnit PriceQuantityTotal Price (calculated column)
1Laptop10002?
2Phone5003?

Egy új számított oszlopot adhatunk hozzá a Total Price kiszámításához:

---DAX

Total Price = Sales[Unit Price] * Sales[Quantity]

A fenti képlet minden egyes sorra külön kerül kiértékelésre:

OrderIDProductUnit PriceQuantityTotal Price
1Laptop100022000
2Phone50031500

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:

---DAX

Total Sales = SUM(Sales[Total Price])

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:

YearTotal Sales
20231500
20241900

Ha viszont termék szerint csoportosítjuk az adatokat, akkor ezt kapjuk:

ProductTotal Sales
Laptop2200
Phone1200

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ágSzá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épletSales[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álatTö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ásMegnö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