02.06.2022
Von Peter Hecker, Inhaber von HECKER CONSULTINGTeil 2 der Serie erklärt, wie äußere Funktion und Lambda Expression den Kontext teilen, mit List.Transform, Table.TransformRows und Record.TransformFields.

Teil 2 dieser Serie beschäftigt sich mit der Frage, wie äußere Power Query Funktion und Lambda Expression miteinander interagieren.
Globale Syntax:
<outer_powerquery_function> ( ( <variable>, n ) => <lambda_expression> )
Die Details der Interaktion zwischen äußerer und innerer Funktion sind nicht Teil der Power-Query-Dokumentation auf Microsoft Learn und es liegt an Ihnen als Power Query Entwickler, sich eine Vorstellung davon zu machen, was diese unsichtbare Interaktion jeweils sein könnte. Nachdem Sie eine Vorstellung entwickelt haben, müssen Sie diese verifizieren, um Schritt für Schritt zu einem tieferen Verständnis zu gelangen. Wenn Sie das Gefühl haben, die Funktion verstanden zu haben, sollten Sie in der Lage sein, die folgenden vier Fragen zu beantworten:
In diesem Artikel werden drei Power Query Funktionen für die Demonstration benutzt. Alle Funktionen haben Eines gemeinsam: Sie alle wenden Transformations-Logik auf die Input-Daten an:
Syntax-Hilfe auf Microsoft Learn:
List.Transform (
list as list,
transform as function) as list
Table.TransformRows(
table as table,
transform as function) as list
Record.TransformFields(
record as record,
transformOperations as list) as record
Alle drei oben erwähnten Power Query Funktionen führen ETL Aufgaben durch. "ETL" steht für "Extract / Transform / Load":
Die Lambda Expression innerhalb des Power Query Codes ist für den Transformations-Teil verantwortlich.
Alle drei Funktionen sind Iteratoren. Aus der OOP-Sicht implementieren sie alle eine Schleife:
Alle drei Funktionen liefern ein Objekt vom Typ "iterable" zurück:
Alle drei Funktionen verfügen über ein Argument vom Typ "function":
Eine Liste von drei Nummern wird deklariert.
Auf der linken Seite: Jede Nummer der Liste wird sukzessive der Lambda Variablen zugewiesen. Auf der rechten Seite: die Lambda Expression multipliziert die Nummer mit 10. Das Ergebnis wird in das Result Set eingefügt.


Die Eingabe ist eine Liste mit Nummern, die Schleife läuft drei Mal. In jedem Schleifen-Durchgang wird der konstante Wert "test" in das Result Set eingefügt.


Die Eingabe besteht aus einer Liste von Nummern, das Ergebnis ist eine Liste von Records. Abbildung 7 zeigt Record 1.



Die Eingabe ist eine Liste von Records. Unter Berücksichtigung dieser Tatsache wird die Lambda Variable "record" genannt. Die Lambda Expression auf der rechten Seite gibt ebenfalls einen Wert vom Typ Record zurück. Beides - "Id" und "Name" sind vom Eingabe-Record abgeleitet.



Die Eingabe besteht aus einer Liste von Listen. Unter Berücksichtigung dieser Tatsache ist der Name "list" für die Lambda Variable vergeben. Die Lambda Expression auf der rechten Seite berechnet die Anzahl der Elemente für jede Liste. Das erste Element ist eine Liste mit Nummern zwischen 1 und 3, das zweite Element ist eine Liste mit Buchstaben von "A" bis "G" und das dritte Element ist eine Liste mit Datums-Werten zwischen 01.07.2022 bis 10.07.2022.


Die Eingabe besteht aus einer Tabelle mit ihren Zeilen. Man könnte an dieser Stelle auch sagen: Die Eingabe besteht aus einer Liste von Records. Allerdings würde eine Liste von Records nicht verlangen, dass die Records das gleiche Layout haben. Grundsätzlich kann eine Liste ja sogar Elemente von unterschiedlichen Typen beinhalten. Bei einer Tabelle dagegen ist durch das Tabellen-Schema das gleiche Layout für jede Zeile festgelegt:


Für jede Zeile wird ein neuer Record in das Result Set eingefügt. Das Ergebnis ist also eine Liste von Records:

Inhalt der ersten Zeile:

Eine Herausforderung bei der Verwendung von "Table.TransformRows" besteht darin, die Liste der Records zurück zu konvertieren in eine Tabelle. Diese Aufgabe wird mit "Table.FromRecords" gelöst:

Schritt 1
Ein Record mit dem Namen "record0" mit vier Spalten wird deklariert.
Schritt 2
Das zweite Argument für "Record.TransformFields" ist eine Liste von Funktionen bzw. Lambda Expression. Im folgenden Beispiel werden zwei Lambda Expression zugewiesen, eine für die Spalte "Amount" und eine weitere für die Spalte "Date". Jede Spalte des Eingabe-Records, die nicht in der Liste der Transformationen erwähnt wird, wird in den Ergebnis-Record ohne Änderung übernommen. Dies trifft auf "CustId" und "CustName" zu. Jede Spalte, die in der Liste der Transformation erwähnt ist, wird zunächst transformiert und dann in den Ergebnis-Record eingefügt.


Die Syntax-Hilfe auf Microsoft Learn enthält ein Beispiel, in dem die Funktion "Record.TransformFields" benutzt wird, um die Typen von Spalten zu modifizieren:

Bezüglich des Beispiels auf Microsoft Learn kann man sich vorstellen, dass der Ausdruck "Number.FromText" von der Power Query Engine zunächst expandiert wird zu der Lambda Expression "(fieldValue) => Number.FromText (fieldValue)".
Mein Beispiel oben ist generischer. Es zeigt, dass die BuiltIn Funktion "Record.TransformFields" nicht nur dazu gedacht ist, Spalten-Typen zu transformieren, sondern dass Lambda Expressions - zusammen mit "Record.TransformFields" - alle mögliche Transformationen bewerkstelligen können.
Im Allgemeinen könnte das Beispiel auch dazu anregen, grundsätzlich darüber nachzudenken, welches Potential die Kombination von BuiltIn-Funktionen und Lambda Expressions abseits der vorkonfigurierten Beispiele bietet.
Wir erweitern ständig unser Beratungsportfolio. Über 600 Beratungsleistungen haben wir für Sie im Programm. Selbstverständlich lassen sich die einzelnen Themen kombinieren. So erhalten Sie genau die Beratung, die Sie wünschen und brauchen.
Mehr IT-, Online-, Digital-Beratungsleistungen anzeigen >>Sie gestalten Power BI Dashboards und Berichtsseiten, die eine Frage auf einen Blick beantworten – mit passenden Diagrammen, klarer Anordnung, Drillthrough und Lesezeichen, mobiler Ansicht, Warnungen und Abonnements.
Sie lernen Power BI als Ganzes kennen – vom Datenimport in Power BI Desktop über Bericht und Dashboard bis zur App im Arbeitsbereich – und wissen danach, welche Lizenz Sie für welchen Schritt brauchen.
Nach dem Einstieg in Power BI Desktop binden Sie Excel-Listen, Datenbanken, Webseiten und SharePoint an, bereiten die Daten im Power-Query-Editor auf, kombinieren Tabellen zu einem Modell und veröffentlichen das Ergebnis für Ihr Team.
Sie erzeugen mit Copilot in Power BI Berichtsseiten, Visuals und Zusammenfassungen, schreiben und erklären DAX-Abfragen, dokumentieren semantische Modelle und klären vorab Kapazität, Mandanteneinstellungen und Datenschutz.
Datenmodellierung in Excel: Sie bereiten Daten mit Power Query für das Modell auf, bauen ein Sternschema mit Beziehungen und Hierarchien und rechnen mit Power Pivot und DAX-Measures Kennzahlen, die bei jeder Aktualisierung stimmen.
Sie nutzen ChatGPT als Helfer neben Power BI Desktop: DAX-Measures und Power-Query-Schritte entwerfen und erklären lassen, Datenmodelle planen, Berichtsseiten skizzieren – und dabei keine vertraulichen Daten preisgeben.
Mit SSAS Tabular in Microsoft SQL Server bauen Sie ein zentrales Datenmodell mit Beziehungen, DAX-Measures und Zeitintelligenz, sichern es auf Zeilenebene ab, stellen es bereit und vergleichen es mit semantischen Modellen in Power BI.
In der Power BI Praxis entwickeln Sie einen Bericht durchgängig selbst: Rohdaten im Abfrage-Editor aufbereiten, Kennzahlen mit DAX von CALCULATE bis zur Zeitintelligenz berechnen, Seiten gestalten und das Ergebnis sicher veröffentlichen.
Zeilen- und Filterkontext, Kontextübergang, CALCULATE und CALCULATETABLE: Mit diesem Verständnis schreiben Sie Measures, Zeitvergleiche, Mengenausdrücke und DAX-Abfragen für Power BI, Analysis Services und Power Pivot – und können jedes Ergebnis begründen.
Sie lesen und schreiben Power Query M sicher – vom Typsystem über List-, Record- und Table-Funktionen bis zu eigenen Funktionen, Fehlerbehandlung und Query Folding in Excel, Power BI und Dataflows.
Programmierer:innen verstehen Power Query M als funktionale Sprache mit verzögerter Auswertung, lösen typische Datenaufgaben in Code und binden Web-APIs mit Paging, Folding und eigenen Konnektoren an.
Welche Auswertung bleibt in Excel, welche wandert nach Power BI? Sie wägen das fundiert ab, nutzen Power Query, Datenmodell und DAX in beiden Werkzeugen und bauen aus einer vorhandenen Excel-Auswertung Ihre erste Power-BI-Lösung.
Sie verstehen, was Ihre bestehenden Power BI Dataflows leisten und woran sie hängen, und planen den Umstieg auf Dataflow Gen2 in Microsoft Fabric – mit Datenzielen, Zeitplänen und einem Blick auf die Kapazitätskosten.
Sie bauen in Power BI Berichte für das Marketing- und Vertriebscontrolling, die von Reichweite und Leads über Pipeline und Umsatz bis zu NPS und Weiterempfehlung die ganze Kundenbeziehung abbilden – und teilen sie mit den Teams, die damit steuern.
Aktuelle und interessante Themen und Beiträge für Sie zusammengetragen und aufbereitet.
Daten aus Excel, Datenbanken und Cloud-Diensten laden, mit Power Query aufbereiten, im Datenmodell verknüpfen, mit DAX auswerten und als Bericht teilen: So funktioniert Power BI Desktop – mit Lizenzen, Copilot und Tipps für den Einstieg.
Der erste Artikel dieser Serie führt in die Thematik ein, DAX auf andere Konzepte zu übertragen („Projektion“). Damit sind Mengen-Konzepte, aber auch SQL und Objekt-orientierte Konzepte gemeint. Der Sinn ist es, hiermit die grundsätzlichen und komplexen Verhaltensweisen von DAX aus der Sicht eines anderen Konzepts transparent zu machen.
In Teil 1 dieser Serie über Lambda Expression wird gezeigt, wie Lambda Expressions innerhalb von Power Query Iteratoren arbeiten. Grundsätzlich ist nahezu jede Power Query Funktion ein Iterator. Durch das Platzieren von Lambda Expressions innerhalb von Power Query Funktionen, werden daher die Lambda Funktionen wiederholt aufgerufen. Bei jedem Aufruf werden dabei andere Daten an die Lambda Expression übergeben.