SSRS Visual Studio按周几取数的日期参数表达式编写方法
SSRS 日期参数逻辑实现方案
你可以直接通过SSRS内置的VB函数编写参数默认值表达式实现需求,不需要自定义代码。
核心规则说明
SSRS默认的Weekday()函数遵循VB语言的星期枚举规则,返回值对应关系如下:
- 1 = 周日
- 2 = 周一
- 3 = 周二
- 4 = 周三
- 5 = 周四
- 6 = 周五
- 7 = 周六
具体表达式写法
报表日期筛选一般配置**开始日期(@StartDate)和结束日期(@EndDate)**两个参数,分别给两个参数编写默认值表达式即可:
结束日期参数 @EndDate
所有场景下结束日期都是报表运行日的前一天,表达式固定:
=Today.AddDays(-1)
开始日期参数 @StartDate
需要根据运行日的星期做分支判断:
- 运行日为周一:取运行日往前3天(即上周五),和结束日(上周日)组成3天的日期范围
- 运行日为周二/周三/周四/周五:取运行日往前1天,和结束日为同一天,匹配前一天的单日数据
对应表达式:
=IIF(Weekday(Today) = 2, Today.AddDays(-3), Today.AddDays(-1))
可选适配说明
如果你修改过SSRS的周起始配置,将周一设为每周第一天,只需要给Weekday函数增加周起始参数即可,调整后的判断表达式为:
=IIF(Weekday(Today, FirstDayOfWeek.Monday) = 1, Today.AddDays(-3), Today.AddDays(-1))
逻辑校验
可以代入日期验证逻辑正确性:
- 运行日为2024-05-20(周一):@StartDate=2024-05-17(周五),@EndDate=2024-05-19(周日),覆盖周五、周六、周日3天数据
- 运行日为2024-05-21(周二):@StartDate=@EndDate=2024-05-20(周一),覆盖前一天单日数据
- 运行日为2024-05-22(周三):@StartDate=@EndDate=2024-05-21(周二),覆盖前一天单日数据
- 运行日为2024-05-23(周四):@StartDate=@EndDate=2024-05-22(周三),覆盖前一天单日数据
- 运行日为2024-05-24(周五):@StartDate=@EndDate=2024-05-23(周四),覆盖前一天单日数据
如果你的报表采用多值单日期参数而非范围参数,只需要给多值参数的默认值添加对应分支的日期值即可,核心日期计算逻辑和上述写法一致。
内容的提问来源于stack exchange,提问作者miguelvicas
相关产品推荐
相关产品推荐

