获取Case实体近7天创建/关闭数据并在SSRS报表图表展示的求助
优先修复SQL查询,而非改用SSRS表达式
不要直接换表达式,SQL是处理这类聚合统计的最优选择,SSRS表达式更适合报表渲染层的轻量逻辑调整,而非核心数据计算——用表达式处理每日统计会导致报表渲染变慢,且逻辑维护起来比SQL麻烦得多。
正确的SQL查询思路(供你修正参考)
核心要解决两个问题:生成连续的近7天日期(避免某天无数据时图表缺失日期)、分别统计每日创建/关闭数量并关联到日期序列:
WITH DateRange AS ( -- 生成近7天的日期(含今日) SELECT DATEADD(day, -n, CAST(GETDATE() AS DATE)) AS ReportDate FROM (VALUES (0),(1),(2),(3),(4),(5),(6)) AS Numbers(n) ) SELECT dr.ReportDate, -- 无数据时补0,避免图表显示断层 ISNULL(CreateStats.CreateCount, 0) AS 每日创建数量, ISNULL(CloseStats.CloseCount, 0) AS 每日关闭数量 FROM DateRange dr -- 关联每日创建统计 LEFT JOIN ( SELECT CAST(CreatedDate AS DATE) AS CreateDate, COUNT(*) AS CreateCount FROM [Case] -- Case是SQL关键字,需加方括号转义 WHERE CreatedDate >= DATEADD(day, -6, CAST(GETDATE() AS DATE)) GROUP BY CAST(CreatedDate AS DATE) ) CreateStats ON dr.ReportDate = CreateStats.CreateDate -- 关联每日关闭统计 LEFT JOIN ( SELECT CAST(ClosedDate AS DATE) AS CloseDate, COUNT(*) AS CloseCount FROM [Case] WHERE ClosedDate >= DATEADD(day, -6, CAST(GETDATE() AS DATE)) GROUP BY CAST(ClosedDate AS DATE) ) CloseStats ON dr.ReportDate = CloseStats.CloseDate ORDER BY dr.ReportDate;
你的SQL可能出错的常见原因
Case是SQL保留关键字,直接用会报错,必须用[Case]包裹表名- 日期过滤时没去除时间部分(比如
CreatedDate带时分秒,直接和GETDATE()比较会漏掉当天部分数据),要转成DATE类型再判断 - 没有处理无数据的日期,导致返回的日期不连续,图表显示异常
SSRS表达式的适用场景
如果已经通过SQL拿到了正确的结构化数据,仅需在报表中做小调整(比如把空值显示为0),可以用表达式,例如:=IIF(Fields!每日创建数量.Value Is Nothing, 0, Fields!每日创建数量.Value)
但核心的统计逻辑,绝对优先用SQL实现。
内容的提问来源于stack exchange,提问作者user20971593
相关产品推荐
相关产品推荐

