M Query Table.Group with Min 基于两列

M Query Table.Group with Min based on two columns

我有一个包含很多列的 table。其中三列是:

我想要做的是首先通过选择最小数量的“所需单位”来找到 'Minimum'“包名称”,然后因为有时有几个实例需要的单位数量会相同,“评估”最低的行。

我正在探索 Table.Group() 方法,但我对它的理解毫无进展。我正在 Excel 365.

中的 Power Query 中执行此操作

伪代码类似于:

顺便说一句 - 是否可以使用单个 Table.Group 并在两个级别进行分组?例如“包名称”和“X 列”,这样结果将是:对于每个“包名称”,然后对于每个“包名称”中的每个“X 列”(嵌套)。

提前感谢您查看此内容。

非常感谢任何帮助。

干杯

青蛙

我认为你必须一步一步来。

数据

查询

Load_Data

从 Excel table

加载数据
let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content]
in
    Source

Min_Unit

通过使用空的“分组依据”字段进行分组来识别最小单位。

let
    Source = Load_Data,
    Group = Table.Group(Source, {}, {{"Min_Unit", each List.Min([Units Required]), type number}})
in
    Group

Min_Unit_And_Assessment

使用内部联接过滤等于 min_unit 的条目的原始数据。接下来,按“所需单位”分组以获得 min_assessment.

let
    Source = Table.NestedJoin(Load_Data, {"Units Required"}, Min_Unit, {"Min_Unit"}, "Min_Unit", JoinKind.Inner),
    Group = Table.Group(Source , {"Units Required"}, {{"Min_Assessment", each List.Min([Assessment]), type nullable number}})
in
    Group

结果

内部联接为 min_unit 和 min_assessment 的组合过滤原始数据。

let
    Source = Table.NestedJoin(Load_Data, {"Units Required", "Assessment"}, Min_Unit_And_Assessment, {"Units Required", "Min_Assessment"}, "Min_Unit_And_Assessment", JoinKind.Inner),
    RemoveUnnecessaryColumns = Table.RemoveColumns(Source,{"Min_Unit_And_Assessment"})
in
    RemoveUnnecessaryColumns

结果

Qualia,谢谢你给我指明了正确的方向。

最后我解决这个问题的方法真的很简单! 第1步:根据分组标准(包名称,系统class)对行进行排序

第 2 步:添加一个索引列,使每一行都有一个唯一的 ID

第 3 步:根据相同字段(程序包名称、系统 class)和 'aggregate' 在最低索引号 (MIN)

上对 table 进行分组

第 4 步:使用索引号作为当前 'step' 与之前添加索引的处理步骤之间的匹配字段,使用左外连接执行 'Merge Queries' -然后您可以匹配行,并且只匹配需要的行,因为其他行现在由于之前的 MIN 聚合而消失了。这是我的例子:

Table.NestedJoin(#"Grouped Rows", {"Winner"}, #"Added Index", {"Index"}, "Lookup Data", JoinKind.LeftOuter)

- Grouped Rows was the grouping step (Step 3)
- Winner is the name of the Index that had the minimum value
- Added Index was the last step before grouping that still had all the columns (Step 2)
- Index is the column that was added after the sort to uniquely number each row

第 5 步:展开 table 和 select 数据列

将它像对待数据库一样对待是一种很好的方法,非常感谢您为我提出的建议。希望这也能让其他人解决他们的一些问题。

干杯,非常感谢

青蛙