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

PQ - unvollständige Geburtsdaten durch "null" ersetzen

Forumthread: PQ - unvollständige Geburtsdaten durch "null" ersetzen

PQ - unvollständige Geburtsdaten durch "null" ersetzen
11.06.2025 20:47:13
Christian
Hallo, ich bitte um eure Hilfe.

Gibt es die Möglichkeit, unvollständige Geburtsdaten, die in der CSV Datei stehen, im PQ Editor zu entfernen, anstatt dass sie umgewandelt werden?

3 Beispiele (Position ist einer der Spaltenbezeichnungen)
Position 1, 22. Juli wird umgewandelt in 22.07.2025
Position 32, 1953 wird umgewandelt in 01.01.1953
Position 391, Mai 1997 wird umgewandelt in 01.05.1997

wie bekomme ich es hin, dass anstatt dieser Umwandlungen bei unvollständigen Geburtsdaten null in den entsprechenden Zellen der Spalte Birth Date erscheint?

Abfrage:
https://www.herber.de/bbs/user/177727.xlsx

CSV Datei (Datenquelle):
https://www.herber.de/bbs/user/177728.zip

Vielen Dank
Christian
Anzeige

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Das sollte so...
11.06.2025 21:38:35
daniel
Hi Case

eine kurze Frage:
konntest du die Befehlszeile für das "Ersetzen" über das Menü mit wenigen Mausklicks erstellen oder musstest du die im Editor von Hand programmieren?

Gruß Daniel
Anzeige
AW: Das sollte so...
11.06.2025 22:14:42
Christian
Hallo Case,

erstmal vielen Dank,

leider funktioniert es auf dem Weg nicht, z.b. Pos. 81 Anna Konkle steht mit dem Geburtsdatum 7.4.87 in der csv Datei, das Datum wurde jedoch in der Datei die du mir geschickt hast, gelöscht. (und noch viele weitere)
Schaust du bitte nochmal

danke

Christian
Anzeige
AW: Das sollte so...
11.06.2025 22:23:42
ralf_b
vielleicht reicht dir ja auch nur die Markierung ob das Datum korrekt ist oder nicht.

 #"Entfernte Spalten" = Table.RemoveColumns(#"Geänderter Typ",{"Created", "Modified", "Description", "Known For"}),

neuespalte= Table.AddColumn(#"Entfernte Spalten", "IstGültigesDatum", each
let
Textwert = Text.Trim([Birth Date]),
Punkt1 = Text.PositionOf(Textwert, ".", Occurrence.First),
Punkt2 = Text.PositionOf(Textwert, ".", Occurrence.Last),
Monatsnameistdrin = List.AnyTrue(List.Transform({"Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", " August", "September", "Oktober", "November","Dezember"}, (wort) => Text.Contains([Birth Date], wort))),
IstRichtigeLänge = Text.Length(Textwert) = 10,
IstPunktAnStelle3Und6 = (Punkt1 = 3) and (Punkt2 = 6),
length = Text.Length(Textwert),
isnum = try Number.From(Text.End(Textwert, 4)) is number,
endetMitLeerzeichenJahr = length >= 5 and Text.At(Textwert, length - 5) = " " and (if not isnum[HasError] then isnum[Value] else false)
in
(IstPunktAnStelle3Und6 and IstRichtigeLänge) or
(Monatsnameistdrin and (Punkt1=2 or Punkt1=1) and endetMitLeerzeichenJahr)
)
in
neuespalte
Anzeige
AW: Das sollte so...
11.06.2025 22:39:46
Christian
Hallo Ralf,

die Logik funktioniert, danke für deine Mühe.
Sicherlich kann ich auch damit was anfangen. Aber diese Logik lässt sich doch sicher auch nutzen, um zu entscheiden ob ein Datum durch null ersetzt werden soll.
Das werde ich jetzt erstmal selbst probieren, vielleicht bekomme ich es ja hin.

Danke
Christian
Anzeige
AW: Das sollte so...
11.06.2025 22:35:13
daniel
in der CSV, die du hochgeladen hast, kommen diese Fälle nicht vor.
das steht auch bei Anna Konkle ein "7. April 1987"
Gruß Daniel
AW: Wie sieht es jetzt...
11.06.2025 23:10:40
Christian
Hallo Case,

der Vorschlag funktioniert auch einwandfrei

Jetzt hab ich die Qual der Wahl.

Gruß
Christian
und danke auch dir, owT
11.06.2025 23:11:11
Christian
AW: Das sollte so...
11.06.2025 22:37:41
Christian
Hallo Daniel,

aber in Case' hochgeladener Datei wurde der Geburtstag von Anna Konkle durch null ersetzt, obwohl er vollständig in der CSV Datei vorhanden ist.

Gruß
Christian
Anzeige
AW: PQ - unvollständige Geburtsdaten durch "null" ersetzen
11.06.2025 21:26:12
daniel
Hi
mache folgendes mit den Daten, bevor Birth Date in den Typ Datum gewandelt wird:
1. Spalte Birth Date duplizieren
2. Birth Date - Kopie nach Trennzeichen Teilen, Trennzeichen ist das Leerzeichen " ". Du bekommst die Spalten Birth Date Kopie.1 - 3
3. Spalte hinzufügen - Bedingte Spalte: Bedinung ist: Wenn Birth Date Kopie.3 = null, Wert null (oder Birth Date Kopie.3) sonst: Birth Date
4. lösche die Spalten Birth Date und Birth Date Kopie.1 - 3,
5. benenne die neue Spalte um in "Birth Date"
6. führe jetzt den Typwandel auf Datum aus.

Gruß Daniel
Anzeige
funktionierende Lösung mit Ralfs Vorschlag
11.06.2025 22:50:27
Christian
let

// CSV einlesen
Quelle = Csv.Document(File.Contents("C:\Users\chris\Downloads\Leute.csv"), [Delimiter=",", Columns=8, Encoding=65001, QuoteStyle=QuoteStyle.None]),
Tabelle = Table.PromoteHeaders(Quelle, [PromoteAllScalars=true]),

// Nur relevante Spalten
RelevanteSpalten = Table.SelectColumns(Tabelle, {"Position", "Const", "Name", "Birth Date"}),

// Vorläufig alle Spalten korrekt typisieren, aber "Birth Date" noch als Text
GeänderterTyp = Table.TransformColumnTypes(RelevanteSpalten,
{
{"Position", Int64.Type},
{"Const", type text},
{"Name", type text},
{"Birth Date", type text}
}
),

// Direkt "Birth Date" ersetzen basierend auf gültiger Format-Logik
Korrigiert = Table.TransformColumns(GeänderterTyp, {
{"Birth Date", each
let
Textwert = Text.Trim(_),
Punkt1 = Text.PositionOf(Textwert, ".", Occurrence.First),
Punkt2 = Text.PositionOf(Textwert, ".", Occurrence.Last),
Monatsnameistdrin = List.AnyTrue(List.Transform(
{"Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", " August", "September", "Oktober", "November","Dezember"},
(wort) => Text.Contains(Textwert, wort)
)),
IstRichtigeLänge = Text.Length(Textwert) = 10,
IstPunktAnStelle3Und6 = (Punkt1 = 2) and (Punkt2 = 5),
length = Text.Length(Textwert),
isnum = try Number.From(Text.End(Textwert, 4)) is number,
endetMitLeerzeichenJahr = length >= 5 and Text.At(Textwert, length - 5) = " " and (if not isnum[HasError] then isnum[Value] else false),
istGueltig = (IstPunktAnStelle3Und6 and IstRichtigeLänge) or (Monatsnameistdrin and (Punkt1 = 1 or Punkt1 = 2) and endetMitLeerzeichenJahr)
in
if istGueltig then try Date.From(Textwert) otherwise null else null,
type date}
}),

// Sortieren
Sortiert = Table.Sort(Korrigiert, {{"Birth Date", Order.Descending}})
in
Sortiert


werde jetzt weiter nach Case' und Daniels Vorschlag schauen
Anzeige
AW: funktionierende Lösung mit Ralfs Vorschlag
11.06.2025 22:53:24
daniel
Hi
welchen Lösungsweg könntest du denn, wenn du dich ein bisschen damit beschäftigt hast, jetzt ohne Anleitung selber erstellen?
Gruß Daniel
AW: funktionierende Lösung mit Ralfs Vorschlag
11.06.2025 22:56:46
Christian
Hallo Daniel,

ich sag mal so, da mir ja jetzt bewusst ist, das geht mit Trennung der Spalten und Prüfungen ob die einzelnen Komponenten vorhanden sind oder nicht, sicherlich am ehesten deinen.

Nur dieser Lösungsweg war mir noch nicht im Sinn als ich den Thread eröffnet habe.

Gruß
Christian
Anzeige
AW: PQ - unvollständige Geburtsdaten durch "null" ersetzen
11.06.2025 22:32:57
Christian
Hallo Daniel,

erstmal danke.

Was meinst du mit (oder Birth Date Kopie.3)?
eine Oder Bedingung macht m.e. wenig Sinn, wenn beide Bedingungen dieselbe sind?

Danke
Christian
AW: PQ - unvollständige Geburtsdaten durch "null" ersetzen
11.06.2025 22:41:24
daniel
ich hatte das auch nicht als Oder-Bedingung gemeint, das war eine Variante für dich,
dh. du kannst dich entscheiden, in den Code entweder den Wert "null" einzufügen, oder den Wert aus der Spalte Birth Date - Kopie.3 verwenden (der dann auch ein "null" enthält)
die zweite Variante wäre zu nehmen, wenn bei der ersten der Text "null" eingefügt wird und nicht null im Sinne von "kein Wert"
da war ich zu faul zum testen und hab das dir überlassen.

Gruß Daniel
Anzeige
AW: PQ - unvollständige Geburtsdaten durch "null" ersetzen
11.06.2025 22:48:36
Christian
Hallo Daniel,

naja zum Testen muss ich ja erstmal das was du schreibst nachvollziehen können und daran ist es an dem Punkt irgendwie gescheitert. Werde dann aber gleich mich wieder an die Umsetzung machen. Ich habs irgendwie so verstanden als sollte ich 2 Oder Bedingungen auf 0 überprüfen und das 2. Kopie3 wäre dann ein Tippfehler gewesen, daher meine Nachfrage.

Gruß
Christian
Anzeige
mit Daniels Vorschlag funktioniert es auch.
11.06.2025 23:08:30
Christian
let

// CSV einlesen
Quelle = Csv.Document(File.Contents("C:\Users\chris\Downloads\Geburtstage.csv"), [Delimiter=",", Columns=8, Encoding=65001, QuoteStyle=QuoteStyle.None]),
#"Höher gestufte Header" = Table.PromoteHeaders(Quelle, [PromoteAllScalars=true]),

// Spaltentypen setzen – Birth Date bleibt erstmal Text
#"Geänderter Typ" = Table.TransformColumnTypes(#"Höher gestufte Header", {
{"Position", Int64.Type},
{"Const", type text},
{"Created", type date},
{"Modified", type date},
{"Description", type text},
{"Name", type text},
{"Known For", type text},
{"Birth Date", type text}
}),

// Nicht benötigte Spalten entfernen
#"Entfernte Spalten" = Table.RemoveColumns(#"Geänderter Typ", {"Created", "Modified", "Description", "Known For"}),

// 1. Birth Date duplizieren
#"Duplizierte Spalte" = Table.DuplicateColumn(#"Entfernte Spalten", "Birth Date", "Birth Date Kopie"),

// 2. Nach Leerzeichen aufteilen
#"Geteilte Spalte" = Table.SplitColumn(#"Duplizierte Spalte", "Birth Date Kopie", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), {"Birth Date Kopie.1", "Birth Date Kopie.2", "Birth Date Kopie.3"}),

// 3. Bedingte neue Spalte: Wenn Birth Date Kopie.3 = null, dann null, sonst originaler Birth Date-Wert
#"Bedingte Spalte" = Table.AddColumn(#"Geteilte Spalte", "Birth Date Neu", each if [#"Birth Date Kopie.3"] = null then null else [#"Birth Date"], type text),

// 4. Alte Spalten entfernen
#"Entfernte Alte Spalten" = Table.RemoveColumns(#"Bedingte Spalte", {"Birth Date", "Birth Date Kopie.1", "Birth Date Kopie.2", "Birth Date Kopie.3"}),

// 5. Neue Spalte umbenennen
#"Umbenannte Spalte" = Table.RenameColumns(#"Entfernte Alte Spalten", {{"Birth Date Neu", "Birth Date"}}),

// 6. Typumwandlung in Datum
#"Umgewandelter Typ" = Table.TransformColumnTypes(#"Umbenannte Spalte", {{"Birth Date", type date}}),

// Optional: nochmal sortieren
#"Sortierte Zeilen" = Table.Sort(#"Umgewandelter Typ", {{"Birth Date", Order.Descending}})
in
#"Sortierte Zeilen"


DAnke auch dir, Daniel
Anzeige
AW: PQ - unvollständige Geburtsdaten durch "null" ersetzen
11.06.2025 22:51:53
daniel
deswegen hatte ich das ja in Klammern gesetzt, um zu zeigen dass es nicht zum Code selbst gehört.
außerdem, schau dir mal die Position an um die es geht. Ein Oder hätte ja vorne beim WENN stehen müssen, also in der Bedingungsprüfung nicht beim Ausgabewert (Dann). dort macht es ja keinen Sinn.

Gruß Daniel
Anzeige
AW: PQ - unvollständige Geburtsdaten durch "null" ersetzen
11.06.2025 22:53:46
Christian
es war halt ein Misverständnis, ich stand da wohl auch auf dem Schlauch, sorry aber ist ja jetzt geklärt
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18