A woman with digital code projections on her face, representing technology and future concepts.

„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:

ProblemWarum 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 wiederverwendenDu brauchst Funktionen wie each, let/in, Table.TransformColumns
Du willst eine Liste aus einer Spalte generieren, um später damit zu filternDu kommst um List.Distinct(...) und Table.SelectRows(...) nicht herum
Du musst Spalten dynamisch benennen oder erzeugenNur 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

  1. Schau dir den Erweiterten Editor in Power Query an – lies den Code!
  2. Nutze „M Cheat Sheets“ – z. B. auf Microsoft Docs oder als PDF
  3. Übe mit kleinen Projekten – z. B. dynamische Datumsfilter oder benutzerdefinierte Spalten
  4. Baue dir eine eigene Funktionsbibliothek
  5. 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

SchrittWas tun
1. BeobachtenAktiviere den Erweiterten Editor und lies mit, was beim Klicken passiert
2. VerstehenÄndere kleine Details im Code und beobachte, was passiert
3. ÜbenBaue kleine Beispiele selbst – z. B. dynamische Filter oder Summen
4. WiederverwendenSchreibe eigene Funktionen für wiederkehrende Aufgaben
5. NachschlagenNutze 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)

ZweckFunktion
Aktuelles DatumDateTime.LocalNow()
Text in GroßbuchstabenText.Upper("abc")
Liste erstellen{1..10}
Spalte filternTable.SelectRows(...)
Neue Spalte berechnenTable.AddColumn(...)
SummierenList.Sum(...)
Bedingungif ... then ... else

Ähnliche Beiträge