1

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

这是一个示例:
2017 年 3 月 24 日上午 11:14:41 - 状态NFU
的 EMD 2017 年 3 月 30 日 2017 年 3 月 30 日上午 10:58:03 - CLD 每个接待员 GM 不可用NFU 04-13-2017
4/ 13/2017 11:10:15 AM - CLD PER 接待员将提供信息NFU4/27
2017 年 4 月 27 日 9:02:20 AM - 带有 90 天邮票的 MLD INV 2017 年4 月 27 日上午
9:15:03 - PER代表将
致电客户付款2017 年 4 月 27 日上午 11:03:46 - NFU 05/5每个代表客户
混淆 2017 年 5 月 5 日上午 8:55:17 - NFU 2017 年 5 月 9 日 CRP 每个代表检查是MLD 17 年 5 月 2 日

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

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

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

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

  • 在该字段中查找“ NFU ”的最后一个实例
  • 提取紧跟最后一个“ NFU ”实例的所有文本,包括“ NFU ”和日期之间的空格(如果存在)。
    此时,结果应该是:
    " 5/9/2017 CRP PER REP CHECK WAS MLD 5/2/17"
  • 删除字符串开头的任何空白。
    此时,结果应该是:
    "5/9/2017 CRP PER REP CHECK WAS MLD 5/2/17"
  • 查找不是0-9, /, or的第一个字符-(或字符串的结尾,以先到者为准)
  • 如果合适,在第一个非日期字符处截断字符串。
    此时,结果应该是:
    "5/9/2017"
  • 最后,尝试将生成的文本格式化为Date类型/格式,并作为 PowerQuery 自定义列的结果返回。

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

4

2 回答 2

2

我猜你的意思是 Power Query Text函数。这些确实有些限制,但 Power Query 的函数库中还有很多其他选项:在这种情况下,List 函数可以提供帮助。

顺便说一句:我检查了“NFU”以避免“CO NFU SION”(您的示例中的最后一行)。

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
于 2017-05-11T17:50:25.047 回答
-1

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

于 2017-05-11T15:34:10.113 回答