我有一个包含多个表的Excel 2016文件,这些表是我使用Power Query连接在一起的。这些表有一些日期字段是以文本形式填充的(例如,"1022018“=2018年1月2日),我需要将它们转换为日期。我为每个都添加了一列,可以很好地转换数据,但每次刷新查询时,新的列都会消失。
我打开Power Query并尝试添加自定义列,但我在Excel中创建的公式不起作用,它需要用M编写。我没有找到一种简单的转换为M的方法或使用Excel公式创建列的其他方法。
有什么办法可以做到这一点吗?
仅供参考:公式:=IF(LEN([@DOBstring])=7,DATE(RIGHT([@DOBstring],4),LEFT([@DOBstring],1),MID([@DOBstring],2,2)),DATE(RIGHT([@DOBstring],4),LEFT([@DOBstring],2),MID([@DOBstring],3,2)))
发布于 2019-09-19 17:59:41
在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)发布于 2019-09-19 23:27:38
如果我没理解错的话,输入字符串中的month不是零填充的(导致输入字符串的长度为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这就给出了:

https://stackoverflow.com/questions/58001178
复制相似问题