2015-04-01 235 views
0

我尝试在Excel PowerQuery使等于操作,以SQL操作:更改基于另一个列PowerQuery列

SET ColumnA = "Max" WHERE ColumnC = "George" 

我知道我可以CREATEColum n,其中所涉及的M表达

if ColumnA = "Max" then "George" Else "something" 

但我不喜欢创建第三列,因为我一次又一次地做。

任何想法我可以做到这一点?

回答

1

你可以连续使用if语句在一起,就像

if [ColumnA] = "Max" then "George" else if [ColumnA] = "Jane" then "Janet" else "something"

您还可以创建查找名称,然后使用备用名,如果它存在的记录。这可以通过在一个查询中创建像这样的记录来完成:

let 
    Source = [Max = "George", Jane = "Janet"] 
in 
    Source 

让该查询称为名称。然后,当您添加自定义列,您可以使用此表达式:

if Record.HasFields(Names, [ColumnA]) then Record.Field(Names, [ColumnA]) else "something"

希望有所帮助。

+0

谢谢,这两个都是好主意,并会在其他情况下帮助我。此刻,我必须一次又一次地将ColumA摧毁,但不能一步到位。 – Gerd 2015-04-02 15:09:20

+0

我设置了一个初始值,经过一些步骤后我必须更新ColumnA,然后再执行一些步骤,我必须再次更新它。这个列对我来说是一个状态字段,如果我的转换确实导致了一些特殊情况,我必须更新一些行的状态。 – Gerd 2015-04-02 15:16:22

+0

如果您必须为多个步骤执行此操作,则可以对每个步骤使用'Table.TransformColumns'来仅修改ColumnA。例如,第二个建议可以变成: 'Table.TransformColumns(stepName,{“ColumnA”,每个Record.HasFields(Names,_)然后RecordField。(Names,_)else“something”})'。这将更改ColumnA中的单元格以使用备用名称,并且不会创建新列。您可以在单独的查询中将其作为一个函数,然后多次调用它来简化代码。 – 2015-04-02 23:04:13