SQLShack

Microsoft Power BI har stöd för två olika språk, M-språket och DAX (Data Analysis Expression), som kan användas för att filtrera, hantera och visualisera data.

M kan betraktas som ett frågespråk och kan användas i Power BI Query Editor för att förbereda data innan de kan laddas in i Power BI-modellen.

Å andra sidan är DAX ett analytiskt datakalkylspråk som kan användas för djupgående dataanalyser under Data View-fasen.

M och DAX är inte beroende av varandra och följer helt olika strukturer och logiker och har olika underliggande koder. M och DAX kan inte användas samtidigt eftersom språket M används i Query Editor medan DAX främst används i Data View-modellen.

Det här blogginlägget kommer att visa dig hur M och DAX skiljer sig från varandra i Power BI, med hjälp av exempel. Se den här artikeln för en snabb introduktion till DAX.

Import av datamängd

I det här avsnittet kommer vi att importera en dummy-datamängd som vi kommer att använda för att utföra våra M-språk- och DAX-frågor. För att göra detta börjar du med att klicka på knappen ”Get data” (hämta data) i toppmenyn som visas i följande skärmdump.

En ny dialog kommer att lista alla datalänkar som är öppna för Power BI.

Sätt in ”web” (web”) i söksektionen, och mycket snart kommer ett dataväljaralternativ ”Web” (web) att dyka upp, och även en ikon kommer att visas i alternativet All data source (alla datakällor). Välj alternativet Web” och klicka sedan på ”connect” längst ner. Detta är tydligt i skärmbilden nedan.

Dialogfönstret som du kan se i skärmbilden nedan kommer att visas. Du måste nu infoga webbadressen nedan i fältet URL:

https://raw.githubusercontent.com/treselle-systems/customer_churn_analysis/master/WA_Fn-UseC_-Telco-Customer-Churn.csv

Klicka på ”OK” för att bekräfta när detta är gjort.

Här är en skärmdump som referens:

Denna webbadress tar Power BI till Github som innehåller CSV-datafilen som vi behöver. Datafilen innehåller uppgifter om en datauppsättning för kundförluster inom telekombranschen. Den innehåller data om de kunder i ett telekombolag som lämnade företaget efter en viss period.

Beroende på filens storlek kan det ta ett tag att ladda ner data från fjärrplatsen.

När datan har laddats ner har du två alternativ: antingen kan du importera datan direkt till Data/Report View, eller så kan du först ladda datan till Query Editor. Eftersom M-språket fungerar i Query Editor kommer vi först att ladda in data i Query Editor genom att klicka på ”Transform Data” enligt följande skärmdump:

Du kommer att se att datasetet innehåller information om en kund, t.ex. kön, anställningstid, telefontjänst, internettjänst, anhöriga osv.

När du klickar på Transform-knappen bör du se följande Query Editor.

Skillnader mellan M Language och DAX

I föregående avsnitt anslöt vi Power BI till ett dummy-dataset på GitHub. I det här avsnittet kommer du med hjälp av exempel att se skillnaderna mellan M Language och DAX.

M Language

Först ska vi se vad M är och hur det används i Power BI. Som jag sa tidigare används M-språket för att hantera och filtrera data i Query Editor. Om du har stängt Query Editor kan du öppna den genom att klicka på alternativet ”Edit Queries” i toppmenyn.

I Query Editor kommer det enda tabellnamnet på den vänstra panelen av skärmen att vara din tabell, som visas nedan. Klicka på datatabellen ”WA_Fn-UseC_-Telco-Customer-Churn” i den vänstra panelen i frågeeditorn enligt nedan:

För att se frågetecknen i M. Markera en kolumn, t.ex. ”Partner”, och klicka sedan på knappen ”Remove Columns” (ta bort kolumner) i den övre menyn. Det tar bort kolumnen ”Partner” från tabellen enligt nedan:

Klicka sedan på alternativet ”View” (Visa) från toppmenyn enligt följande skärmdump.

Klicka på kryssrutan ”Formula Bar” (Formelbalk). Du bör nu se en fråga i formellfältet enligt följande skärmdump. Frågan här är ”= Table.RemoveColumns(#”Changed Type”,{”Partner”}). Denna fråga är en M-språkfråga som används för att ta bort kolumnen ”Partner” från den valda tabellen. Du kan se att M-språkfrågan är mer lik ett SQL- eller LINQ-kommando (Language Integrated Query) i C#.

Om du vill se alla tidigare utförda M-frågor i din datamängd kan du klicka på ”View – Advanced Editor” (Visa – Avancerad redigerare) som visas i följande skärmdump.

När du klickar på alternativet ”Advanced Editor” (Avancerad redaktör) från den övre menyn bör du se fönstret Advanced Editor (Avancerad redaktör) som visas nedan. Fönstret Advanced Editor innehåller alla M-språkfrågor som du har utfört hittills i den aktuella sessionen.

Du kan se att den sista frågan är den som tog bort kolumnen ”Partner” från tabellen. Innan dess används frågan ”Change Type” för att tilldela datatyperna till olika kolumner i datasetet. Och innan dess används frågan ”Promoted Headers” för att ställa in rubrikkolumnerna. Om du utför en annan fråga kommer den att visas längst ner i frågelistan i ”Advance Editor”.

Låt oss försöka lägga till en enkel kolumn i tabellen böcker och se M-frågan för det. Klicka på alternativet ”Add Column -> Custom Column” (Lägg till kolumn -> anpassad kolumn) i menyn högst upp i fönstret, som du kan se nedan:

Du bör se fönstret nedan. Klicka på kolumnerna ”TotalCharges” och ”MonthlyCharges” en och en och klicka sedan på knappen ”Insert” (infoga) för att infoga dem i fönstret för frågeeditorn. Lägg till ett ”+”-tecken mellan de två kolumnnamnen i fönstret för frågeformulering och klicka på knappen ”OK”.

En ny kolumn, ”Monthly-Total”, bör läggas till i tabellen enligt nedan. I formellfältet kan du också se den M-fråga som genererades för att skapa kolumnen ”Monthly-Total”. Kolumnen ”Monthly-Total” visar i princip summan av värdena i kolumnerna ”TotalCharges” och ”MonthlyCharges”.

Om du nu återigen öppnar fönstret ”Advanced Editor” kommer du att se den fråga som användes för att lägga till kolumnen ”Monthly-Total” längst ner bland frågorna i den avancerade redigeraren.

Nu vet vi hur M-språket fungerar och hur det ser ut. I nästa avsnitt ska vi försöka skapa samma kolumn ”Monthly-Total 2” via DAX (Data Analysis Expression).

DAX-förfrågningar exekveras i datavyn, därför måste vi flytta data från frågeeditorn till datavyn. För att göra detta klickar du i Query Editor på alternativet ”Close & Apply” (Stäng & Tillämpa) från den övre menyn enligt nedan:

När du klickar på knappen ”Close & Apply” (Stäng & Tillämpa) kommer datavyn att öppnas.

DAX (Data Analysis Expression)

I det här avsnittet kommer vi att se hur vi kan lägga till en ny kolumn i tabellen Books med hjälp av DAX. I datavyn klickar du på alternativet ”Modeling -> New Column” (Modellering -> Ny kolumn) från den övre menyn som visas nedan:

Du bör se följande fönster när du klickar på alternativet ”New Column” (Ny kolumn). I formellfältet kan du se standardkolonnens namn. Du kan exekvera DAX-frågorna i den här formelfältet.

Skriv in frågan ”Monthly-Total 2 = + ” i formelfältet och tryck på ”Enter”-knappen. När du trycker på Enter kommer du att se en ny kolumn ”Monthly-Total 2” som visar summan av värdena i kolumnerna ”TotalCharges” och ”MonthlyCharges”.

Du kan se att DAX-frågorna är mer lika MS Excel.

Slutsats

M-språk och DAX är de två språk som stöds av Power BI för att manipulera, filtrera och analysera data. Även om båda språken har liknande funktioner fungerar de oberoende av varandra. M används för att förbehandla data i Query Editor medan DAX används för att analysera data efter det att data har laddats in i Data View Model.

  • Author
  • Recent Posts
Ben Richardson driver Acuity Training en ledande leverantör av SQL-utbildning i Storbritannien. Företaget erbjuder ett komplett utbud av SQL-utbildning från introduktionskurser till avancerad administration och utbildning i datalager – se här för mer information. Acuity har kontor i London och Guildford, Surrey. Han bloggar också ibland på Acuitys blogg
Se alla inlägg av Ben Richardson

Senaste inlägg av Ben Richardson (se alla)
  • Arbeta med rapportteman i Power BI – 25 februari 2021
  • Power BI: Vattenfallsdiagram och kombinerade bilder – 19 januari 2021
  • Power BI: Villkorlig formatering och datafärger i praktiken – 14 januari 2021

Lämna ett svar

Din e-postadress kommer inte publiceras.