Dela via


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.

Diagram som visar en modell som innehåller tre tabeller. Designen beskrivs i följande stycke.

Den första tabellen heter Customer., och den innehåller tre kolumner: Country-Region, Customeroch CustomerCode. Den andra tabellen heter Productoch innehåller tre kolumner: Color, Productoch SKU. Den tredje tabellen heter Salesoch innehåller fyra kolumner: CustomerCode, OrderDate, Quantityoch 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.

Diagram som visar att modellen nu visar tabellraderna. Radinformationen beskrivs i följande stycke.

Radinformationen för de tre tabellerna beskrivs i följande punktlista:

  • Tabellen Customer har två rader:
    • CustomerCode CUST-01, CustomerCustomer-1, Country-RegionUSA
    • CustomerCode CUST-02, CustomerCustomer-2, Country-RegionAustralia
  • Tabellen Product har tre rader:
    • SKU CL-01, ProductT-shirt, ColorGrön
    • SKU CL-02, ProductJeans, ColorBlå
    • SKU AC-01, ProductHatt, ColorBlå
  • Tabellen Sales har tre rader:
    • OrderDate 1 januari 2019, CustomerCodeCUST-01, SKUCL-01, Quantity10
    • OrderDate 2 februari 2019, CustomerCodeCUST-01, SKUCL-02, Quantity20
    • OrderDate 3 mars 2019, CustomerCodeCUST-02, SKUCL-01, Quantity30

Överväg nu följande rapportsida.

Diagram som visar rapportsidan som innehåller tre visuella objekt. Informationen beskrivs i följande stycke.

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.

Diagram som visar en modell som relationen mellan tabellerna Produkt och Försäljning nu är dubbelriktad.

Produkt utsnittet listar nu ett enda alternativ: T-shirt. Det här alternativet representerar den enda produkt som säljs till australiensiska kunder.

Diagram som visar rapportsidan som innehåller tre visuella objekt med Produkt framhävd. Informationen beskrivs i följande stycke.

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".

Diagram som visar att fönstret Filter för produktsnittet nu filtreras efter total kvantitet och inte är 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.

diagram som visar att två produkter visas i ett visuellt tabellobjekt. I kolumnen Sålda länder är Jeans 1 och T-shirt är 2.

Mer information om den här artikeln finns i följande resurser: