报表显示值的灵活设置

报表从数据库中取数展示时,数据库中存储的数据往往是一些编码格式,需要在展示时将其转换成对应的中文形式方便于人员查看,或者一些日期、数值数据展示时按照相应的规则进行格式化操作,下面通过一个例子介绍下报表中常用的设置显示值的方法。

报表模版设计

使用设计器自带的 demo 数据库的“员工表”,制作如下报表模版:

预览结果如下:

性别和部门在数据库中存储的是代码值形式,要转换成相应的中文显示,出生日期带了时间,展示时只需要展示成标准的年月日就行,工资需要增加货币符号。

显示格式设置

报表属性栏中的显示格式,可以对数据进行格式化操作,选中 D3 单元格,双击显示格式属性,在日期中选择对应的格式:

同样,将 F3 的单元格的显示格式设置成”¥#0.00”。

显示值设置

性别和部门中展示的是代码值,需要转换成相应的中文,性别相对来说是固定的,选中 C3 单元格,在显示值表达式属性中写入表达式:if(value()==1,“男”,“女”),表示如果当前单元格的真实值是 1 时,将其显示值设成”男”, 否则显示成”女”,这种相对固定的直接用 if 判断就可以,if 函数可以嵌套使用,这样有多种情况也可以使用,或者也可以使用 case 函数或者 map 函数进行对照显示,这个具体看下函数帮助文档就行。

部门也可以通过 if 函数嵌套或者其他函数实现,但是部门一般比较多,如果逐一判断需要写入大量的公式,而且部门有可能会发生变化,那如果写成固定的判断就不太符合实际需要,针对这种,在数据库中通常会有一个中文字典表和他对应,在报表中增加数据集“ds2”,取部门的中文字典表,里边数据如下:

在 E3 单元格的显示值表达式中写入: ds2.select(DEPTNAME,DEPTID==value(),1),使用 select 函数从 ds2 数据集中选取 DEPTID 为当前格值的记录中的 DEPTNAME 字段值进行显示,后边的 1 表示取符合条件的第一条值,查到符合的就返回,能提高计算效率。

预览报表结果

这样数据就能根据指定设置展示。

更多显示的灵活设置

在实际使用中,可能还会有更灵活的要求,比如上例中,工资列有的是浮点数有的是整数,要求如果是整数,就去掉后边的小数点,同样可以通过显示格式进行设置,显示格式是可以通过表达式动态控制的,在 F3 的显示格式表达式中写入 if(value()==int(value()),“¥#0”,“¥#0.00”),可以根据条件动态返回不同的格式串。

处理日期数据时,可以通过显示格式对其进行格式化,实际上报表还有一个 string 函数,通过它可以对日期做更灵活的设置,比如要显示成英文的日期格式,那么可以在 D3 单元格的显示值表达式中写入:string(value(),“MMM dd,yyyy”:“en”),这样日期就会根据指定的格式串进行显示,后边的 en 表示英文,如需其他语言,都可以在这指定。报表显示如下:

日期格式串还有更多设置,比如要取某个日期是本年的第几周,可以写成:=string(now(),“w”),w 就是取第几周的格式串,更多详细说明可以参考:

通过显示格式和显示值的设置,可以将原本数据展现成其他更容易看懂的数据,而表达式的使用能够使得展示更加灵活。