亿信ABI
当前版本:5.3.1

dim函数

1.概述

dim是维的简称,是用来操作维表的函数,可以用在过滤条件和表元表达式中,取维表中的字段。

2.dim函数用法

dim表达式可以表示维表上的任何一个字段,有一个或者两个参数

格式:

dim(P1,P2)

参数:

第一个参数P1:这里是指定操作的维表。可以是主题表的维度字段,这时取的是这个维度字段关联的维表;也可以是维表名。

例如:FACT_GRZB.USERID_,'人员维'。

第二个参数p2:表示取维的哪个字段。可以是维表的字段名;可以是维表的属性名,这时就是表示取该属性对应的字段;也可以是维的级次;也可以没有P2这个参数。

例如:'DM_UPCODE0','部门',0,1...。

  • 当第二个参数P2为0,1,2...这种维的级次时,取的是哪个字段?

如果是通用维,则是取的是该级次对应的字段。

以“人员维”为例,级次0代表的是”公司”属性,对用字段为”UPCODE0”,级次1代表的是”中心”属性,对用字段为”UPCODE1”,级次2代表的是”部门”属性,对用字段为”UPCODE2”,如下图。

dim函数

假设FACT_GRZB.USERID_关联的是人员维,则:

dim(FACT_GRZB.USERID_,1)等价于dim(FACT_GRZB.USERID_,'DM_UPCODE1')等价于dim(FACT_GRZB.USERID_,'中心'),都表示取DM_UPCODE1字段。

如果是代码层级维,则取的是该级次对应的代码前缀。

比如,行业代码维的级次为1-2-2,dim(xxb.hydm,0)表示取代码字段的前面第1位。

  • 当没有第二个参数P2时,取的是维表的哪个字段?

当dim没有第二个参数P2时,这时dim一般用在过滤条件中,取哪个字段取决于=后面的值。等号后面是哪个级次的维项值,则取该级次对应的字段(通用维)或者是该级次对应的代码前缀(代码层级维)。比如

dim(FACT_GRZB.USERID_)='100',相当于DM_UPCODE1='100'

dim(xxb.hydm)='A0000',相当于xxb.hydm like 'A%'

  • dim函数还可以用于报表参数多选过滤

比如有个枚举下拉框参数@a,可以多选。这个参数作用于报表过滤时的过滤条件表达式写法为dim(zt.zb1)=@a。当@a选择了多个值时,相当于zt.zb1=值1 or zt.zb1=值2 or ......。

3.示例

下面示例用到的“人员维”结构和数据如下:

dim函数

用的主题表fact_grzb结构如下:

dim函数

3.1用在过滤条件中

dim函数

上图分析表中有个“人员”参数,使用的是人员维,希望实现选择“售后服务部”则计算出该部门所有人员数据,选择“业务中心”则计算出该中心下所有人员数据,依次类推。对于这种级次维的过滤,这时就可以使用dim函数。并且当我们不确定取哪一级次,由选择的报表参数值决定时,dim函数中就可以不指定第二个参数。

这时,过滤条件表达式可以写成:dim(fact_grzb.USERID_)=@ry。

dim函数

计算效果如下:

33dim函数1298

生成sql语句如下:

33dim函数1311

当不使用dim函数,过滤条件表达式为fact_grzb.USERID_=@ry时,计算结果如下:

33dim函数1362

可以看出,当不使用dim函数时,生成的过滤条件中USERID_直接等于了所选参数值,而USERID_字段中只有人员数据,没有像“售后服务部”这样的中间节点数据,所以查询不出数据。

所以,要获取参数所选节点的所有下级节点的数据时,需使用dim函数。

3.2用在表达式中

33dim函数1498

上图分析表中“中心”列,希望能够根据人员获取其所在中心,该信息可以从维表中获取。对于这种已经关联维表的字段,我们可以使用dim函数的第二个参数来获取维表中的信息,dim函数的第二个参数可以是维表的字段名,可以是维表的属性名,也可以是维的级次。

以维表的字段名为例获取人员所在中心名称。

由于中心名称对应的字段是DM_UPNAME1,那么表元表达式就可以写成:

DIM(FACT_GRZB.USERID_,'DM_UPNAME1')

33dim函数1717

计算结果如下:

33dim函数1727

附件列表

4

文档内容仅供参考
如果您需要解决具体问题,还可以登录亿信社区
在提问求助板块提问,30分钟内帮您解决问题

如果您认为本词条还有待完善,请编辑

上一篇同环比函数

下一篇diminf函数

请先登录