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

Diagram showing a model containing three tables. The design is described in the following paragraph.

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.

Diagram showing that the model now reveals the table rows. The row details are described in the following paragraph.

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.

Diagram showing the report page containing three visuals. The details are described in the following paragraph.

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.

Diagram showing a model that the relationship between the Product and Sales table is now bi-directional.

Produkt-utsnittet visar nu ett enda objekt: T-shirt. Det här objektet representerar den enda produkt som säljs till australiensiska kunder.

Diagram showing the report page containing three visuals with Product called out. The details are described in the following paragraph.

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

Diagram showing that the Filters pane for the Product slicer now filters by

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.

Diagram showing that two products are listed in a table visual. In the

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