簡體   English   中英

Excel-Power Query 2016

[英]Excel - Power Query 2016

我從兩個表中獲取數據。

客戶(包含客戶ID和訂單/資金總額)

訂單(包含客戶ID和每個訂單)

在此處輸入圖片說明

我創建了一個超級查詢,然后選擇“合並查詢為新”選項。 選擇匹配的列(客戶ID),然后選擇以下選項:左外(全部從第一個開始,從第二個開始匹配=>全部從客戶表開始,與訂單表匹配)。 然后,我擴展了查詢的最后一列,以包含我想要從Order表中得到的內容,從而得到了下面的表格。 右邊的是我所追求的。 問題在於資金額已經是每個客戶的總和。 我不需要分解每個訂單的價值。 我仍然需要顯示的訂單,但不需要它們的值(僅是每個客戶的總數)。 是否可以像下面的右圖一樣做到這一點? 否則,總數將遙遙無期。

在此處輸入圖片說明

我認為您要嘗試的是僅將“ Customer列中每個值的第一個實例加入。 似乎沒有允許您執行此操作的功能或GUI元素(我查看了Power Query M參考文檔 ,也許我錯過了一些東西)。

為了復制您的數據,我從一些表開始(左表命名為Customers ,右表命名為Orders ):

我的桌子

然后,我使用下面的M代碼(前幾行只是為了從工作表中獲取表格):

let
    customers = Excel.CurrentWorkbook(){[Name = "Customers"]}[Content],
    orders = Excel.CurrentWorkbook(){[Name = "Orders"]}[Content],
    merged = Table.NestedJoin(orders, {"CUSTOMER"}, customers, {"CUSTOMER"}, "merged", JoinKind.LeftOuter),
    indexColumn = Table.AddIndexColumn(merged, "Temporary", 0, 1),
    indexes =
        let
            uniqueCustomers = Table.Distinct(Table.SelectColumns(indexColumn, {"CUSTOMER"})), // Want to keep as table
            listOfRecords = Table.ToRecords(uniqueCustomers),
            firstOccurenceIndexes = List.Accumulate(listOfRecords, {}, (listState, currentItem) =>
                List.Combine({listState, {Table.PositionOf(indexColumn, currentItem, Occurrence.First, "CUSTOMER")}})
            )
        in
            firstOccurenceIndexes,
    expandSelectively =
        let
            toBoolean = Table.TransformColumns(indexColumn, {{"Temporary", each List.Contains(indexes, _), type logical}}),
            tableOrNull = Table.AddColumn(toBoolean, "toExpand", each if [Temporary] then [merged] else null),
            dropRedundantColumns = Table.RemoveColumns(tableOrNull, {"merged", "Temporary"}),
            expand = Table.ExpandTableColumn(dropRedundantColumns, "toExpand", {"FUNDING"})
        in
            expand
in
    expandSelectively

如果您的表名和列名與我的表名和列名匹配(包括區分大小寫),那么您也許可以將上面的所有M代碼復制粘貼到“高級編輯器”中,並為您工作。 否則,您可能需要根據需要進行調整。

這是將查詢加載到工作表時得到的。

查詢已加載

可能會有更好(更有效)的方法來執行此操作,但這是我目前所擁有的。

如果您不使用訂單ID列,那么我建議在合並資金之前在OrderTable上進行OrderTable ,這樣您最終會得到一個像這樣的表:

Region  Customer  OrderCount  Funding
South   A         3           2394
South   B         2           4323
South   C         1           1234
South   D         2           3423

這樣,您就不會有混合的粒度級別,而這些粒度級別不會導致出現總計問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM