Power Query 自定义列查找和替换

Posted

技术标签:

【中文标题】Power Query 自定义列查找和替换【英文标题】:Power Query Custom Column Find and Replace 【发布时间】:2022-01-24 01:01:06 【问题描述】:

我正在使用 Excel Power Query,我正在尝试在我的数据中创建一个列,该列本质上是使用另一个表中的列批量查找/替换一个表中的列。

对于上下文 - 我有一个按员工 ID 显示销售信息的表,按天(称为销售)。员工只能分配 1 个活动 ID。但是,在某些情况下,员工的 ID 可能会更改。截至目前,当这种情况发生时,他们的旧 ID 中的所有销售额都不会计入该员工(直到我们进行手动 vlookup,但这非常耗时,并且必须在发生这种情况时每天进行)

我有一个批量名册表,其中显示了每个员工的当前 ID,以及他们的历史 ID(如果他们有的话)。我想要做的是,如果销售数据中的员工 ID = 员工名册中的历史 id,然后将其替换为当前 id。

我尝试在销售表中添加一个自定义列:

 =IF [sales clerk] = #Roster[HistoricID2] THEN #Roster[CurrentID] ELSE [sales clerk]

但它只是在 100% 的时间内退回销售员。如果有人对此有任何经验,我们将不胜感激!

【问题讨论】:

【参考方案1】:

您要做的是从销售信息表开始,然后主页...合并查询 .. 使用左外连接在批量名册表中合并,通过单击它们链接如下图所示的 ID

然后使用合并列顶部的箭头展开 [x] 除旧 ID 之外的所有字段

如果您当前的 ID 不在批量花名册表中,那么您的结果会出现一些空值。如果是这样,添加列..自定义列...

= if [new]=null then [id] else [new]

然后右键删除辅助列

下面的示例代码假定 Salesino 具有列 id 并且 MassRosterTable 具有列 oldnew (根据图像)

let Source = Excel.CurrentWorkbook()[Name="Table2"][Content],
#"Merged Queries" = Table.NestedJoin(Source,"id",MassRosterTable,"old","MassRosterTable",JoinKind.LeftOuter),
#"Expanded MassRosterTable" = Table.ExpandTableColumn(#"Merged Queries", "MassRosterTable", "new", "new"),
#"Added Custom" = Table.AddColumn(#"Expanded MassRosterTable", "FinalID", each if [new]=null then [id] else [new]),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom","new")
in #"Removed Columns"

【讨论】:

这对你有用吗?

以上是关于Power Query 自定义列查找和替换的主要内容,如果未能解决你的问题,请参考以下文章

在自定义列中编辑简单运算公式(Power Query 之 M 语言)

powerquery的sum公式

Power Query初识

Power Query - 替换新列中的文本

M语言的写改删(Power Query 之 M 语言)

在 Power Query 中获取多个日期范围(和 if 语句)内的输出