Aktiv kontra inaktiv relasjonsveiledning
Denne artikkelen er rettet mot deg som en datamodellerer som arbeider med Power BI Desktop. Den gir deg veiledning om når du skal opprette aktive eller inaktive modellrelasjoner. Som standard overfører aktive relasjoner filtre til andre tabeller. Inaktiv relasjon overfører imidlertid bare filtre når et DAX-uttrykk aktiverer (bruker) relasjonen.
Notat
En innføring i modellrelasjoner dekkes ikke i denne artikkelen. Hvis du ikke er helt kjent med relasjoner, deres egenskaper eller hvordan du konfigurerer dem, anbefaler vi at du først leser Modellrelasjoner i Power BI Desktop artikkelen.
Det er også viktig at du har en forståelse av utforming av stjerneskjema. Hvis du vil ha mer informasjon, kan du se Forstå stjerneskjema og viktigheten for Power BI-.
Aktive relasjoner
Generelt anbefaler vi at du definerer aktive relasjoner når det er mulig. De utvider omfanget og potensialet for hvordan modellen kan brukes av rapportforfattere, og brukere som arbeider med Q&A.
Vurder et eksempel på en importmodell utformet for å analysere flyavgang i tide (OTP). Modellen har en Flight
tabell, som er en faktatabell som lagrer én rad per flyvning. Hver rad registrerer flydato, flynummer, avreise- og ankomstflyplasser og eventuell forsinkelsestid (i minutter). Det finnes også en Airport
tabell, som er en dimensjonstabell som lagrer én rad per flyplass. Hver rad beskriver flyplasskoden, flyplassnavnet og landet eller området.
Her er et delvis modelldiagram over de to tabellene.
Det finnes to modellrelasjoner mellom tabellene Flight
og Airport
. Kolonnene DepartureAirport
og ArrivalAirport
i Flight
tabellen er knyttet til Airport
kolonnen i Airport
tabellen. I utforming av stjerneskjema beskrives Airport
tabellen som en rollespilldimensjon. I denne modellen er de to rollene avreiseflyplass og ankomstflyplass.
Selv om denne utformingen fungerer bra for relasjonelle stjerneskjemautforminger, fungerer det ikke bra for Power BI-modeller. Dette er fordi modellrelasjoner er baner for filteroverføring, og disse banene må være deterministiske. Hvis du vil ha mer informasjon om hvordan du sikrer at filteroverføringsbaner er deterministiske, kan du se løse tvetydighet i relasjonsbanen. Derfor, som vist i dette eksemplet, er én relasjon aktiv, mens den andre er inaktiv (representert av den stiplede linjen). Nærmere bestemt er det relasjonen til den ArrivalAirport
kolonnen som er aktiv, noe som betyr at filtre som brukes i Airport
tabellen, automatisk overføres til ArrivalAirport
-kolonnen i Flight
tabellen.
Denne modellutformingen gir alvorlige begrensninger på hvordan dataene kan rapporteres. Spesielt er det ikke mulig å filtrere Airport
tabellen for automatisk å isolere flydetaljer for en avreiseflyplass. Ettersom rapporter må filtrere (eller gruppere) etter avreise- og ankomstflyplasser samtidig, kreves det to aktive relasjoner. Hvis du oversetter dette kravet til en Power BI-modellutforming, må modellen ha to flyplasstabeller.
Her er den forbedrede modellutformingen.
Modellen har nå to flyplasstabeller: Departure Airport
og Arrival Airport
. Hver modellrelasjon mellom disse tabellene og Flight
tabellen er aktiv. Legg også merke til at kolonnenavnene i tabellene Departure Airport
og Arrival Airport
er prefiks med ordet Avreise eller ankomst.
Den forbedrede modellutformingen støtter produksjon av følgende rapportutforming.
Rapportsiden filtreres etter Melbourne som avgangsflyplass, og tabellvisualobjektet grupperes etter ankomstflyplasser.
Notat
For importmodeller har tillegg av en annen dimensjonstabell resultert i økt modellstørrelse og lengre oppdateringstider. Som sådan motsier den anbefalingene som er beskrevet i Datareduksjonsteknikker for importmodellering artikkel. I eksemplet overstyrer imidlertid kravet om å bare ha aktive relasjoner disse anbefalingene.
Videre er det vanlig at dimensjonstabeller lagrer lave radantall i forhold til antall faktatabellrader. Det er derfor ikke sannsynlig at de økte modellstørrelsene og oppdateringstidene er for store.
Refaktoreringsmetodikk
Her er en metodikk for å refaktorere en modell fra en enkelt rollespilldimensjonstabell, til en utforming med én tabell per rolle.
Fjern inaktive relasjoner.
Vurder å gi nytt navn til dimensjonstabellen for rollespill for å beskrive rollen bedre. I eksemplet i denne artikkelen er
Airport
tabellen relatert til denArrivalAirport
kolonnen iFlight
tabellen, slik at den får nytt navn somArrival Airport
.Opprett en kopi av rollespilltabellen, og gi den et navn som gjenspeiler rollen. Hvis det er en importtabell, anbefaler vi at du oppretter en beregnet tabell. Hvis det er en DirectQuery-tabell, kan du duplisere Power Query-spørringen.
I eksemplet ble
Departure Airport
tabellen opprettet ved hjelp av følgende beregnede tabelldefinisjon.Departure Airport = 'Arrival Airport'
Opprett en aktiv relasjon for å relatere den nye tabellen.
Vurder å gi nytt navn til kolonnene i tabellene, slik at de gjenspeiler rollen deres nøyaktig. I eksemplet i denne artikkelen er alle kolonnene prefiks med ordet Avreise eller Ankomst. Disse navnene sikrer at rapportvisualobjekter som standard har selvbeskrivende og ikke-tvetydige etiketter. Det forbedrer også Q&A-opplevelsen, slik at brukerne enkelt kan skrive nøyaktige spørsmål.
Vurder å legge til beskrivelser i rollespilltabeller. (I ruten Data vises en beskrivelse i et verktøytips når en rapportforfatter holder markøren over tabellen.) På denne måten kan du formidle andre filteroverføringsdetaljer til rapportforfattere.
Inaktive relasjoner
I bestemte tilfeller kan inaktive relasjoner dekke bestemte rapporteringsbehov.
Vurder ulike modell- og rapporteringskrav:
- En salgsmodell inneholder en
Sales
tabell som har to datokolonner:OrderDate
ogShipDate
. - Hver rad i
Sales
tabellen registrerer én enkelt rekkefølge. - Datofiltre brukes nesten alltid på
OrderDate
-kolonnen, som alltid lagrer en gyldig dato. - Bare ett mål krever datofilteroverføring til
ShipDate
-kolonnen, som kan inneholde BLANK-er (inntil bestillingen sendes). - Det er ikke nødvendig å filtrere (eller gruppere) ordrer samtidig og forsendelsesdatoperioder.
Her er et delvis modelldiagram over de to tabellene.
Det finnes to modellrelasjoner mellom tabellene Sales
og Date
. Kolonnene OrderDate
og ShipDate
i Sales
tabellen er knyttet til Date
kolonnen i Date
tabellen. I denne modellen er de to rollene for Date
tabellen ordredato og forsendelsesdato. Det er relasjonen til den OrderDate
kolonnen som er aktiv.
Alle de seks målene, unntatt ett, må filtreres etter kolonnen OrderDate
. Det Orders Shipped
målet må imidlertid filtrere etter ShipDate
-kolonnen.
Her er måldefinisjonen for Orders
. Den teller ganske enkelt radene i Sales
tabellen i filterkonteksten. Eventuelle filtre som brukes på Date
tabellen overføres til kolonnen OrderDate
.
Orders = COUNTROWS(Sales)
Her er måldefinisjonen for Orders Shipped
. Den bruker USERELATIONSHIP DAX-funksjonen, som aktiverer filteroverføring for en bestemt relasjon, men bare under evalueringen av uttrykket. I dette eksemplet brukes relasjonen til ShipDate
kolonnen.
Orders Shipped =
CALCULATE(
COUNTROWS(Sales)
,USERELATIONSHIP('Date'[Date], Sales[ShipDate])
)
Denne modellutformingen støtter produksjon av følgende rapportutforming.
Rapportsiden filtreres etter kvartal 2019 Q4. Tabellvisualobjektet grupperer etter måned og viser ulike salgsstatistikker. Målingene Orders
og Orders Shipped
gir forskjellige resultater. Hver av dem bruker den samme sammendragslogikken (telle rader i Sales
tabellen), men forskjellige Date
tabellfilteroverføring.
Legg merke til at kvartalssliceren inneholder et BLANK-alternativ. Dette sliceralternativet vises som et resultat av tabellutvidelse. Selv om hver Sales
tabellrad har en gyldig ordredato, har noen rader en TOM forsendelsesdato – disse ordrene er ennå ikke sendt. Tabellutvidelse anser også inaktive relasjoner, og derfor kan BLANK-er vises på grunn av BLANK-er på mange-siden av relasjonen (eller på grunn av problemer med dataintegritet).
Notat
Sikkerhet på radnivå (RLS) filtreres bare gjennom aktive relasjoner. RLS-filtre overføres aldri for inaktive relasjoner, selv når USERELATIONSHIP DAX-funksjonen brukes av en måldefinisjon.
Anbefalinger
Vi anbefaler at du definerer aktive relasjoner når det er mulig, spesielt når RLS-roller er definert for datamodellen. De utvider omfanget og potensialet for hvordan modellen kan brukes av rapportforfattere, og brukere som arbeider med Q&A. Det betyr at rollespilldimensjonstabeller bør dupliseres i modellen.
I bestemte tilfeller kan du imidlertid definere én eller flere inaktive relasjoner for en rollespilldimensjonstabell. Du kan vurdere denne fremgangsmåten når:
- Det er ikke nødvendig at visualobjekter i rapporten filtreres samtidig etter ulike roller.
- Du bruker DAX-funksjonen USERELATIONSHIP til å aktivere en bestemt relasjon for relevante modellberegninger.
Relatert innhold
Hvis du vil ha mer informasjon om denne artikkelen, kan du se følgende ressurser: