2017-02-03 52 views
1

假設我有兩列:ID日期。我想添加第三列最早的日期。此列應在所有與該行中的ID匹配的數據中查找最早或最小日期。它會生成以下內容 - 請參閱ID 501。我有很多數據,所以需要使用電源查詢。我如何編寫公式?電力查詢:如果條件滿足,查找最短日期

ID Date Earliest Date 
501 01/01/2017 01/08/2015 
203 08/06/2015 08/06/2015 
304 01/04/2014 01/04/2014 
501 01/01/2016 01/08/2015 
201 01/02/2015 01/02/2015 
501 01/08/2015 01/08/2015 

回答

0

如果你不關心ID列的順序,您還可以使用「所有行」聚合和「日期」列中的最小日期聚合進行分組。建設者應該像下面的圖片:

Group by builder

你會得到另一列稱爲行包含原始表。如果您展開此列以顯示日期列,則會得到您想要的表格。

Expand the rows column

+0

如果你想保留原始的每一行,你需要加入它反對原來的桌子。如果您只希望每個日期的最早行,那麼這是最好的。 –

+0

謝謝,這個伎倆! –

1

解決方案是將原始數據與自身結合,使用最小聚合來計算最早日期。


在查詢這個出發數據稱爲Query1

ID,Date 
501,01/01/2017 
203,08/06/2015 
304,01/04/2014 
501,01/01/2016 
201,01/02/2015 
501,01/08/2015 

加入與數據:合併>合併查詢(又名「加入」)>合併查詢,新建(以避免修改查詢1)

選擇每次Query1 ID列,並保留默認的左外種聯接: Join

接下來,選擇Transform> Structured Column> Aggregate,然後選擇「Count of Date」(如果UI提示最小聚合會更好,但我們可以通過直接觸摸代碼來修復)。

接下來,打開公式欄(視圖>佈局>公式欄)並編輯公式以將List.Count替換爲List.Min。重新命名新的列,你就完成了!


我全 「M」 的公式:

查詢1:

let 
    Source = Table.PromoteHeaders(Csv.Document("ID,Date 
501,01/01/2017 
203,08/06/2015 
304,01/04/2014 
501,01/01/2016 
201,01/02/2015 
501,01/08/2015")) 
in 
    Source 

Merge1:

let 
    Source = Table.NestedJoin(Query1,{"ID"},Query1,{"ID"},"NewColumn",JoinKind.LeftOuter), 
    #"Aggregated NewColumn" = Table.AggregateTableColumn(Source, "NewColumn", {{"Date", List.Min, "Earliest Date"}}) 
in 
    #"Aggregated NewColumn" 
+1

謝謝,可惜我想這一點,但超過200萬行數據,2小時後,這仍然沒有這樣做:( –

0

對於每一行你通過thisrow [ID]濾波源表,然後從所得的表中的[日期]列中選擇最小的最早日期。

let 
    Source = #table(type table[ID=Int64.Type, Date=date], { 
    {501,"01/01/2017"}, 
    {203,"08/06/2015"}, 
    {304,"01/04/2014"}, 
    {501,"01/01/2016"}, 
    {201,"01/02/2015"}, 
    {501,"01/08/2015"} 
    }), 
    Convert = Table.TransformColumnTypes(Source,{{"Date", type date}}), 

    AddMinDateColumn = Table.AddColumn(Convert, "Earliest Date", (thisrow) => List.Min(Table.SelectRows(Convert, each [ID] = thisrow[ID])[Date]), type date) 
in 
    AddMinDateColumn