1.概述
diminf函数用于取维项的信息,如取维项的名称,维项的任一字段值,以及取维项所在级次等。
diminf函数多用于内存计算。报表中可以写表达式的地方都能使用diminf函数,如表元表达式中、过滤条件中、显示表达式中,行高列宽中,“显示”属性中等。
在公式定义向导的函数列表中有diminf函数的使用说明,可以查看。此文档我们会结合示例对diminf函数做详细讲解,以便大家更好的掌握此函数。
2.函数用法
格式:
diminf(C1,C2,C3)
参数:
第一个参数C1,
是一个维表名,比如“人员维”。
第二个参数C2,
是一个维项的id值。
可以是一个常量,比如“1100002”;
可以是一个返回值为维项id的表元,如B2;
可以是一个返回值为维项id的参数,如@ry。
第三个参数C3,
可以是维表C1的字段名,表示取维表C1中维项id值C2对应的字段值,比如diminf('人员维','1100002','DM_UPCODE0'),表示取 人员维中人员id为1100002的这条数据的公司id字段的值,返回的是'01000.8005217';
可以是一些特殊的字符串,如$PREFIX、$ISLEAF、$LEVEL;
也可以没有C3这个参数。
当第三个参数C3是特殊字符串时: C3为'$PREFIX'时,表示取C2此代码所在级次的前缀字符串,一般用在代码层级维中。比如代码层级维“行业代码”,分段信息为1-2-2,则diminf('行业代码','A0000','$PREFIX'),返回的是'A'。 C3为'$ISLEAF'时,表示判断C2这个节点是否是叶子节点,返回值为T或F,T表示是,F表示否。比如diminf('人员维','1100002','$ISLEAF'),表示求节点1100002在维表人员维中是否是叶子节点,返回的是T。 C3为'$LEVEL'时,表示求C2这个节点在维表C1中的级次,返回的是0、1、2、......这种数值,分别表示第一级、第二级、第三级、......。比如diminf('人员维','1100002','$LEVEL'),返回的是3。 当没有第三个参数C3时,取的是哪个字段? 如果是通用维,则取的是C2节点对应的属性名称字段。 以“人员维”为例,diminf('人员维','100') 等价于diminf('人员维','100','中心'),取的是属性“中心”对应的文字列名DM_UPNAME1字段。 如果是代码层级维,则取的是C2节点的名称字段值。 以“工作地点”维为例,diminf('工作地点','B0000') 等价于diminf('工作地点','B0000','DM_NAME'),表示取DM_NAME字段。 |
附:
维表“人员维”结构
维表“人员维”数据
维表“人员维”层级关系
3.示例
3.1示例1-在表元表达式中
在之前章节浮动分析表制作中,我们制作了一张月度考勤表。
现我们要在表格中“部门”这一列后面增加一列“部门经理”。这张分析表是从“个人周报”主题表取数,“个人周报”中没有部门经理字段,但有部门字段,关联了部门维。表格中部门这一列取的就是部门字段,其实际值就是部门id。而部门维中有字段存放的是部门经理id。
因此,我们可以用diminf从维表中取出部门经理id值。部门经理这个表元的表达式为diminf('部门',D3,'BMJL')。
计算后结果如下:
显示的是人员id值。如果我们希望显示人员名称,则可以给这个表元增加一个显示表达式:diminf('人员维',E3)
这样就能显示人员名称了。
3.2示例2-在过滤条件中
如上图,我们制作一了张中药材价格查询表,现在还需要配置一个维下拉参数,以便可以选择查询中药材的价格。但是现在主题表的中药材ID和维表设置的ID字段无法对应,而是和维表中的“ID2”字段对应,因此不能直接绑定维表。现在我们需要从中药材维表中获取“ID2”字段的值,来过滤数据。
这时过滤条件可以写成是:IZYJG_B0.ID= "<#=diminf('中药材维表',@zyc,'ID2')#>",@zyc是“商品名称”维下拉参数。
计算结果如下:
生成sql如下:
在过滤条件中使用diminf函数,如果通过diminf函数获取到的值不是纯数字时,如上述表达式获取维表中字段“NAME”的值,表达式为IZYJG_B0.ID=diminf('中药材维表',@zyc,'NAME')时,生成sql语句为IZYJG_B0.ID=藿香中等,此时sql是无法执行的,应将过滤条件改为IZYJG_B0.ID= "<#=diminf('中药材维表',@zyc,'NAME')#>",此时生成sql语句为IZYJG_B0.ID="藿香中等",sql就可以正常执行了。
请先登录