月报表如何扩展出当月所有日期

月报表通常需要将指定月份所对应的日期都扩展出来,但如果并不是每天都有数据的情况,要如何扩展出月份的所有日期呢?

1png

实现思路:
通过指定日期的参数,得到这个日期所在月月末的天数,在报表单元格中通过 to 函数从 1 扩展到该天数。
具体实现:
1. 报表中参数定义。
报表设计器下新建报表,在“报表”菜单——参数,在弹出的对话框中增加 5 个参数,具体设置如下图所示。
arg1: 数据类型为日期,这里我给了个数据库中有记录的日期值。参数类型为普通参数,用来接收前台传递的日期。
arg2: 数据类型为日期,值表达式为 if(arg1==null,now(),arg1),参数类型为动态参数,当前台未指定日期时,得到当前日期
arg3: 数据类型为整数,值表达式为 int(day(pdate@me(@arg2))),参数类型为动态参数,通过 arg2 得到对应月份的最后一天。
arg4:数据类型为日期,值表达式为if(arg1==null,pdate@m (now()),pdate@m (arg1)),参数类型为动态参数,得到指定日期所在月的月初日期,用于SQL条件过滤。
arg5: 数据类型为日期,值表达式为 if(arg1==null,pdate@me(now()),pdate@me(arg1)),参数类型为动态参数,得到指定日期所在月的月末日期,用于 SQL 条件过滤。

2png

  1. 报表中数据集设置如下:

3png

4png

  1. 报表单元格表达式设置如下:
    B2:单元格表达式 =to(1,arg3), 从 1 扩展到指定日期所在月份的最后一天,单元格扩展方式为横向扩展。
    B3:设置单元格表达式 ds1.sum(订单金额,day( 订购日期)==B2),和 B2 做关联过滤。

5png

由于 B2 扩展出来的只是 1,2…… 31 这样的数值,这里设置了显示值表达式 value()+“日”,可以达到页面展现时 1 日,2 日,3 日……31 日的效果。
6png

从 1 日扩展到 31 日,横向一页未展现完全,这里设置了固定左表头,下面是,报表页面展现的效果。

8png

7png

润乾报表使用小技巧:在写表达式时,双击表达式编辑的区域就可以在弹出的对话框中根据分类找到自己需要用到的函数,选中相应的函数,点击函数帮助,会将选中函数的使用方法和具体示例列出来,初学者可以快速掌握函数功能和使用方法,有效减少函数书写错误,提高报表开发效率。

9png