You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle Apex 22中堆叠柱状图按物理CPU值排序的实现问题

Oracle Apex 22中堆叠柱状图按物理CPU值排序的实现问题

我完全理解你的困扰——Apex 22的多系列堆叠柱状图默认的排序选项确实有点受限,只能按标签或总堆叠值排序,没法直接指定按某个系列(比如你的物理CPU)来排序。不过咱们可以通过两个简单的步骤解决这个问题:

第一步:调整查询的排序逻辑

首先,你需要确保你的SQL查询本身是按照物理CPU(PC列)来排序的,而不是原来的Unused_CPUs。修改查询的ORDER BY子句,直接指定按PC列排序(可以是DESC降序或ASC升序,根据你的需求):

SELECT
host AS Host,
TO_NUMBER(MAX(CASE WHEN obj = 'OnlineVirtualCPUs' THEN val END)) AS OnlineVirtualCPUs,
TO_NUMBER(MAX(CASE WHEN obj = 'pc' THEN val END)) AS PC,
MAX(CASE WHEN obj = 'OnlineVirtualCPUs' THEN val ELSE 0 END) - MAX(CASE WHEN obj = 'pc' THEN val ELSE 0 END) AS Unused_CPUs,
MAX(TS) AS Timestamp,
'Host: ' || host ||
'<br> OnlineVirtualCPUs: ' || TO_CHAR(MAX(CASE WHEN obj = 'OnlineVirtualCPUs' THEN val END)) ||
'<br> Physical CPUs: ' || TO_CHAR(MAX(CASE WHEN obj = 'pc' THEN val END), 'FM0.00') ||
'<br> Unused CPUs: ' || TO_CHAR(MAX(CASE WHEN obj = 'OnlineVirtualCPUs' THEN val ELSE 0 END) - MAX(CASE WHEN obj = 'pc' THEN val ELSE 0 END), 'FM0.00') ||
'<br> Time: ' || MAX(TS) AS Tooltip
FROM table
WHERE (service = 'service1' AND obj = 'OnlineVirtualCPUs') OR (service = 'service2' AND obj = 'pc') AND ts > SYSDATE - 1
GROUP BY host 
ORDER BY PC DESC; -- 这里改为按物理CPU值降序排序,按需调整为ASC

如果你的PC列可能存在NULL值,建议用NVL函数处理,避免排序异常:

ORDER BY NVL(PC, 0) DESC;

第二步:让图表遵循查询的排序顺序

接下来需要修改图表区域的属性,让Apex不要覆盖查询的排序结果:

  1. 打开你的堆叠柱状图区域的属性面板
  2. 找到Multi-Series Chart Data部分
  3. 将Sort-Order选项设置为None

这样设置后,图表会直接使用SQL查询返回的行顺序,也就是我们刚才按物理CPU排序后的结果,而不是默认的总堆叠值排序。

验证效果

保存修改后运行页面,你应该就能看到堆叠柱状图按照物理CPU的数值排序了。如果还有问题,可以检查一下查询是否正确返回了按PC排序的结果,或者确认图表的Sort-Order确实设置为了None。

备注:内容来源于stack exchange,提问作者SumoHummel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 15:15:27