关键字、操作符与运算优先级
首先举两个例子来说明表达式的组成及运算过程。
示例1
在单元格可视属性中,写入表达式 =if(value()>0,true,false),表示当单元格的值为正数时,单元格可视,否则隐藏。
如上图所示,表达式中,使用了if()函数,value()函数,关键字true和false,if函数的表达式中,又使用了操作符大于号">"和逗号","。根据运算优先级,此表达式运算顺序如下:
1.进行value()函数的运算,获得当前单元格的值。
2.进行value()>0的运算,判断当前单元格的值是否大于0。
3.进行if(value()>0,true,false)的运算,根据if函数的运算规则,当前单元格的值大于0时,此表达式运算结果为true,否则为false。
4.对应到单元格可视属性,true为可视,false为隐藏,即当单元格的值大于0时,可视,否则隐藏。
示例2
在单元格中写入表达式 =year(now())-year(ds1.birthday)+"岁",表示根据数据集中的生日字段,计算出当前的年龄,显示为xx岁。
如上图所示,表达式中使用了year()函数,now()函数,取数据集字段的点操作符"."、对数值做减法的减号操作符"-"和对字符串进行拼接的加号操作符"+"。此表达式运算顺序如下:
1.进行now()函数的运算,获得当前的日期时间。
2.进行ds1.birthday的取值,获得数据集中对应生日字段的数据。
3.进行year(now())和year(ds1.birthday)的运算,得出两个日期的年份值。
4.进行year(now())-year(ds1.birthday)的运算,得出两个年份值的差,即为年龄的值。
5.将年龄的值与字符串"岁"进行拼接,显示最终结果:xx岁。
合理的运用关键字、操作符与函数,可以生成丰富多样的表达式,动态控制报表的各种属性,满足各类不同需求。
下面分别介绍关键字、操作符、运算优先级及表达式的注意事项。函数专门在后续章节中进行详细介绍,见:函数
关键字
关键字是系统内置的具有固定含义的特殊标识,可以直接在表达式中使用。在报表制作及调用的过程中,自行命名时需要避开系统关键字。
产品中已有的关键字包括true、false、null、LEGEND、{APPMAP}、@@resullt、Oxnnn,OOXnnn、category,sery、x,z几种。详见:参考:关键字
操作符
操作符是在表达式中用于连接不同对象的运算符,不同的操作符指定了不同的运算方式。
除常规的加减乘除四则运算符、大小等于比较运算符、与或非逻辑运算符之外,还有报表模型中所特有的一些操作符,如“.”:ds1.ID 表示数据集ds1的ID字段,“@”:@arg1表示名称为arg1的参数,“${}”:${macro1}表示名称为macro1的宏。详见:参考:操作符
运算优先级
运算符优先级的顺序,按照括号 > 乘除 > 加减 > 比较运算 > 逻辑运算的基本规则。详细的次序请参见:参考:运算优先级
表达式注意事项
系统默认将“以等号开头”作为认定表达式的标识,会对识别出的表达式进行运算,返回运算结果。但以下几种情况下,表达式不需要以等号开头:
- 使用表达式向导编辑器来生成表达式时,不需要以等号开头(系统会自动在最前面拼接一个等号)
- 报表参数定义中的参数表达式,不需要以等号开头
- 动态参数、动态宏的表达式不需要以等号开头
- 流水号的初值表达式,不需要以等号开头