Optimera DAX för LuckyTemplates med DAX Studio – Formula Engines

När du optimerar din datamodell och din DAX för LuckyTemplates hjälper det att komma ihåg att det finns två motorer som körs bakom kulisserna – formelmotorn och lagringsmotorn .

Dessa två motorer arbetar tillsammans för att returnera de resultat som behövs till användaren. De ger resultaten i form av en tabell eller ett skalvärde.

Innehållsförteckning

Formelmotorns roll

I den här artikeln kommer vi att fokusera på formelmotorn.

Formelmotorn är motorn på toppnivå som hanterar hela arkitekturen för en fråga.

Vad du än gör när du kör en fråga eller skapar en beräknad kolumn eller en beräknad tabell, startar formelmotorn.

Formelmotorn förstår de frågor som tas emot inte bara i DAX utan också i MDX. Till exempel, när du använder Excel skapar du pivotmodeller baserade på pivottabeller, och pivottabeller använder faktiskt MDX-språk.

Det är här formelmotorn startar. Eftersom den förstår både DAX och MDX kan du använda en annan LuckyTemplates-modell. Frågorna som skickas från denna datamodell kommer att använda DAX, medan frågorna som kommer från pivotmodellen kommer att använda MDX.

Hur Formelmotorn fungerar

Att förstå frågorna som kommer från antingen MDX-källan eller DAX-källan är bara en faktor i formelmotorns prestanda. Den går också igenom andra steg för att hjälpa dig arbeta med dina frågor.

Först måste den generera en frågeplan som lagringsmotorn förstår . Som motor på lägre nivå vet inte lagringsmotorn om en pivottabell i Excel eller en visuell inuti LuckyTemplates körde frågan.

När du skapar en frågeplan bygger formelmotorn först en logisk frågeplan, sedan skapar den en fysisk frågeplan. Både den logiska och den fysiska frågeplanen ska se ut som varandra.

Efter att ha slutfört den fysiska frågeplanen får användaren eller klientverktyget resultaten. Därifrån dikterar klientverktyget hur det kommer att använda resultaten eller datamängden för att visa slutresultatet för användaren.

Formelmotorns huvudsakliga begränsningar

Formelmotorn spelar en stor roll när du optimerar DAX för LuckyTemplates med DAX Studio. Men det kommer också med vissa begränsningar.

För det första använder formelmotorn alltid en enda kärna för att hantera hela din operation oavsett hur många CPU-kärnor som finns tillgängliga i ditt system .

När jag öppnar min Task Manager ser du att min CPU har sex kärnor.

Optimera DAX för LuckyTemplates med DAX Studio – Formula Engines

Trots detta kommer formelmotorn fortfarande att välja en av dessa sex kärnor att arbeta med, medan den lämnar lagringsmotorn för att använda resten.

För det andra har formelmotorn inte direkt åtkomst till din databas . På grund av denna begränsning måste du lagra data antingen i internminnet, eller så kan du lagra i databasen och skapa en DirectQuery över den databasen.

Den förlitar sig också på lagringsmotorn för att få data i form av en datacache. Formelmotorn itererar sedan över datacachen för att fortsätta innan den kan ge resultat till slutanvändaren.

Hur Formula Engine hjälper till att optimera DAX för Lucky Templates

Ibland, när du försöker optimera din datamodell eller din DAX för LuckyTemplates, kommer du att märka att lagringsmotorn saktar ner när den kör frågor. I det här fallet kan du använda formelmotorn för att slutföra hela beräkningen för att optimera processen.

Observera att om formelmotorn slutar bygga hela tabellen på egen hand, kommer resultatuppsättningen som skapats i processen inte att användas i de efterföljande frågorna som kommer att genereras av klientverktyget om de liknar de frågor som tidigare körts . Men om lagringsmotorn tillhandahåller datacchen, kan just den datacchen behållas i minnet så att den kan optimera förfrågningar som kommer från klientverktyget.

Hur kommer det att fungera?

Låt oss säga att vi skriver en fråga som ska exekveras helt av lagringsmotorn, men med vissa aspekter som ska beräknas av formelmotorn. I det här fallet kommer lagringsmotorn att skicka en datacache tillbaka till formelmotorn och den datacchen (om det är en enkel sådan) kan behållas i minnet.

Nu, om en liknande fråga kommer in några sekunder senare, istället för att skanna hela datamodellen en gång till, kommer formelmotorn eller lagringsmotorn att använda den specifika datacchen så att frågetiden kan minskas och användarupplevelsen förbättrats.

Minska belastningen på formelmotorn

Återigen förstår formelmotorn DAX- och MDX-koder.

Så om du använder,och andra uppgifter, formelmotorn känner till alla funktioner som du använder inom DAX-språket och kommer att kunna lösa allt på egen hand. Detta kan dock påverka prestandan för frågan, särskilt eftersom formelmotorn försöker göra allt med en enda kärna.

Det är därför vi också måste vara uppmärksamma på att minska belastningen på formelmotorn och öka belastningen på lagringsmotorn.

Ett bra exempel på hur olika beräkningen är inom formelmotorn jämfört med lagringsmotorn skulle vara användningen av CROSSJOIN kontra.

När du använder CROSSJOIN kommer endast en begränsad mängd data att föras genom lagringsmotorn. När det gäller resten av beräkningen kommer allt att utföras av formelmotorn. I jämförelse innebär användning av SUMMARIZE att hela frågan körs i lagringsmotorn.

Naturligtvis skulle detta också bero på hur SUMMARIZE används.

Om SUMMARIZE används som den innersta funktionen kommer den definitivt att tryckas ner till lagringsmotorn. Men i vissa fall används SUMMARIZE tillsammans med en annan kod som kräver att formelmotorn fungerar. I det här fallet kommer formelmotorn att gå in och göra jobbet.

Att veta var lasten tar vägen kan hjälpa dig att optimera din frågas prestanda, särskilt när du tänker på vad kapaciteten och begränsningarna är för de motorer du har till ditt förfogande.

Verktyg som kan hjälpa till att optimera DAX för LuckyTemplates

Att optimera DAX blir lättare om du maximerar verktygen som gör det möjligt. DAX Studio är ett av dessa verktyg.

Låt oss ta exemplet tidigare där formelmotorn tar på sig hela belastningen av att slutföra beräkningen när SUMMARIZE-funktionen används. DAX Studio kan hjälpa dig att skriva om din kod på ett sätt som skjuter SUMMARIZE in i lagringsmotorn, vilket frigör belastningen på formelmotorn. Detta förbättrar potentiellt prestandan för din datamodell och dina frågor.

Naturligtvis bör detta fungera sömlöst för enkla frågor. Det finns också mer komplicerade scenarier.

Till exempel kan du bygga sammansatta modeller som använder två lagringsmotorer inom själva datamodellen. Den ena skulle kunna vara för Vertipaq, medan den andra skulle vara för DirectQuery. I det här fallet måste din databas optimeras på ett sätt så att de frågor som genereras kommer att byggas för den specifika relationsdatamodellen.

Låt oss säga att du har två tabeller i din datummodell – tabellen Produkter och tabellen Försäljning. Tabellen Produkter finns i Vertipaq-lagringen, medan försäljningstabellen, som är en större tabell, lagras direkt i databasen via en DirectQuery-anslutning.

Låt oss också anta att du drar kolumnen Varumärke till matrisen, såväl som måttet för total försäljning som kommer från tabellen Försäljning i DirectQuery-anslutningen.

I det här fallet måste formelmotorn utföra operationen mellan båda motorerna.

Först kommer den att hämta produktnyckel- och varumärkeskolumnerna från produkttabellen. Sedan hämtar den kolumnerna nettopris, kvantitet och produktnyckel från försäljningstabellen. När den väl har datacachen från både Vertipaq och DirectQuery måste formelmotorn ta datacachen och försöka ansluta dem för att ge slutanvändaren resultaten.




Slutsats

Formelmotorn spelar verkligen en stor roll när du arbetar med DAX. Det är dock viktigt att först förstå hur det fungerar innan du hoppar in. Att bemästra hur man får formelmotorn och lagringsmotorn att fungera sömlöst tillsammans är nyckeln, särskilt om du vill att dina DAX-frågor ska prestera bättre.

Som motor på toppnivå i analystjänstarkitekturen måste formelmotorn utföra många operationer. Men när du också förstår detaljerna i lagringsmotorn kan du ta reda på vilken operation du ska trycka in i lagringsmotorn och vilken du ska lämna inom formelmotorn.

Vi kommer att gräva djupare i lagringsmotorn i en separat handledning.

Med vänliga hälsningar,


Pipe In R: Anslutningsfunktioner med Dplyr

Pipe In R: Anslutningsfunktioner med Dplyr

I den här handledningen kommer du att lära dig hur du kopplar ihop funktioner med hjälp av dplyr-röroperatorn i programmeringsspråket R.

RANKX Deep Dive: A Lucky Templates DAX-funktion

RANKX Deep Dive: A Lucky Templates DAX-funktion

RANKX från LuckyTemplates låter dig returnera rankningen av ett specifikt nummer i varje tabellrad som utgör en del av en lista med nummer.

Extrahera LuckyTemplates-teman och bilder från PBIX

Extrahera LuckyTemplates-teman och bilder från PBIX

Lär dig hur du tar isär en PBIX-fil för att extrahera LuckyTemplates-teman och bilder från bakgrunden och använda den för att skapa din rapport!

Excel Formler Fuskblad: Mellanvägledning

Excel Formler Fuskblad: Mellanvägledning

Excel Formler Fuskblad: Mellanvägledning

LuckyTemplates Kalendertabell: Vad är det och hur man använder det

LuckyTemplates Kalendertabell: Vad är det och hur man använder det

LuckyTemplates Kalendertabell: Vad är det och hur man använder det

Python i LuckyTemplates: Hur man installerar och ställer in

Python i LuckyTemplates: Hur man installerar och ställer in

Lär dig hur du installerar programmeringsspråket Python i LuckyTemplates och hur du använder dess verktyg för att skriva koder och visa bilder.

Beräkna dynamiska vinstmarginaler – enkel analys av LuckyTemplates med DAX

Beräkna dynamiska vinstmarginaler – enkel analys av LuckyTemplates med DAX

Lär dig hur du beräknar dynamiska vinstmarginaler vid sidan av LuckyTemplates och hur du kan få fler insikter genom att gräva djupare i resultaten.

Sortering av datumtabellkolumner i LuckyTemplates

Sortering av datumtabellkolumner i LuckyTemplates

Lär dig hur du sorterar fälten från en utökad datumtabells kolumner korrekt. Detta är en bra strategi att göra för svåra fält.

Hitta dina bästa produkter för varje region i LuckyTemplates med DAX

Hitta dina bästa produkter för varje region i LuckyTemplates med DAX

I den här artikeln går jag igenom hur du kan hitta dina toppprodukter per region med hjälp av DAX-beräkningar i LuckyTemplates, inklusive TOPN- och CALCULATE-funktionerna.

Skräpdimension: Vad är det och varför det är allt annat än skräp

Skräpdimension: Vad är det och varför det är allt annat än skräp

Lär dig hur du använder en skräpdimension för flaggor med låg kardinalitet som du vill infoga i din datamodell på ett effektivt sätt.