Arbeta med relationer och kardinalitet

Slutförd

Till skillnad från andra databashanteringssystem har Power BI konceptet riktning för en relation. Den här riktningen spelar en viktig roll vid filtrering av data mellan flera tabeller. När du läser in data letar Power BI automatiskt efter relationer som finns i data genom att matcha kolumnnamn. Du kan även använda Hantera relationer till att redigera dessa alternativ manuellt.

Du har till exempel hämtat många tabeller från databasen Sales och följande bild är ett exempel på din semantiska modell. Power BI har automatiskt detekterat flera relationer men du kan inte bedöma vad de innebär. Du vill se till att relationerna stämmer överens med dem som finns i dina data.

Skärmbild av semantikmodellen Exempel

Relationer

Följande är olika typer av relationer som du hittar i Power BI.

Många-till-en(*:1)- eller en-till-många-relation (1: *)

  • Beskriver en relation där du har många förekomster av ett värde i en kolumn som är relaterad till en unik motsvarande förekomst i en annan kolumn.

  • Beskriver riktningen mellan fakta- och dimensionstabeller.

  • Är den vanligaste typen av riktning och är standardinställning i Power BI när du automatiskt skapar relationer.

Ett exempel på en-till-många-relation skulle vara tabellerna CountryName och Territory, där du kan ha många distrikt som är kopplade till ett unikt land.

Skärmbild av många-till-en-relationen.

En-till-en-relation (1:1):

  • Beskriver en relation där bara en förekomst av ett värde är gemensam mellan två tabeller.

  • Kräver unika värden i båda tabellerna.

  • Rekommenderas inte, eftersom den här relationen lagrar redundant information och föreslår att modellen inte har utformats på rätt sätt. Det är bättre att kombinera tabellerna.

Ett exempel på en en-till-en-relation skulle vara om du har produkter och produkt-ID:n i två olika tabeller. Att skapa en en-till-en-relation är redundant och dessa två tabeller bör kombineras.

Skärmbild av en-till-en-relationen.

Många-till-många-relation (.):

  • Beskriver en relation där många värden är gemensamma mellan två tabeller.

  • Kräver inte unika värden i någon tabell i en relation.

  • Rekommenderas inte, eftersom en brist på unika värden inför tvetydigheter och dina användare kanske inte vet vilken kolumn med värden som hänvisar till vad.

I följande bild visas till exempel en många-till-många-relation mellan tabellerna Sales och Order i kolumnen OrderDate, eftersom flera försäljningar kan ha flera beställningar kopplade till dem. Tvetydigheter introduceras eftersom båda tabellerna har samma beställningsdatum.

Skärmbild av många-till-många-relationen.

Korsfilterriktning

Data kan filtreras på en eller båda sidor av en relation.

Med en enkel korsfilterriktning:

  • Bara en tabell i en relation kan användas för att filtrera data. Till exempel kan tabell 1 filtreras med tabell 2, men tabell 2 kan inte filtreras med tabell 1.

    Tips

    Följ riktningen för pilen på relationen mellan dina tabeller för att veta vilken riktning som filtret kommer att flöda. Vanligtvis vill du att dessa pilar ska peka på din faktatabell.

  • För en en-till-många- eller många-till-en-relation kommer korsfilterriktningen att vara från "en"-sidan, vilket innebär att filtreringen sker i tabellen som har många värden.

Med båda korsfilterriktningar eller dubbelriktad korsfiltrering:

  • En tabell i en relation kan användas för att filtrera den andra. Till exempel kan en dimensionstabell filtreras genom faktatabellen, och faktatabeller kan filtreras genom dimensionstabellen.

  • Du kanske har lägre prestanda när du använder dubbelriktad korsfiltrering med många-till-många-relationer.

En varning som gäller dubbelriktad korsfiltrering: Du bör inte aktivera relationer med dubbelriktad korsfiltrering om du inte helt och hållet förstår konsekvenserna. Om du aktiverar det kan det leda till tvetydigheter, översampling, oväntade resultat och potentiell prestandaförsämring.

Kardinalitet och korsfilterriktning

För en-till-en-relationer är dubbelriktad korsfiltrering det enda tillgängliga alternativet. Data kan filtreras på båda sidor av denna relation och resultera i ett distinkt, entydigt värde. Du kan till exempel filtrera på ett Product ID (produkt-ID) och returneras en enda Product (produkt) och du kan filtrera på en Product och returneras ett enda Product ID.

För många-till-många-relationer kan du välja att filtrera i en enda riktning eller i båda riktningarna med hjälp av dubbelriktad korsfiltrering. Tvetydigheten som är associerad med dubbelriktad korsfiltrering förstärks i en många-till-många-relation eftersom flera vägar kommer att finnas mellan olika tabeller. Om du skapar ett mått, en beräkning eller ett filter kan oavsiktliga konsekvenser förekomma där dina data filtreras och, beroende på vilken relation som Power BI-motorn väljer när filtret tillämpas kan slutresultatet skilja sig. Den här situationen gäller även för dubbelriktade relationer och varför du bör vara försiktig när du använder dem.

Av den anledningen är många-till-många-relationer och/eller dubbelriktade relationer komplicerade. Om du inte är säker på hur dina data ser ut när de aggregeras kan dessa typer av öppna relationer med flera filtreringsriktningar kan introducera flera vägar genom data.

Skapa många-till-många-relationer

Tänk dig ett scenario där du har fått uppgiften att skapa en visuellt objekt som undersöker budgetar för kunder och konton. Du kan ha flera kunder på samma konto och flera konton med samma kund, så att du vet att du måste skapa en många-till-många-relation.

Skärmbild av många-till-många-relation.

Om du vill skapa den här relationen går du till Hantera relationer>Ny. I det resulterande fönstret skapar du en relation mellan kolumnen Customer ID i CustomerTable och AccountTable. Relationen är inställd på många-till-många och filtertypen är i båda riktningarna. Du får direkt en varning att du bara ska använda den här typen av relation om det förväntas att ingen av kolumnerna får unika värden eftersom du kan få oväntade värden. Eftersom du vill filtrera i båda riktningarna väljer du dubbelriktad korsfiltrering.

Välj OK. Nu har du skapat en många-till-många-relation.

Skärmbild av många-till-många-relation i Hantera relation.

Mer information finns i Många-till-många-relationer i Power BI.