使用 PowerQuery 按特定顺序排序

Din*_*123 3 excel powerpivot powerquery

我有一个包含 5 个字段的表,其中一列包含以下内容:

中 高 低

如果我按升序排序,则数据按字母顺序排序:

高 低 中

在高级编辑器中,如何更改 PowerQuery 中的代码,使其排序如下:

高 中 低

我当前在编辑器中的语法是这样的:

Table.Sort(#"过滤后的行",{{"Rating", Order.Ascending}})

ale*_*eta 5

您可以Order使用以下表达式向表中添加新列:

= Table.AddColumn(#"Changed Type", "Order", each if [Rating] = "High" then "1" else if [Rating] = "Medium" then "2" else "3" )
Run Code Online (Sandbox Code Playgroud)

然后你只需要按Order列升序排序。

如果这有帮助,请告诉我。


Mar*_*eug 5

或者,您可以充分利用 Table.Sort 的 compareCriteria 参数:

= Table.Sort(#"Filtered Rows", (x,y) => Value.Compare(List.PositionOf({"Low","Medium","High"},x[Rating]),List.PositionOf( {"低","中","高"},y[评级])))

编辑:这就像 Order.Ascending(低、中、高),但是 - 再次阅读你的问题 - 我看到你正在寻找高、中、低:所以你可以在代码中切换“低”和“高”( 2 倍)。

Edit2:另一个很酷的技巧是保留原始序列并将 Value.Compare 的结果乘以 -1 以反转排序顺序:

= Table.Sort(#"Filtered Rows", (x,y) => -1 * Value.Compare(List.PositionOf({"Low","Medium","High"},x[Rating]),List.PositionOf({"Low","Medium","High"},y[Rating])))
Run Code Online (Sandbox Code Playgroud)