Vägledning för dubbelriktad relation
Den här artikeln riktar sig till dig som datamodellerare som arbetar med Power BI Desktop. Det ger dig vägledning om när du ska skapa dubbelriktade modellrelationer. En dubbelriktad relation är en relation som filtrerar i båda riktningarna.
Kommentar
En introduktion till modellrelationer beskrivs inte i den här artikeln. Om du inte är helt bekant med relationer, deras egenskaper eller hur du konfigurerar dem rekommenderar vi att du först läser artikeln Modellrelationer i Power BI Desktop .
Det är också viktigt att du har en förståelse för star-schemadesign. Mer information finns i Förstå star-schema och vikten för Power BI.
I allmänhet rekommenderar vi att du minimerar användningen av dubbelriktade relationer. Det beror på att de kan påverka modellens frågeprestanda negativt och eventuellt ge förvirrande upplevelser för rapportanvändarna.
Det finns dock tre scenarier när dubbelriktad filtrering kan lösa specifika krav:
Särskilda modellrelationer
Dubbelriktade relationer spelar en viktig roll när du skapar följande två särskilda modellrelationstyper:
- En-till-en: Alla en-till-en-relationer måste vara dubbelriktade – det går inte att konfigurera något annat. I allmänhet rekommenderar vi inte att du skapar de här typerna av relationer. En fullständig diskussion och alternativa designmönster finns i en-till-en-relationsvägledning.
- Många-till-många: När du relaterar två dimensionstabeller, krävs en bryggtabell. Ett dubbelriktat filter krävs för att säkerställa att filter sprids över bryggningstabellen. Mer information finns i vägledning för många-till-många-relationer.
Utsnittsalternativ "med data"
Dubbelriktade relationer kan leverera utsnitt som begränsar alternativen till var data finns. (Om du är bekant med Excel-pivottabeller och utsnitt är det standardbeteendet när du hämtar data från en Power BI-semantisk modell eller en Analysis Services-modell.) För att förklara vad det innebär bör du först överväga följande modelldiagram.
Den första tabellen heter Customer
., och den innehåller tre kolumner: Country-Region
, Customer
och CustomerCode
. Den andra tabellen heter Product
och innehåller tre kolumner: Color
, Product
och SKU
. Den tredje tabellen heter Sales
och innehåller fyra kolumner: CustomerCode
, OrderDate
, Quantity
och SKU
. Tabellerna Customer
och Product
är dimensionstabeller och var och en har en en-till-många-relation till Sales
-tabellen. Varje relation filtrerar i en enda riktning.
För att beskriva hur dubbelriktad filtrering fungerar har modelldiagrammet ändrats för att visa tabellraderna. Alla exempel i den här artikeln baseras på dessa data.
Radinformationen för de tre tabellerna beskrivs i följande punktlista:
- Tabellen
Customer
har två rader:-
CustomerCode
CUST-01,Customer
Customer-1,Country-Region
USA -
CustomerCode
CUST-02,Customer
Customer-2,Country-Region
Australia
-
- Tabellen
Product
har tre rader:-
SKU
CL-01,Product
T-shirt,Color
Grön -
SKU
CL-02,Product
Jeans,Color
Blå -
SKU
AC-01,Product
Hatt,Color
Blå
-
- Tabellen
Sales
har tre rader:-
OrderDate
1 januari 2019,CustomerCode
CUST-01,SKU
CL-01,Quantity
10 -
OrderDate
2 februari 2019,CustomerCode
CUST-01,SKU
CL-02,Quantity
20 -
OrderDate
3 mars 2019,CustomerCode
CUST-02,SKU
CL-01,Quantity
30
-
Överväg nu följande rapportsida.
Sidan består av två utsnitt och ett visuellt kort. Det första utsnittet baseras på fältet Country-Region
och har två alternativ: Australien och USA. Det segmenteras för närvarande av Australien. Det andra utsnittet baseras på fältet Product
, och det har tre alternativ: Hatt, Jeans och T-shirt. Inga objekt är markerade (vilket innebär att inga produkter filtreras). Det visuella kortobjektet visar en kvantitet på 30.
När rapportanvändare segmenteras efter Australien kanske du vill begränsa produktutsnittet till att visa alternativ där data relaterar till australiensisk försäljning. Det är vad som menas med att visa utsnittsalternativ "med data". Du kan uppnå det här beteendet genom att ange relationen mellan tabellerna Product
och Sales
för att filtrera i båda riktningarna.
Produkt utsnittet listar nu ett enda alternativ: T-shirt. Det här alternativet representerar den enda produkt som säljs till australiensiska kunder.
Först rekommenderar vi att du noga överväger om den här designen fungerar för dina rapportanvändare. Vissa rapportanvändare tycker att upplevelsen är förvirrande eftersom de inte förstår varför utsnittsalternativ visas dynamiskt eller försvinner när de interagerar med andra utsnitt.
Om du väljer att visa utsnittsalternativ "med data" rekommenderar vi inte att du konfigurerar dubbelriktade relationer. Dubbelriktade relationer kräver mer bearbetning och kan därför påverka frågeprestanda negativt, särskilt när antalet dubbelriktade relationer i modellen ökar.
Det finns ett bättre sätt att uppnå samma resultat: I stället för att använda dubbelriktade filter kan du använda ett filter på visuell nivå för själva produkt utsnittet.
Nu ska vi tänka på att relationen mellan tabellerna Product
och Sales
inte längre filtreras i båda riktningarna. Och följande måttdefinition har lagts till i tabellen Sales
.
Total Quantity = SUM(Sales[Quantity])
Om du vill visa produktutsnittsalternativen "med data" behöver det helt enkelt filtreras efter Total Quantity
måttet med villkoret "är inte tomt".
Analys av dimension till dimension
Ett annat scenario med dubbelriktade relationer behandlar en faktatabell som en bryggtabell. På så sätt kan den analysera dimensionstabelldata i filterkontexten för en annan dimensionstabell.
Tänk på hur följande frågor kan besvaras med hjälp av exempelmodellen i den här artikeln:
- Hur många färger såldes till australiensiska kunder?
- Hur många länder/regioner har köpt jeans?
Båda frågorna kan besvaras utan att sammanfatta data i överbryggningstabellen. De kräver dock att filter sprids från en dimensionstabell till en annan. När filter sprids via faktatabellen kan sammanfattning av dimensionstabellkolumner uppnås med hjälp av DAX-funktionen DISTINCTCOUNT—och eventuellt DAX-funktionerna MIN och MAX.
Eftersom faktatabellen fungerar som en bryggtabell kan du använda vägledning för många-till-många-relationer för att koppla två dimensionstabeller. Det kräver att du konfigurerar minst en relation för att filtrera i båda riktningarna. Mer information finns i vägledning för många-till-många-relationer.
Men som redan beskrivs i den här artikeln kommer den här designen sannolikt att leda till en negativ inverkan på prestanda och konsekvenserna för användarupplevelsen som rör utsnittsalternativet "med data". Därför rekommenderar vi att du aktiverar dubbelriktad filtrering i en måttdefinition med hjälp av DAX-funktionen CROSSFILTER i stället. Du kan använda funktionen CROSSFILTER för att ändra filterriktningar – eller till och med inaktivera relationen – under utvärderingen av ett uttryck.
Överväg följande måttdefinition som lagts till i tabellen Sales
. I det här exemplet har modellrelationen mellan tabellerna Customer
och Sales
konfigurerats för att filtrera i en enkel riktning.
Different Countries Sold =
CALCULATE(
DISTINCTCOUNT(Customer[Country-Region]),
CROSSFILTER(
Customer[CustomerCode],
Sales[CustomerCode],
BOTH
)
)
Under utvärderingen av måttet Different Countries Sold
filtreras relationen mellan tabellerna Customer
och Sales
i båda riktningarna.
Följande visuella tabellobjekt visar statistik för varje produkt som säljs. Kolumnen Quantity
är bara summan av kvantitetsvärden. Kolumnen Different Countries Sold
representerar antalet unika land-regionvärden för alla kunder som har köpt produkten.
Relaterat innehåll
Mer information om den här artikeln finns i följande resurser: