Aktív és inaktív kapcsolatokra vonatkozó útmutató
Ez a cikk adatmodellezőként célozza meg Önt, aki a Power BI Desktoppal dolgozik. Útmutatást nyújt az aktív vagy inaktív modellkapcsolatok létrehozásának időpontjához. Alapértelmezés szerint az aktív kapcsolatok szűrőket propagálnak más táblákba. Az inaktív kapcsolat azonban csak akkor propagálja a szűrőket, ha egy DAX-kifejezés aktiválja (használja) a kapcsolatot.
Jegyzet
Ebben a cikkben nem foglalkozunk a modellkapcsolatok bemutatásával. Ha nem ismeri teljesen a kapcsolatokat, azok tulajdonságait vagy konfigurálását, javasoljuk, hogy először olvassa el a modellkapcsolatokat a Power BI Desktop című cikkben.
Az is fontos, hogy tisztában legyen a csillagséma kialakításával. További információért lásd: Értsd meg a csillagsémát és annak fontosságát a Power BI szempontjából.
Aktív kapcsolatok
Általában azt javasoljuk, hogy amikor csak lehetséges, határozzon meg aktív kapcsolatokat. Kibővítik a modell használatának hatókörét és lehetőségeit a jelentéskészítők és a Q&A-vel dolgozó felhasználók számára.
Vegyünk egy példát egy Import modellre,, amely a légi járatok időalapú teljesítményének (OTP) elemzésére szolgál. A modell egy Flight
táblával rendelkezik, amely egy ténytábla, amely járatonként egy sort tárol. Minden sor rögzíti a járat dátumát, a járat számát, az indulási és érkezési repülőtereket, valamint az esetleges késési időt (percekben). Van egy Airport
tábla is, amely egy dimenziótábla, amely repülőtérenként egy sort tárol. Minden sor a repülőtér kódját, a repülőtér nevét és az országot vagy régiót írja le.
Íme egy részleges modelldiagram a két tábláról.
A Flight
és Airport
táblák között két modellkapcsolat van. A Flight
táblában a DepartureAirport
és ArrivalAirport
oszlopok a Airport
tábla Airport
oszlopához kapcsolódnak. A csillagséma-tervezésben a Airport
tábla szerepkör-játszás dimenzióként. Ebben a modellben a két szerepkör indulási repülőtér és érkezési repülőtér.
Bár ez a kialakítás jól működik a relációs csillagséma-tervekhez, a Power BI-modellek esetében nem működik jól. Ennek az az oka, hogy a modellkapcsolatok a szűrőpropagálás elérési útjai, és ezeknek az útvonalaknak determinisztikusnak kell lenniük. A szűrőpropagálási útvonalak determinisztikus működésének biztosításáról további információt a kapcsolati útvonal kétértelműségénekfeloldásával kapcsolatban talál. Ezért – ahogyan az ebben a példában is látható – az egyik kapcsolat aktív, míg a másik inaktív (a szaggatott vonallal jelölve). Pontosabban az aktív ArrivalAirport
oszlophoz való viszony, ami azt jelenti, hogy a Airport
táblára alkalmazott szűrők automatikusan propagálásra kerülnek a Flight
tábla ArrivalAirport
oszlopára.
Ez a modellterv súlyos korlátozásokat ró az adatok jelentésére. Pontosabban nem lehet szűrni a Airport
táblázatot, hogy automatikusan elkülönítse az indulási repülőtér járatadatait. A jelentéseknek az indulási és érkezési repülőterek szerint kell szűrnie (vagy csoportosítania)egyidejűleg, ezért két aktív kapcsolatra van szükség. Ha ezt a követelményt Power BI-modelltervre fordítja, az azt jelenti, hogy a modellnek két repülőtéri táblával kell rendelkeznie.
Íme a továbbfejlesztett modellterv.
A modell most két repülőtéri táblával rendelkezik: Departure Airport
és Arrival Airport
. A táblák és a Flight
tábla közötti modellkapcsolatok aktívak. Figyelje meg azt is, hogy a Departure Airport
és Arrival Airport
táblák oszlopnevei az indulási vagy Érkezésiszó előtaggal vannak elnevítve.
A továbbfejlesztett modellterv támogatja a következő jelentésterv elkészítését.
A jelentés oldala Melbourne repülőtér szerint szűr, és a táblázat az érkezési repülőterek szerint csoportosít.
Jegyzet
Az importálási modellek esetében egy másik dimenziótábla hozzáadása nagyobb modellméretet és hosszabb frissítési időt eredményezett. Ezért ellentmond a Importálási modellezés adatcsökkentési módszerei cikkben ismertetett javaslatoknak. A példában azonban a csak aktív kapcsolatokra vonatkozó követelmény felülírja ezeket a javaslatokat.
Emellett gyakori, hogy a dimenziótáblák alacsony sorszámokat tárolnak a ténytáblák sorszámához képest. Így a modell méretének és frissítési idejének növekedése valószínűleg nem lesz túl nagy.
Átstrukturálási módszertan
Az alábbiakban bemutatjuk a modell újrabontásának módszertanát egyetlen szerepkör-játék dimenziótábláról egy olyan kialakításra, amely szerepkörönként egy táblát.
Távolítsa el az inaktív kapcsolatokat.
Fontolja meg a szerepjáték dimenziótáblájának átnevezését annak szerepének jobb leírása érdekében. A jelen cikkben szereplő példában a
Airport
tábla aFlight
táblaArrivalAirport
oszlopához kapcsolódik, ezértArrival Airport
néven lett átnevezve.Hozzon létre egy másolatot a szerepkör-lejátszási tábláról, és adja meg a szerepkörét tükröző nevet. Ez egy importálási tábla esetén javasoljuk, hogy hozzon létre egy számított táblát. Ha DirectQuery-tábla, duplikálhatja a Power Query-lekérdezést.
A példában a
Departure Airport
tábla a következő számított tábladefinícióval lett létrehozva.Departure Airport = 'Arrival Airport'
Hozzon létre egy aktív kapcsolatot az új tábla összekapcsolásához.
Fontolja meg a táblák oszlopainak átnevezését, hogy azok pontosan tükrözzék a szerepkörüket. A cikkben szereplő példában az összes oszlop neve az Indulási vagy Érkezésiszóval kezdődik. Ezek a nevek biztosítják, hogy a jelentésvizualizációk alapértelmezés szerint önleíró és nem egyértelmű címkéket tartalmazzanak. Emellett javítja a Q&A felületet is, így a felhasználók egyszerűen írhatnak pontos kérdéseket.
Érdemes lehet leírásokat hozzáadni a szerepkör-lejátszási táblákhoz. (Az Adat panelen egy leírás jelenik meg egy elemleírásban, amikor egy jelentés szerzője a kurzort a táblázat fölé viszi.) Így más szűrőpropagálási adatokat is továbbíthat a jelentéskészítőknek.
Inaktív kapcsolatok
Adott körülmények között az inaktív kapcsolatok adott jelentéskészítési igényeket is kielégíthetnek.
Fontolja meg a különböző modell- és jelentéskészítési követelményeket:
- Az értékesítési modell egy
Sales
táblát tartalmaz, amely két dátumoszlopot tartalmaz:OrderDate
ésShipDate
. - A
Sales
tábla minden sora egyetlen sorrendet rögzít. - A dátumszűrők szinte mindig a
OrderDate
oszlopra vannak alkalmazva, amely mindig érvényes dátumot tárol. - Csak egy mértékhez szükséges, hogy a dátumszűrő hatását érvényesítsük a
ShipDate
oszlopban, amely üres értékeket tartalmazhat (a rendelés kiszállításáig). - Nem szükséges egyszerre szűrni (vagy csoportosítani) a rendelési és szállítási dátumidőszakokat.
Íme egy részleges modelldiagram a két tábláról.
A Sales
és Date
táblák között két modellkapcsolat van. A Sales
táblában a OrderDate
és ShipDate
oszlopok a Date
tábla Date
oszlopához kapcsolódnak. Ebben a modellben a Date
tábla két szerepköre rendelési dátum és szállítási dátum. Ez a kapcsolat az aktív OrderDate
oszlophoz.
Mind a hat mértéknek – egy kivételével – a OrderDate
oszlop alapján kell szűrnie. A Orders Shipped
mértéket azonban a ShipDate
oszlop alapján kell szűrni.
Íme a Orders
mértékdefiníció. Egyszerűen megszámolja a Sales
tábla sorait a szűrőkörnyezetben. A Date
táblára alkalmazott szűrők a OrderDate
oszlopba propagálásra kerülnek.
Orders = COUNTROWS(Sales)
Íme a Orders Shipped
mértékdefiníció. A USERELATIONSHIP DAX függvényt használja, amely egy adott kapcsolat szűrőpropagálását aktiválja, de csak a kifejezés kiértékelése során. Ebben a példában a ShipDate
oszlophoz való kapcsolatot használjuk.
Orders Shipped =
CALCULATE(
COUNTROWS(Sales)
,USERELATIONSHIP('Date'[Date], Sales[ShipDate])
)
Ez a modellterv a következő jelentésterv készítését támogatja.
A jelentésoldal a 2019. negyedik negyedévalapján szűr. A tábla vizualizáció hónap szerint csoportosít és különböző értékesítési statisztikákat jelenít meg. A Orders
és Orders Shipped
intézkedések eltérő eredményeket eredményeznek. Mindegyik ugyanazt az összegző logikát használja (a Sales
tábla sorainak megszámlálását), de különböző Date
táblaszűrő propagálását.
Figyelje meg, hogy a negyedéves szeletelő tartalmaz egy BLANK lehetőséget. Ez a szeletelőbeállítás a táblabővítésénekeredményeként jelenik meg. Bár minden Sales
táblasornak érvényes rendelési dátuma van, egyes sorok üres szállítási dátummal rendelkeznek – ezeket a rendeléseket még ki kell szállítani. A táblabővítés az inaktív kapcsolatokat is figyelembe veszi, így a BLANK-ok a kapcsolat több oldalán lévő BLANK-ok (vagy adatintegritási problémák) miatt is megjelenhetnek.
Jegyzet
A sorszintű biztonsági (RLS) szűrők csak aktív kapcsolatokon keresztül propagálnak. Az RLS-szűrők soha nem érvényesülnek inaktív kapcsolatok esetén, még akkor sem, ha egy mérték a USERELATIONSHIP DAX-függvényt használja.
Ajánlások
Javasoljuk, hogy amikor csak lehetséges, határozzon meg aktív kapcsolatokat, különösen akkor, ha az adatmodellhez RLS-szerepkörök vannak definiálva. Kibővítik a modell használatának hatókörét és lehetőségeit a jelentéskészítők és a Q&A-vel dolgozó felhasználók számára. Ez azt jelenti, hogy a szerepkör-lejátszási dimenziótáblákat duplikálni kell a modellben.
Adott körülmények között azonban definiálhat egy vagy több inaktív kapcsolatot egy szerepkör-játék dimenziótáblához. Ezt a megközelítést akkor érdemes megfontolni, ha:
- Nincs szükség arra, hogy a jelentésvizualizációk egyszerre szűrjenek különböző szerepkörök szerint.
- A USERELATIONSHIP DAX függvénnyel aktiválhat egy adott kapcsolatot a releváns modellszámításokhoz.
Kapcsolódó tartalom
A cikkhez kapcsolódó további információkért tekintse meg a következő forrásokat: