Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1952to1956
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

PQ - Spalten nur bei Bedarf löschen

PQ - Spalten nur bei Bedarf löschen
10.11.2023 08:10:06
Christian
Hallo,

ich bitte um eure Hilfe.

Ich habe folgende PQ Abfrage:

let

Quelle = Csv.Document(File.Contents("C:\Users\chris\Downloads\Filme.csv"),[Delimiter=",", Columns=17, Encoding=65001, QuoteStyle=QuoteStyle.None]),
#"Höher gestufte Header" = Table.PromoteHeaders(Quelle, [PromoteAllScalars=true]),
#"Geänderter Typ" = Table.TransformColumnTypes(#"Höher gestufte Header",{{"Position", Int64.Type}, {"Const", type text}, {"Created", type date}, {"Modified", type date}, {"Description", type text}, {"Title", type text}, {"URL", type text}, {"Title Type", type text}, {"IMDb Rating", Int64.Type}, {"Runtime (mins)", Int64.Type}, {"Year", Int64.Type}, {"Genres", type text}, {"Num Votes", Int64.Type}, {"Release Date", type date}, {"Directors", type text}, {"Your Rating", type text}, {"Date Rated", type text}}),
#"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Geänderter Typ", "Benutzerdefiniert", each if [Release Date] > null then [Release Date] else if [Year] = null then null else #date([Year], 12, 31)),
#"Umbenannte Spalten" = Table.RenameColumns(#"Hinzugefügte benutzerdefinierte Spalte",{{"Release Date", "RD"}, {"Benutzerdefiniert", "Release Date"}}),
#"Sortierte Zeilen" = Table.Sort(#"Umbenannte Spalten",{{"Release Date", Order.Descending}}),
#"Geänderter Typ1" = Table.TransformColumnTypes(#"Sortierte Zeilen",{{"Release Date", type date}}),
#"Entfernte Spalten" = Table.RemoveColumns(#"Geänderter Typ1",{"Created", "Modified", "Description", "URL", "IMDb Rating", "Runtime (mins)", "Year", "Genres", "Num Votes", "RD", "Directors", "Your Rating", "Date Rated"})
in
#"Entfernte Spalten"


Wie ihr sicherlich seht, werden ganz zum Schluss die beiden Spalten Your Rating und Date Rated gelöscht.
Kann ich irgendwas in die Abfrage einbauen, das prüft ob diese beiden Spalten vorhanden sind? Sodass sie gelöscht werden wenn sie da sind und das Aktualisieren der Abfrage abgeschlossen wird ohne die Spalten zu löschen, wenn sie nicht da sind?

Danke
Christian

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: mir stellen sich da zunächst die Fragen ...
10.11.2023 09:09:31
neopa C
Hallo Christian,

... zum einen wie kam es zu dieser Schrittdefinition und zum anderen warum löschst Du diesen nicht einfach?

Aber eine allgemeine Fehlerbehandlung in PQ und auch für Dein konkretes Beispiel würde auch mich interessieren.
Deshalb stelle ich den thread weiter als offen.

Gruß Werner
.. , - ...
AW: PQ - Spalten nur bei Bedarf löschen
10.11.2023 15:19:26
Christian
Hallo Luschi,

ich habe das ganze jetzt mit dem Tipp lösen können, auch wenn er ohne diese Zeile dann zwei zusätzliche Spalten erstellt hat, die ich am Ende wieder lösche, wie du siehst.

let

Quelle = Csv.Document(File.Contents("C:\Users\chris\Downloads\Filme.csv"),[Delimiter=",", Columns=17, Encoding=65001, QuoteStyle=QuoteStyle.None]),
#"Höher gestufte Header" = Table.PromoteHeaders(Quelle, [PromoteAllScalars=true]),
#"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Höher gestufte Header", "Benutzerdefiniert", each if [Release Date] > null then [Release Date] else if [Year] = null then null else #date([Year], 12, 31)),
#"Umbenannte Spalten" = Table.RenameColumns(#"Hinzugefügte benutzerdefinierte Spalte",{{"Release Date", "RD"}, {"Benutzerdefiniert", "Release Date"}}),
#"Sortierte Zeilen" = Table.Sort(#"Umbenannte Spalten",{{"Release Date", Order.Descending}}),
#"Geänderter Typ" = Table.TransformColumnTypes(#"Sortierte Zeilen",{{"Release Date", type date}}),
SpaltenNamen = Table.ColumnNames(#"Geänderter Typ"),
LöschSpalten ={"Created", "Modified", "Description", "URL", "IMDb Rating", "Runtime (mins)", "Year", "Genres", "Num Votes", "RD", "Your Rating", "Date Rated", "Directors"},
#"best. SpaltenNamen" = List.Intersect({SpaltenNamen, LöschSpalten}),
#"Spalten löschen" =
let
TueEs = if List.Count(#"best. SpaltenNamen") > 0
then List.Accumulate(
#"best. SpaltenNamen", #"Geänderter Typ",
(st, cur) => Table.RemoveColumns(st, {cur}))
else #"Geänderter Typ"
in
TueEs,
#"Entfernte Spalten" = Table.RemoveColumns(#"Spalten löschen",{"", "_1"})
in
#"Entfernte Spalten"


Nichts desto trotz ist mir gerade noch etwas aufgefallen, was ander csv Datei anders ist, abhängig davon ob sie heruntergeladen wurde, wenn ich angemeldet bin oder nicht.

Wenn ich abgemeldet bin, erscheint das Release Date im Format JJJJ-MM-TT wenn ich angemeldet bin im Format TT.MM.JJJJ
Da dieses Problem auch noch die anderen beiden csv Dateien betrifft, die hier im Einsatz sind, sowie alle weiteren Abfragen, die sich darauf beziehen, habe ich mich dann doch entschieden, bei der alten Version, die vorraussetzt angemeldet zu sein, zu bleiben. Das wäre ein zu großer Aufwand für dich, das alles anzupassen.

Danke trotzdem, ich hoffe du bist mir nicht böse
Christian
Anzeige
AW: PQ - Spalten nur bei Bedarf löschen
10.11.2023 17:01:24
Luschi
Hallo Christian,

bei solche Spalten, die das eigentliche Datum so anzeigen: 2023-12-24, braucht man doch nur die Spalte
den Datentyp 'Datum' verpassen und schon wird der '24.12.2023' angezeigt.
Das geht auch mit 1er bedingten Umwandlung:
let

Quelle = Excel.CurrentWorkbook(){[Name="tab_blablabla"]}[Content],
//1. Eintrag der Spalte 'Release Date 1' auf Datum prüfen
testDatenTyp = Quelle[Release Date 1]{0} is date,

//nur in Datum umwandeln wenn testDatenTyp = false
#"Geänderter Typ" =
if not testDatenTyp
then Table.TransformColumnTypes(Quelle, {{"Release Date 1", type date}})
else Quelle
in
#"Geänderter Typ"

Gruß von Luschi
aus klein-Paris
Anzeige
AW: PQ - Spalten nur bei Bedarf löschen
11.11.2023 12:24:01
Christian
Hallo Luschi,

erstmal danke. Aber jetzt hast du mich nur noch total verwirrt.
Ich befürchte einfach dass das bei der großen Tabelle und den vielen Änderungen die jetzt allein nur bei den csv nötig werden, ein Fass ohne Boden wird also viel Aufwand für sehr wenig Ertrag.

Wenn du dich bereit erklären würdest, dass ich dir einfach die jeweils 3 CSV Dateien mit und ohne Anmeldung und die 3 Abfragen die direkt damit zusammenhängen schicke und ich bekomme eine funktionierende Lösung zurück können wir das gerne probieren, auch wenn dann immer noch nicht sicher ist, das dann alles noch funktioniert (sowohl Makros, als auch Formeln als auch weitere PQ Abfragen) was auf diese Daten die in verschiedenen Formaten da stehen erst in nachfolgenden Schritten zugreift.

Ich verstehe jedenfalls nur Bahnhof bei dem was du zuletzt geschrieben hast und sehe mich außerstande meine Abfragen selbst entsprechend anzupassen. Die komplette Mappe zu überarbeiten damit das wieder passt würde den Rahmen jedenfalls bei weitem sprengen und war auch absolut nicht meine Absicht als ich nach den beiden Spalten gefragt hatte.

Gruß
Christian
Anzeige
AW: PQ - Spalten nur bei Bedarf löschen
10.11.2023 17:24:12
Yal
Moin Z'samma,

man könnte auch eine leere Abfrage mit alle Spalten anfügen, sodass es sicher ist, dass die zu löschende Spalten vorhanden sind...
Und danach die daraus entstehende leere Zeile auch löschen.

VG
Yal
AW: PQ - Spalten nur bei Bedarf löschen
11.11.2023 12:37:31
Christian
Hallo Yal,

gut das habe ich noch nie gemacht, aber hört sich logisch an.
Nur ich habe noch einen weiteren Unterschied zwischen den beiden CSV Dateien festgestellt (anderes Datumsformat) und da diese Daten nicht gelöscht werden sondern an zig stellen in der Mappe und auch anderen CSV Dateien und anderen Abfragen benötigt wird, würde so eine Anpassung fürchte ich ein Fass ohne Boden werden und ich werde bei meiner alten version bleiben.
Das wäre zu viel verlangt, das alles von euch anpassen zu lassen.

Gruß
Christian
Anzeige
AW: PQ - Spalten nur bei Bedarf löschen
13.11.2023 08:16:20
Luschi
Hallo Christian,

Du wirst doch jetzt die Flinte nicht ins Korn schmeißen:
- wie man in PQ prüft, ob best. Spalten existieren, habe ich Dir doch gezeigt
- und darauf kann man dann mit einer bedingten Löschung reagieren
- auch wie man feststellt, wie das Datum in der Spalte steht, ist ja nach meinem letzten Post kein Problem mehr

Wie soll es nun weiter gehen?
- mit PQ und 1 bißchen mehr M-Code, der per PQ-Editor-Oberfläche nicht möglich ist
- oder was verstehst Du unter bei meiner alten Version bleiben?

fragt sich Luschi
aus klein-Paris
Anzeige
AW: PQ - Spalten nur bei Bedarf löschen
13.11.2023 09:24:48
Yal
Hallo Christian,

wie Luschi sagt: nicht aufgeben.

Irgendwo liegt immer ein nicht mehr optimierbare Aufwand. Prinzipiell lohnt es sich immer, zuerst verschiedene Quellen auf einem gemeinsamen Nenner zu bringen, dann die Quellen zusammenbringen und erst die Behandlung zum Zielergebnis vorzunehmen. Dann hast Du weniger Pflege-Aufwand, wenn das Ziel sich ändert.

VG
Yal

AW: mir stellen sich da zunächst die Fragen ...
10.11.2023 09:56:32
Christian
Hallo Werner,

du siehst wahrscheinlich an der Quelle, diese ist eine heruntergeladene CSV Datei von der Seite www.imdb.com

Das Vorhandensein der beiden Spalten in der CSV Datei hängt davon ab, ob ich zum Zeitpunkt des herunterladens bei imdb angemeldet war oder nicht.

Mir geht es darum, dass ich in der Regel beim Herunterladen angemeldet bin, also die Spalten auch vorhanden sind und gelöscht werden sollen.
Manchmal nur bereinige ich z.b. die Browserdaten und bin dann abgemeldet, hab das natürlich bis zum nächsten wöchentlichen Download vergessen und werde dann erst daran erinnert, wenn ich die Abfrage aktualisieren will.

Das will ich umgehen, dass die Abfrage in beiden Fällen funktioniert, mit und ohne diesen beiden Spalten.

Gruß und danke
Christian

Anzeige
AW: mir stellen sich da zunächst die Fragen ...
10.11.2023 10:46:53
Christian
Hallo Luschi,

erstmal danke
wenn die Spalten nicht in der csv bei mir vorhanden sind, gibt das bei mir bei List.Intersect die Meldung, Spalte Your Rated nicht gefunden.

https://www.herber.de/bbs/user/164173.xlsx

Genau das war ja mein Anliegen, dass das löschen dieser beiden Spalten übergangen wird wenn nicht vorhanden.

Gruß
Christian
Anzeige
AW: mir stellen sich da zunächst die Fragen ...
10.11.2023 11:10:48
Luschi
Hallo Christian,

wenn ich in meinem Beispiel Spaltennamen angebe, die nicht existieren:
LöschSpalten ={"g Your Rating","u Date Rated"},
#"best. SpaltenNamen" = List.Intersect({SpaltenNamen, LöschSpalten}),

dann ist #"best. SpaltenNamen" eine leere Liste (also ohne Elemente) - und da kommt bei mir keine Meldung!
und if List.Count(#"best. SpaltenNamen") > 0 sorgt dafür, das List Accumulate nur ausgeführt wird, wenn die beiden Spalten oder auch nur 1 Spalte vorhanden sind; also wo ist da das Problem.

fragt sich Luschi
aus klein-Paris


Anzeige
AW: mir stellen sich da zunächst die Fragen ...
10.11.2023 11:23:12
Christian
Ich habe in deiner Datei die beiden spalten die überprüft werden sollen gelöscht und dann die Abfrage aktualisiert und bekam dann die Meldung Spalte nicht gefunden
AW: mir stellen sich da zunächst die Fragen ...
10.11.2023 13:23:39
Luschi
Hallo Christian,

der Störenfried ist der PQ-Schritt "#Geänderter Typ", der in den meisten Fällen sowieso unnötig ist. Löschen diesen Schritt in PQ-Editor und die Stör-Meldung ist beseitigt.

Gruß von Luschi
aus klein-Paris

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige