电力查询:如果满足条件,则查找最短date

假设我有两列: IDdate 。 我想添加第三列最早的date 。 该列应该查找与该行中的ID匹配的所有数据的最早或最短date 。 这将产生下面的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 

如果您不关心ID列的顺序,也可以使用“所有行”聚合和“date”列中最小date的聚合进行分组标识。 build设者应该看起来像下面的图片:

由建设者集团

你会得到另一列称为行包含原始表。 如果您展开此列以显示“date”列,则会得到所需的表格。

展开行列

解决scheme是将原始数据与自身结合起来,使用最小聚合来计算最早date。


从Query中的这个起始数据调用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 

通过以下方式join数据:合并>合并查询(又名“join”)>将查询合并为新(以避免修改Query1)

每次selectQuery1 ID列,并保留默认的Left Outer join Kind: 加入

接下来,selectTransform> Structured Column> Aggregate,然后select“Count of Date”(如果UIbuild议最小聚合会更好,但我们可以通过直接触摸代码来修复)。

接下来,打开公式栏(视图>布局>公式栏),然后编辑公式以将List.Countreplace为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" 

对于每行,您通过thisrow [ID]过滤源表,获得最早的date,然后从结果表的[Date]列中selectminimum。

 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