Optimering af DAX til LuckyTemplates ved hjælp af DAX Studio – Formula Engines

Når du optimerer din datamodel og din DAX til LuckyTemplates, hjælper det at huske, at der er to motorer, der kører bag kulisserne - formelmotoren og lagermotoren .

Disse to motorer arbejder sammen for at returnere de nødvendige resultater tilbage til brugeren. De giver resultaterne i form af en tabel eller en skalaværdi.

Indholdsfortegnelse

Formelmotorens rolle

I denne artikel vil vi fokusere på formelmotoren.

Formelmotoren er motoren på øverste niveau, der styrer hele arkitekturen i en forespørgsel.

Uanset hvad du gør, mens du udfører en forespørgsel, eller mens du opretter en beregnet kolonne eller en beregnet tabel, starter formelmotoren.

Formelmotoren forstår de forespørgsler, der modtages, ikke kun i DAX, men også i MDX. For eksempel, når du bruger Excel, opretter du pivotmodeller baseret på pivottabeller, og pivottabeller bruger faktisk MDX-sprog.

Det er her, formelmotoren starter. Fordi den forstår både DAX og MDX, kan du bruge en anden LuckyTemplates-model. De forespørgsler, der sendes fra denne datamodel, vil bruge DAX, mens forespørgslerne, der kommer fra pivotmodellen, bruger MDX.

Sådan fungerer formelmotoren

At forstå de forespørgsler, der stammer fra enten MDX-kilden eller DAX-kilden, er blot én faktor i formelmotorens ydeevne. Den gennemgår også andre trin for at hjælpe dig med at arbejde med dine forespørgsler.

Først skal den generere en forespørgselsplan, som storage-motoren forstår . Som motoren på lavere niveau ved lagermotoren faktisk ikke, om en pivottabel i Excel eller en visualisering inde i LuckyTemplates udførte forespørgslen.

Ved oprettelse af en forespørgselsplan opbygger formelmotoren først en logisk forespørgselsplan, derefter opretter den en fysisk forespørgselsplan. Både den logiske og den fysiske forespørgselsplan skal ligne hinanden.

Efter at have gennemført den fysiske forespørgselsplan, får brugeren eller klientværktøjet resultaterne sat. Derfra dikterer klientværktøjet, hvordan det vil bruge resultaterne eller datasættet til at vise slutresultatet for brugeren.

Formelmotorens vigtigste begrænsninger

Formelmotoren spiller en stor rolle, når du optimerer DAX til LuckyTemplates ved hjælp af DAX Studio. Det kommer dog også med nogle begrænsninger.

For det første bruger formelmotoren altid en enkelt kerne til at styre hele din operation, uanset hvor mange CPU-kerner der er tilgængelige i dit system .

Når jeg åbner min Task Manager, vil du se, at min CPU har seks kerner.

Optimering af DAX til LuckyTemplates ved hjælp af DAX Studio – Formula Engines

På trods af dette faktum vil formelmotoren stadig vælge en af ​​disse seks kerner at arbejde med, mens den overlader lagermotoren til at bruge resten.

For det andet har formelmotoren ikke direkte adgang til din database . På grund af denne begrænsning bliver du nødt til at gemme data enten i den interne hukommelse, eller du kan gemme i databasen og oprette en DirectQuery over den database.

Den er også afhængig af lagermotoren til at få dataene i form af en datacache. Formelmotoren itererer derefter over denne datacache for at fortsætte, før den kan levere resultater til slutbrugeren.

Hvordan Formula Engine hjælper med at optimere DAX til Lucky Templates

Nogle gange, når du forsøger at optimere din datamodel eller din DAX til LuckyTemplates, vil du bemærke, at lagermotoren bliver langsommere, mens den udfører forespørgsler. I dette tilfælde kan du bruge formelmotoren til at fuldføre hele beregningen for at optimere processen.

Bemærk, at hvis formelmotoren ender med at bygge hele tabellen alene, vil det resultatsæt, der er oprettet i processen, ikke blive brugt i de efterfølgende forespørgsler, der vil blive genereret af klientværktøjet, hvis de ligner de tidligere udførte forespørgsler . Men i tilfælde af at lagermotoren leverer datacachen, så kan den pågældende datacache opbevares i hukommelsen, så den kan optimere anmodninger, der kommer fra klientværktøjet.

Hvordan vil det fungere?

Lad os sige, at vi skriver en forespørgsel, der skal udføres fuldstændigt af lagermotoren, men med nogle aspekter, der skal beregnes af formelmotoren. I dette tilfælde vil lagringsmotoren sende en datacache tilbage til formelmotoren, og denne datacache (i tilfælde af at det er en simpel sådan) kan opbevares i hukommelsen.

Nu, hvis en lignende forespørgsel kommer ind et par sekunder senere, i stedet for at scanne hele datamodellen igen, vil formelmotoren eller lagermotoren bruge den pågældende datacache, så forespørgselstiden kan reduceres, og brugeroplevelsen kan forbedret.

Reduktion af belastningen på formelmotoren

Igen forstår formelmotoren DAX- og MDX-koder.

Så hvis du bruger,og andre opgaver, kender formelmotoren alle de funktioner, du bruger i DAX-sproget, og vil være i stand til at løse det hele på egen hånd. Dette kan dog påvirke ydelsen af ​​forespørgslen, især da formelmotoren forsøger at gøre alt ved hjælp af en enkelt kerne.

Det er derfor, vi også skal være opmærksomme på at reducere belastningen på formelmotoren og øge belastningen på lagermotoren.

Et godt eksempel på, hvor forskellig beregningen er inden for formelmotoren versus lagermotoren, ville være brugen af ​​CROSSJOIN versus.

Når du bruger CROSSJOIN, vil kun en begrænset mængde data blive sendt gennem lagermotoren. Hvad angår resten af ​​beregningen, vil det hele blive udført af formelmotoren. Til sammenligning betyder brug af SUMMARIZE at udføre hele forespørgslen i storage-motoren.

Dette vil naturligvis også afhænge af, hvordan SUMMARIZE bruges.

Hvis SUMMARIZE bruges som den inderste funktion, så vil den helt sikkert blive skubbet ned til lagermotoren. Men i nogle tilfælde bruges SUMMARIZE sammen med en anden kode, der kræver, at formelmotoren fungerer. I dette tilfælde vil formelmotoren træde ind og udføre arbejdet.

At vide, hvor belastningen går, kan hjælpe dig med at optimere din forespørgsels ydeevne, især når du husker på, hvad kapaciteten og begrænsningerne er for de motorer, du har til rådighed.

Værktøjer, der kan hjælpe med at optimere DAX til LuckyTemplates

Det bliver nemmere at optimere DAX, hvis du maksimerer de værktøjer, der gør det muligt. DAX Studio er et af disse værktøjer.

Lad os tage eksemplet tidligere, hvor formelmotoren påtager sig hele belastningen af ​​at fuldføre beregningen, når SUMMARIZE-funktionen bruges. DAX Studio kan hjælpe dig med at omskrive din kode på en måde, der skubber SUMMARIZE ind i lagermotoren, hvilket frigør belastningen på formelmotoren. Dette forbedrer potentielt ydeevnen af ​​din datamodel og forespørgsler.

Selvfølgelig skal dette fungere problemfrit for simple forespørgsler. Der er også mere komplicerede scenarier.

For eksempel kan du bygge sammensatte modeller, der bruger to lagringsmotorer i selve datamodellen. Den ene kunne være til Vertipaq, mens den anden ville være til DirectQuery. I dette tilfælde skal din database optimeres på en måde, så de genererede forespørgsler vil blive bygget til den specifikke relationelle datamodel.

Lad os sige, at du har to tabeller i din datomodel - tabellen Produkter og tabellen Salg. Produkttabellen er i Vertipaq-lageret, mens salgstabellen, som er en større tabel, gemmes direkte inde i databasen via en DirectQuery-forbindelse.

Lad os også antage, at du trækker Brand-kolonnen ind i matrixen, såvel som målingen for Total Sales, der kommer fra Sales-tabellen i DirectQuery-forbindelsen.

I dette tilfælde skal formelmotoren udføre operationen mellem begge motorer.

Først vil den hente produktnøgle- og brandkolonnerne fra produkttabellen. Derefter vil den hente kolonnerne nettopris, mængde og produktnøgle fra salgstabellen. Når først den har datacachen fra både Vertipaq og DirectQuery, bliver formelmotoren nødt til at tage datacachen og forsøge at slutte sig til dem for at levere resultaterne til slutbrugeren.




Konklusion

Formelmotoren spiller virkelig en stor rolle, når du arbejder med DAX. Det er dog vigtigt at forstå, hvordan det virker, før du hopper ind. Det er vigtigt at lære, hvordan man får formelmotoren og storage-motoren til at fungere problemfrit sammen, især hvis du ønsker, at dine DAX-forespørgsler skal yde bedre.

Som motoren på øverste niveau i analyseservicearkitekturen skal formelmotoren udføre en masse operationer. Men når du også forstår ins og outs af storage-motoren, kan du finde ud af, hvilken operation du skal skubbe ind i storage-motoren, og hvilken du skal lade være med i formelmotoren.

Vi graver dybere ned i lagermotoren i en separat vejledning.

Alt det bedste,


Pipe In R: Tilslutningsfunktioner med Dplyr

Pipe In R: Tilslutningsfunktioner med Dplyr

I denne øvelse lærer du, hvordan du kæder funktioner sammen ved hjælp af dplyr-røroperatoren i programmeringssproget R.

RANKX Deep Dive: A Lucky Templates DAX-funktion

RANKX Deep Dive: A Lucky Templates DAX-funktion

RANKX fra LuckyTemplates giver dig mulighed for at returnere rangeringen af ​​et specifikt tal i hver tabelrække, der udgør en del af en liste over tal.

Udpakning af LuckyTemplates-temaer og -billeder fra PBIX

Udpakning af LuckyTemplates-temaer og -billeder fra PBIX

Lær, hvordan du adskiller en PBIX-fil for at udtrække LuckyTemplates-temaer og -billeder fra baggrunden og bruge den til at oprette din rapport!

Excel Formler Snydeark: Mellemvejledning

Excel Formler Snydeark: Mellemvejledning

Excel Formler Snydeark: Mellemvejledning

LuckyTemplates kalendertabel: Hvad er det, og hvordan man bruger det

LuckyTemplates kalendertabel: Hvad er det, og hvordan man bruger det

LuckyTemplates kalendertabel: Hvad er det, og hvordan man bruger det

Python i LuckyTemplates: Sådan installeres og konfigureres

Python i LuckyTemplates: Sådan installeres og konfigureres

Lær, hvordan du installerer programmeringssproget Python i LuckyTemplates, og hvordan du bruger dets værktøjer til at skrive koder og vise billeder.

Beregning af dynamiske fortjenestemargener – nem analyse af LuckyTemplates med DAX

Beregning af dynamiske fortjenestemargener – nem analyse af LuckyTemplates med DAX

Lær, hvordan du beregner dynamiske fortjenstmargener ved siden af ​​LuckyTemplates, og hvordan du kan få mere indsigt ved at grave dybere ned i resultaterne.

Sortering af datotabelkolonner i LuckyTemplates

Sortering af datotabelkolonner i LuckyTemplates

Lær, hvordan du sorterer felterne fra kolonner med udvidet datotabel korrekt. Dette er en god strategi at gøre for vanskelige felter.

Find dine topprodukter for hver region i LuckyTemplates ved hjælp af DAX

Find dine topprodukter for hver region i LuckyTemplates ved hjælp af DAX

I denne artikel gennemgår jeg, hvordan du kan finde dine topprodukter pr. region ved hjælp af DAX-beregninger i LuckyTemplates, herunder funktionerne TOPN og CALCUATE.

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

Lær, hvordan du bruger en uønsket dimension til flag med lav kardinalitet, som du ønsker at inkorporere i din datamodel på en effektiv måde.