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.
Wie jede datenbezogene Sprache (SQL, Python, DAX etc.) bietet auch Power Query ein Set von Funktionen an, die irgendeine Art von Iteration verkapseln. Die Tatsache eines internen Iterations-Vorgangs kann offensichtlich sein, z.B. weil der Name der Funktion dies offenbart, oder die Iteration befindet sich sozusagen versteckt innerhalb der Power Query Funktion und ist nicht so einfach zu verstehen.
Zum Beispiel zeigt der Name der Funktion "List.Accumulate" an, dass man einen Haufen von Elementen übergeben kann und dass der Rückgabe-Wert der Funktion ein Einzelnes Ding ist, das über den internen Vorgang aggregiert wurde. Wenn man dann darüber nachdenkt, wie wohl die Business Logik innerhalb der Funktion aussehen könnte, kommt man zum Schluss, dass es eine Schleife geben muss, die über die Liste der Eingabe-Elemente iteriert, den Wert jedes einzelnen Elements berücksichtigt und alles zusammen in ein Ergebnis aggregiert.
List: { 10, 50, 30 } Result: 90
Wenn man sich vorstellt, wie die Logik von "List.Accumulate" innerhalb einer OOP-Umgebung aussehen könnte, kommt man zu Pseudo-Code wie folgt:
Für andere Power Query Funktionen ist es nicht so offensichtlich, dass sie eine Iteration verkapseln. Beispielsweise ist die Power Query Funktion "Table.SplitColumn" in der Lage, eine einzelne Spalte in mehrere Spalten zu teilen. Ohne große Reflektion über die Interna dieser Funktion könnte man sich vorstellen, dass die Spalte zerteilt wird wie ein Stück Brot.
Aber worin besteht die Iteration?
Um Power Query besser zu verstehen und vor allem zu verstehen, was Lambda Expression sind, sollte man davon ausgehen, dass nahezu jede (!) Power Query Funktion eine Iteration verkapselt. Die Frage ist also immer "Welche Art von Iteration steckt in der Funktion und wie könnte diese (angenommene) Iteration dabei helfen, die Absicht der Funktion wie z.B. Teilen einer Spalte zu implementieren?
Hier ist die Tabelle, bei der eine Spalte geteilt werden soll:
Wenn man sich die Zeichenfolge "Judy, Munich" betrachtet, kann man sich vorstellen, dass sich nach erfolgreicher Teilung der Zeichenfolge Werte für zwei neue Spalten ergeben, nämlich "Judy" und "Munich".
Bevor aber die Werte irgendwo platziert werden können, muss es die beiden Spalten schon geben. Der erste Schritt vor einer Teilung der Zeichenfolge muss daher die Änderung des Tabellen-Schemas sein. Es müssen zwei neue Spalten hinzugefügt werden. Das letzte Argument der Funktion "Table.SplitColumn" instruiert die Engine, die Spalten "PersonName" und "CityName" zu erstellen.
Nachdem die beiden Spalten fertig für die Aufnahme der Werte "Judy" und "München" sind, kommt die Iteration ins Spiel und man kann sich vorstellen, wie die Werte in die Spalten gelangen. Aus der Sicht einer OOP-Umgebung würde der Pseudo-Code folgendermaßen aussehen:
Wie man sieht, wird die Split-Operation innerhalb der Iteration erledigt. Nachdem die Operation beendigt ist, sind die beiden Spalten gefüllt und die originale Quellspalte kann gelöscht werden:
Die MSDN-Syntax-Hilfe für "Table.SplitColumns":
Table.SplitColumn(
table as table,
sourceColumn as text,
splitter as function,
optional columnNamesOrNumber as any,
optional default as any,
optional extraColumns as any) as table
Im Power Query Code-Beispiel von oben werden nur die ersten 4 Argumente von insgesamt 6 möglichen Argumenten verwendet:
Die Syntax-Hilfe informiert, dass der Typ für Argument 3 "function" ist. Immer dann, wenn man ein Argument vom Typ "function" sieht, bedeutet das, dass man an dieser Stelle eine Funktion wie z.B. "Splitter.SplitTextByDelimiter" einsetzen kann. Allerdings ist man nicht nur auf BuiltIn-Funktionen beschränkt, sondern syntaktisch sind hier auch benutzerdefinierte Ausdrücke vom Typ "function" erlaubt. Die allgemeine Syntax hierfür lautet:
Das "=>" steht für den Lambda-Operator. Sie werden wahrscheinlich nur wenige Artikel zu Power Query und Lambda Expressions finden. Die Zielgruppe für Power Query sind im Großen und Ganzen Anwender bzw. PowerUser und es könnte für diese Personengruppe schwieriger sein zu verstehen, was Lambda Expression sind, als ein paar allgemeine Anwendungsfälle und den Einsatz von Code-Schnipseln.
Dieser Artikel geht darüber hinaus und hat die Absicht, Anwendern, PowerUsern und Entwicklern die Verwendung von Lambda Expressions als wichtiges Konzept der Power Query Sprache näher zu bringen. Es versetzt die Leser des Artikels in die Lage, smarteren Code zu schreiben und auch die Fälle zu bewältigen, in denen Oberfläche und BuiltIn-Funktionen nicht mehr ausreichend sind.
Am Ende zeige ich auch die gebräuchlicheren Syntax-Alternativen. Aber jetzt - um das Konzept der Lambda Expressions zu verstehen - ist es besser, die native Syntax zu nehmen.
Eine Lambda Expression besteht aus zwei Teilen: auf der linken Seite befinden sich runde Klammern, die 0, 1 oder mehrere Variablen einschließen. Wie mit jeder Variablen sind Sie frei, sich einen passenden Namen zu überlegen. Die Variablen der linken Seite erhalten ihren Wert von der äußeren Funktion. In unserem Fall ist das "Table.SplitColumn".
Ablauf:
Die äußere Funktion startet eine Schleife. Die äußere Funkton verwendet interne Variablen, deren Wert an die Lambda Variablen weitergegeben werden. Im Falle des ersten Schleifen-Durchgangs aus dem Beispiel ist dies die Zeichenfolge "Judy, Munich". Die innere Funktion - die Lambda Expression - nimmt den Wert für ihre internen Zwecke entgegen.
Der Ausdruck auf der rechten Seite wird parametriert durch die Variable(n). In unserem Beispiel nutzt die Splitter-Funktion die Zeichenfolge "Judy, Munich" als Eingabe. An diesem Punkt spielen grundsätzlich die Daten-Typen als auch deren Werte eine Rolle: die übergebenen Werte müssen "in den Ausdruck der rechten Seite passen". Beispielsweise erwartet die Splitter-Funktion eine Zeichenfolge mit 0, 1 oder mehreren Kommata als Separatoren. Nach dem Splitting gibt die Lambda Expression eine Liste von Zeichenfolgen zurück {"Judy", "Munich"}. An diesem Punkt kommen wieder Daten-Typen und Werte zum Zuge. Die äußere Funktion muss in der Lage sein, mit dem Ergebnis "etwas anzufangen".
Die äußere Funktion empfängt den Rückgabewert der Lambda Expression und fährt mit internen Vorgängen fort. Beispielsweise werden die Rückgabe-Werte in die zwei neuen Spalten geschrieben.
Die äußere Funktion startet den nächsten Schleifen-Durchgang einschließlich der Lambda Expression.
Wir können der Power Query Code auch umschreiben, um zu einer deutlicheren bzw. detaillierten Syntax zu gelangen:
In diesem Fall habe ich eine etwas andere Syntax für die Splitter-Funktion verwendet: das letzte Argument "column" enthält die Lambda Variable von der linken Seite, die Referenz zu der Zeichenfolge, die gesplittet werden soll. Es gibt eine generelle Herausforderung bezüglich Lambda Expressions. Es ist zwar klar, dass eine äußere Funktion wie "Table.SplitColumn" Werte an die Lambda-Variablen übergibt und auch Rückgabe-Werte entgegennimmt.
Aber die MSDN-Syntax-Hilfe gibt keine Auskunft über die Details des unsichtbaren Verkehrs. Es ist nicht klar, welche Daten-Typen an die Lambda Variable übergeben werden. Es ist auch nicht klar, welche Daten-Typen die Lambda-Expression zurückgeben muss. Dies kann zu verschiedenen Fehlern führen:
Das nächste Beispiel zeigt, dass der Entwickler einen schlechten Namen für die Variable gewählt hat. Der Code funktioniert, aber der Variablen-Name zeigt eine Art von Missverständnis. Es ist nicht die Zeile, die an die Variable übergeben wird, sondern eine einzelne Spalte.
Empfehlung: Es könnte eine gute Vorgehensweise sein, einer Variablen grundsätzlich zunächst einen generischen Namen zu vergeben, wenn man mit dem Coding beginnt. Z.B. könnte man immer den Ausdruck "(item)" auf der linken Seite platzieren. Später, wenn dann klar ist, was die Variable enthält, könnte man der Variablen einen passenderen Namen vergeben wie z.B. "(column)".
Der einzige Weg, die versteckte Signatur der Lambda Expression zu verstehen, ist Trial-and-Error. Zum Glück sind die BuiltIn-Funktionen sauber benannt. Es ist daher intuitiv, die Signatur zu "erraten". Zum Beispiel: Eine BuiltIn-Funktion, die aus einer Zeichenfolge Werte für mehrere neue Spalten generiert, erwartet offensichtlich als Rückgabe-Wert eine Liste. Und sicherlich muss die Liste für jede Zeile der äußeren Funktion die gleiche Anzahl an Werten zurückgeben. Wenn zwei Spalten zu füllen sind, kann die Lambda Expression nicht drei Werte zurückgeben.
Anwender tendieren dazu, die "Each-Syntax" zu benutzen. Bei der "Each-Syntax" wird die Variablen-Deklaration der linken Seite mit dem konstanten Ausdruck "Each" ersetzt. Der Lambda-Operator “=>” kann nicht zusammen mit der "Each-Syntax" benutzt werden. Auf der rechten Seite kann die generische Variable "_" aufgerufen werden.
Einigen Anwendern kommt die Variable sicherlich bekannt vor: in PowerShell existiert ein ähnliches Konzept. Das "Each"-Schlüsselwort unterstreicht, dass die Lambda Expression innerhalb einer Schleife aufgerufen wird.
Lambda Expression sind nützlich, wenn eine BuiltIn-Funktion die Aufgabe nicht lösen kann. Im folgenden Beispiel wird die BuiltIn-Funktion "Splitter.SplitTextByDelimiter" innerhalb einer Lambda Expression benutzt. Das Ziel ist, mögliche NULL-Werte zu ersetzen.
Einige Personen-Namen enthalten NULL und einige Städte enthalten ebenfalls NULL. Während der Split-Operation sollen diese NULL-Werte durch "n/a" ersetzt werden.
Die Splitter-Funktion wird benutzt. Aber anstatt direkt zur äußeren Funktion zurückzukehren, wird der Rückgabe-Wert der Splitter-Funktion erst in einer Variablen abgelegt. Die Variable "colValues" wird implizit als String Array dimensioniert. Jedes Element des String Arrays wird separat verarbeitet, um die Ersetzung des NULL-Wertes zu steuern.
Am Ende wird das Resultset an die äußere Funktion zurückgegeben. Neben dem eigentlichen Zweck dieses Beispiels wird auch wieder deutlich, dass die äußere Funktion tatsächlich eine Liste erwartet.
Und so sieht das finale Ergebnis aus:
Wir erweitern ständig unser Beratungsportfolio. Über 500 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 >>Entwickeln Sie individuelle Geschäftsanwendungen ohne Programmierkenntnisse – mit Microsoft Power Apps! Entdecken Sie in unserem praxisnahen Grundlagen-Seminar, wie Sie Prozesse digitalisieren, Datenquellen integrieren und leistungsstarke Apps für Web und Mobilgeräte erstellen.
Schluss mit monotonen Excel-Aufgaben! Entdecken Sie die Magie der Automatisierung mit Power Automate. In unserem Expertenseminar lernen Sie, wie Sie Stunden an Arbeitszeit einsparen und Ihre Excel-Prozesse auf Autopilot schalten. Werden Sie zum Effizienz-Champion!
Entdecken Sie die nächste Stufe der Büroautomatisierung: Erweitern Sie Ihre Fähigkeiten in Power Automate Desktop für fortschrittliche Workflows, datengesteuerte Entscheidungen und nahtlose Systemintegrationen. Machen Sie den Schritt in eine effizientere Zukunft!
Nutzen Sie den vollen Umfang von Power BI und erlernen den Prozess der Erstellung von Dashboards in Power BI, dem leistungsstarken Tool für Geschäftsanalysen und Datenvisualisierung von Microsoft.
Entdecken Sie, wie Sie mit Power BI schnell Erkenntnisse aus Ihren Daten gewinnen können und Power BI für betriebswirtschaftliche Entscheidungen nutzen.
Power Automate Desktop richtet sich an kleine Unternehmen oder auch größere Firmen, die einfache oder komplexe regelbasierte Aufgaben auf ihren Computern ausführen wollen.
Wollen Sie mehr Zeit mit der Analyse von Daten verbringen als mit deren Verarbeitung? Power BI ermöglicht es Ihnen, Informationen digital und grafisch darzustellen, um die Ergebnisse der Datenanalyse zu vermitteln. Entdecken Sie fortgeschrittene Funktionen von Power BI .
Microsoft Power Automate ist ein großartiges Programm, das Ihnen hilft, sich wiederholende Aufgaben und Prozesse in Ihrem Arbeitsalltag zu optimieren.
Microsoft Power Pages bietet jedem, unabhängig von seinem technischen Hintergrund, eine effektive Plattform, um datengestützte, moderne und sichere Websites zu erstellen.
Mit Power BI Desktop werden Sie Erkenntnisse aus Ihren Daten gewinnen, unabhängig davon, ob diese Daten auf Ihrem Computer oder in der Cloud gespeichert sind.
Excel ist ein sehr, sehr leistungsfähiges Tool, aber Datenvisualisierung, Datenermittlung und Datenautomatisierung sind Funktionen, die sich in Power BI viel besser realisieren lassen. Das spart Ihnen eine Menge Zeit!
Die Microsoft Power Plattfom Apps ist eine No-Code und Low-Code-Anwendungsplattform mit hoher Produktivität, die Anwendern und Entwickler die Möglichkeit gibt individuelle Unternehmenslösungen einfach sowie schnell zu erstellen.
Microsoft Teams ist das am schnellsten wachsende Collaboration-Tool seit der Erfindung des Telefons. Aber wussten Sie, dass Microsoft Teams auch eine moderne Entwicklungsplattform ist?
Mit Power Apps und dem Dataverse für Microsoft Teams lassen sich ganz einfach benutzerdefinierte Apps für Ihre Abteilungen und das gesamte Unternehmen erstellen. Und das ohne eine einzige Zeile Code zu schreiben.
Mit Dataverse (ehemals Common Data Service - CDS) können Sie die Daten Ihres Unternehmens sicher speichern und für die Erstellung mobiler Geschäftsanwendungen nutzen.
Power Fx ist die Low-Code-Programmiersprache in der gesamten Microsoft Power Platform mit der gleichen Syntax und gleichen Funktionen wie Excel.
Microsoft Power Apps ermöglicht es jedem, robuste mobile Geschäftsanwendungen ohne Code zu erstellen.
So schaffen sie es 24 Stunden am Tag und 7 Tage die Woche für ihre Kunden präsent sein. Entdecken Sie, wie Sie mit Power Virtual Agents leistungsstarke Chatbots mit einer grafischen Oberfläche ohne Code erstellen können.
Mit dem AI Builder nutzen Sie KI-Automatisierung für Aufgaben wie Formularverarbeitung, Objekterkennung und Textklassifizierung und das ohne Programmierkenntnisse.
Power BI Dataflows sind eine effektive Lösung für Datenaufbereitung. Lernen Sie das Potenzial von Dataflows anhand praktischer Beispiele kennen und nutzen.
Power in Marketing und Vertrieb mit Microsoft Power BI: Entdecken Sie, wie Sie Power BI erfolgreich einsetzen können, um Ihre Marketing-, Vertriebs- und Verkaufsaktivitäten schnell und präzise zu bewerten.
Aktuelle und interessante Themen und Beiträge für Sie zusammengetragen und aufbereitet.
Die Details der Interaktion zwischen äußerer und innerer Funktion sind nicht Teil der MSDN Power Query Dokumentation und es liegt an Ihnen als Power Query Entwickler, sich eine Vorstellung davon zu machen, was diese unsichtbare Interaktion jeweils sein könnte. Teil 2 dieser Serie beschäftigt sich mit der Frage, wie äußere Power Query Funktion und Lambda Expression miteinander interagieren.