如何向Excel 2016中使用Power Query创建的合并表中添加列?
我有一个Excel 2016文件,其中有几个表,我使用Power Query将它们连接在一起。表中有一些日期字段填充为文本,例如1022018=2018年1月2日,我需要将它们转换为日期。我为每个添加了一列,可以很好地转换数据,但每次刷新查询时,新列都会消失 我打开了Power Query并尝试添加自定义列,但我在Excel中创建的公式不起作用,需要用M编写。我没有找到一种简单的转换为M的方法,也没有找到使用Excel公式创建列的其他方法 有没有办法做到这一点如何向Excel 2016中使用Power Query创建的合并表中添加列?,excel,powerquery,Excel,Powerquery,我有一个Excel 2016文件,其中有几个表,我使用Power Query将它们连接在一起。表中有一些日期字段填充为文本,例如1022018=2018年1月2日,我需要将它们转换为日期。我为每个添加了一列,可以很好地转换数据,但每次刷新查询时,新列都会消失 我打开了Power Query并尝试添加自定义列,但我在Excel中创建的公式不起作用,需要用M编写。我没有找到一种简单的转换为M的方法,也没有找到使用Excel公式创建列的其他方法 有没有办法做到这一点 供参考的公式是:=IFLEN[@D
供参考的公式是:=IFLEN[@DOBstring]=7,DATERIGHT[@DOBstring],4,LEFT[@DOBstring],1,MID[@DOBstring],2,2,DATERIGHT[@DOBstring],4,LEFT[@DOBstring],2,MID[@DOBstring],3,2在Power Query中,使用以下公式创建自定义列:
= if Text.Length([Date])=7 then
Text.Middle([Date],1,2)
& "-"
& "0"
& Text.Start([Date], 1)
& "-"
& Text.End([Date],4)
else
Text.Middle([Date],2,2)
& "-"
& Text.Start([Date], 2)
& "-"
& Text.End([Date],4)
这将生成格式为dd mm yyyy的文本。根据您的区域设置,将此自定义列格式化为日期时,此值将转换为正确的日期值
否则,您将需要以下公式:
= if Text.Length([Date])=7 then
"0"
& Text.Start([Date], 1)
& "-"
& Text.Middle([Date],1,2)
& "-"
& Text.End([Date],4)
else
Text.Start([Date], 2)
& "-"
& Text.Middle([Date],2,2)
& "-"
& Text.End([Date],4)
如果我理解正确,输入字符串中的月份不是零填充的,这会导致输入字符串的长度为7或8 可能值得创建一个如下所示的小函数,它将处理不同的长度,然后尝试根据假定的字符位置解析日期
ParseDate = (someText as text) as date =>
let
zeroPadded = Text.End("0" & someText, 8),
yearParsed = Text.End(zeroPadded, 4),
monthParsed = Text.Start(zeroPadded, 2),
dayParsed = Text.Middle(zeroPadded, 2, 2),
dateParsed = #date(Number.From(yearParsed), Number.From(monthParsed), Number.From(dayParsed))
in dateParsed,
然后,您可以在转换现有列或添加新列时调用它。举个例子:
let
ParseDate = (someText as text) as date =>
let
zeroPadded = Text.End("0" & someText, 8),
yearParsed = Text.End(zeroPadded, 4),
monthParsed = Text.Start(zeroPadded, 2),
dayParsed = Text.Middle(zeroPadded, 2, 2),
dateParsed = #date(Number.From(yearParsed), Number.From(monthParsed), Number.From(dayParsed))
in dateParsed,
someTable = Table.FromColumns({{"1022018", "05242019", "12282026"}}, type table [toParse = text]),
transformedColumn = Table.TransformColumns(someTable, {{"toParse", ParseDate, type date}}),
addedColumn = Table.AddColumn(someTable, "parsed", each ParseDate([toParse]), type date)
in
addedColumn
其中: