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

DATEDIF in PQ

Forumthread: DATEDIF in PQ

DATEDIF in PQ
05.11.2024 08:19:07
Christian
Hallo,

ich versuche irgendwie die beiden Formeln =DATEDIF(G2;D2;"Y") und =DATEDIF(G2;D2;"YD") in Powerquery umzusetzen,
versuche es hiermit, aber die Ergebnisse stimmen vorne und hinten nicht mit den Formelergebnissen überein, vor allem bei der zweiten Formel
hat da jemand eine funktionierende Idee?

let

Quelle = Excel.CurrentWorkbook(){[Name="einzeln"]}[Content],
#"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Spalte1", type text}, {"Spalte2", type text}, {"Spalte3", type date}, {"Spalte4", type text}, {"Spalte5", type text}, {"Spalte6", type date}, {"Spalte7", type date}, {"Spalte8", Int64.Type}}),
#"Entfernte Spalten" = Table.RemoveColumns(#"Geänderter Typ",{"Spalte7"}),
#"Gefilterte Zeilen" = Table.SelectRows(#"Entfernte Spalten", each [Spalte8] = 30),

// Hinzufügen der Jahre Differenz
#"Jahre Unterschied Hinzugefügt" = Table.AddColumn(#"Gefilterte Zeilen", "Jahre Unterschied", each
let
geburtsdatum = [Spalte6], // entspricht G2
berechnungPer = [Spalte3] // entspricht D2
in
if geburtsdatum = null or berechnungPer = null then null else
Date.Year(berechnungPer) - Date.Year(geburtsdatum) -
(if Date.Month(berechnungPer) Date.Month(geburtsdatum) or
(Date.Month(berechnungPer) = Date.Month(geburtsdatum) and Date.Day(berechnungPer) Date.Day(geburtsdatum))
then 1 else 0), Int64.Type
),

// Hinzufügen der verbleibenden Tage nach vollen Jahren
#"Fehlende Tage Hinzugefügt" = Table.AddColumn(#"Jahre Unterschied Hinzugefügt", "Fehlende Tage", each
let
geburtsdatum = [Spalte6], // entspricht G2
berechnungPer = [Spalte3] // entspricht D2
in
if geburtsdatum = null or berechnungPer = null then null else
let
totalDays = Duration.Days(berechnungPer - geburtsdatum),
jahre = Date.Year(berechnungPer) - Date.Year(geburtsdatum) -
(if Date.Month(berechnungPer) Date.Month(geburtsdatum) or
(Date.Month(berechnungPer) = Date.Month(geburtsdatum) and Date.Day(berechnungPer) Date.Day(geburtsdatum))
then 1 else 0)
in
totalDays - (jahre * 365), Int64.Type
)
in
#"Fehlende Tage Hinzugefügt"
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Das funktioniert...
05.11.2024 18:07:53
Christian
Hallo Case,

erstmal danke für deine Hilfe, auf jedenfall schonmal treffsicherer als das was ich hatte.
Aber es gibt immer noch eine Menge an Daten, wo sich die Ergebnisse deines Codes und die der Datedif Formel unterscheiden, ohne dass ich jetzt weiß ob dein Code oder die Formel stimmt.

3 zufällige Beispiele

differenz zwischen 1.1.44 und 15.7.71 laut Code 27/195 laut Formel 27/196
differenz zwischen 26.11.46 und 31.5.72 laut Code 25/187 laut Formel 25/186
differenz zwischen 16.1.43 und 8.9.72 laut Code 29/236 laut Formel 29/235

3 übereinstimmende Beispiele
differenz zwischen 28.9.34 und 17.1.59 beides 24/111
differenz zwischen 15.3.43 und 18.4.68 beides 25/34
differenz zwischen 26.3.44 und 25.1.69 beides 25/34

Woran könnte das liegen?

habe mit diesem Code getestet

let

// Schritt 1: Die Daten aus der Excel-Tabelle importieren und die Datentypen festlegen
Quelle = Excel.CurrentWorkbook(){[Name="einzeln"]}[Content],
TypG = Table.TransformColumnTypes(Quelle,{{"Spalte1", type text}, {"Spalte2", type text}, {"Spalte3", type date}, {"Spalte4", type text}, {"Spalte5", type text}, {"Spalte6", type date}, {"Spalte7", type datetime}, {"Spalte8", Int64.Type}}),

// Schritt 2: Entfernen nicht benötigter Spalten
#"Entfernte Spalten" = Table.RemoveColumns(TypG,{"Spalte7"}),

// Schritt 3: Filter für die Zeilen basierend auf Spalte8
#"Gefilterte Zeilen" = Table.SelectRows(#"Entfernte Spalten", each [Spalte8] = 30),

// Schritt 4: Berechnung der Jahre zwischen Spalte6 (Geburtsdatum) und Spalte3 (Berechnungsdatum)
HinzuSJ = Table.AddColumn(#"Gefilterte Zeilen", "Jahre", each
let
JahrDiff = Date.Year([Spalte3]) - Date.Year([Spalte6]), // Jahrdifferenz
// Überprüfen, ob der Geburtstag in diesem Jahr schon stattgefunden hat
GeburtstagIstVorhanden = Date.From([Spalte3]) Date.From(Date.AddYears([Spalte6], JahrDiff))
in
if GeburtstagIstVorhanden then JahrDiff - 1 else JahrDiff // Anpassen der Jahrdifferenz
),

// Schritt 5: Berechnung der verbleibenden Tage
HinzuST = Table.AddColumn(HinzuSJ, "Tage", each
let
// Berechnung des nächsten Geburtstags im aktuellen Jahr
NaechsterGeburtstag = Date.AddYears([Spalte6], [Jahre]),
// Berechnung der verbleibenden Tage bis zum nächsten Geburtstag
VerbleibendeTage = Duration.Days([Spalte3] - NaechsterGeburtstag)
in
if VerbleibendeTage 0 then 0 else VerbleibendeTage // Sicherstellen, dass negative Werte auf 0 gesetzt werden
)
in
HinzuST



Anzeige
3. übereinstimmendes Bsp ist 24/305 owt
05.11.2024 18:10:48
Christian
Also ich habe...
05.11.2024 20:13:29
Case
Moin Christian, :-)

… das in meiner Beispieldatei angepasst, da es sein kann, dass es zu negativen Ergebnissen kommt, wenn Daten1 ein späteres Datum im Jahr als Daten2 hat. Achte auch darauf, dass du das gleiche Format für deine Daten hast.

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

Servus
Case
Anzeige
AW: Also ich habe...
06.11.2024 15:22:01
Christian
Hallo Case,

vielen DAnk

Christian
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige