• Zur Hauptnavigation springen
  • Zum Inhalt springen
  • Zur Seitenspalte springen
  • Zur Fußzeile springen

THE SELF-SERVICE-BI BLOG

Wir lieben Microsoft Power BI

  • Videokurse
    • Power Query: Dein umfassender Einstieg!
  • Live Online Power BI-Schulungen
  • Beratung
    • Was ich für Dich tun kann
    • Showcases
  • Kunden
  • BLOG
    • Business Topics
    • Technical Topics (english)
    • Tools
  • Podcast
  • Kontakt
  • Über

Business Topics / 7. Juli 2024

So analysierst Du Abfrage-Schritte in Power Query ganz einfach

Bringt die erstellte Power Query-Abfrage nicht das gewünschte Ergebnis heißt es: Jeden relevanten Abfrage-Schritt genau unter die Lupe nehmen. Dazu habe ich ein Skript erstellt, dass Dir dabei erheblich helfen wird. Viel Spaß 🙂

Als Abonnent meines Newsletters erhältst Du die Beispieldateien zu den Beiträgen dazu. Hier geht’s zum Abonnement des Newsletters!

DIE PROBLEMSTELLUNG

Sich manuell durch jeden Schritt zu klicken, um Fehler in Deiner Abfrage zu finden, kann sehr sehr lästig sein. Um hier ein bisschen mehr Schwung reinzubekommen, habe ich mir eine Analyse-Abfrage gebaut, die diesen Prozess auch für Dich vereinfachen sollte. Das Lösungsvideo zeigt Dir, wie Du den folgenden Quellcode nutzen kannst.

Der Quellcode

let
fnTableRemoveNullColumns =
(MyTable as table)=>
let
//Quelle = Excel.CurrentWorkbook(){[Name="Tabelle2"]}[Content],
Quelle = MyTable,
Benutzerdefiniert1 = Table.Profile( Quelle ),
#"Andere entfernte Spalten" = Table.SelectColumns(Benutzerdefiniert1,{"Column", "Count", "NullCount"}),
#"Geänderter Typ1" = Table.TransformColumnTypes(#"Andere entfernte Spalten",{{"NullCount", type number}}),
#"Subtraktion eingefügt" = Table.AddColumn(#"Geänderter Typ1", "Subtraktion", each [Count] - [NullCount], type number),
#"Gefilterte Zeilen" = Table.SelectRows(#"Subtraktion eingefügt", each [Subtraktion] = 0),
ColumnsOnlyNull = #"Gefilterte Zeilen"[Column],
Benutzerdefiniert2 = Quelle,
#"Entfernte Spalten" = Table.RemoveColumns(Benutzerdefiniert2, ColumnsOnlyNull)
in
#"Entfernte Spalten",
fnTableProfileSchema =
(MyTable)=>
let
// MyTable = QueryStepsStatistics[Value]{0},
Schema = Table.Schema( MyTable ),
Profile = Table.Profile( MyTable ),
Benutzerdefiniert1 = Schema,
#"Zusammengeführte Abfragen" = Table.NestedJoin(Benutzerdefiniert1, {"Name"}, Profile, {"Column"}, "Benutzerdefiniert1", JoinKind.LeftOuter),
TableExpand = Table.ExpandTableColumn(#"Zusammengeführte Abfragen", "Benutzerdefiniert1", {"Min", "Max", "Average", "StandardDeviation", "Count", "NullCount", "DistinctCount"}, {"Min", "Max", "Average", "StandardDeviation", "Count", "NullCount", "DistinctCount"}),
#"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(TableExpand, "HasDuplicates", each [Count] <> [DistinctCount]),
AddCol_Duplicates = Table.TransformColumnTypes(#"Hinzugefügte benutzerdefinierte Spalte",{{"HasDuplicates", type logical}, {"NullCount", Int64.Type}, {"DistinctCount", Int64.Type}}),
Output_Schema_Profile = Table.Sort(AddCol_Duplicates,{{"Position", Order.Ascending}})
in
Output_Schema_Profile,
Abfrage2 =
Table.AddColumn(
Record.ToTable(
[
//===========================================================================================
//=========Hier den Quellcode aus dem let-statement der Originalen Abfrage eintragen=========
//===========================================================================================
//===========================================================================================
//=========Hier den Quellcode aus dem let-statement der Originalen Abfrage eintragen=========
//===========================================================================================
]
),
"Rows", each
if [Value] is list then
//Liste
[
RowCount = Number.ToText(List.Count([Value]), "#,#") & " List items",
TypeAsText = "List"
]
else
if [Value] is record then
[
RowCount = Number.ToText(List.Count(Record.ToList([Value])), "#,#") &" Record Fields",
TypeAsText = "Record",
FieldNames = Record.FieldNames([Value])
]
else
if [Value] is table then
[
RowCount = Number.ToText(Table.RowCount([Value]), "#,#") &" Zeilen",
TypeAsText = "Table",
TableSchema_Profile = fnTableRemoveNullColumns( fnTableProfileSchema([Value]) )
]
else
if [Value] is function then
[
RowCount = 0,
TypeAsText = "Function"
]
else
[
RowCount = Text.From(0),
TypeAsText = "Other"
],
type text),
#"Hinzugefügter Index" = Table.AddIndexColumn(Abfrage2, "Step #", 1, 1, Int64.Type),
AddCol_RowCount = Table.AddColumn(#"Hinzugefügter Index", "RowCount", each [Rows][RowCount], type text),
AddCol_TypeAsText = Table.AddColumn(AddCol_RowCount, "TypeAsText", each [Rows][TypeAsText], type text),
AddCol_TableSchemaProfile = Table.AddColumn(AddCol_TypeAsText, "TableSchemaProfile", each [Rows][TableSchema_Profile]?),
#"Entfernte Spalten" = Table.RemoveColumns(AddCol_TableSchemaProfile,{"Rows"})
in
#"Entfernte Spalten"
view raw QueryStepStatistics.pq hosted with ❤ by GitHub

Falls Du wissen möchtest, wie Du meine M-Funktionen in Deinen Projekten wiederverwenden kannst, schau bitte hier nach.

🎓 Du willst Power Query von Grund auf lernen?

Dann ist mein Videokurs für Einsteiger genau richtig für dich:
✔️ Über 160 Videos
✔️ Mehr als 13 Stunden Laufzeit
✔️ Verständlich. Praxisnah. Auf Deutsch.
✔️ Alles ohne Programmierung

👉 Power Query lernen

Hier geht’s zum Lösungsvideo 😉

LÖSUNGSVIDEO

Sie sehen gerade einen Platzhalterinhalt von YouTube. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.

Mehr Informationen
Inhalt entsperren Erforderlichen Service akzeptieren und Inhalte entsperren

Danke für Dein Interesse und bis zum nächsten Mal. Denk dran: Sharing is caring. Wenn Dir der Beitrag gefallen hat, dann teile ihn gerne. Falls Du Anmerkungen hast, schreibe gerne einen Kommentar, oder schicke mir eine Mail an lars@ssbi-blog.de

Lars Schreiber

Lars ist Berater, Entwickler und Trainer für Microsoft Power BI. Er ist zertifizierter Power BI-Experte und Microsoft Trainer. Für sein Engagement in der internationalen Community wurde Lars seit 2017 jährlich durch Microsoft der MVP-Award verliehen. Lies hier mehr…

Kategorie: Business Topics Stichworte: Excel, Power BI, Power Query

Leser-Interaktionen

Kommentare

  1. Steffen Egner meint

    5. September 2024 um 12:30 pm

    Toller Ansatz! Richtig Power-Query-like, finde ich. Momentan habe ich „leider“ keinen mir bekannten Bug zu debuggen, aber ich werde darauf zurückkommen! Definitiv!

    In meiner Praxis kommt es oft vor, dass durch fehlerhafte Inputdaten eine meiner Abfragen scheitert. Für die AnwenderIn sieht es dann erstmal so aus, als sei meine Abfrage fehlerhaft. Es ist dann manchmal ziemlich aufwändig, den Fehler zu finden.

    Ich würde mir wünschen, dass Power Query mich als Entwickler besser darin unterstützt, dem Benutzer eine geordnete Rückmeldung zu geben und den Fehler zu debuggen, z.B. auch in Funktionen (sowohl als Abfragen definierte Funktionen als auch eingebettete).

Seitenspalte

WEBSITE DURCHSUCHEN

Power Query: Dein umfassender Einstieg…

🎓 Starte jetzt mit Power Query!

160+ Videos zeigen dir, wie du Datenimport, Bereinigung & Berechnungen einmal baust und immer wieder nutzt

Jetzt Kurs starten 💪

LERNE MIT JEDEM ARTIKEL

Erhalte alle Beispieldateien zu meinen über 200 Artikeln gratis!

Footer

Kontakt

THE SELF-SERVICE-BI BLOG
Mail: lars@ssbi-blog.de

Rechtliches

  • Impressum
  • Datenschutz

Über THE SELF-SERVICE-BI BLOG

Ich bin ein freiberuflicher Power BI-Berater, -Entwickler und -Trainer und wurde von Microsoft mehrfach mit dem MVP Award ausgezeichnet. Ich arbeite mit einem kompetenten Netzwerk aus freiberuflichen und ambitionierten Kollegen zusammen. Erfahre hier mehr.

Social

Folge mir...

Copyright © 2025 · Digital Pro on Genesis Framework