First N Business Days Revisited – En DAX-kodespråkløsning

La oss ta en ny titt på problemet diskutert i , som dynamisk sammenlignet de første N virkedagene i hver måned. Dette problemet var basert på et spørsmål fra et LuckyTemplates-medlem på forumet vårt, der han ønsket å dynamisk se og sammenligne de første 5, 10, 15 og 20 fakturerbare dagene (ikke-helger og ikke-feriedager) for en gitt måned mot forrige måned.

I stedet for å bruke strømspørring, kommer vi med en DAX-kodespråkløsning. Du kan se hele videoen av denne opplæringen nederst på denne bloggen.

I den første videoen kom jeg opp med en strømspørringsløsning om hvordan jeg løser dette problemet. Men så kom en av våre LuckyTemplates-eksperter, Antriksh Sharma, opp med et strålende effektivt tiltak som også er verdt å ta et dypere dykk i. Vi vil diskutere noen av teknikkene han brukte for å utvikle et mål, som vil gi deg flere verktøy i DAX-verktøykassen.

Det gjorde det absolutt for meg og for noen av de andre ekspertene som tok en titt på dette. Like-for-like-sammenligningen av sammenlignbare virkedager på tvers av måneder er et verdifullt mønster generelt som kan brukes i mange situasjoner.

First N Business Days Revisited – En DAX-kodespråkløsning

La oss dykke ned i kraftspørring og ta en titt på hva Antriksh gjorde her. Vi har måneden og året , totalt salg og til slutt det totale salget for N virkedager som vi valgte ved hjelp av power-spørring basert på hva-hvis-parameteren som vi utviklet.

First N Business Days Revisited – En DAX-kodespråkløsning

Antriksh tok en helt annen tilnærming, der han brukte et sjokkerende kort tiltak for å løse hele dette problemet. Det første jeg la merke til ved dette var bruken av kommandoen.

First N Business Days Revisited – En DAX-kodespråkløsning

Dette er en DAX-funksjon som jeg ikke bruker så ofte, men som passer perfekt for denne typen problemer. Hvis vi tar en titt på SQL BI DAX-guiden, står det at GENERATE-funksjonen er en tabellfunksjon som bruker to forskjellige tabeller som input, og deretter gjør en ekvivalent av SQL-kommandoen CROSS APPLY.

First N Business Days Revisited – En DAX-kodespråkløsning

Så den tar en grunntabell (Tabell1) og itererer på den, og tar deretter et andre tabelluttrykk og evaluerer det for hver rad i den første tabellen, og går deretter tilbake til tabellen som utdata.

La oss ta Antrikshs mål og slippe det inn i tabellen. Vi kan se at den gir nøyaktig de samme resultatene som strømspørringsløsningen vi gjorde forrige gang. Så det er bra og validerer begge tiltakene ganske bra.

First N Business Days Revisited – En DAX-kodespråkløsning

La oss skille dette tiltaket fra hverandre. Det første filteret som brukes her er Dates[IsBusinessDay] = TRUE. Dette tar ut alle ikke-helger og ikke-helligdager basert på den utvidede datotabellen IsBusinessDay-feltet.

Vi snakker mye mer om dette i , hvor vi også gikk gjennom hvordan vi knytter det til julebordet vårt.

First N Business Days Revisited – En DAX-kodespråkløsning

Den interessante delen av dette kommer virkelig i de to tabellinngangene. Den første tabellen er bare en tabell med én kolonne i feltet Måned og år i datotabellen.

First N Business Days Revisited – En DAX-kodespråkløsning

Men den andre tabellinngangen er der de interessante tingene skjer. Antriksh brukte a og brukte deretter vår dynamiske parameter som antall rader i TOPN.

First N Business Days Revisited – En DAX-kodespråkløsning

Totalt salg- målet er knyttet til den andre tabellen, og deretter brukt på den første tabellen.

First N Business Days Revisited – En DAX-kodespråkløsning

Innholdsfortegnelse

Forstå et komplekst mål ved å bruke DAX-kodespråk

En av de enkleste måtene å finne ut hva et komplekst tiltak som dette gjør, er å gå inn i Tabellredigering . Vi kan ta en titt på dette uttrykket og finne ut hva dette TOPN-uttrykket gjør først.

First N Business Days Revisited – En DAX-kodespråkløsning

La oss kopiere TOPN-delen og lage en ny. Husk at DAX-spørringer starter med EVALUATE.

First N Business Days Revisited – En DAX-kodespråkløsning

Når vi limer inn TOPN-delen, ser vi at dette trekker de første 5 datoene fra salgsordretabellen. Det er en tabell i TOPN som er sammensatt av verdiene for alle bestillingsdatoene i salgstabellen.

Denne TOPN-funksjonen tar verdien av hva-hvis-parameteren (som i dette tilfellet er 5) og bruker den på salgsordredatofeltet. Deretter trekker den de første 5 datoene innenfor filterkonteksten i stigende rekkefølge basert på det feltet.

First N Business Days Revisited – En DAX-kodespråkløsning

Gitt at det ikke er noen ekstra filterkontekst, er det bare å trekke de første 5 datoene fra hele tabellen.

First N Business Days Revisited – En DAX-kodespråkløsning

@Sales-kolonnen legger bare til det totale salget innenfor riktig filterkontekst til TOPN-tabellen.

First N Business Days Revisited – En DAX-kodespråkløsning

Så langt har vi den første tabellen for måneden og året, den andre tabellen i TOPN for de første N er fra salgstabellen, og deretter det totale salget knyttet til det.

Bruke GENERATE-tabellen i DAX-kodespråk

La oss ta en titt på hva denne GENERATE-tabellen gjør. Vi hopper tilbake til Tabular Editor og lager en ny DAX-spørring.

Vi starter som vi alltid gjør med EVALUATE, limer inn GENERATE-delen av koden og klikker på 5.

First N Business Days Revisited – En DAX-kodespråkløsning

Vi kan se at for hver rad i den første tabellen itererer den og sammenføyes med de 5 radene fra TOPN-tabellen evaluert i sammenheng med @Sales-funksjonen.

Det har tatt de første 5 virkedagene i april, de første 5 virkedagene i mai, de første 5 virkedagene i juni, og så videre til det kommer til slutten av det første tabellen.

First N Business Days Revisited – En DAX-kodespråkløsning

Dette er akkurat det vi trenger, og nå blir det en relativt enkel sak å legge disse verdiene sammen. Vi har resultatet (som er tabellvariabelen til GENERATE-resultatene) og så må vi summere @Sales-funksjonen.

Innenfor kontekst summerer vi nå de første 5 virkedagene i april, de første 5 virkedagene i mai, og så videre til vi kommer ned til totalt $23 737 430, i så fall har den ingen kontekst av måned og år å operere .

Dette oppsummerer hele @Sales-kolonnen og gir oss nøyaktig samme totalsum som vi hadde i vår power-spørringsløsning.

First N Business Days Revisited – En DAX-kodespråkløsning

Du kan se at hvis vi endrer sliceren til 10, får vi dynamisk de samme resultatene med DAX-kodespråk som vi gjorde i power-spørring.

First N Business Days Revisited – En DAX-kodespråkløsning

Vi har også søylediagrammet nederst som justeres dynamisk for å gjenspeile endringene vi har gjort.

First N Business Days Revisited – En DAX-kodespråkløsning

Juster dynamisk måltittel

Det er et annet ekstra triks jeg ville vise deg. Du kan lage en dynamisk justering på hva-hvis-parameteren din og knytte den dynamisk til en takttittel.

Hvis vi for eksempel endrer sliceren øverst til 15, vil den dynamisk endre navnet på målet nederst til Totalt salg for de første 15 virkedagene i hver måned .

First N Business Days Revisited – En DAX-kodespråkløsning

Det er en enkel måte å gjøre dette på i DAX ved å bruke . Vi tar i utgangspunktet bare tre strenger. Den første er Total Sales for First , og deretter koble det sammen med verdien som vi høster fra hva-hvis-parameteren, og så bare knytte det til resten av tittelen.

First N Business Days Revisited – En DAX-kodespråkløsning

Så går vi inn i det visuelle, går til betinget formatering av tittelen, og klikker på fx .

First N Business Days Revisited – En DAX-kodespråkløsning

Vi formaterer etter feltverdi og velger det dynamiske tittelmålet. Dette vil endre valget av hva-hvis-parameteren.

First N Business Days Revisited – En DAX-kodespråkløsning

Konklusjon

Det vi har nå er en komplett løsning som bruker DAX-kodespråk. Vi har diskutert en virkelig kreativ og effektiv måte å gjøre det på ved å bruke GENERATE-funksjonen. Jeg vil takke Antriksh for å dele hans strålende DAX-kunnskap med oss. Jeg lærte mye mens jeg gikk gjennom DAX-løsningen hans, og jeg håper du gjorde det også.


Pipe In R: Koblingsfunksjoner med Dplyr

Pipe In R: Koblingsfunksjoner med Dplyr

I denne opplæringen lærer du hvordan du kobler funksjoner sammen ved å bruke dplyr-røroperatøren i programmeringsspråket R.

RANKX Deep Dive: A LuckyTemplates DAX-funksjon

RANKX Deep Dive: A LuckyTemplates DAX-funksjon

RANKX fra LuckyTemplates lar deg returnere rangeringen til et spesifikt tall i hver tabellrad som utgjør en del av en liste med tall.

Trekker ut LuckyTemplates-temaer og bilder fra PBIX

Trekker ut LuckyTemplates-temaer og bilder fra PBIX

Lær hvordan du demonterer en PBIX-fil for å trekke ut LuckyTemplates-temaer og bilder fra bakgrunnen og bruke den til å lage rapporten din!

Excel Formulas Cheat Sheet: Mellomveiledning

Excel Formulas Cheat Sheet: Mellomveiledning

Excel Formulas Cheat Sheet: Mellomveiledning

LuckyTemplates-kalendertabell: Hva er det og hvordan du bruker det

LuckyTemplates-kalendertabell: Hva er det og hvordan du bruker det

LuckyTemplates-kalendertabell: Hva er det og hvordan du bruker det

Python i LuckyTemplates: Hvordan installere og sette opp

Python i LuckyTemplates: Hvordan installere og sette opp

Lær hvordan du installerer programmeringsspråket Python i LuckyTemplates og hvordan du bruker verktøyene til å skrive koder og vise visuelle elementer.

Beregning av dynamiske fortjenestemarginer – enkel analyse av LuckyTemplates med DAX

Beregning av dynamiske fortjenestemarginer – enkel analyse av LuckyTemplates med DAX

Lær hvordan du beregner dynamiske fortjenestemarginer ved siden av LuckyTemplates og hvordan du kan få mer innsikt ved å grave dypere inn i resultatene.

Sortering av datotabellkolonner i LuckyTemplates

Sortering av datotabellkolonner i LuckyTemplates

Lær hvordan du sorterer feltene fra kolonner med utvidet datotabell på riktig måte. Dette er en god strategi å gjøre for vanskelige felt.

Finn dine beste produkter for hver region i LuckyTemplates ved å bruke DAX

Finn dine beste produkter for hver region i LuckyTemplates ved å bruke DAX

I denne artikkelen går jeg gjennom hvordan du kan finne de beste produktene dine per region ved å bruke DAX-beregninger i LuckyTemplates, inkludert TOPN- og CALCUATE-funksjonene.

Søppeldimensjon: Hva er det og hvorfor det er alt annet enn søppel

Søppeldimensjon: Hva er det og hvorfor det er alt annet enn søppel

Lær hvordan du bruker en søppeldimensjon for flagg med lav kardinalitet som du ønsker å inkludere i datamodellen din på en effektiv måte.