使用PowerQuery按特定顺序排序

3

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

中等 高 低

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

高 低 中等

在高级编辑器中,我该如何更改PowerQuery中的代码,以使其按以下方式排序:

高 中等 低

我的当前语法是:

Table.Sort(#"Filtered Rows",{{"Rating", Order.Ascending}})

2个回答

5
您可以使用以下表达式将一个新的Order列添加到表中。
= Table.AddColumn(#"Changed Type", "Order", each if [Rating] = "High" then "1" else if [Rating] = "Medium" then "2" else "3" )

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

5

或者,您可以利用Table.Sort的comparisonCriteria参数的全部力量:

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

编辑:这类似于Order.Ascending(低、中、高),但是 - 重新阅读您的问题 - 我看到您正在寻找高、中、低:因此,您可以在代码中交换“低”和“高”(2×)。

编辑2:另一个很酷的技巧是保留原始序列,并将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])))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接