Crystal Reports柱状图:设置'Change On'双值,剔除值为0的条形
针对你这个Crystal Reports柱状图的配置需求,结合你提供的SQL数据(包含Max、Fritz两个名称,三天的重复记录),我整理了具体的操作步骤,帮你实现目标:
一、先确保数据的聚合逻辑正确
因为你的原始数据是重复的明细记录,首先得让图表基于名称+日期的组合来统计数量,这样才会有准确的条形数值:
- 打开柱状图的编辑窗口,切换到「数据」标签页
- 在「Show Value」区域,选择计数(比如
Count(*))作为要展示的数值,这样每个(Name, Day)组合的记录数会被计算出来
二、配置"Change On"包含两个值
Crystal Reports里的"Change On"是用来定义图表的系列/分组维度的,要让它包含两个值(也就是Name和Day),操作如下:
- 同样在「数据」标签页的「Change On」区域,点击添加按钮
- 依次选择
Name和Day字段加入到该区域,这样图表会同时按名称和日期来区分不同的条形组(比如你会看到Max在5-02、5-04的条形,Fritz在5-02、5-03的条形)
三、剔除值为0的条形
要去掉那些计数为0的条形,有两种常用方法:
方法1:在数据源层面过滤(推荐)
直接修改你的SQL语句,先聚合再过滤掉计数为0的组合,这样返回给报表的都是有效数据,避免后续图表处理的麻烦:
SELECT Name, Day, COUNT(*) AS RecordCount FROM ( SELECT 'Max' as Name, '2018-05-02' as Day union all select 'Max', '2018-05-02' union all select 'Max', '2018-05-02' union all select 'Fritz', '2018-05-02' union all select 'Fritz', '2018-05-02' union all select 'Fritz', '2018-05-03' union all select 'Fritz', '2018-05-03' union all select 'Fritz', '2018-05-03' union all select 'Max', '2018-05-04' ) AS RawData GROUP BY Name, Day HAVING COUNT(*) > 0
方法2:在图表筛选器里设置
如果不想修改SQL,也可以在图表里直接加筛选条件:
- 打开图表的「筛选器专家」(Filter Expert)
- 添加筛选规则:选择聚合后的计数字段(比如
Count(*)),设置条件为> 0 - 注意要确保筛选器应用的是聚合后的值,而不是原始明细记录,否则可能无法正确过滤
这样配置完成后,你的柱状图就会同时按名称和日期分组,并且只显示有记录的非零条形了。
内容的提问来源于stack exchange,提问作者NineBerry
相关产品推荐
相关产品推荐

