Anzeige
Archiv - Navigation
1944to1948
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

personalisierte Autokorrektur für Powerquery-Abfrage - how2

personalisierte Autokorrektur für Powerquery-Abfrage - how2
23.09.2023 17:47:42
ExcelProbierer
Hallo liebe Cracks ;-)

kann mir bitte jemand sagen, wo ich am besten Folgendes nachlese bzw. wie es geht:

Ich habe eine ständig wachsende rohdaten.csv ("Datum";"Benutzer";"Artikel";"Kommentar"), die ich immer wieder einlese und die Daten weiterverarbeite.
Dazu lade ich sie mit Powerquery in eine Excel-Datei.
Nun stellte ich fest, daß verschiedene Benutzer ein und denselben Artikel unterschiedlich benennen (z.B. der eine schreibt "Spring-Seil" und der andere "Springseil").
Das korrigierte ich in der dann erstellten Tabelle solange händisch, bis es mir zu viel wurde.
Ich erstellte ein weiteres Tabellenblatt namens "falsch_richtig" mit einer intelligenten Tabelle Tab_falsch_richtig bestehend aus zwei Spalten (A=falsch_Artikel, B=richtig_Artikel) und erweiterte diese Tabelle um je eine Zeile pro mir aufgefallenem Fehler (A2=Spring-Seil / B2=Springseil, A3=Koeln / B3=Köln, ...).
Jetzt soll bei jedem PQimport die csv zeilenweise gelesen werden und dann - wenn der Artikel in der [Tab_falsch_richtig[falsch_Artikel]] enthalten ist - ersetzt werden mit dem [Tab_falsch_richtig[richtig_Artikel]]. Wenn er nicht gefunden wird, dann eben so übernehmen, wie er ist.
Will heißen: Mir aufgefallene Fehler trage ich in die Tabelle ein und die werden ab dann bei jeder weiteren PQ-Abfrage automatisch korrigiert.

Wie muß der Code für den PQ-Import lauten, in dem ich die csv als Datenquelle und diese benamte intelligente Tabelle "Tab_falsch_richtig" (auf dem Tabellenblatt falsch_richtig) einlese?
Und wie lautet der Code zur Überprüfung
ReplaceValue(Quelle, each [Artikel], each if ??? ...

also meine Denke:
for each [csv[Artikel]] do
if SUCHE [csv[Artikel]] IN [Tab_falsch_richtig[falsch_Artikel]] ERFOLGREICH then [Tab_falsch_richtig[falsch_Artikel]] else [csv[Artikel]]
Nur wie übersetzt man das richtig in PQ-Sprache (also Text.Contains(... etc.)?

Zum Spielen schon mal vorbereitet: https://www.herber.de/bbs/user/163064.zip (mit Beispiel: rohdaten.csv und xls)

Vielen Dank für's Lesen und Mit-Denken ;-)

Oder steh ich zur Zeit komplett auf dem Schlauch, weil es sowas ja schon lange gibt oder weil es viel einfacher geht?

VG Stefan

P.S. Nach einem einfachen Powerquery-Import (incl. aller Fehler) und erst dann in Excel ersetzen geht ja einfach.
Aber mich würde interessieren, wie ich es in Powerquery hinbekomme (sozusagen eine personalisierte Autokorrektur nur für den Import dieser eine Datei).

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: personalisierte Autokorrektur für Powerquery-Abfrage - how2
23.09.2023 22:29:01
Yal
Hallo Stefan,

Bin am WE nicht an Rechner, habe daher die Datei nicht geöffnet.

Was du vor hast, nennt sich in Datenbanksprache "Join" und in Power Query "zusammenführen".

Am besten schaue dir diesen Blog, inkl. die Videos dazu. Join ist Kapitel 4:
https://excelhero.de/power-query/power-query-ganz-einfach-erklaert/

Aber die andere Videos sind auch sehr empfehlenswert.

VG
Yal
AW: schließ mich den Aussagen von Yal an, vorausgesetzt ...
24.09.2023 10:42:06
neopa C
Hallo Stefan,

... Du hast eine komplette [Tab_falsch_richtig]. In der alltäglichen Praxis dürfte eine solche jedoch nie wirklich komplett sein. Andernfalls könnt ihr eine manuelle Nachbearbeitung nicht gänzlich vermeiden.

Besser wäre es mE ihr erstellt eine eindeutige Artikeltabelle mit korrekter Artikelbezeichnung und dieser einer entsprechend eindeutig zugeordneten ID-Nr und erfaßt dann nur noch die ID-Nr und laßt dann dafür sofort bei der Erfassung dessen Artikelbezeichnung aus der Datentabelle listen. Über diese ist dann die sofortige visuelle Kontrolle möglich, ob die korrekte ID-Nr erfaßt wurde.

Gruß Werner
.. , - ...
Anzeige
AW: personalisierte Autokorrektur für Powerquery-Abfrage - how2
24.09.2023 12:50:10
ExcelProbierer
.

Und - was ich vergessen habe in meinem Anfangspost: Die csv verändern kann (und dürfte) ich nicht ! - ist sozusagen ein "amtliches Dokument" ;-)

.
AW: personalisierte Autokorrektur für Powerquery-Abfrage - how2
24.09.2023 14:47:12
Yal
Hallo Stefan,

Power Query "liest" die CSV und importiert die Daten in Excel. Die Quelle bleibt unverändert.

Du darfst ruhig probieren. Ich Frage mich nur, wie Du mir einen Excel 2010 Power Query zum Laufen bringst...

VG
Yal
AW: personalisierte Autokorrektur für Powerquery-Abfrage - how2
24.09.2023 16:28:29
ExcelProbierer
Hallo Yal,

Erstens hab ich in der Arbeit X365 und zu Hause nur ein lizensiertes Excel2010 mit nem Addon (gab's mal - ich glaube das hier war's: https://www.microsoft.com/de-DE/download/details.aspx?id=39379).

Und zweitens: ist mir durchaus bewusst, dass ich ruhig probieren kann, da der Datenbestand nicht geändert wird.
Ich wollte nur erklären, daß ich nicht die Fehler, die mir auffallen, einfach in der csv korrigieren kann (so wären sie ja auch für die nächsten Importe behoben, darf ich aber eben nicht).

VG
Stefan
Anzeige
personalisierte Autokorrektur für Powerquery-Abfrage - how2
24.09.2023 12:47:35
ExcelProbierer
Hallo Werner,

ist mir bewusst, würde ich auch gerne so machen - geht aber leider nicht.

Und - was ich vergessen habe in meinem Anfangspost: ich kann (und dürfte auch) nicht die csv verändern! - ist sozusagen ein "amtliches Dokument" ;-)

Das ist nur ein einfaches Beispiel für eine andere kompliziertere Anwendung, in der die Benutzer wirklich händisch und persönlich Daten eingeben müssen.
Manche können aber selbst ihr email nicht richtig eingeben - z.B. xy@gmx.met / eindeutig, offensichtlich falsch, aber dennoch eine gültige Eingabe / nur kurz daneben getippt. Oder was auch mir hin und wieder passiert ein Buchstabendreher: "VG Setfan" ist eindeutig, aber eben leider falsch und für die Weiterverarbeitung nicht geeignet ;-(
Diese Fehler identifiziere ich. Nachdem diese csv-Datei immer größer wird und ich sie immer wieder neu einlese, um mit dem aktuellen Datenbestand weiterzuarbeiten, habe ich eine automatisierte Fehlerkorrektur entwickelt (PQ-import, dann mit xverweis aus dem PQimport und meiner Tab_falsch_richtig eine weiterverarbeitbare Tabelle erstellen).
Diese Tab_falsch_richtig ist um die mir neu auffallenden Fehler erweiterbar und beseitigt - beim erneuten Einlessen der csv - alle bis dato bekannten Fehler, so daß ich nur noch neue Fehler erkennen und diese dann in die falsch_richtig-Liste eintragen muss.
Ansonsten müsste ich
- nach dem allerersten Einlesen die allerersten Fehler vor meiner Weiterverarbeitung korrigieren.
- Nach dem Neueinlesen der csv am nächsten Tag, die ersten bekannten Fehler UND die zwei neuen Fehler dazu.
- Am dritten Tag dann alle bekannten Fehler + die neuen.
- Am dritten Tag abends die vorher bekannten Fehler + die bis dann neuen Fehler,
- ....

Und hierzu erschien mir meine "Tab_falsch_richtig" als gangbarer Weg, da ich die Fehler in der csv nicht korrigieren darf - mit diesen Daten aber arbeiten muss.

Und genau das würde ich gerne in die PQ-Abfrage implementieren (sprich nicht erst PQ und dann neue Tabelle daraus erstellen, sonden gleich beim Import).

VG
Stefan
Anzeige
AW: personalisierte Autokorrektur für Powerquery-Abfrage - how2
24.09.2023 17:43:21
ExcelProbierer
Hallo Werner,

bin noch relativ neu hier und habe erst jetzt das Kästchen bei "Frage noch offen" erspäht ;-) und jetzt auch angehakt.

Klar - vorher möglichst per Dropbox oder z.B. Gültigkeitsprüfung, etc. Fehler vermeiden => weniger Nacharbeit.
Ist aber vom Cheffe so vorgegeben: die MA müssen damit kundtun, dass sie wirklich da dran waren und keinen Automatismus laufen haben lassen, der das für sie erledigt.
D.h. die MA müssen selber Daten schreiben (wie z.B. ihre email-Adresse) und ein Datum (auswählen oder) eintragen, wann sie das Formular bearbeitet haben.
Und die bereits bekannten Wechstabenverbuchsler oder sonstige Fehler möchte ich bei den kommenden PQ-Importen ausgemerzt haben, so dass ich mich darauf konzentrieren kann weitere neue Fehler zu finden bzw. gleich mit dem neuen größeren, dann fehlerlosen Datenbestand weiterarbeiten kann.

D.h. wenn Du oder sonst noch jemand anders eine Idee oder ein paar Codeschnipsel hat: immer her damit!
Also: schön wär ein how2:
PQ-Abfrage mit generellem input aus einer csv, die schon beim PQ-import geprüft (z.B. durch Vergleich mit meiner Tab_falsch_richtig) und falls nötig korrigiert wird.

Es hapert bei mir am PQ-Code: Datenquelle = csv ist logisch und funktioniert ja schon, nur wie bekomme ich die Tab_falsch_richtig noch dazu?
In meinem derzeitigen Code (komplett hier: https://www.herber.de/bbs/user/163082.zip):
let
Quelle = ...,
#"Zusammenführte Abfragen" = Table.NestedJoin(#"Geänderter Typ",{"Artikel"},Tab_falsch_richtig,{"falsch_Artikel"},"Tab_falsch_richtig",JoinKind.LeftOuter),
#"Erweiterte Tab_falsch_richtig" = Table.ExpandTableColumn(#"Zusammenführte Abfragen", "Tab_falsch_richtig", {"falsch_Artikel", "richtig_Artikel"}, {"Tab_falsch_richtig.falsch_Artikel", "Tab_falsch_richtig.richtig_Artikel"}),
#"Hinzugefügte bedingte Spalte" = Table.AddColumn(#"Erweiterte Tab_falsch_richtig", "Alle_Artikel_Jetzt_Richtig", each if [Artikel] = "SpringSeil" then "Springseil" else if [Artikel] = " kölnischWasser" then "kölnisch Wasser" else if [Artikel] = "koelnischWasser" then "kölnisch Wasser" else if [Artikel] = "kölnisch Wasser " then "kölnisch Wasser" else if [Artikel] = "gruebel" then "Grübel" else if [Artikel] = "kölnischWasser" then "kölnisch Wasser" else if [Artikel] = "koelnisch Wasser" then "kölnisch Wasser" else if [Artikel] = "Spring-Seil" then "Springseil" else [Artikel], type text),
...

ist Folgendes zu ändern:
- wegen dem Table.NestedJoin(... erstellt PQ ein neues Tabellenblatt Tabelle1.
Das müsste m.E. nicht sein, wenn ich wüsste, wie ich anders auf die Daten aus der bereits bestehenden Tab_falsch_richtig auf dem Tabellenblatt falsch_richtig zugreifen kann.
- bei #"Hinzugefügte bedingte Spalte" = Table.AddColumn( sollte nicht "hartcodiert" alle Fehler korrigiert werden mit evtl. irgendwann mal zuvielen else if's, sondern eine "elegante" Tabellenabfrage a'la xverweis den Job übernehmen
Oder wenn zwei Tabellen eingelesen werden, dann vergleichen/ersetzen: wie sieht der Ersetzungsvorgang aus sprich ReplaceValue(Quelle, each Artikel, each if ...und hier fehlt eben der Code... der aussagt:
if (der aus der csv eingelesener Wert/String in der Spalte falsch_Artikel der Tab_falsch_richtig gefunden wird)
then (nehme aus der Tab_falsch_richtig aus der betreffenden Zeile den Wert/String, der in der Spalte richtig_Artikel steht)
else (übernehme den Wert/String aus der csv)
endif


Eigentlich ganz einfach in der Excel-Sprache
=XVERWEIS(Tab_rohdaten[Artikel];Tab_falsch_richtig[falsch_Artikel];Tab_falsch_richtig[richtig_Artikel];Tab_rohdaten[Artikel];0)
=XVERWEIS(Suchkriterium; Suchmatrix; Rückgabematrix; [wenn nicht gefunden]; [Vergleichsmodus (0=exakte Übereinstimmung)])


Nur wie bekomm ich das in die PQ-Abfrage mit rein???

VG
Stefan
Anzeige
AW: personalisierte Autokorrektur für Powerquery-Abfrage - how2
25.09.2023 10:21:42
Yal
Hallo Stefan,

die Verarbeitung über Power Query richtet sich an Datenbanken: eine Spalte = ein Informationstyp. In der Formel kommen nur Spaltenname vor, NIE den Inhalt der Spalte.

Also den if-then-else soll so aussehen:
= Table.AddColumn(#"Erweiterte Tab_falsch_richtig", "Benutzerdefiniert", each if [Tab_falsch_richtig.richtig_Artikel] = null then [Artikel] else [Tab_falsch_richtig.richtig_Artikel])

Ich empfehle gern, solche Kauderwelche auf Deutsch zu sprechen (idealerweise sogar laut. Das Gehirn scheint die Information so besser zu verarbeiten):
für jede einzelne Zeile ("each"), wenn in der Spalte [... .Richtig_Artikel] null steht, dann nehme den Inhalt der Spalte [Artikel], sonst nehme den Inhalt der Spalte [... .Richtig_Artikel]

Ganz einfach.

VG
Yal
Anzeige
AW: personalisierte Autokorrektur für Powerquery-Abfrage - how2
26.09.2023 23:03:13
ExcelProbierer
Hallo Yal,

"die Verarbeitung über Power Query richtet sich an Datenbanken: eine Spalte = ein Informationstyp. In der Formel kommen nur Spaltenname vor, NIE den Inhalt der Spalte. "
...
den Code: "#"Hinzugefügte bedingte Spalte" = Table.AddColumn(#"Erweiterte Tab_falsch_richtig", "Alle_Artikel_Jetzt_Richtig", each if [Artikel] = "SpringSeil" then "Springseil" else if [Artikel] = " kölnischWasser" then "kölnisch Wasser" else if [Artikel] = "koelnischWasser" then "kölnisch Wasser" else if [Artikel] = "kölnisch Wasser " then "kölnisch Wasser" else if [Artikel] = "gruebel" then "Grübel" else if [Artikel] = "kölnischWasser" then "kölnisch Wasser" else if [Artikel] = "koelnisch Wasser" then "kölnisch Wasser" else if [Artikel] = "Spring-Seil" then "Springseil" else [Artikel], type text), "
hat PQ selbst erstellt, als ich die Spalte wie in dem von Dir angesprochenen Video als "Spalte aus Beispiel" zugefügt habe. Will heißen: PQ hat keine allgemeingültige Formel erkannt und musste hartcodiert ändern ;-( Darum hab ich ja gefragt, weil ich sowas auch nicht mag. Da darf ich jedesmal den Code ändern.

Was ich aber immer noch nicht herausbekommen habe - trotz Video insbes. Kapitel 4 schauen:
Wie bekomme ich es richtig codiert, dass er mir die csv als Quelle nimmt und gegen eine intelligente Tabelle aus der offenen Excel-Datei abgleicht?
Bis dato mach ich zur Eintragung eines in Zukunft automatisch zu korrigierenden Fehlers einen neuen Eintrag in meiner Korrektur-Liste, speichere dann die Excel-Datei, aktualisiere dann die Korrektur-Tabelle (ist ne eigene PQ-Abfrage innerhalb der Execl-Datei) und erst danach werfe ich die PQ-Abfrage an mit der die csv ausgelesen wird, da diese eben als Voraussetzung die PQ-Abfrage der Korrekturliste bedingt.
D.h. ich habe zwei PQ-Abfragen: eine für die Korrekturen und die zweite für den csv-import (was dann auch funktioniert).
Ich möchte mir nur die erste PQ-Abfrage sparen. Wenn ich wüsste, wie ich die zu vergleichenden Daten aus der Korrekturliste in die PQ-Abfrage reinbekomme.
VG
Stefan
Anzeige
AW: personalisierte Autokorrektur für Powerquery-Abfrage - how2
27.09.2023 09:39:21
Yal
Hallo Stefan,

bei PQ Abfragen muss man nicht "sparen". Klar: so wenig wie möglich. Aber: so viel wie nötig.
Wenn Du 2 Quellen hast, dann hast Du mindestens 2 Abfragen. Es könnte weniger sein, aber Aufwendig, unübersichtlich, und bringt keine Performancevorteil. Ich bevorzüge Übersichtlich vor Kompaktheit. Aus Erfahrung.

Also eine Abfrage, um den unveränderbare csv einzubinden, und eine für deine Übersetzungsliste.

Dann den "join" wie im Video gezeigt: die csv-Abfrage auswählen, Funktion "Abfrage zusammenführen", Spalte "Artikel" anklicken, als zweite Abfrage die Übersstzungsliste-Abfrage, darin die "Vorher"-Spalte auswählen, Join-Art "alle vom erste, nur Treffer von zweite".
Dann die neue Spalte, wo überall "Table" erweitern,
"benutzerdefinierte Spalte" erzeugen, Formel eingeben: if [Vorher] = null then [Artikel] else [Nachher]
(ich habe absichtlich nicht die originale Bezeihnung verwendet. Nicht zur Strafe, sondern zur Übung)
dann unnötige Spalte entfernen und Spaltenreihenfolge setzen.
Fertig.

Ich kann nicht recht nachvollziehen, wie es dazu kam, dass PQ den langen Kauderwelch erzeugt hat. Es ist ein Assistant aber keine Zauberstab. Und auch wenn Zauberstab: am andere Ende muss ein wissender Zauberer geben.

VG
Yal


Anzeige

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige