DAX-funktion COLUMNSTATISTICS i LuckyTemplates

Jeg vil gerne fortsætte med at udforske de dynamiske anvendelser af DAX-funktionen COLUMNSTATISTICS() – en ny, næsten fuldstændig udokumenteret DAX-funktion tilføjet til LuckyTemplates i august 2021, som har nogle meget unikke aspekter, som jeg tror vil være meget interessant at blive fortrolig med. Du kan se den fulde video af denne tutorial nederst på denne blog.

Jeg har eksperimenteret meget og lært nogle virkelig interessante nye ting om, hvordan denne funktion fungerer, og hvad du kan gøre med den. I min første blog om denne funktion talte jeg om nogle statiske anvendelser. I dag vil jeg tale om nogle virkelig ret fantastiske dynamiske anvendelser af funktionen på måder, som selv IntelliSense endnu ikke er opdateret på.

Indholdsfortegnelse

Sådan fungerer DAX-funktionen COLUMNSTATISTICS

For hver tabel og felt i din datamodel producerer COLUMNSTATISTICS en tabel med seks ekstra felter, der har et tabelnavn, kolonnenavn, min og maks. værdier for kolonnen, kardinalitet og en maks. længde. Det virker ikke som en masse data, men der er meget, du kan gøre med det.

DAX-funktion COLUMNSTATISTICS i LuckyTemplates

De data, som jeg i øjeblikket bruger, er kun øvelsesdatasættet for LuckyTemplates eksterne værktøjer. Det er en relativt simpel datamodel med fem dimensionstabeller, en faktatabel og en. En model som denne er ikke så svær at holde styr på, men en kompleks model har brug for en meget mere kompleks datasætovervågning.

Metadataene for et komplekst datasæt bliver meget vigtigere i forhold til at se på kardinalitet, som er antallet af unikke værdier inden for et felt. Det har stor indflydelse på størrelsen af ​​din model samt potentielt behandlingshastigheden.

Når du bygger en model, hjælper det desuden ikke kun at kende antallet af tabeller, men også datointervallet for disse tabeller. Når du opbygger din Datoer-tabel, sørger du for at dække hele rækken af ​​data i din faktatabel.

Og så, for dette eksempel, lad os prøve at tilføje en tabel til denne datamodel, som jeg arbejder på. I Power-forespørgslen går vi til Ny kilde og derefter Blank forespørgsel . Og så går vi ind i den avancerede editor, og jeg vil bare indsætte en funktion, der hedder List.Dates . Vi vil bruge det til at lave en tabel over kardinaliteten på 10.000, så det er 10.000 unikke datoer.

Det vil returnere en liste med 10.000 elementer, og vi kan bare konvertere den til en tabel og derefter omdøbe den tabel.

Vi kan ændre feltet op her til dato. Og hvis vi klikker på Luk og Anvend, vil vi se, at vores smarte fortælling vil opdateres dynamisk uden at skulle opdatere hele modellen (som vi gør tidligere).

Grunden til, at dette er fuldt dynamisk, er, at vi gør det hele med foranstaltninger. Det interessante er, at den viser en masse fejl, og funktionen er så ny, at IntelliSense ikke opfanger den ordentligt, men den virker faktisk.

Lad os gå ind i Tabular Editor 3, som jeg tror er den bedste måde at finde ud af, hvad de komplekse DAX-foranstaltninger rent faktisk gør.

Husk, at DAX-forespørgslen returnerer tabeller i stedet for skalere. Så hvis vi tager denne foranstaltning og kopierer dette over i en, viser det en fejl, fordi resultatet her stadig er en scaler. Vi kan bruge fejlfindingsmetoden til at erstatte dette RETURN-resultat med individuelle komponenter af målingen.

I dette tilfælde vil vi erstatte det med ColStats , som det, vi har gjort øverst, blot er at KOLUMNSTATISTIKind i en variabel. Med det får vi præcis, hvad vi forventer, som er standard kolonnestatistiktabellen.

Og nu vil vi bare se på kolonnen Tabelnavn, og vi vil tage de forskellige værdier ud af det og tælle dem. Det vil være antallet af tabeller i vores datamodel.

Først vælger vi kolonner på vores ColStats-tabel og returnerer bare det tabelnavnsfelt. Typisk vil du i en DAX-måling eller en DAX-forespørgsel returnere et feltnavn med tabelnavnet foran. Men i dette tilfælde ved vi ikke, hvad det relevante tabelnavn refererer til, fordi det kun eksisterer virtuelt. Det ser ikke ud til at acceptere variabelnavnet som tabelnavn.

Så i dette tilfælde er vi nødt til at blive ved det, der ligner et mål, men det er faktisk en kolonnereference uden tabelreferencen foran. Og det virker stadig, selvom det er forvirrende i nomenklaturen. Hvis vi nu erstattede denne RETURN-sætning med vores TabCol , får vi præcis, hvad vi forventer, hvilket er det model-tabeller-felt.

Og så for resultatet, laver vi bare en optælling af de forskellige tabelkolonner. Så hvis vi erstatter dette med DISTINCT(TabsCol) , får vi vores syv tabeller.

Lad os nu tage et kig på den højeste kardinalitet i tabellen med den højeste kardinalitet og se, hvordan vi fik dem. Dette er faktisk et vigtigt mønster, som du kan bruge til mange forskellige ting, hvor du leder efter, ikke kun det maksimale antal, men den maksimale attribut, der er forbundet med det tal.

Så lad os tage et kig på MaxCardinality . Selvom dette er en scaler, kan vi lave den om til en encellet tabel ved blot at sætte parenteser rundt om den. Og hvis vi rammer fem, vil vi se, at det er kardinalitetsværdien på 10.000.

Så nu er spørgsmålet, hvordan vi tager dette og returnerer tabellen forbundet med den kardinalitet.

For at gøre det bruger vi dette meget almindelige mønster ved hjælp af. Vi kopierer det derefter til vores RETURN-erklæring, og det vil give os den række, vi forventede at få, som er kolonnen 10.000 Datoer. I stedet for at få en række (fordi det er TOPN), får vi to, fordi der er uafgjort.

Hvad ColStats også gør, er, at det for hver tabel opretter et indeks i en skjult indeksrække kaldet RowNumber , hvor det er en unik identifikator for hver række i tabellen. Så MaxCardinality vil altid blive spejlet af RowNumber, hvis det er en unik identifikator.

Og så gør det ikke så meget, at vi har to rækker, fordi det, vi kigger på, er maks. af tabelnavnet. Og det max er der bare for at returnere en værdi, som ellers bare ville være en nøgen kolonne. Men vi er nødt til at lægge noget sammenlægning omkring det, og i dette tilfælde bruger vi.

Så, hvis vi placerer MaxCardinality i vores RETURN-sætning og sætter den i parentes for at returnere en tabel i stedet for en scaler, returnerer den værdien af ​​Test.

Dette TOPN DAX-mønster er et rigtig godt mønster at huske, når du grundlæggende vil finde ud af en max- eller en min-værdi og derefter returnere en attribut, der er forbundet med den min eller max.




Konklusion

Jeg har givet dig den generelle tilgang og kontekst, som vi kan bruge i forhold til, at du bedst muligt udnytter DAX-funktionen COLUMNSTATISTICS på en dynamisk måde. At være i stand til at spore dette dynamisk i form af en kompleks model, tror jeg, der er en enorm værdi i denne funktion.

Jo mere vi eksperimenterer med COLUMNSTATISTICS-funktionen og med dens evne til dynamisk at håndtere metadata i DAX, tror jeg, jo mere interessante anvendelser vil vi finde. Så hvis du allerede har fundet nogle interessante anvendelser af denne DAX-funktion, så lad mig det vide i kommentarerne nedenfor.

Alt det bedste!


Oplev unik indsigt ved hjælp af LuckyTemplates TOPN-funktion

Oplev unik indsigt ved hjælp af LuckyTemplates TOPN-funktion

Denne blog indeholder LuckyTemplates TOPN DAX-funktionen, som giver dig mulighed for at få unik indsigt fra dine data, hvilket hjælper dig med at træffe bedre markedsføringsbeslutninger.

Datamodellering i LuckyTemplates ved hjælp af understøttende tabeller

Datamodellering i LuckyTemplates ved hjælp af understøttende tabeller

Lær nogle fantastiske analytiske teknikker, som vi kan gøre til datamodellering i LuckyTemplates ved hjælp af DAX-understøttende tabeller.

Avanceret DAX til LuckyTemplates: Implementering af rangeringslogik på tværs af unikke indsigter

Avanceret DAX til LuckyTemplates: Implementering af rangeringslogik på tværs af unikke indsigter

Her dykker vi ned i LuckyTemplates Advanced DAX og implementerer rangeringslogik for at få en meget unik indsigt. Jeg viser også måleforgrening i dette eksempel.

LuckyTemplates What-If-parameterfunktion

LuckyTemplates What-If-parameterfunktion

Denne blog introducerer den nye funktion i LuckyTemplates, What-If-analyseparameteren. Du vil se, hvordan det gør alt hurtigt og nemt til din scenarieanalyse.

Brug LuckyTemplates Mål forgrening for at kontrollere, om dine avancer udvides, efterhånden som omsætningen vokser

Brug LuckyTemplates Mål forgrening for at kontrollere, om dine avancer udvides, efterhånden som omsætningen vokser

Lær, hvordan du afgør, om din omsætningsvækst er god ved at kontrollere, om dine avancer er udvidet ved hjælp af LuckyTemplates, der måler forgrening.

LuckyTemplates-parametre via forespørgselseditor

LuckyTemplates-parametre via forespørgselseditor

Lær og forstå, hvordan du kan oprette og bruge LuckyTemplates Parameters, som er en kraftfuld funktion i Query Editor.

Rundt søjlediagram – en visualisering til dit dashboard

Rundt søjlediagram – en visualisering til dit dashboard

Denne vejledning vil diskutere om oprettelse af et rundt søjlediagram ved hjælp af Charticulator. Du lærer, hvordan du designer dem til din LuckyTemplates-rapport.

PowerApps funktioner og formler | En introduktion

PowerApps funktioner og formler | En introduktion

Lær, hvordan du bruger PowerApps-funktioner og -formler til at forbedre funktionaliteten og ændre adfærd i vores Power Apps-lærredsapp.

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.