A family of Microsoft spreadsheet software with tools for analyzing, charting, and communicating data.
Hi @Robert Judge,
Earlier today I shared with you a solution based on Excel formulas. Now I’m sending you a second version, implemented in Power Query, which performs the same date‑normalization logic but in a more automated and structured way.
Below you will find the full M‑code. It is ready to paste directly into the Advanced Editor of Power Query:
Hope this helps.
IlirU
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
ConvertToText = Table.TransformColumnTypes(Source, {{"Date", type text}}),
SplitInitialParts = Table.SplitColumn(ConvertToText, "Date", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), {"CoreDate", "Extra1", "Extra2"}),
KeepCoreDate = Table.SelectColumns(SplitInitialParts, {"CoreDate"}),
NormalizeSeparatorDash = Table.ReplaceValue(KeepCoreDate, "/", "-", Replacer.ReplaceText, {"CoreDate"}),
SplitToDMY = Table.SplitColumn(NormalizeSeparatorDash, "CoreDate", Splitter.SplitTextByDelimiter("-", QuoteStyle.Csv), {"DayPart", "MonthPart", "YearPart"}),
DetectMonth = Table.AddColumn(SplitToDMY, "DetectedMonth", each if Number.FromText([MonthPart]?) <= 12 then [MonthPart] else [DayPart]),
DetectDay = Table.AddColumn(DetectMonth, "DetectedDay", each if Number.FromText([MonthPart]?) > 12 then [MonthPart] else [DayPart]),
DetermineFinalDay = Table.AddColumn(DetectDay, "DayFinal", each if Text.Length([DetectedDay]) = 4 then [YearPart] else [DetectedDay]),
DetermineFinalYear = Table.AddColumn(DetermineFinalDay, "YearFinal", each if Text.Length([YearPart]) < 4 then [DayPart] else [YearPart]),
BuildNormalizedDate = Table.AddColumn(DetermineFinalYear, "NormalizedDate", each Text.PadStart(Text.From([DayFinal]), 2, "0") & "/" & Text.PadStart(Text.From([DetectedMonth]), 2, "0") & "/" & Text.From([YearFinal]), type text),
FinalOutput = Table.SelectColumns(BuildNormalizedDate, {"NormalizedDate"})
in
FinalOutput