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

Crystal Reports:如何仅按客户最新Version分组展示并统计

Crystal报表实现按「版本号-客户名称」分组并仅显示客户最新版本记录的方案

完全可行,以下是具体实现步骤:

一、数据源层面过滤(推荐,性能更优)

直接通过Crystal的「命令(Command)」编写SQL,提前筛选出每个客户的最新版本记录,避免报表加载冗余数据:

  1. 新建报表时选择「使用命令」作为数据源,编写如下SQL(需替换实际关联字段名,比如TICKET_ID、CUSTOMER_ID):
SELECT t.*, h.*, c.*
FROM TICKET t
JOIN HISTORY h ON t.TICKET_ID = h.TICKET_ID
JOIN CUSTOMER c ON t.CUSTOMER_ID = c.CUSTOMER_ID
JOIN (
    -- 子查询:计算每个客户对应的最新版本数值(处理x.y格式的版本号)
    SELECT 
        c.CUSTOMER_ID,
        MAX(
            CAST(SUBSTRING(h.Version, 1, CHARINDEX('.', h.Version)-1) AS INT)*100 + 
            CAST(SUBSTRING(h.Version, CHARINDEX('.', h.Version)+1, LEN(h.Version)) AS INT)
        ) AS MaxVersionNum
    FROM TICKET t
    JOIN HISTORY h ON t.TICKET_ID = h.TICKET_ID
    JOIN CUSTOMER c ON t.CUSTOMER_ID = c.CUSTOMER_ID
    GROUP BY c.CUSTOMER_ID
) max_version ON 
    c.CUSTOMER_ID = max_version.CUSTOMER_ID
    AND (
        CAST(SUBSTRING(h.Version, 1, CHARINDEX('.', h.Version)-1) AS INT)*100 + 
        CAST(SUBSTRING(h.Version, CHARINDEX('.', h.Version)+1, LEN(h.Version)) AS INT)
    ) = max_version.MaxVersionNum
  1. 执行命令后,数据源仅保留每个客户的最新版本关联记录。

二、报表分组配置

在报表设计界面添加分组层级:

  • 第一组:选择HISTORY.Version作为分组字段,实现按版本号一级分组
  • 第二组:选择CUSTOMER.客户名称作为分组字段,实现按客户名称二级分组

三、统计与显示设置

  • 版本号分组的「组脚注」中,添加唯一客户数统计:插入汇总字段,选择Count函数,基于CUSTOMER.CUSTOMER_ID并勾选「distinct」选项,即可统计该版本下的客户数量
  • 客户名称分组的「组页眉」或「细节节」中,添加客户相关字段(如名称、ID等)展示客户名单

可选:报表内抑制旧版本记录(无需修改数据源)

如果无法使用Command,可通过报表公式实现:

  1. 按「客户名称」分组,同时将HISTORY.Version设置为降序排序,确保每个客户的最新版本记录排在最前
  2. 创建一个共享变量公式@SetLatestVersion,放在客户分组的「组页眉」中:
Shared StringVar latest_version;
latest_version := {HISTORY.Version};
  1. 创建抑制公式@SuppressOldVersions,应用到HISTORY相关的细节节或组节:
Shared StringVar latest_version;
{HISTORY.Version} <> latest_version

该公式会自动隐藏当前客户的非最新版本记录,但注意需确保每个客户仅对应一条最新版本的关联记录,避免重复。

内容的提问来源于stack exchange,提问作者Matt Spiller

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 11:16:03