...
表达式中常用的数据格式化函数有两个:.ToString和Format。接下来我们就分别看一下如何使用属性设置和数据格式化函数对数据进行格式化处理。
2.
...
属性设置与格式化函数
...
对象或函数
...
说明
...
Nothing
...
空指针对象,常用于判断表达式。例如:{IIF(x is Nothing, 1+2, 3+4)}
...
System.DbNull.Value
...
数据字段空值(NULL),常用于判断表达式。
...
UserContext.GetValue
...
取用户上下文信息,专用于使用定制安全提供器实现单点登录的场合。
例如:{UserContext.GetValue("DepId")} 返回当前用户所属部门的代码。其中DepId必须在定制安全提供程序中定义。详见用户上下文。
...
#
...
获取取报表内其他元素。例如:{#文本框5} 返回文本框5的内容。
...
Split
...
将字符串转换为数组。
3.引用单元格内容
在报表中我们经常需要调用其他单元格中的内容,以此来做一些引用和计算。
在表达式中,您可以使用# 井号加上单元格的名称来引用单元格。
(1) 在表格右侧添加一列用来显示产品订单金额与所属大类订单金额的占比情况。
(2) 我们需要在新增列的数据单元格中添加表达式来计算“订单金额”与“所属类别订单金额合计”的比值,那就需要先看一下这两个明细单元格的名称。单击单元格在属性设置面板中可以看到这两个单元格的名称分别为“文本框6”和“文本框14”。
(3) 为新增列的数据单元格添加表达式 {#文本框6 / #文本框14},并将文本框的数据格式设置为百分比。
(4) 预览报表,查看效果。
4.Split函数示例
Split函数与Join函数是互逆的作用,它可以将字符串转换为数组。
在数据集过滤章节中为您介绍过如何制作一个带有查询参数的报表,示例中使用了用户输入型的参数且每次只能查询一个大区的数据。如果我们输入多个大区的值,就会被识别为同一个字符串而查不到数据。那我们如何实现一次查询多个大区的数据呢?
(1) 制作一个使用了手动输入报表查询参数的报表,比如使用大区进行查询的报表。
(2) 编辑数据集,将查询参数的数据使用Split函数 {Split(@销售大区, ",") }进行转换,并将SQL语句修改为 select * from 销售明细 where 销售大区 IN (@查询参数1)。
Split 表达式解析:split 函数将以逗号分隔的字符串转换为了一个数组。
(3) 预览报表,可见此时已经可以输入多个大区的名称进行查询。
注意
请使用英文输入法的逗号“”,“”分隔大区名称。
(1) 新建报表,添加数据集后,使用表格组件按照下图所示绑定数据字段。
(2) 为了方便对比转换效果,我们在“订购日期”和“订单金额”右侧分别增加两列,并绑定同样的数据字段。
(3) 使用属性设置面板中的“数据格式化”对“订购日期”和“订单金额”进行格式化设置。
(4) 使用Format函数或.ToString函数进行数据格式化,比如我们将订购日期显示成“yyyy/MM/dd”格式,将订单金额显示成货币格式并且不显示小数点后数字。
- 如果使用Format函数,则表达式为 {Format(订购日期,"yyyy/MM/dd")} 和 {Format(订单金额,"c0")};
有关ToString 的用法介绍,请参见.ToString函数示例。
(5) 预览报表,可见通过这两种方式对数据进行格式化的效果是一致的。
提示
从格式化的步骤中可以看出,进行数据格式化的关键在于格式化参数的设定,如例子中使用了"yyyy/MM/dd"和"c0"。
除了这两个以外,我们还可以使用下表中更多的格式化参数。
比如:
.ToString(“n2")可以将数据转换为带有千分位标识的数字格式,并且小数点后保留两位。如果将n2改为n0,则表示不保留小数位数。
.ToString(“p2")可以将数据转换为百分数格式,并且小数点后保留两位。如果将p2改为p0,则表示不保留小数位数。
类型 | 字母 | 含义 |
---|---|---|
数字类型 | “C”或“c” | 货币 |
“D”或“d” | 数值 | |
“E”或“e” | 科学计数法 | |
“F”或“f” | 固定小数点 | |
“G”或“g” | 常规 | |
“N”或“n” | 数字 | |
“P”或“p” | 百分比 | |
“R”或“r” | 往返过程 | |
“X”或“x” | 十六进制 | |
日期时间类型 | "d" | 短日期 |
"D" | 长日期 | |
"f" | 完整日期/短时间 | |
"F" | 完整日期/长时间 | |
"g" | 普通日期/短时间 | |
"G" | 普通日期/长时间 | |
"t" | 短时间 | |
"T" | 长时间 | |
“M”或“m” | 月/日模式 | |
“O”或“o” | 往返日期 | |
“R”或“r” | RFC1123 模式 | |
“s” | 可排序日期 | |
“u” | 通用可排序日期 | |
“U” | 通用完整日期 | |
“Y”或“y” | 年月 |
3.格式化函数示例
一些场景中不能使用属性设置进行格式化处理时,如处理表达式中的数据格式时,可以使用格式化函数来实现。
比如我们需要为表格添加一个表头,以特定的数据格式来显示查询报表的时间和销售总额,如下图所示。此时便不能直接通过属性设置来实现目标效果,只能使用格式化函数修改表达式中数据的格式。
使用的表达式为:报表生成日期:{Format(Today(), "yyyy年MM月dd日")},订单总金额为:{Format(sum(订单金额), "c2")}