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.


Budjetin jako: kuukausittaiset ennusteet päivittäisten tulosten perusteella LuckyTemplatesissa

Budjetin jako: kuukausittaiset ennusteet päivittäisten tulosten perusteella LuckyTemplatesissa

Tässä opetusohjelmassa käyn läpi LuckyTemplatesin budjetin allokointialgoritmin, jossa vertaat kuukausittaisia ​​ennusteita päivittäiseen myyntiin.

Edistyneen logiikan käyttäminen LuckyTemplatesissa kokonaissummasi korjaamiseen

Edistyneen logiikan käyttäminen LuckyTemplatesissa kokonaissummasi korjaamiseen

Opi, kuinka saat laskelmissasi olevat summat oikein käyttämällä kehittyneitä DAX-kaavoja ja edistynyttä logiikkaa LuckyTemplatesissa.

PowerApps-näkymät ja -lomakkeet: Luominen ja mukauttaminen

PowerApps-näkymät ja -lomakkeet: Luominen ja mukauttaminen

Lue lisää PowerApps-näkymistä ja -lomakkeista sekä niiden luomisesta ja mukauttamisesta juuri luomaasi sovellusta varten.

LuckyTemplates-raporttimallit laajennettu – LuckyTemplatesin visualisointikonseptit

LuckyTemplates-raporttimallit laajennettu – LuckyTemplatesin visualisointikonseptit

Tässä blogi-opetusohjelmassa sukeltaan LuckyTemplates-raporttipohjien mukauttamiseen ja taloudellisen tiedon visualisointiin tehokkaasti.

LuckyTemplates-raporttien suunnittelu – rajattomat mahdollisuudet

LuckyTemplates-raporttien suunnittelu – rajattomat mahdollisuudet

Tältä näyttää upea LuckyTemplates-raporttien suunnittelu. Se on käyttövalmis suunnittelu, jossa hyödynnetään työkaluvihjeitä ja kirjanmerkkejä eeppisen navigoinnin kanssa.

LuckyTemplates KÄYTTÖYHTEYDET Vs HOITOT

LuckyTemplates KÄYTTÖYHTEYDET Vs HOITOT

Opi ero LuckyTemplates USERELATIONSHIP- ja TREATAS-funktion välillä, joita molempia käytetään luotaessa DAX-mittoja.

Upouusi kurssi: Microsoft Excel aloittelijoille

Upouusi kurssi: Microsoft Excel aloittelijoille

Upouusi kurssi: Microsoft Excel aloittelijoille

ISNULL SQL -funktio tapauslausekkeissa

ISNULL SQL -funktio tapauslausekkeissa

Opi ja ymmärrä, kuinka voit käyttää CASE-käskyä yhdessä ISNULL SQL-funktion kanssa palauttamaan arvon, kun siinä on NULL-arvo.

LuckyTemplates Dashboard Design – vaikuttava sivun kääntämisen visualisointiidea

LuckyTemplates Dashboard Design – vaikuttava sivun kääntämisen visualisointiidea

LuckyTemplates Dashboard -esimerkkejä, Opi ja ymmärrä kuinka luoda innovatiivisin sivua kääntävä visualisointi ilme LuckyTemplates Dashboard -suunnitteluun näillä yksinkertaisilla vaiheilla!

Scatter Plot In R Script: Kuinka luoda ja tuoda

Scatter Plot In R Script: Kuinka luoda ja tuoda

Tässä opetusohjelmassa opit luomaan R-sirontakaavion visualisoinnin LuckyTemplatesissa käyttämällä R Script -visuaalia.