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,


Skapa en datumtabell i LuckyTemplates

Skapa en datumtabell i LuckyTemplates

Ta reda på varför det är viktigt att ha en dedikerad datumtabell i LuckyTemplates och lär dig det snabbaste och mest effektiva sättet att göra det.

LuckyTemplates mobilrapporteringstips och tekniker

LuckyTemplates mobilrapporteringstips och tekniker

Denna korta handledning belyser LuckyTemplates mobilrapporteringsfunktion. Jag ska visa dig hur du kan utveckla rapporter effektivt för mobila enheter.

Professional Service Analytics-rapporter i LuckyTemplates

Professional Service Analytics-rapporter i LuckyTemplates

I denna LuckyTemplates Showcase går vi igenom rapporter som visar professionell serviceanalys från ett företag som har flera kontrakt och kundengagemang.

Microsoft Power Platform-uppdateringar | Microsoft Ignite 2021

Microsoft Power Platform-uppdateringar | Microsoft Ignite 2021

Gå igenom de viktigaste uppdateringarna för Power Apps och Power Automate och deras fördelar och konsekvenser för Microsoft Power Platform.

Vanliga SQL-funktioner: En översikt

Vanliga SQL-funktioner: En översikt

Upptäck några vanliga SQL-funktioner som vi kan använda som sträng, datum och några avancerade funktioner för att bearbeta eller manipulera data.

LuckyTemplates Skapa mall: Guide och tips

LuckyTemplates Skapa mall: Guide och tips

I den här handledningen kommer du att lära dig hur du skapar din perfekta LuckyTemplates-mall som är konfigurerad efter dina behov och preferenser.

Fältparametrar och små multiplar i LuckyTemplates

Fältparametrar och små multiplar i LuckyTemplates

I den här bloggen kommer vi att visa hur man lager fältparametrar med små multiplar för att skapa otroligt användbara insikter och bilder.

LuckyTemplates Rank och anpassad gruppering

LuckyTemplates Rank och anpassad gruppering

I den här bloggen kommer du att lära dig hur du använder LuckyTemplates ranknings- och anpassade grupperingsfunktioner för att segmentera en exempeldata och rangordna den enligt kriterier.

Visar kumulativ total endast upp till ett visst datum i LuckyTemplates

Visar kumulativ total endast upp till ett visst datum i LuckyTemplates

I den här handledningen kommer jag att täcka en specifik teknik kring hur man visar Kumulativ total endast upp till ett specifikt datum i dina bilder i LuckyTemplates.

Punktdiagram: Avancerade anpassade bilder för LuckyTemplates

Punktdiagram: Avancerade anpassade bilder för LuckyTemplates

Lär dig hur du skapar och anpassar punktdiagram i LuckyTemplates, som huvudsakligen används för att mäta prestanda mot mål eller tidigare år.