DAX Studio EVALUATE Nøkkelord: Grunnleggende eksempler
Lær å bruke DAX Studio EVALUATE nøkkelordet med grunnleggende eksempler og få en bedre forståelse av hvordan dette kan hjelpe deg med databehandling.
I denne opplæringen lærer du hvordan du optimaliserer et mål i LuckyTemplates. Optimalisering av tiltak i rapporten forbedrer ytelsen til kodene dine når det gjelder å produsere verdifull innsikt og data. Du vil også lære om de forskjellige evalueringsmetodene og hvordan du bruker dem for å optimalisere rapporten. Du kan se hele videoen av denne opplæringen nederst på denne bloggen.
Innholdsfortegnelse
1. Analyser ytelsen til koden
I dette eksemplet må du optimalisere denne rapporten:
Dette er datamodellen du skal bruke:
Jobs -tabellen inneholder all informasjon om enhver jobb som er utført i en gitt tidsperiode.
Denne tabellen er grunnlaget for alle målene du skal optimalisere:
Først må du teste ytelsen til rapporten.
Gå til Vis-fanen og velg. Deretter klikker du på Start opptak og oppdater bilder . Vent til analysatoren gjengir det visuelle.
Når dette er gjort, ruller du ned listen over insentivfordeling og klikker på Kopier spørring .
Deretter velger du Eksterne verktøy for å gå til DAX Studio og se på koden som LuckyTemplates genererte.
Deretter limer du inn den kopierte spørringen i arbeidsområdet.
Variabler i tiltaket
Den første variabelen er DateClosed som er sliceren på dashbordet. Den bruker en kolonne fra faktatabellen for å få verdiene for visse perioder i sliceren.
Den neste variabelen er JobLost som sjekker for False eller Blank av Job Lost-dataene.
Den siste variabelen er MatrixVisual . Dette er hjertet i koden. Den viser den oppsummerte kolonnen generert av LuckyTemplates for å fylle matrisevisuals. Den grupperer Job Loss Type i denne matrisen og injiserer filtrene som kommer fra slicerne. Deretter legger den til utvidede kolonner.
Når oppsummeringskolonnen fullfører utførelsen, vil du se resultatene i ruten under koden.
LuckyTemplates bruker resultatet til å fylle ut matrisevisuals.
Cold Cache for DAX Studio
Deretter må du sjekke tiden det tar å utføre hele koden. For å gjøre det, slå på Server Timings og velg Tøm buffer og kjør deretter .
Når du prøver å optimalisere et mål i LuckyTemplates ved hjelp av, er det bedre å operere under den kalde cache-scenariet slik at tiden du får er riktig. Trykk deretter på F5 og vent til operasjonen er fullført i fanen Server Timings .
Når den er fullført, kan du se at den totale utførelsestiden er 3,6 sekunder. Den brukte mesteparten av tiden i formelmotoren og brukte 57 millisekunder i lagringsmotoren
Du kan også se at den fant 383 lagringsmotorspørringer. Av alle disse spørringene er det 327 som er castet i minnet slik at de kan gjenbrukes.
2. Analyser et mål i LuckyTemplates
Deretter må du optimalisere disse 3 identiske tiltakene.
Du må trekke ut disse målene til en annen fil og koble den til datamodellen du bruker.
Deretter starter du Server Timings for å se tiden det tar av de 3 målene for å fylle ut bilder.
Resultatene av kjøringen viser at tiltakene bruker 1,85 sekunder på å hente frem et resultat.
Resultatet viser en tabell bestående av 10 rader og 3 utvidede kolonner som hører hjemme i de oppsummerte kolonnene.
Tapstype-kolonnen inneholder 10 unike verdier som koden beregner for å få insentivprosentene.
Tiden det tar for koden er eksponentielt høy. Det er her og når du trenger å optimalisere dem.
RB Incentive%-målet i LuckyTemplates
Dette er et RB Incentive%-mål i LuckyTemplates. Det er en av de 3 hovedmålene som brukes i dette eksemplet.
Du kan se at den prøver å beregne insentivprosenten.
Den har en variabel, JobType, som henter Lost Type-verdi i gjeldende filterkontekst. Den sjekker også om det bare er én enkelt verdi synlig i gjeldende filterkontekst. Du må bruke en funksjon slik at hver gang en betingelse er oppfylt, gir den tilsvarende resultat.
Denne tiltakskoden genererer mye lagringsmotorfett som øker tiden i den totale varigheten av koden.
Gå nå tilbake til DAX Studio for å sjekke mengden lagringsmotorsøk målingen genererer.
Du kan se at det tok 600 millisekunder å utføre og 43 lagringsmotorspørringer å enkelt hente data for de 10 radene.
Sjekk nå dataene som blir forespurt fra lagringsmotoren. I den første spørringen er det en Job Tap Type og DCOUNT av Jobs Tap Type.
Den neste spørringen har Jobs Date Closed, som er fra sliceren i rapporten.
I den tredje koden vil du se en annen Jobs Tap Type med tilbakeringingsdata-ID.
På en annen linje vil du se de viktigste kodelinjene.
Det første du ser er jobbbetalingen mottatt, fakturert og faktiske utgifter.
Neste er WHERE- funksjonen som angir en betingelse og dets tilsvarende resultat. Resultatet vil variere basert på valget av slicer og brytersetningen i RB Incentive%-målet.
Du vil også legge merke til at koden på linje 12 og 14 er den samme.
Hvis du blar til høyre, kan du se at det er linjer med de samme spørringene. Spørringene på linjene styres av switch-setningen i RB Incentive%-målet.
Hvis du går tilbake til RB Incentive%-målet i LuckyTemplates, kan du se antall ganger et søk gjentas og hvordan det gjenspeiles i lagringsmotorsøkene.
Logikken bak IF og Switch
Nå, for å forstå hvorfor spørringene utføres flere ganger, må du forstå logikken til og SWITCH- funksjoner.
Du må utføre dem separat på en spørreplan. Men før du gjør det, sørg for å koble til databasen og slå på spørringsplanen.
Utfør SWITCH- setningen i spørringsplanen. Deretter markerer du uttalelsen og trykker på enter.
Dette vil generere en logisk spørreplan med forskjellige operasjoner.
Deretter utfører du IF -setningen ved å markere setningen og trykke enter.
Du kan se at den genererer den samme logiske spørreplanen.
Dette er fordi når du bruker en , konverterer motoren internt denne funksjonen til en IF -setning. Men en SWITCH- setning anbefales fordi den øker lesbarheten til koden din.
Etter det må du forstå hvordan en kode utføres i IF- eller SWITCH -funksjonen.
Dette er en eksempelkode som har en SWITCH- setning inni.
Den har mål for bruttofortjeneste, totalt estimat og totalt fakturert som alle er SUMMEN av forskjellige kolonner. Den har også en funksjon over Jobs Loss Type og en SWITCH og TRUE -setning.
Når du kjører denne koden, vil du se logikken bak funksjonene.
Den første spørringen får den distinkte Jobs Loss Type fra Jobs-tabellen.
Bortsett fra Jobs Tap Type, får den også summen av Jobs Estimat.
Inne i WHERE- betingelsen kan du også se verdiene som finnes i kolonnen Jobs Loss Type.
3. Bruk kodeevalueringsmetoder
I DAX er det 3 metoder for å evaluere koder:
Disse metodene vil hjelpe deg med å optimalisere en kode eller et mål i LuckyTemplates.
1. metode: streng evaluering
Eksemplet nedenfor bruker streng evalueringsmetoden.
Logikken bak det er at hvis konteksten til Jobs Tap Type er lik A, vil det gi bruttofortjenesten. Ellers gir det Totalestimatet. Koden gjør dette for hver rad i Jobs Tap Type.
Dette er et annet eksempelmål i LuckyTemplates som bruker Strict Evaluation.
Når du kjører denne koden, vil den generere 5 lagringsmotorspørringer.
Med streng evaluering gir koden det totale estimatet hvis bruttofortjenesten multiplisert med 1,4 er større enn det gjennomsnittlige estimatet. Ellers vil det gi Bruttofortjenesten.
Bruk av Strict Evaluation produserer flere lagringsmotorspørringer fordi IF -setningen sjekker konkurransen til bruttofortjenesten flere ganger og vil til slutt hemme ytelsen til hele operasjonen.
2. metode: Ivrig evaluering
Dette er samme kode som forrige eksempel.
Men i stedet for å beregne målene inne i IF- setningen, beregnet den alt i før RETURN .
Det betyr at før du sjekker utsagnene, får den alle verdiene av bruttofortjeneste og totalestimat for alle tapstyper.
Når du kjører denne koden, reduseres antallet lagringsmotorer til 3.
Det forbedrer ytelsen til hele operasjonen.
I den første operasjonsspørringen får den Jobs Tap Type og summen av Jobsestimat og Bruttofortjeneste.
Den neste spørringen får summen av jobbestimatet fra jobbstallen. Dette brukes til å beregne gjennomsnittsestimatet.
Den siste spørringen gir den distinkte Jobs Loss Type for verdiene skrevet på ADDCOLUMNS .
Ved å bruke Eager Evaluation får du alt i én enkelt databuffer. Dataene blir også evaluert og iterert på formelmotoren. IF - erklæringen vil returnere enten totalestimat eller bruttofortjeneste avhengig av sann eller usann evaluering.
Ivrig evaluering er ikke alltid den beste metoden for å optimalisere kodene dine. Strenge evaluering vil resultere i bedre ytelse hvis du har komplekse koder. Alt avhenger av funksjonene du bruker inne i DAX-koden.
Ulempen med Eager Evaluation er at hvis du lager verdisaker før en IF- eller SWITCH -setning og bruker de variablene inne i setningen som aldri skal utføres, vil motoren fortsatt beregne disse variablene.
Her er et eksempel på ulempen:
Ideelt sett, hvis tapstypen for jobber er lik A, bør den få bruttofortjeneste. Ellers får den Totalestimat.
Siden det ikke er noen verdi inne i kolonnen Job Tap Type som er lik A, bør den alltid få totalt estimat. Imidlertid gir den fortsatt bruttofortjenesten i databufferen.
Hvis du ser på det første søket, får det Jobs Tap Type og summen av Jobs Bruttofortjeneste og Estimat.
I den neste spørringen får den en distinkt Jobs Tap Type fra Jobs-tabellen.
3. Metode: IF.EAGER Evaluering
Den neste metoden er IF.EAGER- funksjonsevalueringen som gjenskaper oppførselen til Eager Evaluation.
Den lar deg skrive en kode som representerer den strenge evalueringen og utføre den med Eager Evaluation.
Hvis du ser på denne eksempelkoden, er den akkurat det samme som Strict Evaluation-koden. Den eneste forskjellen er at denne bruker IF.EAGER -funksjonen i stedet for IF .
Før du kjører koden, sørg for å koble til LuckyTemplates-modellen og slå på Server Timing. Når du er ferdig, trykk F5.
Du kan se at den genererte 3 lagringsmotorspørringer.
Den første spørringen får tapstypen for jobber og summen av jobbestimatet og bruttofortjenesten.
Den andre spørringen får summen av jobbestimatet.
Den siste spørringen får den distinkte Jobs Loss Type fra Jobs-tabellen.
Du vil legge merke til at den utførte samme oppførsel som Eager Evaluation.
Sammendrag av evalueringsmetoder
Når du prøver å gjøre ytelsen til beregningene dine bedre, må du huske følgende:
Men vær oppmerksom på at du må teste disse tre metodene for å finne ut hva som virkelig er best å bruke i rapporten.
4. Optimaliser et mål i LuckyTemplates
Hovedleksjonen i denne opplæringen er å optimalisere kodene dine.
Gå tilbake og se på RB Incentive% -målet som utføres ved hjelp av Strict Evaluation. Deretter kan du prøve å evaluere den ved å bruke Eager Evaluation.
Start med å lage variabler og legge inn RETURN -funksjonen.
Endre målreferansene med variablene.
Etter det, bekreft målingen og gå til DAX Studio for å se om det forbedret ytelsen.
Den viser at den totale tiden er 642 millisekunder og det totale antallet lagringsmotorforespørsler er redusert til 39.
Opprett nå variablene for alle data og endre alle målreferanser til deres tilsvarende variabler.
Bekreft deretter målingen og utfør koden i DAX-studioet.
Den totale utførelsestiden og den totale mengden lagringsmotorspørringer er redusert fra henholdsvis 600 millisekunder til 170 millisekunder og 43 spørringer til 15 spørringer.
Du kan også se at det ikke er noen duplikater. Å ha variabler i koden din forbedrer lesbarheten og ytelsen.
Avansert optimalisering for et mål i LuckyTemplates
Deretter må du optimalisere DAX-kodene dine ytterligere.
I stedet for å bruke, bruk funksjon.
HASONEVALUE teller antall tilgjengelige verdier i filterkonteksten, som er en svært intensiv operasjon. I mellomtiden sjekker ISINSCOPE om kolonnen som blir levert brukes til gruppering eller ikke.
Etter å ha endret funksjonene, bekreft målingen og utfør den i DAX Studio.
Du kan se at antallet lagringsmotorspørringer nå er 12. Den totale utførelsestiden har også blitt 105 millisekunder.
I den andre spørringen vil du legge merke til en tilbakeringingsdata-ID.
Dette skjer noen ganger når du bruker SELECTEDVALUE med tekstfeltet. Når du ser tilbakeringingsdata, kaller lagringsmotoren formelmotoren for å hjelpe til med å løse kompleksiteten til koden. Dette reduserer ytelsen til målingen din.
Du må fjerne tilbakeringingsdataene for å få bedre resultater i rapporten. For å gjøre det må du lage en konfigurasjonstabell i datamodellen.
Gå til alternativet Enter Data og lim inn dataene. Gi tabellen et navn LossTypeConfigTable .
Deretter klikker du på Rediger for å endre datatypen for kolonnen du skal importere.
Datatypen til tapstype-IDen skal være en lærerverdi slik at den kan brukes i SELECTEDVALUE- funksjonen.
Når den er lastet inn i modellen, oppretter du en relasjon mellom Jobs-tabellen og LossTypeConfigTable-tabellen basert på Loss Type.
Etter å ha opprettet en relasjon, gå til tabellen Jobber og legg til en ny kolonne. Kall det Loss ID og skriv deretter inn formelen.
Bruke funksjonen for konfigurasjonstabellen og trekk ut tapstype-IDen.
Gå deretter tilbake til RB Incentive%-målet og referer til det numeriske feltet i stedet for tekstfeltet. Inne i SELECTEDVALUE erstatter du tapstype med taps-ID.
Deretter endrer du alle målene i koden. Bruk en heltallsverdi i stedet for tekstverdier når du ser etter jobbtypen.
Når du har endret koden, bekrefter du målingen og utfører den i DAX Studio.
Tilbakeringingsdata-IDen elimineres i spørringen og kodens utførelsestid reduseres til 93 millisekunder.
RB Incentive%-målet er nå fullstendig optimalisert.
5. Optimaliser andre tiltak i LuckyTemplates
Du må også optimalisere målene WR Incentive% og QB Incentive%.
Kopier og lim inn den nøyaktige koden som brukes i RB Incentive%-målet. Kjør deretter de 3 tiltakene sammen.
Den totale utførelsestiden er optimalisert og redusert fra 1855 millisekunder til 213 millisekunder. Det er også bare 12 lagringsmotorspørringer.
De to første spørringene oppretter filterkonteksten, og resten representerer det nøyaktige antallet verdier i kolonnen Jobs Loss Type.
Siden alle målene er optimert, kjør den opprinnelige koden og se hvordan ytelsen har endret seg. Dataene viser at det nå blir beregnet på 1,9 sekunder.
Ytelsen til hele koden er nå optimert, noe som gjør rapporten din raskere og bedre.
Konklusjon
I LuckyTemplates-rapporter bør tiltak optimaliseres for å sikre at DAX-kodene dine fungerer jevnt. Dette forbedrer også den generelle ytelsen til rapporten din.
Du har lært de forskjellige metodene for å optimalisere målingen din i LuckyTemplates, og du har lært hvordan du vurderer hvilken du skal bruke avhengig av konteksten til rapporten din.
Lær å bruke DAX Studio EVALUATE nøkkelordet med grunnleggende eksempler og få en bedre forståelse av hvordan dette kan hjelpe deg med databehandling.
Finn ut hvorfor det er viktig å ha en dedikert datotabell i LuckyTemplates, og lær den raskeste og mest effektive måten å gjøre det på.
Denne korte opplæringen fremhever LuckyTemplates mobilrapporteringsfunksjon. Jeg skal vise deg hvordan du kan utvikle rapporter effektivt for mobil.
I denne LuckyTemplates-utstillingen vil vi gå gjennom rapporter som viser profesjonell tjenesteanalyse fra et firma som har flere kontrakter og kundeengasjementer.
Gå gjennom de viktigste oppdateringene for Power Apps og Power Automate og deres fordeler og implikasjoner for Microsoft Power Platform.
Oppdag noen vanlige SQL-funksjoner som vi kan bruke som streng, dato og noen avanserte funksjoner for å behandle eller manipulere data.
I denne opplæringen lærer du hvordan du lager din perfekte LuckyTemplates-mal som er konfigurert til dine behov og preferanser.
I denne bloggen vil vi demonstrere hvordan du legger feltparametere sammen med små multipler for å skape utrolig nyttig innsikt og grafikk.
I denne bloggen vil du lære hvordan du bruker LuckyTemplates rangering og tilpassede grupperingsfunksjoner for å segmentere et eksempeldata og rangere det i henhold til kriterier.
I denne opplæringen skal jeg dekke en spesifikk teknikk rundt hvordan du viser kumulativ total kun opp til en bestemt dato i grafikken i LuckyTemplates.