Bruk mange-mange-relasjoner i Power BI Desktop

Med relasjoner med en mange-mange-kardinalitet i Power BI Desktop kan du sammensette tabeller ved å bruke en kardinalitet av mange-til-mange. Du kan enkelt og intuitivt opprette datamodeller som inneholder to eller flere datakilder. Relasjoner med en mange-mange-kardinalitet er del av de større funksjonene for sammensatte modeller i Power BI Desktop.

En mange-til-mange-relasjon i ruten «Rediger relasjon» i Power BI Desktop

En relasjon med en mange-mange-kardinalitet i Power BI Desktop er sammensatt av tre relaterte funksjoner:

  • Sammensatte modeller: En sammensatt modell tillater at en rapport kan ha to eller flere datatilkoblinger, inkludert DirectQuery-koblinger eller import, i en hvilken som helst kombinasjon. Du finner mer informasjon i Bruk sammensatte modeller i Power BI Desktop.

  • Relasjoner med en mange-mange-kardinalitet: Med sammensatte modeller kan du etablere relasjoner med en mange-mange-kardinalitet mellom tabeller. Denne tilnærmingen fjerner krav om unike verdier i tabeller. Den fjerner også tidligere midlertidige løsninger, for eksempel å introdusere bare nye tabeller for å opprette relasjoner. Denne funksjonen beskrives ytterligere i denne artikkelen.

  • Lagringsmodus: Nå kan du angi hvilke visualobjekter som krever en spørring til datakilder på serverdelen. Visualobjekter som ikke krever en spørring, importeres selv om de er basert på DirectQuery. Denne funksjonen bidrar til å forbedre ytelsen og redusere belastningen på serverdelen. Tidligere innledet til og med enkle visualobjekter, som for eksempel utsnitt, at spørringer ble sendt til serverdelkilder. Hvis du vil ha mer informasjon, kan du se Lagringsmodus i Power BI Desktop.

Hva en relasjon med en mange-mange-kardinalitet løser

Før relasjoner med en mange-mange-kardinalitet ble tilgjengelig ble relasjonen mellom to tabeller definert i Power BI Desktop. Minst en av tabellkolonnene som er involvert i relasjonen, måtte inneholde unike verdier. Ofte var det ingen kolonner som inneholdt unike verdier.

To tabeller kan for eksempel ha en kolonne med etiketten Country. Verdiene for Land var ikke unike i noen av tabellene. For å sammensette slike tabeller måtte du opprette en løsning. En løsning kunne være å introdusere ekstra tabeller med nødvendige unike verdier. Med relasjoner med en mange-mange-kardinalitet kan du sammensette slike tabeller direkte ved å bruke en kardinalitet av mange-til-mange.

Bruk relasjoner med en mange-mange-kardinalitet

Når du definerer en relasjon mellom to tabeller i Power BI, må du definere kardinaliteten for relasjonen. Relasjonen mellom ProductSales og Product—ved bruk av kolonnene ProductSales[ProductCode] og Product[ProductCode]— vil for eksempel bli definert som Many-1. Vi definerer relasjonen på denne måten fordi hvert produkt har mange salg, og kolonnen i Produkttabellen (ProductCode) er unik. Når du definerer en relasjonskardinalitet som Many-1, 1-Many eller 1-1, bekrefter Power BI det slik at kardinaliteten du velger samsvarer med de gjeldende dataene.

Du kan for eksempel ta en titt på den enkle modellen i bildet:

ProductSales og Product-tabell, Relasjonsvisning, Power BI Desktop

Se for deg at Produkt-tabellen viser bare to rader, som vist:

Visualobjekt i produkttabell med to rader, Power BI Desktop

Tenk deg også at salgstabellen bare har fire rader, inkludert en rad for et produkt C. På grunn av en referanseintegritetsfeil eksisterer ikke produkt C-raden i tabellen Produkt.

Visualobjekt i produkttabell med fire rader, Power BI Desktop

ProductName og Price (fra tabellen Product), sammen med det totale antallet for hvert produkt (fra tabellen ProductSales), vises:

Visualobjekt viser produktnavnet, prisen og mengden, Power BI Desktop

Som du kan se i det foregående bildet er en blank rad ProductName tilknyttet salg for produkt C. Denne blanke raden utgjør følgende:

  • Rader i ProductSales-tabellen som ikke har en tilsvarende rad i Produkt-tabellen. Det er et referanseproblem, som vi ser for produkt C i eksemplet.

  • Alle rader i ProductSales-tabellen der sekundærnøkkelkolonnen er null.

På grunn av dette omfatter den tomme raden i begge tilfeller salg der ProductName og Pris er ukjent.

Noen ganger er tabellene forbundet med to kolonner, men ingen av kolonnene er unike. Vurder for eksempel disse to tabellene:

  • Salg-tabellen viser salgsdata etter Stat, og hver rad inneholder salgsbeløpet for denne salgstypen i den aktuelle staten. Statene er blant annet CA, WA og TX.

    Salgstabell som viser salg etter stat, Power BI Desktop

  • CityData-tabellen som viser data på byer, inkludert innbyggere og stat (som CA, WA, og New York).

    Salgstabell som viser by, stat og innbyggere, Power BI Desktop

En kolonne for Stat er nå i begge tabellene. Det er rimelig å ønske å rapportere både om det totale salget for staten og totalt antall innbyggere i hver stat. Men det finnes et problem: kolonnen Stat er ikke unik i noen av tabellene.

Tidligere midlertidig løsning

Før utgivelsen av Power BI Desktop i juli 2018 kunne du ikke opprette direkte relasjoner mellom tabeller. En vanlig løsning var å:

  • Opprette en tredje tabell som inneholder bare unike stats-ID-er. Tabellen kan være en eller alle av:

    • En beregnet tabell (definert ved hjelp av Dataanalyseuttrykk [DAX]).
    • En tabell basert på en spørring som er definert i redigeringsprogrammet Power Query, som kan vise de unike ID-ene hentet fra én av tabellene.
    • Det kombinerte fullstendige settet.
  • Relater deretter de to originale tabellene til den nye tabellen ved å bruke vanlige Many-1-relasjoner.

Du kan la tabellen med løsningen være synlig. Eller du kan skjule tabellen med løsningen slik at den ikke vises i Felter-listen. Hvis du skjuler tabellen vil Many-1-relasjonene vanligvis angis til å filtrere i begge retninger, og du kan bruke Statsfeltet fra begge tabellene. Den senere kryssfiltreringen ville forplantet seg til den andre tabellen. Denne fremgangsmåten vises i illustrasjonen nedenfor:

Gjemt statstabell, Relasjonsvisning, Power BI Desktop

Et visualobjekt som viser Stat (fra CityData-tabellen), sammen med totalt antall Innbyggere og totalt Salg, ville da bli vist som følger:

Skjermbilde viser en tabell med delstat, befolkning og salgsdata.

Obs!

Fordi staten fra CityData-tabellen brukes i løsningen er det bare statene i den tabellen som er listet opp, så TX er ekskludert. I motsetning til ​​Many-1-relasjoner, mens den totale raden inkluderer alle Sales (inkludert fra TX), inkluderer ikke detaljene en tom rad som dekker slike uoverensstemmende rader. På samme måte vil ingen blank rad dekke Salg hvor det er nullverdi for Staten.

Si at du også legger til By til visualobjektet. Selv om innbyggere per by er kjent, gjentar Salg vist for By ganske enkelt Salg for den tilsvarende Staten. Scenarioet oppstår normalt når kolonnegrupperingen ikke er relatert til en aggregert måling, som vist her:

Innbyggere og salg for stat og by, Power BI Desktop

La oss si at du definerer den nye salgstabellen som kombinasjonen av alle Stater her, og vi synliggjør den i Felter-listen. Det samme visualobjektet vil vise Stat (på den nye tabellen), totalt antall Innbyggere og totalt Salg:

Visualobjekt for stat, innbyggere og salg, Power BI Desktop

Som du kan se, TX—med Salgsdata, men ukjent Innbyggerdata —og New York— med kjent Innbyggerdata, men ingen Salgsdata — vil være inkludert. Denne midlertidige løsningen er ikke optimal, og har mange problemer. For relasjoner med mange-mange-kardinalitet er de resulterende problemene adressert, som beskrevet i neste avsnitt.

Bruk en relasjon med en mange-mange-kardinalitet i stedet for løsningen

Du kan relatere tabeller direkte, slik som de vi beskrev tidligere, uten å måtte ty til lignende midlertidige løsninger. Det er nå mulig å angi relasjonskardinaliteten til mange-til-mange. Denne innstillingen viser at ingen av tabellene inneholder unike verdier. For slike relasjoner kan du fremdeles kontrollere hvilken tabell som filtrerer den andre tabellen. Eller du kan bruke toveis filtrering, der hver tabell filtrerer den andre.

I Power BI Desktop er kardinaliteten standard til mange-til-mange når den bestemmer at ingen av tabellene inneholder unike verdier for relasjonskolonnene. I slike tilfeller bekrefter en advarsel at du vil opprette en relasjon, og endringen er ikke den utilsiktede effekten av et dataproblem.

Når du for eksempel oppretter et forhold direkte mellom CityData og Salg—der filtre skal flyte fra CityData til Salg—viser Power BI Desktop dialogboksen Rediger relasjon:

Endre dialogboks for relasjon, Power BI Desktop

Den resulterende Relasjon-visningen ville da vist den direkte mange-til-mange-relasjonen mellom de to tabellene. Tabellenes utseende i Felter-listen, og deres senere oppførsel når visualobjektene opprettes, ligner på da vi brukte løsningen. Den ekstra tabellen som viser de distinkte statsdataene blir ikke synliggjort i løsningen. Som beskrevet tidligere vil et visualobjekt som viser Stat, Befolkning og Salgsdata vises:

Tabell for Stat, Innbyggere og Salg, Power BI Desktop

De viktigste forskjellene mellom relasjoner med en mange-mange-kardinalitet og de mer vanlige Mange-1-relasjonene er som følger:

  • Verdiene som vises, inkluderer ikke en tom rad som omfatter ikke-samsvarende rader i den andre tabellen. Verdiene står heller ikke for rader der kolonnen som brukes i relasjonen i den andre tabellen er null.

  • Du kan ikke bruke RELATED()-funksjonen fordi mer enn én rad kan være relatert.

  • Bruk av ALL()-funksjonen på en tabell fjerner ikke filtre som brukes på andre tilknyttede tabeller ved hjelp av en mange-til-mange-relasjon. I det foregående eksemplet ville en måling som er definert som vist her ikke fjerne filter på kolonner i den relaterte CityData-tabellen:

    Skripteksempel

    Et visualobjekt som viser data for Stat, Salg og Salg totalt ville resultere i denne grafikken:

    Visualobjekt i tabell

Med de foregående forskjellene i bakhodet må du sørge for at beregningene som bruker ALL(<Table>), for eksempel % av total sum , returnerer de tiltenkte resultatene.

Begrensninger og viktige hensyn

Det finnes et par begrensninger i denne versjonen av relasjoner med mange-mange-kardinalitet og sammensatte modeller.

De følgende Live Connect (flerdimensjonale)-kildene kan ikke brukes med sammensatte modeller:

  • SAP HANA
  • SAP Business Warehouse
  • SQL Server Analysis Services
  • Power BI-datasett
  • Azure Analysis Services

Når du kobler til disse flerdimensjonale kildene ved å bruke DirectQuery kan du ikke koble til en annen DirectQuery-kilde eller kombinere den med importerte data.

De eksisterende begrensningene ved å bruke DirectQuery gjelder fremdeles når du bruker relasjoner med en mange-mange-kardinalitet. Det er nå mange begrensninger per tabell, avhengig av tabellenes lagringsmodus. En beregnet kolonne i en importert tabell kan for eksempel referere til andre tabeller, men en beregnet kolonne i en DirectQuery-tabell kan fremdeles bare referere til kolonner i samme tabell. Andre begrensninger gjelder hele modellen hvis noen tabeller i modellen er DirectQuery. Funksjonene hurtiginnsikter og Spørsmål og svar er for eksempel ikke tilgjengelige på en modell hvis noen av tabellene har en lagringsmodus av typen DirectQuery.

Neste trinn

Hvis du vil ha mer informasjon om sammensatte modeller og DirectQuery, kan du se følgende artikler: