在图表中对条形排序
一个简单的技巧,用于保留你希望图表中的条形显示的顺序。
问题是:你正在编写一个查询,并且希望在条形图或漏斗图中保持结果的排序,但查询返回的值会弄乱排序。
例如,假设你想对一些排序效果不佳的内容进行排序,比如你有四个不同的步骤,标记为“第一”、“第二”、“第三”、“第四”,并且希望按照它们的语义顺序进行排序,而不管它们对应的任何值。Metabase(或你正在使用的任何工具)会像处理字符串一样对这些值进行排序(即,它们会按字母顺序排序,而不是语义顺序,这没有多大意义:“第一”、“第四”、“第二”、“第三”)。
这里有一个技巧,可以重新排列图表以指定你想要的顺序。
- 按照你打算编写的方式编写查询(当然,要遵循最佳实践)。
- 假设你想按名为
step的列中的值进行排序,请在查询的末尾使用CASE表达式来定义step列中值的顺序。
ORDER BY
CASE
WHEN step = 'First' THEN 1
WHEN step = 'Second' THEN 2
WHEN step = 'Third' THEN 3
WHEN step = 'Fourth' THEN 4
END
使用 CASE 表达式进行排序的示例

下面是一个使用 Metabase 附带的示例数据库的示例,你可以自己尝试。假设我们想查看每个产品类别的订单数量,但我们需要按以下顺序排序:Widget、Gizmo、Gadget、Doohickey。这是带有 case 语句的代码
-- We want to return two columns, ordered by products.category
SELECT products.category,
Count(*)
FROM orders
LEFT JOIN products
ON orders.product_id = products.id
GROUP BY products.category
-- The CASE statement will assign a new value to sort by
ORDER BY CASE
WHEN products.category = 'Widget' THEN 1
WHEN products.category = 'Gizmo' THEN 2
WHEN products.category = 'Gadget' THEN 3
WHEN products.category = 'Doohickey' THEN 4
END
这个技巧对于漏斗图尤其有用,当你需要保留顺序时。