繁体   English   中英

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

How can I add a column to a merged table created with Power Query in Excel 2016?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

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

2 个回复

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

可能值得创建一个小的 function,如下所示,它将处理不同的长度,然后尝试根据假定的字符位置解析日期。

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

这使:

查询输出

在 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)
3 Excel-Power Query 2016

我从两个表中获取数据。 客户(包含客户ID和订单/资金总额) 订单(包含客户ID和每个订单) 我创建了一个超级查询,然后选择“合并查询为新”选项。 选择匹配的列(客户ID),然后选择以下选项:左外(全部从第一个开始,从第二个开始匹配=>全部从客户表开始,与订单表匹 ...

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

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

5 Excel 2016加载项我如何更改列格式

我有一个Excel 2016加载项,我想将几​​列的格式设置为“日期”(mm-dd-yyyy格式)并将两列居中。 如何在Excel 2016 JavaScript模型中执行此操作? 另外,我了解2016年的Office模型不允许您更改列宽。 有人为此工作吗? 谢谢乔治 ...

8 表列合并查询

我做了一个表查询是 现在想省略正确答案列,并在 answer1 列中做所有正确的答案,在 answer2,answer3,answer4 中做其他 3 个错误的答案。 但问题目前正确答案可能是四个中的任何一个,所以我无法合并 作为示例表就像 你可以在答案2的第一行看到正确答案,第二行的正确答案是 ...

9 将Excel Power查询表列转换为字符串

我正在尝试使功率查询更动态,目前,我使用存储过程来请求数据,其中包括部分编码为硬编码到查询中的参数 我已经在Excel表格的列表中拥有单个零件号 我该如何将具有4行的该列转换为具有单个管道分隔行的列(就像在SQL查询中使用的那样) ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM