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. De kan påverka modellfrågeprestanda negativt och eventuellt ge förvirrande upplevelser för rapportanvändarna.
Det finns 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 design finns i Vägledning för en-till-en-relation.
- Många-till-många: När du relaterar två tabeller av dimensionstyp krävs en bryggningstabell. 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 (Relatera många-till-många-dimensioner).
Utsnittsobjekt "med data"
Dubbelriktade relationer kan leverera utsnitt som begränsar objekt till där 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 (tidigare känd som en datauppsättning) 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 Kund och innehåller tre kolumner: Country-Region, Customer och CustomerCode. Den andra tabellen heter Product och innehåller tre kolumner: Färg, Produkt och SKU. Den tredje tabellen heter Försäljning och innehåller fyra kolumner: CustomerCode, OrderDate, Quantity och SKU. Tabellerna Kund och Produkt är tabeller av dimensionstyp och var och en har en en-till-många-relation till tabellen Försäljning. 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.
Kommentar
Det går inte att visa tabellrader i Power BI Desktop-modelldiagrammet. Det görs i den här artikeln för att stödja diskussionen med tydliga exempel.
Radinformationen för de tre tabellerna beskrivs i följande punktlista:
- Tabellen Kund har två rader:
- CustomerCode CUST-01, Customer Customer-1, Country-Region USA
- CustomerCode CUST-02, Customer Customer-2, Country-Region Australia
- Tabellen Produkt har tre rader:
- SKU CL-01, Produkt T-shirt, Färg grön
- SKU CL-02, Produktjeans, Färgblå
- SKU AC-01, Product Hat, Färg blå
- Tabellen Försäljning har tre rader:
- OrderDate January 1 2019, CustomerCode CUST-01, SKU CL-01, Quantity 10
- OrderDate February 2 2019, CustomerCode CUST-01, SKU CL-02, Quantity 20
- OrderDate March 3 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 är för Country-Region och det har två objekt: Australien och USA. Det segmenteras för närvarande av Australien. Det andra utsnittet är för Product, och det har tre objekt: Hat, 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 objekt där data relaterar till australiensisk försäljning. Det är vad som menas med att visa utsnittsobjekt "med data". Du kan uppnå det här beteendet genom att konfigurera relationen mellan tabellen Produkt och Försäljning för att filtrera i båda riktningarna.
Produkt-utsnittet visar nu ett enda objekt: T-shirt. Det här objektet representerar den enda produkt som säljs till australiensiska kunder.
Vi föreslår först 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. De förstår inte varför utsnittsobjekt dynamiskt visas eller försvinner när de interagerar med andra utsnitt.
Om du väljer att visa utsnittsobjekt "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 din modell ö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å på själva produkt utsnittet.
Nu ska vi överväga att relationen mellan tabellen Produkt och Försäljning inte längre filtreras i båda riktningarna. Och följande måttdefinition har lagts till i tabellen Försäljning .
Total Quantity = SUM(Sales[Quantity])
Om du vill visa produktutsnittsobjekten "med data" måste det helt enkelt filtreras efter måttet Total kvantitet med villkoret "är inte tomt".
Analys av dimension till dimension
Ett annat scenario med dubbelriktade relationer behandlar en tabell av faktatyp som en bryggningstabell. På så sätt kan den analysera tabelldata av dimensionstyp i filterkontexten för en annan tabell av dimensionstyp.
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 tabellen med bryggning av faktatyp. De kräver dock att filter sprids från en tabell av dimensionstyp till den andra. När filter sprids via tabellen av faktatyp kan sammanfattning av tabellkolumner av dimensionstyp uppnås med dax-funktionen DISTINCTCOUNT – och eventuellt funktionerna MIN och MAX DAX.
Eftersom tabellen av faktatyp fungerar som en bryggningstabell kan du följa många-till-många-relationsvägledningen för att relatera två tabeller av dimensionstyp. 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 (Relatera många-till-många-dimensioner).
Men som redan beskrivs i den här artikeln kommer den här designen sannolikt att leda till en negativ inverkan på prestanda och användarupplevelsens konsekvenser relaterade till utsnittsobjekt "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. Funktionen CROSSFILTER kan användas 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 Försäljning . I det här exemplet har modellrelationen mellan tabellerna Kund och Försäljning konfigurerats för att filtrera i en enda riktning.
Different Countries Sold =
CALCULATE(
DISTINCTCOUNT(Customer[Country-Region]),
CROSSFILTER(
Customer[CustomerCode],
Sales[CustomerCode],
BOTH
)
)
Under utvärderingen av måttuttrycket Sålda länder filtrerar relationen mellan tabellerna Kund och Försäljning 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 Sålda länder representerar det distinkta antalet värden för land-region för alla kunder som har köpt produkten.
Relaterat innehåll
Mer information om den här artikeln finns i följande resurser:
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för