2015-04-01 193 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