2016-11-30 82 views
0
循環

我試圖運行PowerBi使用PowerQuery以下計算:在PowerQuery

"Service1 Revenue"*"Service1 Rating" + "Service2 Revenue"*"Service2 Rating" + ... 

本數據來源於這兩個表:

╭───╥────────────┬─────────────╮ 
│ 1 ║ Service │ Revenue │ 
╞═══╬════════════╪═════════════╡ 
│ A ║ Service 1 │ 10   │ 
│ B ║ Service 2 │ 100   │ 
│ C ║ etc  | etc   │ 
└───╨────────────┴─────────────┘ 

╭───╥────────────┬─────────────╮ 
│ 2 ║ Service │ Rating │ 
╞═══╬════════════╪═════════════╡ 
│ A ║ Service 1 │ 1   │ 
│ B ║ Service 2 │ 5   │ 
│ C ║ etc  | etc   │ 
└───╨────────────┴─────────────┘ 

我無法弄清楚如何寫循環按每項服務執行計算,然後將所有結果相加。

在Excel中,我猜vba循環會有效,但不知道如何在這裏做到這一點。

+0

我不確定Power Query是做這種計算的最佳位置。兩個表格2是否分開查詢?它們來自相同的數據源還是來自不同的數據源?如果數據源是一個數據庫(例如),則可以使用SQL將這些表連接在一起,然後再引入Power Query中,這將使您的計算變得簡單明瞭。如果這不起作用,我會考慮加載爲2個單獨的表格,將它們加入到您的數據模型中,然後使用DAX進行計算。但具體情況取決於數據和表格之間的關係。 – Leonard

+0

不同的數據源。 1來自SQL Server Analysis服務,第二個(評級)來自簡單的Excel表單。表格按服務鏈接。 – cmplieger

回答

0

這裏有一些步驟,你可以遵循:

  1. 合併在一起使用合併查詢查詢查詢編輯器功能區按鈕。
  2. 選擇其他表格,單擊兩個表格上的服務列,然後單擊確定。
  3. 單擊新列名稱旁邊的展開按鈕,然後選擇收入或評級列。點擊確定。
  4. 單擊「評級」列,然後控制並單擊「收入」列,然後右鍵單擊列並選擇「產品」。您也可以通過添加列|中的功能區來訪問它標準|乘法。如果產品上下文菜單項不可用(如果您使用的是舊版本的Power Query),則還可以添加公式爲[Rating] * [Revenue]的自定義列。
  5. 您可以在新的乘法列上向下鑽取並直接修改查詢,或者使用公式欄旁邊的fx按鈕添加新的自定義步驟,並在此公式欄中添加類似如下內容:List.Sum(previous_step_name[new_column_name])
0

在乘法(上一個答案的第4步)之後,您可以選擇服務列,選擇分組方式,添加新的字段名稱,選擇總和,並將乘積值與列相乘。

來自Excel的完整代碼(想象SQLData來自SQL);每一步後我調整步驟名稱:

let 
    Source = Excel.CurrentWorkbook(){[Name="SQLData"]}[Content], 
    SQLData = Table.TransformColumnTypes(Source,{{"Service", type text}, {"Revenue", Int64.Type}}), 
    Source2 = Excel.CurrentWorkbook(){[Name="Ratings"]}[Content], 
    Ratings = Table.TransformColumnTypes(Source2,{{"Service", type text}, {"Rating", Int64.Type}}), 
    Joined = Table.NestedJoin(SQLData,{"Service"},Ratings,{"Service"},"NewColumn",JoinKind.LeftOuter), 
    Expanded = Table.ExpandTableColumn(Joined, "NewColumn", {"Rating"}, {"Rating"}), 
    Multiplication = Table.AddColumn(Expanded, "Inserted Multiplication", each List.Product({[Revenue], [Rating]}), Int64.Type), 
    Renamed = Table.RenameColumns(Multiplication,{{"Inserted Multiplication", "Rated Revenue"}}), 
    Grouped = Table.Group(Renamed, {"Service"}, {{"Rated Revenue by Service", each List.Sum([Rated Revenue]), type number}}) 
in 
    Grouped 
0

如果我理解正確你的問題,你需要一個總計對收入*評級。然後你可以使用下面的代碼:

let 
     Source1 = /* Put your code fetching data from DB instead of #table()*/ 
       #table({"1", "Service", "Revenue"}, {{1, "Service1", 10}, {2, "Service2", 100}}), 
     Source2 = /*This is your Excel table. Put respective Excel.CurrentWorkbook() instead of #table()*/ 
       #table({"2", "Service", "Rating"}, {{1, "Service1", 1}, {2, "Service2", 5}}), 

     JoinTables = Table.Join(Source1, {"Service"}, Source2, {"Service"}, JoinKind.Inner), 
     AddProduct = Table.AddColumn(JoinTables, "Product", each [Revenue]*[Rating]), 
     Group = Table.Group(AddProduct, {}, {{"Grand Total", each List.Sum([Product]), type number}}) 
    in 
     Group