Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Power Query Typenkonflikt

Forumthread: Power Query Typenkonflikt

Power Query Typenkonflikt
29.09.2022 09:47:58
Heinz
Hallo Liebe Excellenten,
ich bearbeite eine Datei in Power BI bzw. Power Query und bekommen eine
Fehlermeldung zu "Typenkonflikte gefunden".
In der letzten Zeile der Meldung kommt folgende Zeile:
pairs = List.Transform(List.Positions(fieldNames), (i) => {fieldNames{i}, (v) => if v = null or Value.Is(v, fieldTypes{i}) then v else error [Message = "Der Werttyp stimmt nicht mit dem Typ der Spalte überein.", Detail = v], fieldTypes{i}})
Könnt Ihr mir einen Typ geben, was den Typenkonflikt hervorruft?
Heinz
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Power Query Typenkonflikt
29.09.2022 10:02:18
ChrisL
Hi Heinz
Ich denke es geht um Datentypen, also Text, Zahl, Datum, List etc.
Der Datentyp entspricht nicht den Erwartungen z.B. kannst du mit einem Text nicht rechnen oder eine Zahl nicht als Text verknüpfen.
Ich könnte mir vorstellen, dass ein neues Feld (Spaltentitel) hinzugekommen ist oder umbenannt wurde, wofür keine Definition des Datentypes vorliegt. Ohne Zusammenhang ist es aber schwer zu erraten, wo genau die Ursache liegt.
cu
Chris
Anzeige
AW: Power Query Typenkonflikt
29.09.2022 16:33:12
ChrisL
Hi Heinz
Die Angelegenheit hat mir keine Ruhe gelassen. Anscheinend ist der Code verbreitet und man findet auch einige Beiträge, wo Leute denselben Fehler hatten z.B.
https://community.powerbi.com/t5/Desktop/Error-Detected-type-mismatches/td-p/1811938
https://forum.enterprisedna.co/t/error-ole-db-or-odbc-error-expression-error-we-cannot-convert-the-value-null-to-type-text/24871/2
https://www.plageroyale.com/p/PowerBI/comments/hdcni1/powerbi_issue_with_certain_data_types_dax_help/
Soweit ich verstehe, werden damit Spalten mit primitiven Datentypen (text, number etc., jedoch ohne any/variant) auf Unregelmässigkeiten geprüft (z.B. eine Text Spalte mit Zahlen). Ganz klar ist mir der Anwendungsfall aber nicht.
Jedenfalls interpretiere ich aus den gelesenen Beiträgen, dass die Typenfehler
- entweder schon vorher produziert wurden d.h. die Spalten wurden falsch transformiert (weil z.B. die Struktur der Quelldaten geändert hat)
- oder weil PQ eine fehlerhafte automatische Typenkonvertierung/-erkennung vorgenommen hat (weil z.B. die ersten 1000 Zeilen zwar Zahlen waren, aber irgendwo dann doch noch ein Text auftaucht)
cu
Chris
Anzeige
AW: Power Query Typenkonflikt
29.09.2022 17:26:01
Yal
Hallo Heinz,
mir scheint die "List.Tranform (..)"-Aufruf nicht korrekt definiert zu sein.
Siehe https://learn.microsoft.com/de-de/powerquery-m/list-transform
Ausserdem habe ich Schwierigkeit, was "v" sein soll. Wenn es den Feldname sein soll, so ist diese Name nie null und ist unwahrscheinlich von gleichen Typ wie der Inhalt der Spalte selbst.
Also kann es nur der Inhalt eine Zelle sein. Dann müsste es

{fieldNames{i}(v) => 
Ohne Komma und Leerzeichen.
Was ist überhaupt den angestrebten Zweck dieses Transform?
VG
Yal
Anzeige
Gelöst: Einfach neu aufgebaut
29.09.2022 17:36:13
Heinz
Hallo an Alle,
das Problem habe ich dahingehend gelöst, als ich die Datei noch einmal aufgebaut habe.
Vorweg: Ich habe da gar nichts definiert. Davon bin ich intellektuell weit entfernt.
Ich habe lediglich bei einigen Spalten den Typ geändert. Spalten zusammengefasst usw.,
also nur vorgefertigte Funktionen genutzt.
Generell ist es mit Power Query (für mich) ein bisschen schwierig ein Problem so zu formulieren
und darzustellen, dass es hier im Forum verstanden wird.
Aber wie dem auch sei, es funkt jetzt.
Danke an Alle Beteiligten.
Anzeige
AW: Gelöst: Einfach neu aufgebaut
30.09.2022 15:47:55
ChrisL
Hi Heinz
Danke für die Rückmeldung und für das Teilen der Lösung (auch im anderen Beitrag).
Tut jetzt nichts mehr zur Sache (keine erneute Rückmeldung notwendig ;), aber mir ist nun doch noch klar geworden, wo der Code herkommt.
Beispieltabelle:

let
Quelle = #table({"Titel1","Titel2","Titel3"},{{"xxx",#date(2022,1,1),"a"},{2,"xxx","b"},{3,#date(2023,1,1),"c"}}),
#"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Titel1", Int64.Type}, {"Titel2", type date}, {"Titel3", type text}})
in
#"Geänderter Typ"
Mit "xxx" provoziere ich bewusst Fehler, da die Typenumwandlung in Ganzzahl und Datum zum Error führt.
Als Lade-Status der Abfrage wird angezeigt:
3 Zeilen geladen. 2 Fehler.
Drückt man auf Fehler, dann wird automatisch der fragwürdige Code produziert.

let
Quelle = BeispielTabelle,
#"Typenkonflikte gefunden." = let
tableWithOnlyPrimitiveTypes = Table.SelectColumns(Quelle, Table.ColumnsOfType(Quelle, {type nullable number, type nullable text, type nullable logical, type nullable date, type nullable datetime, type nullable datetimezone, type nullable time, type nullable duration})),
recordTypeFields = Type.RecordFields(Type.TableRow(Value.Type(tableWithOnlyPrimitiveTypes))),
fieldNames = Record.FieldNames(recordTypeFields),
fieldTypes = List.Transform(Record.ToList(recordTypeFields), each [Type]),
pairs = List.Transform(List.Positions(fieldNames), (i) => {fieldNames{i}, (v) => if v = null or Value.Is(v, fieldTypes{i}) then v else error [Message = "Der Werttyp stimmt nicht mit dem Typ der Spalte überein.", Detail = v], fieldTypes{i}})
in
Table.TransformColumns(Quelle, pairs),
#"Hinzugefügter Index" = Table.AddIndexColumn(#"Typenkonflikte gefunden.", "Zeilennummer" ,1),
#"Beibehaltene Fehler" = Table.SelectRowsWithErrors(#"Hinzugefügter Index", {"Titel1", "Titel2", "Titel3"}),
#"Neu angeordnete Spalten" = Table.ReorderColumns(#"Beibehaltene Fehler", {"Zeilennummer", "Titel1", "Titel2", "Titel3"})
in
#"Neu angeordnete Spalten"
Lustigerweise kann man ein identisches Resultat wie folgt produzieren. Es ist mir ein Rätsel, wieso PQ den Code auf die komplizierte Art und Weise erzeugt.

let
Quelle = BeispielTabelle,
#"Hinzugefügter Index" = Table.AddIndexColumn(Quelle, "Index", 1, 1, Int64.Type),
Ergebnis = Table.SelectRowsWithErrors(#"Hinzugefügter Index")
in
Ergebnis
cu
Chris
Anzeige
AW: Gelöst: Einfach neu aufgebaut
03.10.2022 21:04:06
Luschi
Hallo ChrisL,
habe mir mal den von E_365-PQ erstellen M-Code im Fehlerfall näher angeschaut:
- der 2. eingebaute 'let/in' Zweig ist eigentlich doppelt gemoppelt
- denn die Spalten mit dem Datentypen 'any' sind hier außen vor
- werden also gar nicht berücksichtigt
- und die Spalten mit einen definierten primitiven Datentyp werden einfach nochmals
  mit dem schon vorhandenen Typ formatiert - also eigentlich überflüssig
Trotzdem ist der Code für mich interessant, denn jetzt weiß ich, wie man Spalten über den Aufbau von 'list in list' Listen den Datentyp von Spalten definieren kann - ist beim importieren von CSV-Dateien ganz gut anwendbar. E_2019 PQ kann solchen M-Code noch nicht erstellen.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Gelöst: Einfach neu aufgebaut
05.10.2022 22:51:03
ChrisL
Hi Luschi
Danke für den Input.
Ich wollte mich eigentlich noch einmal damit auseinandersetzen, aber der Beitrag rutscht gleich ins Archiv. Falls ich innert nützlicher Frist die Zeit finde und neue Erkenntnisse habe, melde ich mich noch einmal separat. (list wäre nach meinem Verständnis ein eigener Datentyp)
cu
Chris
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Power Query Typenkonflikt lösen


Schritt-für-Schritt-Anleitung

  1. Datenquelle überprüfen: Stelle sicher, dass die Datenquelle, die du verwendest, keine Änderungen erfahren hat, wie z.B. Umbenennungen oder das Hinzufügen neuer Felder.
  2. Datentypen kontrollieren: Überprüfe die Datentypen der Spalten in Power Query. Bei Konflikten (z.B. expression.error: der schlüssel entsprach keiner zeile in der tabelle) könnte es nötig sein, die Datentypen manuell anzupassen.
  3. Feldnamen anpassen: Wenn du neue Spalten hinzufügst oder bestehende Spalten umbenennst, stelle sicher, dass die Typdefinitionen für diese Spalten korrekt sind.
  4. Transformationen anwenden: Benutze die Funktion Table.TransformColumnTypes, um die Datentypen entsprechend anzupassen.
  5. Fehlermeldungen analysieren: Achte auf spezifische Fehlermeldungen wie expression.error: we cannot convert the value null to type logical. und recherchiere, was die Ursache sein könnte.

Häufige Fehler und Lösungen

  • Typenkonflikte: Wenn du die Fehlermeldung detected type mismatches power bi erhältst, überprüfe, ob alle Werte in einer Spalte den angegebenen Datentypen entsprechen.
  • Schlüssel nicht gefunden: Bei expression.error: der schlüssel entsprach keiner zeile in der tabelle kannst du die Spaltendefinitionen erneut überprüfen und sicherstellen, dass die Spaltennamen korrekt sind.
  • Null-Werte: Die Meldung der wert null kann nicht in den typ logical konvertiert werden deutet darauf hin, dass in einer logischen Spalte unerwartete Null-Werte vorhanden sind. Setze hier gegebenenfalls eine bedingte Logik ein, um diese zu entfernen oder zu ersetzen.

Alternative Methoden

  • Daten neu laden: Lade die Datenquelle erneut, um sicherzustellen, dass alle Änderungen übernommen werden.
  • M-Code anpassen: Nutze den M-Code, um spezifische Transformationen gezielt durchzuführen. Hier ein einfaches Beispiel:
let
    Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
    #"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Spalte1", type text}, {"Spalte2", type number}})
in
    #"Geänderter Typ"
  • Index-Spalte hinzufügen: Manchmal hilft es, eine Index-Spalte hinzuzufügen, um die Datenstruktur zu stabilisieren:
let
    Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
    #"Mit Index" = Table.AddIndexColumn(Quelle, "Index", 1, 1, Int64.Type)
in
    #"Mit Index"

Praktische Beispiele

  • Beispiel für Typenkonflikte: Wenn du eine Tabelle mit gemischten Datentypen hast, kann es zu Fehlern kommen. Erstelle eine Tabelle mit verschiedenen Typen und versuche, sie in einen einheitlichen Typ zu konvertieren.
let
    Quelle = #table({"Titel1","Titel2"}, {{"Text", 123}, {"Text", "Fehler"}}),
    #"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Titel1", type text}, {"Titel2", type number}})
in
    #"Geänderter Typ"
  • Verwendung von List.Transform: Um sicherzustellen, dass alle Werte in einer Liste den richtigen Typ haben, kannst du List.Transform verwenden.
let
    Quelle = {"Text", null, 123},
    Ergebnis = List.Transform(Quelle, each if _ = null then "Kein Wert" else _)
in
    Ergebnis

Tipps für Profis

  • Debugging: Nutze die Fehler-Inspektor-Funktion in Power Query, um herauszufinden, wo die Typenkonflikte auftreten.
  • Datenprofiling: Überprüfe die Datenvorschau in Power Query regelmäßig, um sicherzustellen, dass alle Transformationen wie gewünscht funktionieren.
  • M-Code kommentieren: Halte deinen M-Code gut dokumentiert, um Änderungen und Fehler leichter nachzuvollziehen.

FAQ: Häufige Fragen

1. Was bedeutet expression.error: die spalte der tabelle wurde nicht gefunden?
Diese Fehlermeldung tritt auf, wenn du versuchst, auf eine Spalte zuzugreifen, die nicht existiert oder umbenannt wurde. Überprüfe die Spaltennamen und passe sie gegebenenfalls an.

2. Wie behebe ich der wert null kann nicht in den typ logical konvertiert werden?
Stelle sicher, dass in der entsprechenden Spalte keine Null-Werte enthalten sind. Du kannst dies durch Filterung oder durch Verwendung von bedingten Anweisungen in Power Query lösen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige