(Power Query) 复杂排序

(Power Query) Complicated sort

我想要一个复杂的排序,但我只是不确定如何使用 power query 来完成它。 TLDR 版本是“首先是最旧的新版本,然后是最新的旧版本”。所以我想根据列中的数据在 ascending/descending 之间拆分排序。

我的 sheet(I 到 K)的某些列包含单词 'Yes' 如果它是新项目,否则为空白。其中包含 'yes' 的列的可能组合:

只有我,只有J,只有K,I+J,J+K,I+J+K

这是我想要的排序逻辑:

首先列出所有在 K 中带有“是”的行,按日期升序(H 列),无论它们是否在 I 列或 J 列中有 'Yes'。

然后,仅在剩下的行中,J 中带有“是”的所有行,按日期升序(H 列)

接下来,仅在剩下的行中,所有在 I 中带有“是”的行,按日期升序(H 列)

最后,剩下的行在 I-K 的任何列中都不应该有“是”。在这些行中,按日期降序(H 列)。

我大概可以弄清楚如何通过第 3 步进行排序,方法是创建一个自定义列来标记并确定该行是否会进入第一、第二或第三排序,然后按该自定义排序对其他列进行排序之前的列。

但是第 4 步让我很困惑,因为相反的是下降而不是上升。我在想也许可以对数据进行分组,在降序组内和升序组外对数据进行排序(作为自定义列中的第 4 个条目,对前 3 个进行排序),然后在外部排序后再次将其扩展回来,或者什么的?

请帮忙!

目前我只能对 sheet 进行升序排序,无法对部分降序进行排序。

筛选列,然后对其进行排序。过滤另一列并对其进行排序。等把它们放在一起

将您的数据加载到 powerquery(数据 ... 来自 table/range ... )并使用下面的代码粘贴到 home ... 高级编辑器.... 它假设您的数据加载为 Table1 列 headers A,H,I,J,K,因此更改它以反映您的实际 table 名称和列名称。如果您有自己的代码,请删除第一行并更改第二行中的 Source 以反映您的 #"PriorStepName"

将左下图转换为右图的示例代码:

let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"A", Int64.Type}, {"H", type date}, {"I", type text}, {"J", type text}, {"K", type text}}),
Part1 = Table.Sort(Table.SelectRows(#"Changed Type", each ([K] = "Yes")),{{"H", Order.Ascending}}),
Part2 = Table.Sort(Table.SelectRows(#"Changed Type", each ([K] <> "Yes" and [J] = "Yes")),{{"H", Order.Ascending}}),
Part3 = Table.Sort(Table.SelectRows(#"Changed Type", each ([K] <> "Yes" and [J] <> "Yes" and [I] = "Yes")),{{"H", Order.Ascending}}),
Part4 = Table.Sort(Table.SelectRows(#"Changed Type", each ([K] <> "Yes" and [J] <> "Yes" and [I] <> "Yes")),{{"H", Order.Descending}}),
Combined = Table.Combine({Part1,Part2,Part3,Part4})
in Combined