Rivikonteksti ja suodatinkonteksti LuckyTemplates DAX -koodissa

Tässä opetusohjelmassa tarkastelemme osaa DAX-koodista. Olet ehkä jo käyttänyt jotain tällaista. Tai saatat törmätä siihen ja olla hämmentynyt siitä, kuinka tämä koodi toimii ja kuinka sekä rivikonteksti että suodatinkonteksti näyttävät olevan vuorovaikutuksessa toistensa kanssa vain yhdessä DAX-koodissa. Joka tapauksessa tässä opetusohjelmassa tarkastellaan kaikkia yllä olevia yksityiskohtaisesti. Voit katsoa tämän opetusohjelman koko videon tämän blogin alaosasta.

Ensin tarkastelemme itse koodia. Sitten käymme läpi teoriaosan ymmärtääksemme sitä paremmin. Lopuksi tarkastellaan kaikkea kulissien takaa käyttämällä.

Tietomalli, jota aiomme käyttää, on pohjimmiltaan yksinkertainen myyntitietomalli, joka sisältää päivämäärät, myynnit ja Tuotteet-taulukon. Myyntitaulukko sisältää tapahtumat kullekin tietylle päivälle. Tuotteet-taulukko sisältää tiedot kunkin päivän tuotteiden myyntitiedoista. Päivämäärät-taulukko sisältää vain muutaman sarakkeen tätä opetusohjelmaa varten.

Rivikonteksti ja suodatinkonteksti LuckyTemplates DAX -koodissa

Olemme kiinnostuneita vain Päivämäärät-taulukosta, mutta aiomme käyttää Sales-taulukkoa ja Tuotteet-taulukkoa selittääksemme, kuinka suodatinkonteksti ja rivikonteksti etenevät suhteiden avulla.

Sisällysluettelo

Rivin konteksti ja suodatinkonteksti käynnissä olevassa kokonaismittauksessa

Luodaan nyt käynnissä oleva kokonaissumma, koska se sisältää sekä rivi- että suodatinkonteksteja. Tämä on juokseva perusmitta, jossa käytän COUNTROWS-toimintoa FILTER-toiminnon päällä ja ALL-funktiota palauttamaan kaikki päivämäärätaulukossa olevat vuodet. Kun tuon tämän toimenpiteen alla olevaan taulukkoon, voit nähdä, että saamme odottamamme tuloksen.

Rivikonteksti ja suodatinkonteksti LuckyTemplates DAX -koodissa

Yritetään nyt analysoida, kuinka tämä DAX-koodi toimii.

Mitassa näet, että meillä on ensin COUNTROWS, mutta se ei ole ensimmäinen funktio, jota arvioidaan tai suoritetaan. Sitten meillä on FILTER-toiminto ja sitten KAIKKI. Ensimmäinen asia arviointijärjestyksessä on KAIKKI. ALL palauttaa kaikki päivämäärät kalenterin vuosinumeron yksilölliset arvot jättämällä huomioimatta kaikki ALL-funktion ulkopuolella olevat suodatinkontekstit.

Joten mittareissa meillä on kalenterin vuosinumero -sarake, ja se suodattaa aktiivisesti tätä saraketta. Mutta koska KAIKKI jättää huomioimatta olemassa olevan suodatinkontekstin, saamme kaikki kyseisen sarakkeen ainutlaatuiset arvot.

Toisessa argumentissa, rivikontekstissa, olemme kirjoittaneet, että päivämäärät kalenterivuoden numeron tulee olla pienempi kuin MAX päivämäärät kalenterin vuosinumero. Nyt, jos olet aloittelija ja yrität edelleen ymmärtää ja oppia DAXia, saatat ajatella, että sekä vasemmalla että MAX-funktion sisällä olevat viittaukset kuuluvat samaan sarakkeeseen ja ovat sama taulukko, joka meillä on KAIKKI toiminto.

Mutta se ei ole totta. Ainoa osa rivikontekstia, joka kuuluu ALL-funktioon, on se, joka meillä on vasemmalla puolella. Se, joka meillä on MAXissa, arvioidaan suodatinkontekstin sisällä, ei rivikontekstissa.

Joten FILTER yrittää luoda rivikontekstin taulukkoon, jonka annat ensimmäisessä argumentissa, ja tämä koodin osa itse asiassa noudetaan kyseisestä rivikontekstista. Joten jokainen rivi FILTER iteroi taulukon, joka meillä on ALL:ssa, ja sitten voimme käyttää kaikkia tällä hetkellä iteroitavia arvoja.

Joten ensimmäisessä iteraatiossa meillä on vain yksi arvo. Toisessa iteraatiossa meillä on toinen arvo. Mutta kun kirjoitamme MAX, se on riippumaton rivikontekstista, jonka luomme FILTER-funktiolla. Joten MAX arvioidaan suodatinkontekstissa, jota luodaan nykyisen vuoden numerolla, jota olemme käyttäneet kyseisessä matriisissa.

Kun olemme kohdassa 2006, MAX palauttaa luvun 2006, kun taas nykyinen rivi voi olla 2006, 2007 tai 2008. FILTER palauttaa taulukon, joka täyttää toisessa argumentissa määrittämämme kriteerit. Kun siirrymme vuoteen 2007, MAX palauttaa vuoden 2007. Vuonna 2008 se palaa 2008. Ja riippuen kaikista arvoista, jotka ovat pienempiä kuin MAX-funktion palauttama arvo, FILTER palauttaa pöytä.

Osoittaaksemme, että MAX ei ole riippuvainen rivikontekstista, voimme erottaa tämän DAX-koodin osan useiksi muuttujiksi. Ja sitten voimme ymmärtää, että sarakkeen viittaus vasemmalla ja oikealla puolella ei ole sama.

Luodaan siis muuttuja.

Kuten alla olevasta mittasta näet, loin kolme muuttujaa (). Lisäsin sitten FILTER-koodin lopuksi muuttujalla Result, joka käyttää. Kun käytän tätä mittaa alla olevassa taulukossa, huomaat, että mikään ei muutu. Tulokset ovat edelleen samat. Meillä on edelleen sama juoksusumma kuin aiemmin.

Rivikonteksti ja suodatinkonteksti LuckyTemplates DAX -koodissa

Jos palaamme koodiin ja yritämme hakea ensimmäisen muuttujan arvon ja vahvistaa sen, näet, että jokaiselle riville saadaan sama vuosi.

Rivikonteksti ja suodatinkonteksti LuckyTemplates DAX -koodissa

Joten toivottavasti pystyin selittämään sinulle, että MAX-funktio tässä nimenomaisessa koodissa ei itse asiassa riipu sen arvojen todellisesta kontekstista. Ja jos haluat yksinkertaistaa arviointikontekstin ymmärtämistä, voit aina jakaa koodin useisiin muuttujiin, jotta ymmärrät arviointijärjestyksen ja koodin suoritustavan.

Nyt haluan näyttää skenaarion, jossa MAX-funktio riippuu FILTER-toiminnon luomasta rivikontekstista.

Palataanpa siis tähän mittaan. Toistetaan se, ja minulla on viimeisen näkyvän vuoden sijastaMAX Päivämäärät Kalenteri Vuosinumero. Kun tuon sen matriisiin, voit nähdä, että saamme tyhjän.

Rivikonteksti ja suodatinkonteksti LuckyTemplates DAX -koodissa

Miksi?

Asia on siinä, että iteroimme kaikki vuodet ja CALCULATE muuntaa tällä hetkellä iteroidun rivin vastaavaksi suodatinkontekstiksi.

Jos kirjoitan tähän yhtäläisyysmerkin, näet, että saamme seitsemän, seitsemän ja seitsemän.

Miksi?

Haluan luoda uuden lasketun taulukon, jotta ymmärrät helposti mitä tapahtuu.

Rivikonteksti ja suodatinkonteksti LuckyTemplates DAX -koodissa

Menen luomaan uutta pöytää. Seuraavaksi aion kirjoittaaKAIKKI päivämäärät kalenterin vuosinumeron yli. Sitten kirjoitan Max Year ja sitten käytän CLCULATE yli päivämäärät kalenterin vuosinumeron MAX. Ja nyt voit nähdä, että jokaisella rivillä toistamme saman arvon.

Rivikonteksti ja suodatinkonteksti LuckyTemplates DAX -koodissa

Koska nämä luvut eivät ole tiukasti pienempiä kuin itse, saamme tyhjän. Mutta kun käytämme yhtä kuin (=), sanomme, että kaikki arvot, jotka ovat pienempiä kuin 2011, saavat seitsemän.

Lisäksi, vaikka käyttäisit mittaviittausta, kuten Max Year, tämä koodi ei toimi.

Rivikonteksti ja suodatinkonteksti LuckyTemplates DAX -koodissa

Jos napsautan Vahvista, näet, että emme vieläkään saa mitään. Tämä johtuu siitä, että kun kirjoitamme Max Year -luvun, kirjoitamme yksinkertaisesti LASKE MAX Päivämäärät kalenterivuoden numeron.

Rivikonteksti ja suodatinkonteksti LuckyTemplates DAX -koodissa

Mittaviittauksen ulkopuolella on aina CLCULATE. Joten tämä toimenpide käynnistää kontekstisiirron, joka muuntaa tällä hetkellä iteroidun rivin suodatinkontekstiksi.

Mutta jos olet sidottu ja sinun on käytettävä mittaviittausta, voit tallentaa kyseisen suuren muuttujaan. Ja kuten ehkä tiedät, muuttujat ovat vakioita, eivätkä ne voi luoda kontekstin siirtymää. Joten se ei voi muuntaa rivikontekstia suodatinkontekstiksi.

Joten tämä on nopea osoitus siitä, kuinka rivikonteksti ja suodatinkonteksti ovat vuorovaikutuksessa toistensa kanssa DAX-koodissa.

Siirrytään nyt DAX Studioon ymmärtääksemme, mitä kulissien takana tapahtuu.

DAX Studion käyttäminen rivikontekstin ymmärtämiseen ja suodatuskontekstin ymmärtämiseen

Siirrytään ulkoisiin työkaluihin ja käynnistetään DAX Studio. Meidän on muodostettava yhteys LuckyTemplates-tiedostoon kyselysuunnitelman ja palvelinajoitusten avulla .

Sitten aion luoda kyselymitan. Kirjoitan Päivämäärät-taulukkoon MÄÄRITÄ MITTA, Päivämäärät yhteensä. Ja sitten aion käyttää alkuperäistä koodia, joka meillä oli.

Koska meidän on tarkoitus palauttaa taulukko, voimme kirjoittaa EVALUATE. Lopuksi aiomme luoda taulukon käyttämällä SUMMARIZEECOLUMNS. Joten aiomme kirjoittaa päivämäärät kalenterin vuosinumeron ja virtuaalisen sarakkeen, joka on juoksusumma. Ja sitten voin kirjoittaa jotain DT:n kaltaista DAX Studio -avainsanaksi.

Rivikonteksti ja suodatinkonteksti LuckyTemplates DAX -koodissa

Jos suoritan tämän koodin, voit nähdä, että koodi on valmis ja saamme silti saman tuloksen, jonka olemme nähneet LuckyTemplatesissa.

Rivikonteksti ja suodatinkonteksti LuckyTemplates DAX -koodissa

Siirrytään nyt kyselysuunnitelmaan ymmärtääksemme, mitä kulissien takana tapahtuu. Katsotaan, onko MAX-funktio todella riippuvainen rivikontekstista vai ei. Siirrytään loogiseen kyselysuunnitelmaan, koska fyysinen kyselysuunnitelma on yleensä monimutkaisempi ja sitä on hieman vaikea lukea.

Rivikonteksti ja suodatinkonteksti LuckyTemplates DAX -koodissa

Näet, että ensimmäisen rivin ensimmäinen operaattori on GroupSemiJoin , ja sitä käytetään SUMMARIZEECOLUMNS:issa luomaan kahden sarakkeen välille sisäinen liitos.

Sitten näiden sarakkeiden liittämistä varten on Scan_Vertipaq , joka on tallennuskone, joka meillä on analyysipalveluissa. Voimme nähdä, että se sanoo, että tarvitsemme sarakkeen, joka on päivämäärät kalenterin vuosinumero. LuckyTemplatesissa voit nähdä, että matriisissa on tämä kalenterin vuosinumero -sarake, joka toimii raportin pääsynä.

Seuraavaksi mittaamme COUNTROWS-funktio huipputason operaattorina, sitten COUNTROWS kutsuusuodatinta varten. Taas on Scan_Vertipaq , joka sanoo, että RequiredCols on päivämäärät kalenterin vuosinumero.

Rivit 2 ja 5 ovat samat, mutta ensimmäinen Scan_Vertipaq on merkitty nollalla ja toinen on merkitty yhdellä. Tämä tarkoittaa, että sarake, jota käytämme ALL-funktion avulla, poimitaan erikseen sarakkeesta, joka meillä on SUMMARIZEECOLUMNS-funktion sisällä.

Sitten on LessThan- operaattori. Seuraavalla rivillä voimme nähdä, että rivikontekstia ja MAX-funktiota verrataan .

Tätä seuraa Max_Vertipaq . Poimimme siis maksimiarvon tallennusmoottorista. Oikealla näet, että siinä lukee: DependOnCols Dates Calendar Year Number. Tämä on tärkein asia, joka meidän on muistettava. Aiemmin sanoin, että MAX-funktiolla ei ole riippuvuutta rivikontekstista, ja tämä itse asiassa todistaa sen.

Ja niin, tässä lukee nolla.

Mistä löysimme nollan?

Yläosassa (toinen rivi), jota poimitaan SUMMARIZEECOLUMNS:ia varten. Tämä tarkoittaa, että MAX-funktio ei riipu rivikontekstista, vaan se riippuu itse asiassa sarakkeesta (kalenterivuoden numero), joka meillä on taulukossa. Joten tuo taulukko itse asiassa luo suodatinkontekstin.

Lyhyesti sanottuna MAX-funktio on riippuvainen suodattimen kontekstista eikä rivikontekstista.

Seuraavaksi voit nähdä, että Max_Vertipaq-arvon laskemiseksi meillä on Scan_Vertipaq , joka sanoo, että DependOnCols nolla (0) Date Calendar Year Number. Ja sitten on useita muita sarakkeita, jotka vaativat sarakkeita.

Katsotaan nyt koodin muuttuvaa versiota. LastVisibleYear-arvon palauttamisen sijaan aion palauttaa COUNTROWS-version tai Result-muuttujan, ja voit nähdä, että saamme edelleen saman tuloksen.

Rivikonteksti ja suodatinkonteksti LuckyTemplates DAX -koodissa

Jos katsomme kyselysuunnitelmaa, näet, että se on hieman pidempi, mutta se on paljon helpompi lukea.

Rivikonteksti ja suodatinkonteksti LuckyTemplates DAX -koodissa

Lopuksi tässä on myös koodin laskettu versio

Rivikonteksti ja suodatinkonteksti LuckyTemplates DAX -koodissa

Ja tältä sen Looginen kyselysuunnitelma näyttää.

Rivikonteksti ja suodatinkonteksti LuckyTemplates DAX -koodissa




Johtopäätös

Tässä opetusohjelmassa olen selittänyt, kuinka tietty funktio voi olla vuorovaikutuksessa rivikontekstin kanssa mutta ei. Olen myös näyttänyt sinulle, kuinka MAX, tässä tapauksessa, arvioitiin suodatinkontekstissa eikä rivikontekstissa.

On tärkeää aina muistaa, että suodatinkonteksti suodattaa koko mallin ja rivikonteksti vain iteroi annettua taulukkoa eikä koskaan suodata mallia. Suodatinkonteksti ei iteroi taulukkoa.

Toivottavasti tästä opetusohjelmasta oli apua. Pysy kuulollakoodi, jonka julkaisemme pian. Menemme paljon syvemmälle vastaaviin skenaarioihin. Opetamme myös kuinka voit optimoida DAX-koodisi.


Päivämäärätaulukon luominen LuckyTemplatesissa

Päivämäärätaulukon luominen LuckyTemplatesissa

Ota selvää, miksi LuckyTemplatesissa on tärkeää pitää oma päivämäärätaulukko ja opi nopein ja tehokkain tapa tehdä se.

LuckyTemplates mobiiliraportointivinkkejä ja -tekniikoita

LuckyTemplates mobiiliraportointivinkkejä ja -tekniikoita

Tämä lyhyt opetusohjelma korostaa LuckyTemplates-mobiiliraportointiominaisuutta. Näytän sinulle, kuinka voit kehittää raportteja tehokkaasti mobiililaitteille.

Ammattimainen palveluanalyysiraportit LuckyTemplatesissa

Ammattimainen palveluanalyysiraportit LuckyTemplatesissa

Tässä LuckyTemplates Showcase -esittelyssä käymme läpi raportteja, jotka näyttävät ammattitaitoisen palveluanalytiikan yritykseltä, jolla on useita sopimuksia ja asiakkaiden sitoumuksia.

Microsoft Power Platform -päivitykset | Microsoft Ignite 2021

Microsoft Power Platform -päivitykset | Microsoft Ignite 2021

Käy läpi tärkeimmät Power Appsin ja Power Automaten päivitykset sekä niiden edut ja vaikutukset Microsoft Power Platformiin.

Yleiset SQL-funktiot: Yleiskatsaus

Yleiset SQL-funktiot: Yleiskatsaus

Tutustu joihinkin yleisiin SQL-toimintoihin, joita voimme käyttää, kuten merkkijono, päivämäärä ja joitain lisätoimintoja tietojen käsittelyyn tai käsittelyyn.

LuckyTemplates-mallin luominen: opas ja vinkkejä

LuckyTemplates-mallin luominen: opas ja vinkkejä

Tässä opetusohjelmassa opit luomaan täydellisen LuckyTemplates-mallin, joka on määritetty tarpeidesi ja mieltymystesi mukaan.

Kenttäparametrit ja pienet kertoimet LuckyTemplatesissa

Kenttäparametrit ja pienet kertoimet LuckyTemplatesissa

Tässä blogissa esittelemme, kuinka kerrostat kenttäparametreja pienillä kerroilla uskomattoman hyödyllisten näkemysten ja visuaalien luomiseksi.

LuckyTemplates-sijoitus ja mukautettu ryhmittely

LuckyTemplates-sijoitus ja mukautettu ryhmittely

Tässä blogissa opit käyttämään LuckyTemplates-sijoitus- ja mukautettuja ryhmittelyominaisuuksia näytetietojen segmentoimiseen ja luokitteluun kriteerien mukaan.

LuckyTemplatesissa näytetään vain tiettyyn päivämäärään asti kumulatiivinen kokonaissumma

LuckyTemplatesissa näytetään vain tiettyyn päivämäärään asti kumulatiivinen kokonaissumma

Tässä opetusohjelmassa käsittelen tiettyä tekniikkaa, jolla voit näyttää kumulatiivisen kokonaissumman LuckyTemplates-visuaaleissasi vain tiettyyn päivämäärään asti.

Bullet Charts: Kehittyneet mukautetut visuaalit LuckyTemplatesille

Bullet Charts: Kehittyneet mukautetut visuaalit LuckyTemplatesille

Opi luomaan ja mukauttamaan Bullet-kaavioita LuckyTemplatesissa, joita käytetään pääasiassa suorituskyvyn mittaamiseen suhteessa tavoitteeseen tai edellisiin vuosiin.