SSRS 2016每日时间图表移除无数据日期的方案咨询
解决SSRS 2016每日时间图表忽略零值/空值日期的方案
绝对有办法搞定这个问题!我之前帮好几个同事踩过SSRS折线图的这个坑,给你分享几个实用的解决方案,包括你提到的用参数灵活控制的方法:
方案1:从数据源层面过滤(最推荐,性能最优)
直接在你的SQL查询里只返回有有效数据的日期,这样图表根本不会加载那些空值/零值的日期,自然不会出现下降的折线。
举个例子,如果是单条记录的表:
SELECT DateColumn, ValueColumn FROM YourTable WHERE ValueColumn IS NOT NULL AND ValueColumn <> 0
如果是聚合统计的场景(比如按日期求和):
SELECT DateColumn, SUM(Value) AS TotalValue FROM YourTable GROUP BY DateColumn HAVING SUM(Value) > 0 -- 过滤掉总和为0的日期
方案2:在SSRS图表中设置忽略空值
如果因为业务需求必须保留所有日期,但不想让折线在空值/零值点下降,可以直接在图表里配置:
- 右键点击折线图的数据系列,选择「系列属性」
- 切换到「数据点」选项卡,找到「空点」设置
- 把空值的处理方式改成「不显示」或者「跳过空点」(SSRS 2016里这个选项在「线条」部分也可能有,找「连接数据点时忽略空值」)
这样折线会直接连接前后有数据的点,不会在空日期那里出现下降的断点。
方案3:用参数实现灵活切换(满足你要的参数控制需求)
如果你想让用户自己选择是否显示空值/零值日期,可以按以下步骤操作:
创建参数:
- 在SSRS报表里新建一个布尔型参数,命名为
@ShowEmptyDates - 设置默认值为
False(默认不显示空值日期),给参数添加标签「显示空值/零值日期」
- 在SSRS报表里新建一个布尔型参数,命名为
修改数据源查询:
根据参数值来过滤数据,比如:SELECT DateColumn, ValueColumn FROM YourTable WHERE (@ShowEmptyDates = 1) -- 如果参数为真,显示所有日期 OR (ValueColumn IS NOT NULL AND ValueColumn <> 0) -- 否则只显示有有效数据的日期(可选)配合图表空点设置:
如果参数为真时需要显示所有日期,但折线在空值处不下降,可以把数据系列的值表达式改成:=IIF(Parameters!ShowEmptyDates.Value = True, Fields!ValueColumn.Value, IIF(Fields!ValueColumn.Value = 0 OR IsNothing(Fields!ValueColumn.Value), Nothing, Fields!ValueColumn.Value))再回到系列属性的空点设置,选择「跳过空点」,这样参数切换时就能完美实现两种展示效果。
额外补充:如果需要连续日历但过滤空值
如果你的业务要求必须显示连续的日历日期,但只在有数据的点画线,可以先生成一个日历表,再左连接你的数据,最后用参数过滤:
DECLARE @StartDate DATE = '2024-01-01', @EndDate DATE = '2024-01-31' ;WITH Calendar AS ( SELECT @StartDate AS DateColumn UNION ALL SELECT DATEADD(DAY, 1, DateColumn) FROM Calendar WHERE DateColumn < @EndDate ) SELECT c.DateColumn, ISNULL(t.ValueColumn, 0) AS ValueColumn FROM Calendar c LEFT JOIN YourTable t ON c.DateColumn = t.DateColumn WHERE (@ShowEmptyDates = 1) OR (t.ValueColumn IS NOT NULL AND t.ValueColumn <> 0) OPTION (MAXRECURSION 0)
内容的提问来源于stack exchange,提问作者user3398666
相关产品推荐
相关产品推荐

