Ugrás a fő tartalomra

Power BI USERELATIONSHIP() és CROSSFILTER() DAX függvények használata


USERELATIONSHIP() és CROSSFILTER() DAX Függvények használata


A USERELATIONSHIP() és CROSSFILTER() függvények haladó szintű DAX technikák, amelyeket összetett kapcsolatok és szűrési logikák kezelésére használunk Power BI-ban.


1️⃣ USERELATIONSHIP() – Alternatív kapcsolat aktiválása

A USERELATIONSHIP() függvényt akkor használjuk, ha egy táblák közötti inaktív kapcsolatot szeretnénk ideiglenesen aktívvá tenni egy számított mezőben vagy mértékben.

🔹 Példa: Két különböző dátum kapcsolat egy „Eladások” táblában

Tegyük fel, hogy van egy „Dátumok” nevű naptár táblánk és egy „Eladások” táblánk, amelyben két dátumoszlop van:

  • Eladások[Dátum] → az eladás dátuma (alapértelmezett kapcsolat)
  • Eladások[Szállítási Dátum] → a szállítás dátuma

A „Dátumok” és „Eladások” között csak egy kapcsolat lehet aktív. Általában az eladás dátuma alapján kapcsolódnak, így a szállítás dátuma inaktív kapcsolatként szerepel.

🔹 Megoldás: A USERELATIONSHIP() használata az inaktív kapcsolat aktiválására

---DAX

Szállítási Eladások Összesen = CALCULATE( SUM(Eladások[Összeg]), USERELATIONSHIP(Dátumok[Dátum], Eladások[Szállítási Dátum]) )

📌 Magyarázat:

  • A SUM(Eladások[Összeg]) az eladások összegét számolja.
  • USERELATIONSHIP() aktiválja a „Dátumok” és az „Eladások” közötti inaktív kapcsolatot, amely a Szállítási Dátum alapján történik.
  • Ennek eredményeként a kimutatásban a szállítási dátum szerinti eladási összeg jelenik meg.

Használati esetek:

  • Ha egy táblának több dátumoszlopa van (pl. rendelési dátum, szállítási dátum, számlázási dátum).
  • Ha dinamikusan akarunk egy másik kapcsolatra számítást végezni, anélkül hogy módosítanánk a Power BI modell struktúráját.

2️⃣ CROSSFILTER() – A kapcsolat szűrési irányának módosítása

A CROSSFILTER() függvényt akkor használjuk, ha a táblakapcsolatok irányát dinamikusan módosítani szeretnénk egy számított mértékben vagy vizualizációban.

🔹 Példa: Kétirányú szűrés kikényszerítése a „Vevők” és „Eladások” táblák között

Tegyük fel, hogy van egy „Vevők” tábla és egy „Eladások” tábla, amely egyirányú kapcsolatban áll:

  • „Vevők” → „Eladások” (egyirányú szűrés)
    • Ez azt jelenti, hogy a vevők neve alapján szűrhetjük az eladásokat, de fordítva nem.

Ha azonban azt akarjuk, hogy egy lekérdezés során az eladások is szűrjék a vevőket, akkor a CROSSFILTER() függvényt kell használnunk.

🔹 Megoldás: A CROSSFILTER() használata kétirányú szűrés kikényszerítésére

--- DAX

Eladások Szűrik a Vevőket = CALCULATE( COUNT(Eladások[Eladás ID]), CROSSFILTER(Vevők[ID], Eladások[Vevő ID], BOTH) )

📌 Magyarázat:

  • COUNT(Eladások[Eladás ID]) kiszámolja az eladások számát.
  • CROSSFILTER(Vevők[ID], Eladások[Vevő ID], BOTH) kétirányú szűrést alkalmaz, így nemcsak a vevők szűrhetik az eladásokat, hanem az eladások is szűrhetik a vevőket.

Használati esetek:

  • Ha szükség van arra, hogy az adatkapcsolatok mindkét irányba működjenek anélkül, hogy Power BI modellben módosítanánk a kapcsolati beállításokat.
  • Ha egy adott számított mezőnél (pl. mértékben) kell ideiglenesen módosítani az irányt, de nem szeretnénk az egész modellben kétirányú kapcsolatot létrehozni.

3️⃣ USERELATIONSHIP() és CROSSFILTER() együttes használata

A két függvényt kombinálhatjuk, ha egy inaktív kapcsolatot akarunk aktiválni, és egyidejűleg a kapcsolat szűrési irányát is módosítani szeretnénk.

🔹 Példa: Szállítási dátum szerint szűrt eladások, de a termékek is szűrik a dátumot

Tegyük fel, hogy egy vizualizációban a szállítási dátumot szeretnénk használni az eladások összesítésére, de ugyanakkor a termékek is befolyásolják ezt a nézetet.

🔹 Megoldás: USERELATIONSHIP és CROSSFILTER kombinálása

---DAX

Szállítási Dátum - Termék Szűréssel = CALCULATE( SUM(Eladások[Összeg]), USERELATIONSHIP(Dátumok[Dátum], Eladások[Szállítási Dátum]), CROSSFILTER(Termékek[Termék ID], Eladások[Termék ID], BOTH) )

📌 Magyarázat:

  • SUM(Eladások[Összeg]) kiszámolja az eladások összegét.
  • USERELATIONSHIP() bekapcsolja a szállítási dátum alapján történő szűrést.
  • CROSSFILTER() lehetővé teszi, hogy a termékek is szűrhessék az eladásokat.

Használati esetek:

  • Ha egy vizualizáción egy inaktív kapcsolatot szeretnénk aktiválni, de egy másik táblával való kapcsolatot dinamikusan módosítanánk.
  • Ha különböző dátumtípusokhoz és táblaszűrési irányokhoz igazítjuk a számításokat.

4️⃣ Összegzés

FüggvényMire használjuk?Példa eset
USERELATIONSHIP()Inaktív kapcsolat aktiválása egy számításbanHa egy eladási tábla több dátumoszlopot tartalmaz (pl. rendelési dátum és szállítási dátum)
CROSSFILTER()A kapcsolat szűrési irányának módosításaHa egy vevői és eladási tábla között kétirányú szűrést akarunk kikényszeríteni
KombinációMindkét technika alkalmazása egyszerreSzállítási dátum szerinti számítás, amelyet a termékek is szűrhetnek

 









Megjegyzések