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

QlikSense中制作多列求和占比交互式饼图的方法

核心解决方案:把宽表转成窄表

QlikSense的饼图要求维度是离散的类别字段(比如物资名称),而你原表是宽表(每类物资单独一列),直接用宽表做会遇到维度无效的问题,因为聚合函数不能作为维度使用。

步骤1:在数据加载脚本中转换表结构

用Crosstable函数把宽表转成窄表,生成Material(物资类别)和DailyLoss(对应损失值)两个核心字段,同时保留Day字段用于交互筛选。

示例脚本(对应你的示例数据):

// 加载原始宽表
RawLossData:
LOAD * INLINE [
Day, Tanks, Helicopter, APC
1, 3, 1, 4
2, 5, 3, 0
3, 10, 2, 12
];

// 转换为窄表:Crosstable(新类别字段名, 新数值字段名, 保留的非透视列数)
LossByCategory:
Crosstable(Material, DailyLoss, 1)
LOAD * Resident RawLossData;

// 只保留需要的8类物资,替换为你的目标列名
WHERE Material IN ('Tanks', 'Helicopter', 'APC' /* 补充其余5类物资名称 */);

步骤2:制作饼图

  1. 维度设置:直接选择Material字段(这就是你要的8类物资)
  2. 度量设置:选以下两种写法之一,均支持实时交互筛选:
    • 写法1(推荐,简洁):=PercentOfTotal(Sum(DailyLoss)),然后将度量的数字格式改为百分比
    • 写法2(手动计算):=Sum(DailyLoss)/Sum(Total DailyLoss),同样设置为百分比格式

你之前尝试无效的原因

  • 把Sum(列名)放维度:维度必须是原始的非聚合字段,聚合函数只能用于度量,因此会报错Invalid Dimension
  • 用RangeSum:RangeSum是对同一行内的多列求和(比如单日总损失),不是跨所有行的全局总求和,所以得不到你要的占比结果

交互支持说明

因为我们保留了Day字段,其他工作表的筛选操作(比如选择特定日期范围)会自动同步到饼图,总损失和各类占比会实时更新,完全不需要硬编码数值。

内容的提问来源于stack exchange,提问作者Pk Lombardi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 18:32:26