首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Excel 2016中使用Power Query创建的合并表中添加列?

如何在Excel 2016中使用Power Query创建的合并表中添加列?
EN

Stack Overflow用户
提问于 2019-09-19 05:50:22
回答 2查看 161关注 0票数 0

我有一个包含多个表的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)))

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-19 17:59:41

在Power Query中,使用以下公式创建自定义列:

代码语言:javascript
运行
复制
= 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的文本。根据您的区域设置,在将此自定义列格式化为日期时,会将其转换为正确的日期值。

否则,您将需要此公式:

代码语言:javascript
运行
复制
= 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)
票数 0
EN

Stack Overflow用户

发布于 2019-09-19 23:27:38

如果我没理解错的话,输入字符串中的month不是零填充的(导致输入字符串的长度为7或8)。

创建一个像下面这样的小函数可能是值得的,它将处理不同的长度,然后尝试根据假设的字符位置解析日期。

代码语言:javascript
运行
复制
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,

然后,您可以在转换现有列或添加新列时调用它。举个例子:

代码语言:javascript
运行
复制
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

这就给出了:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58001178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档