„Wer M beherrscht, klickt weniger und kann mehr.“ – M-Funktionen in Power Query – Braucht man das wirklich? + Bonus: Mini-Lernhilfe für M-Funktionen in Power Query
„Warum soll ich eine Programmiersprache lernen, wenn ich mich doch einfach durchklicken kann?“
Diese Frage stellt sich fast jeder, der mit Power Query in Excel oder Power BI arbeitet. Die gute Nachricht zuerst: Ja, Power Query ist sehr benutzerfreundlich. Vieles lässt sich mit wenigen Klicks erledigen – Tabellen zusammenführen, Spalten aufteilen, Daten bereinigen.
Aber: Es gibt eine Grenze. Und genau hier beginnt die Magie von M-Funktionen.
Was sind M-Funktionen überhaupt?
Power Query basiert auf einer Sprache namens M (für „Mashup“). Diese Sprache wird im Hintergrund automatisch erzeugt, während du im Editor klickst. Aber du kannst (und manchmal musst du) selbst in diesen Code eingreifen, um Dinge zu tun, die über das Klickbare hinausgehen.
Beispiele:
- Dynamische Filter
- Bedingte Transformationen
- Wiederverwendbare Funktionen
- Komplexe Abfragen
- Abhängigkeiten und Automatisierungen, die mit der Maus nicht umsetzbar sind
Klick vs. Code – Wo sind die Grenzen?
Hier ein paar typische Situationen, in denen „Klicken“ nicht mehr ausreicht:
Problem | Warum M nötig wird |
---|---|
Du willst eine dynamische Datumsgrenze setzen (z. B. „nur Daten ab gestern“) | Das Menü bietet nur fixe Datumsfilter – für dynamische brauchst du Date.AddDays(...) |
Du willst mehrere ähnliche Schritte wiederverwenden | Du brauchst Funktionen wie each , let/in , Table.TransformColumns |
Du willst eine Liste aus einer Spalte generieren, um später damit zu filtern | Du kommst um List.Distinct(...) und Table.SelectRows(...) nicht herum |
Du musst Spalten dynamisch benennen oder erzeugen | Nur mit Record.FieldNames , Table.AddColumn , etc. möglich |
Du willst eine Schleife bauen (z. B. mehrere Dateien einzeln behandeln) | Braucht List.Generate(...) oder rekursive Funktionen |
Praktische Beispiele, die dich überzeugen werden
Beispiel 1: Nur Daten ab gestern
= Table.SelectRows(Quelle, each [Datum] >= Date.AddDays(DateTime.LocalNow(), -1))
➡️ Klickbar? Nein.
➡️ Nützlich? Sehr – besonders bei automatisierten Reports.
Beispiel 2: Spalten dynamisch berechnen
Du willst aus beliebig vielen Spalten mit dem Namen „Kosten_*“ die Summe bilden.
let
QuellSpalten = Table.ColumnNames(Daten),
KostenSpalten = List.Select(QuellSpalten, each Text.StartsWith(_, "Kosten_")),
Ergebnis = Table.AddColumn(Daten, "Kosten_Gesamt", each List.Sum(Record.ToList(Record.SelectFields(_, KostenSpalten))))
in
Ergebnis
➡️ Klickbar? Nein.
➡️ Spart Stunden manueller Arbeit, wenn sich Spalten ändern.
Beispiel 3: Eigene Funktionen schreiben
Du willst eine Funktion schreiben, die das Jahr aus einem Datum zieht und „Jahr_“ davor setzt.
(TextDatum as date) as text => "Jahr_" & Text.From(Date.Year(TextDatum))
So kannst du Funktionen für mehrere Tabellen oder Spalten wiederverwenden.
Beispiel 4: Abfragen kombinieren und rekursiv verarbeiten
Du willst eine Liste von URLs abrufen und jede einzelne verarbeiten.
List.Transform(URLs, each Web.Contents(_))
Du baust dir eigene Web-Scraper oder REST-API-Schnittstellen direkt in Power Query.
Wann solltest du M lernen?
Wenn du …
- … regelmäßig mit Daten arbeitest
- … Automatisierungen willst
- … Grenzen im Editor erreichst
- … effizient arbeiten möchtest
- … Power BI ernsthaft nutzt
… dann ist M lernen keine Frage mehr, sondern eine Investition.
Wie schwierig ist M wirklich?
Überraschend einfach – wenn du ein paar Grundprinzipien kennst:
- Alles ist eine Liste, ein Record oder eine Tabelle
let/in
ist dein bester Freund- Viele Funktionen sind logisch benannt und ähneln Excel (z. B.
Text.Upper
,Number.Round
,Date.AddDays
)
Wer Excel-Formeln versteht, wird sich mit M schnell zurechtfinden.
Fazit: Wer braucht denn sowas?
- Du, wenn du mehr willst als immer wieder dieselben Klicks.
- Du, wenn du flexibel, effizient und automatisiert arbeiten willst.
- Du, wenn du lieber einmal nachdenkst als zehnmal klickst.
M ist nicht für Entwickler reserviert – sondern für alle, die mit Daten arbeiten.
Tipps für den Einstieg
- Schau dir den Erweiterten Editor in Power Query an – lies den Code!
- Nutze „M Cheat Sheets“ – z. B. auf Microsoft Docs oder als PDF
- Übe mit kleinen Projekten – z. B. dynamische Datumsfilter oder benutzerdefinierte Spalten
- Baue dir eine eigene Funktionsbibliothek
- Verwende docs.microsoft.com – dort ist fast jede Funktion gut dokumentiert
Schlussgedanke:
„Wer M beherrscht, klickt weniger und kann mehr.“
Bonus: Mini-Lernhilfe für M-Funktionen in Power Query
Grundaufbau einer M-Abfrage
let
Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
Gefiltert = Table.SelectRows(Quelle, each [Status] = "aktiv"),
Ergebnis = Table.RemoveColumns(Gefiltert, {"Kommentar"})
in
Ergebnis
Wichtig:
- Alles läuft im
let/in
-Block ab - Jeder Schritt bekommt einen Namen
- Die Namen können weiter unten wiederverwendet werden
Beispiel 1: Dynamisches heutiges Datum
= DateTime.Date(DateTime.LocalNow())
???? Gibt das heutige Datum zurück – z. B. nützlich, um Daten zu filtern:
= Table.SelectRows(Quelle, each [Datum] >= Date.AddDays(DateTime.LocalNow(), -7))
✅ „Zeige nur die letzten 7 Tage“
Beispiel 2: Großschreibung aller Buchstaben einer Spalte
= Table.TransformColumns(Quelle, {{"Name", Text.Upper}})
✅ Wandelt alle Namen in Großbuchstaben um
Beispiel 3: Eigene Spalte mit Bedingungen
= Table.AddColumn(Quelle, "Kategorie", each if [Umsatz] > 10000 then "Hoch" else "Niedrig")
✅ Bedingte Spalte – wie =WENN()
in Excel
Beispiel 4: Nur bestimmte Spalten summieren
let
Spalten = {"Kosten1", "Kosten2", "Kosten3"},
MitSumme = Table.AddColumn(Quelle, "Gesamtkosten", each List.Sum(Record.ToList(Record.SelectFields(_, Spalten))))
in
MitSumme
✅ Dynamische Summenbildung über mehrere Spalten
Beispiel 5: Liste aus Tabelle erzeugen
= Table.Column(Quelle, "Produkt")
✅ Extrahiert eine ganze Spalte als Liste – nützlich für spätere Vergleiche
Beispiel 6: Eigene Funktion erstellen
Verdopple = (x as number) as number => x * 2
➡️ Kannst du später so verwenden:
Verdopple(10) // Ergebnis: 20
Beispiel 7: Alle Excel-Dateien in einem Ordner laden
let
Quelle = Folder.Files("C:\Daten\Berichte"),
NurExcel = Table.SelectRows(Quelle, each Text.EndsWith([Extension], ".xlsx")),
MitInhalt = Table.AddColumn(NurExcel, "Inhalt", each Excel.Workbook(File.Contents([Folder Path] & [Name]))),
AlleDaten = Table.Combine(List.Transform(MitInhalt[Inhalt], each _{0}[Data]))
in
AlleDaten
✅ Ein leistungsfähiger Weg, mehrere Dateien automatisch zusammenzuführen
Lernstrategie für M-Anfänger
Schritt | Was tun |
---|---|
1. Beobachten | Aktiviere den Erweiterten Editor und lies mit, was beim Klicken passiert |
2. Verstehen | Ändere kleine Details im Code und beobachte, was passiert |
3. Üben | Baue kleine Beispiele selbst – z. B. dynamische Filter oder Summen |
4. Wiederverwenden | Schreibe eigene Funktionen für wiederkehrende Aufgaben |
5. Nachschlagen | Nutze https://learn.microsoft.com/powerquery-m oder M-Cheat Sheets |
Empfohlene Ressourcen
- Offizielle Microsoft-Doku
- Power Query M Function Reference (PDFs im Netz)
- YouTube-Kanäle wie The BI Accountant, ExcelIsFun, Leila Gharani
- Bücher wie „Power Query for Power BI and Excel“ von Chris Webb
Bonus: Mini-Cheat Sheet (Wichtige Funktionen)
Zweck | Funktion |
---|---|
Aktuelles Datum | DateTime.LocalNow() |
Text in Großbuchstaben | Text.Upper("abc") |
Liste erstellen | {1..10} |
Spalte filtern | Table.SelectRows(...) |
Neue Spalte berechnen | Table.AddColumn(...) |
Summieren | List.Sum(...) |
Bedingung | if ... then ... else |