强大的查询-替换新列中的文本

时间:2018-12-12 11:11:23

标签: excel powerquery

我是Excel中Power Query的新手,我的问题是:

我有一个日期为“ 09-Feb-17 A”的文本列。要删除文本“ A”并在新列(自定义列?)中填充日期信息,我使用了以下代码:

= Table.AddColumn(#"Changed Type", "Start Date", each Replacer.ReplaceText([Start], " A",""))

问题是某些日期的格式正确,即没有“ A”。对于那些日期,我得到一个错误:

  

Expression.Error:我们无法将值#date(2019,1,11)转换为   键入文本。细节:       价值= 11/01/2019       类型=类型

在功率查询中有什么方法可以解决此问题?

谢谢。

2 个答案:

答案 0 :(得分:0)

也许

  • 将列数据类型更改为Text(日期->日期时间)
  • 提取space之前的字符串部分
  • 可选将列数据类型更改为Date

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Dates", type text}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each Text.BeforeDelimiter([Dates]," ")),
    #"Changed Type1" = Table.TransformColumnTypes(#"Added Custom",{{"Custom", type date}}),
    #"Removed Columns" = Table.RemoveColumns(#"Changed Type1",{"Dates"})
in
    #"Removed Columns"

答案 1 :(得分:0)

您可以使用try otherwise处理两种数据类型:

= Table.AddColumn(#"Changed Type", "Start Date", each try Date.FromText(Replacer.ReplaceText([Start], " A","")) otherwise DateTime.Date([Start]), type date)

或者这样,它将提取第一个空格之前的日期,而不管后面跟随哪个(或多少个)字符:

= Table.AddColumn(#"Changed Type", "Start Date", each try Date.FromText(Text.BeforeDelimiter([Start], " ")) otherwise DateTime.Date([Start]), type date)