我有一个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)))

#1楼 票数:1

如果我理解正确,则输入字符串中的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

这使:

查询输出

#2楼 票数:0 已采纳

在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)

  ask by LeroyBrown translate from so

未解决问题?本站智能推荐:

1回复

在 Power-Query 中枚举文本值

我的表中有一个列,其中包含一些文本值 ( input ),我想将其转换为每个唯一文本值的数字 ( output ),以便我可以进行一些回归分析: 输入 输出 AOP 1 自动售货机
1回复

在Excel 2016 Power Query中创建后如何在Excel 2013中修改查询

我使用Power Query在Excel 2016中创建了一个工作簿。 我正在使用代码来更改查询。 但是我也希望能够在Excel 2013中运行它。 如何修改代码以访问查询? 这是我的代码在Excel 2016中有效,但在2013年或更早的版本中不起作用。 这段代码可以在Ex
1回复

Excel:合并来自 2 个表的数据

我正在努力实现一些我认为很简单但我自己无法弄清楚的东西。 我想要实现的是产品 ID + 文件名的完整列表。 每个产品 ID 的所有文件名都相同。 表 1:产品 ID 表 2:文件名 目标:为每个产品 ID + 文件名组合创建一条记录 提前致谢。
2回复

在Excel中从表到2列

我想从一个表中创建两列。 正确的解决方案是这样(这将是2个单独的列): 从此表: 该表比这更长,这是一个示例。 你能帮我解决这个问题吗? 谢谢Gergo
1回复

如何在没有唯一键列的情况下将附加列锁定到从Excel 2016中的Power Query导入的行?

我在Excel 2016中使用Power Query将来自同一文件夹系统中的12个不​​同工作簿的数据合并到一个表中,并且需要在主表中添加附加列以跟踪每一行的状态。 但是,当我刷新数据时,“状态”列不会跟随其最初应用到的行。 我已经看过[ 在自定义列中手动插入文本,并且应该在刷新报表时可
1回复

关闭并加载时出现EXCEL 2016 Power查询错误

在Excel 2016中,当我在电源查询编辑器中创建一个简单查询(从table1中选择*)时,它将运行Ok并加载所有数据。 但是,当选择关闭并加载时,只会得到几行并出现错误: “错误初始化数据源”
1回复

使用Power查询将新数据添加到表的末尾

我有使用电源查询将数据从sql server 2012提取到excel的查询。 但是,当我在查询中更改日期范围时,我想将新数据拉入表中并将其存储在先前拉出的数据下方,而不删除它。 到目前为止,我发现的只是“刷新”按钮,它将使用新日期重新运行我的查询,但替换旧日期。 有没有办法做到这一点?
1回复

仅在 Excel 数据透视表或 Power 查询中按连接唯一字符串分组

我有这样的表格和输出:我试过公式 Concatnatex 我曾在数据透视表中尝试过此功能: =CONCATATENATEX(Table1,[sender name]," , ")。 但它也包括来自发件人姓名的重复值。 我们可以在这个公式中以某种方式添加 distinct 吗? 我希望在与父列的连