PowerQuery (M):如何从大文本字段中提取日期?

PowerQuery (M): How can I extract a date from a large text field?

我的 table 有一个名为 Remarks 的文本列,通常包含大量文本。

举个例子:
2017 年 3 月 24 日 11:14:41 AM - EMD FOR STATUS NFU 3/30/17
2017 年 3 月 30 日 10:58:03 AM - CLD 每个接待员 GM 不可用 NFU 04-13-2017
2017 年 4 月 13 日 11:10:15 上午 - 每位接待员的 CLD 将提供信息 NFU4/27
4/27/2017 9:02:20 AM - MLD INV WITH 90 DAY STAMP
2017 年 4 月 27 日 9:15:03 上午 - 每个代表将致电客户付款
2017 年 4 月 27 日 11:03:46 上午 - NFU 05/5每个代表客户混淆
2017 年 5 月 5 日 8:55:17 AM - NFU 2017 年 9 月 5 日 CRP PER REP CHECK 是 MLD 5/2/17

所有这些文本将被塞进一个字段中,我需要从该字段中提取最后一个 NFU 日期以用于计算和过滤。

在上面的示例中,我想从最后一行中提取日期 5/9/2017
但如您所见,日期可以是任何格式,可以在字段中的任何位置。

我认为 Excel 可以将文本解析为上述任何格式的日期值(如果不能,我将以其他方式处理 - 员工培训等)

我需要弄清楚如何使用 PowerQuery 的主要事情是:

查看可用的 PowerQuery 字符串函数,我不确定这是否可行。

像 =RIGHT(A1,LEN(A1)-(FIND("NFU",A1,1)-1)) 这样的简单公式可以提取 NFU 旁边的字符串。假设文本位于单元格 A1 中。 但需要进一步深入了解您的其他要求。

我猜你指的是 Power Query Text 函数。这些确实有些受限,但 Power Query 的函数库中还有许多其他选项:在这种情况下,List 函数可以派上用场。

顺便说一句:我检查了“NFU”以避免"CONFUSION"(你的例子中的最后一行)。

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    Typed = Table.TransformColumnTypes(Source,{{"example", type text}}),
    LastNFU = Table.AddColumn(Typed, "LastNFU", each Text.PositionOf([example]," NFU",Occurrence.Last), Int64.Type),
    AfterNFU = Table.AddColumn(LastNFU, "AfterNFU", each if [LastNFU] = -1 then null else Text.Range([example],[LastNFU]+4)),
    Trimmed = Table.TransformColumns(AfterNFU,{{"AfterNFU", Text.Trim}}),
    TextToList = Table.TransformColumns(Trimmed,{{"AfterNFU", each if _ = null then {} else Text.ToList(_)}}),
    ListFirstN = Table.TransformColumns(TextToList,{{"AfterNFU", each List.FirstN(_, each Text.Contains("01234567890-/",_))}}),
    TextCombine = Table.TransformColumns(ListFirstN, {"AfterNFU", Text.Combine, type text}),
    Date = Table.TransformColumnTypes(TextCombine,{{"AfterNFU", type date}}, "en-US"),
    Renamed = Table.RenameColumns(Date,{{"AfterNFU", "Date"}}),
    Removed = Table.RemoveColumns(Renamed,{"LastNFU"})
in
    Removed