Monta moneen -yhteyksien käyttäminen Power BI Desktopissa

Power BI Desktopin moni-moneen-kardinaliteetin sisältävien suhteiden avulla voit liittää taulukoita, jotka käyttävät moni-moneen-kardinaliteettia. Voit helposti ja intuitiivisesti luoda tietomalleja, jotka sisältävät vähintään kaksi tietolähdettä. Moni-moneen-kardinaliteetin sisältävät suhteet ovat osa Power BI Desktopin laajempia yhdistelmämallien ominaisuuksia. Lisätietoja yhdistelmämalleista on artikkelissa Yhdistelmämallien käyttäminen Power BI Desktopissa.

Screenshot of a many-to-many relationship in the Edit relationship pane.

Mitä ongelmia moni-moneen-kardinaliteetin sisältävät suhteet ratkaisevat?

Ennen kuin moni-moneen-kardinaliteetin sisältävät suhteet olivat käytettävissä, kahden taulukon välinen suhde määritettiin Power BI:ssä. Ainakin yhdessä yhteykseen liittyvässä taulukon sarakkeessa oli oltava yksilöllisiä arvoja. Usein kuitenkin yksikään sarake ei sisältänyt yksilöllisiä arvoja.

Kahdessa taulukossa saattoi olla esimerkiksi CountryRegion-niminen sarake. CountryRegion-arvot eivät kuitenkaan olleet yksilöllisiä kummassakaan taulukossa. Tällaisten taulukoiden yhdistämiseksi täytyi luoda kiertotapoja. Yksi vaihtoehtoinen menetelmä voisi olla lisätä taulukkoja, jotka sisältävät tarvittavat yksilölliset arvot. Moni-moneen-kardinaliteetin sisältävien suhteiden avulla tällaisia taulukoita voi liittää toisiinsa suoraan, jos käytät suhdetta, jonka kardinaliteetti on moni-moneen.

Moni-moneen-kardinaliteetin sisältävien suhteiden käyttäminen

Kun määrität Power BI:ssä kahden taulukon välisen suhteen, sinun on määritettävä suhteen kardinaliteetti. Esimerkiksi yhteyksien Tuotemyynti ja Tuote – käyttämällä sarakkeita Tuotemyynti[Tuotekoodi] ja Tuote[Tuotekoodi]– yhteys määritettäisiin monta-yhteen-yhteydeksi. Yhteys määritetään näin, koska kullakin tuotteella on useita myynnit ja sarake Tuote-taulukossa (Tuotekoodi) on yksilöllinen. Kun määrität suhteen kardinaliteetiksi monta-yhteen, yksi-moneen tai yksi-yhteen, Power BI vahvistaa sen niin, että valittu kardinaliteetti vastaa varsinaisia tietoja.

Tutustu esimerkiksi tämän kuvan yksinkertaiseen malliin:

Screenshot of ProductSales and Product table in Relationship view.

Kuvittele nyt, että Tuote-taulukko näyttää vain kaksi riviä seuraavan mukaisesti:

Screenshot of a Product table visual with two rows.

Kuvittele myös, että Myynti-taulukossa on vain neljä riviä, mukaan lukien rivi tuotteelle C. Viite-eheyden virheen vuoksi C-tuoteriviä ei ole Tuote-taulukossa.

Screenshot of a Sales table visual with four rows.

Tuotenimi- ja Hinta-tiedot (Tuote-taulukosta) sekä jokaisen tuotteen Määrä-tieto (Tuotemyynti-taulukosta) esitettäisiin seuraavasti:

Screenshot of a Visual displaying the product name, price, and quantity.

Kuten edellä olevasta kuvasta näkyy, tuotteen C myyntiin on liitetty tyhjä Tuotenimi-rivi . Tämä tyhjä rivi perustuu seuraaviin seikkoihin:

  • Tuotemyynti-taulukon kaikki sellaiset rivit, joille ei ole vastaavaa riviä Tuote-taulukossa. Kyseessä on viite-eheyden ongelma, kuten näemme tuotteen C kohdalla tässä esimerkissä.

  • Tuotemyynti-taulukon kaikki sellaiset rivit, joiden viiteavainsarake on tyhjäarvo.

Näistä syistä tyhjä rivi selittää molemmissa tapauksissa myynnin, jossa Tuotenimi- ja Hinta-tietoja ei tunneta.

Joskus taulukot ovat yhdistettyjä kahdella sarakkeella, mutta kumpikaan sarake ei ole yksilöllinen. Otetaan esimerkiksi seuraavat kaksi taulukkoa:

  • Myynti-taulukossa näytetään myyntitiedot Osavaltio-arvon mukaan, ja kukin rivi sisältää myyntisumman kyseisen osavaltion myyntityypin mukaan. Osavaltioihin sisältyvät Kalifornian, Washingtonin ja TX:n osavaltiot.

    Screenshot of a Sales table displaying sales by state.

  • Kaupunkidata-taulukko näyttää tietoa kaupungeista, kuten asukasmäärän ja osavaltion (kuten Kalifornia, Washington ja New York).

    Screenshot of a Sales table displaying city, state, and population.

Molemmissa taulukoissa on nyt Osavaltio-sarake. On kohtuullista haluta raportti sekä osavaltion kokonaismyynnistä että kunkin osavaltion väestömäärästä. Ongelma on kuitenkin se, että Osavaltio-sarake ei ole yksilöllinen kummassakaan taulukossa.

Aiempi vaihtoehtoinen menetelmä

Ennen heinäkuun 2018 Power BI Desktop -julkaisua et voinut luoda suoraa suhdetta näiden taulukoiden välille. Yleinen tapa kiertää tämä ongelma oli toimia seuraavasti:

  • Luo kolmas taulukko, joka sisältää vain yksilöllisiä Osavaltio-tunnuksia. Taulukko voi olla mikä tahansa tai kaikki seuraavista:

    • Laskettu taulukko (määritetty Data Analysis Expressionsin [DAX] avulla).
    • Power Query -editori määritettyyn kyselyyn perustuva taulukko, joka voi näyttää yhdestä taulukosta haetut yksilöivät tunnukset.
    • Yhdistetty koko joukko.
  • Alkuperäiset taulukot liitetään sitten tähän uuteen taulukkoon yleisillä monta-yhteen-yhteyksillä .

Voit jättää tämän kiertotavan taulukon näkyviin. Vaihtoehtoisesti voit piilottaa sen siten, että se ei näy Kentät-luettelossa. Jos piilotat taulukon, monta yhteen -yhteydet asetetaan yleensä suodattamaan molempiin suuntiin, jolloin voit käyttää Osavaltio-kenttää kummasta tahansa taulukosta. Jälkimmäinen ristiinsuodatus välitetään toiseen taulukkoon. Tämä lähestymistapa esitetään seuraavassa kuvassa:

Screenshot of a hidden State table in Relationship view.

Visualisointi, joka näyttää Osavaltio-tiedot (Kaupunkidata-taulukosta) Asukasmäärä-kokonaisarvon ja Myynti-kokonaisarvon, näkyisi sitten seuraavasti:

Screenshot showing a table with State, Population, and Sales data.

Muistiinpano

Koska kiertotavassa käytetään osavaltioita Kaupunkidata-taulukosta, vain taulukossa olevat osavaltiot luetellaan, joten TX jätetään pois. Lisäksi toisin kuin monta-yhteen-yhteyksissä , summarivi sisältää kyllä kaikki Myynti-tiedot (myös Kaavan), mutta tietoihin ei sisälly tyhjää riviä, joka kattaa tällaiset ristiriitaiset rivit. Vastaavasti mukana ei olisi tyhjää riviä Myynti-riville, jonka Osavaltio-arvo on null.

Oletetaan, että lisäät tähän visualisointiin Kaupunki-arvon. Vaikka kaupunkikohtainen asukasmäärä olisi toki tiedossa, Myynti-tieto kaupungille vain toistaisiin Myynti-tieto vastaavalle osavaltiolle. Näin normaalisti käykin, kun sarakkeen ryhmittely ei liity johonkin koostettuun mittariin, kuten tässä:

Screenshot of a table showing State and city population and sales.

Oletetaan, että määrität uuden Myynti-taulukon, joka on yhdistelmä kaikista osavaltioista tässä, ja määrität sen näkyväksi Kentät-luettelossa. Sama visualisointi näyttäisi Osavaltio-tiedot (uudessa taulukossa), väestön ja kokonaismyynnin:

Screenshot of a visual showing State, population, and sales visual.

Kuten näet, mukana olisivat TX– myyntitiedot mutta tuntemattomat asukasmäärätiedot – ja New York – tunnettujen asukaslukutietojen kanssa mutta ei myyntitietoja . Tämä kiertotapa ei ole paras mahdollinen ja se sisältää monia ongelmia. Moni-moneen-kardinaliteetin sisältävien suhteiden avulla nämä ongelmat on ratkaistu seuraavassa osiossa kuvatulla tavalla.

Lisätietoja tämän kiertotavan toteuttamisesta on artikkelissa Monta-moneen-suhteen ohjeet.

Moni-moneen-kardinaliteetin sisältävien suhteiden käyttäminen kiertotavan sijaan

Voit yhdistää taulukoita suoraan ilman, että sinun tarvitsee turvautua samankaltaisiin kiertotapaan. Nyt voit määrittää suhteen kardinaliteetin arvoksi monta moneen. Tämä asetus ilmaisee, että kumpikaan taulukko ei sisällä yksilöllisiä arvoja. Tällaisissa yhteyksissä saatat silti hallita, mikä taulukko suodattaa toisen taulukon. Voit myös käyttää kaksisuuntaista suodatusta, jossa kumpikin taulukko suodattaa toista.

Power BI Desktopissa kardinaliteetin oletusarvoksi määritetään monta moneen , kun määritetään, ettei kumpikaan taulukko sisällä yksilöllisiä arvoja yhteyden sarakkeissa. Tällaisissa tapauksissa saat varoituksen, jossa varmistetaan, että haluat määrittää suhteen ja että muutos ei ole tahaton seuraus tieto-ongelmasta.

Kun luot esimerkiksi Kaupunkidata- ja Myynti-taulukoiden välille suoraan kaupunkidatan ja myynnin välisen suhteen, jossa suodattimia tulee näkyä Kaupunkidata-taulukoista myynti-taulukoihin, Power BI Desktop näyttää Muokkaa suhdetta -valintaikkunan:

Screenshot of the Edit relationship dialog box with Cardinality and Cross filter direction highlighted.

Seuraava suhdenäkymä näyttäisi suoran monta moneen -yhteyden kahden taulukon välillä. Taulukoiden ulkoasu Kentät-luettelossa (sekä niiden myöhempi toiminta visualisointeja luotaessa) on samanlainen kuin kiertotapaa käytettäessä. Kiertotapaa käytettäessä ylimääräinen taulukko, joka näyttää erilliset Osavaltiotiedot, ei ole määritetty näkyväksi. Kuten yllä on kuvattu, tässä tapauksessa näytetään visualisointi, joka näyttää osavaltion, asukasmäärän ja myyntitiedot :

Screenshot of a State, Population, and Sales table.

Moni-moneen-kardinaliteetin sisältävien suhteiden ja tyypillisempien monta-yhteen-suhteiden tärkeimmät erot ovat seuraavat:

  • Näytetyt arvot eivät sisällä toisen taulukon ristiriitaisista riveistä laskettua tyhjää riviä. Arvot eivät myöskään sisällä rivejä, joissa yhteydessä käytettävän toisen taulukon sarake sisältää null-arvoja.

  • Et voi käyttää -funktiota RELATED() , koska useampi kuin yksi rivi voi olla liittyvä.

  • -funktion ALL() käyttäminen taulukossa ei poista suodattimia, joita käytetään muissa toisiinsa liittyvissä taulukoissa monta moneen -yhteydellä. Edellisessä esimerkissä tässä näytetty mittari ei poistaisi suodattimia toisiinsa liittyvän Kaupunkitiedot-taulukon sarakkeista:

    Screenshot of a script example. The example is, Sales total = Calculate(Sum('Sales'[Sales]), All('Sales')).

    Visualisointi, jossa näytetään Osavaltio, Myynti ja Kokonaismyynti , tuottaisi tällaisen grafiikan:

    Screenshot of a table visual showing State, Sales, and Sales total resulting from the formula.

Näiden eroavaisuuksien vuoksi varmista, että -funktiolla olevat ALL(<Table>)laskutoimitukset, kuten prosenttiosuus kokonaissummasta, palauttavat tarkoitetut tulokset.

Huomioitavat asiat ja rajoitukset

Tähän moni-moneen-kardinaliteetin sisältävien suhteiden versioon ja yhdistelmämalleihin liittyy joitakin rajoituksia.

Seuraavia Live-Näyttöyhteys (monidimensioisia) lähteitä ei voi käyttää yhdistelmämallien kanssa:

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

Kun muodostat yhteyttä näihin monidimensioisiin lähteisiin DirectQuerylla, et voi muodostaa yhteyttä myös toiseen DirectQuery-lähteeseen tai yhdistää sitä tuotuihin tietoihin.

DirectQueryn olemassa olevat käyttörajoitukset koskevat edelleen, kun käytät moni-moneen-kardinaliteetin sisältäviä suhteita. Monet rajoituksista ovat nyt taulukkokohtaisia ja riippuvat taulukon tallennustilan tilasta. Esimerkiksi tuodun taulukon laskettu sarake voi viitata muihin taulukoihin, mutta DirectQuery-taulukon laskettu sarake voi viitata vain saman taulukon sarakkeisiin. Muut rajoitukset koskevat koko mallia, jos jokin mallin taulukoista on DirectQuery-taulukko. Esimerkiksi Nopeat merkitykselliset tiedot ja Q&A-toiminnot eivät ole käytettävissä mallissa, jos jollakin sen taulukoista tallennustilan tilana on DirectQuery.

Lisätietoja yhdistelmämalleista ja DirectQuerysta on seuraavissa artikkeleissa: