亿信ABI
当前版本:BI4.7

关于BI中宏的用法


宏,是一个在软件系统中经常听到的词,它是一个约定的标记,赋予该标记以特定的逻辑含义,在BI中,通常用“<#=宏名#>”,来构成一个宏的引用,目前BI中的宏,应用的地方非常广泛,以下简单归纳BI4.X中宏的一些用法。

1. 报表模板中宏的使用

1.1 表头文字中使用宏

支持表头文字中使用<#=宏名#>引用参数、表元值、函数等。

1.1.1.  引用报表参数

参数面板中用户选择的值,可利用宏显示在表头、表尾文字中,使报表的显示更为直观清晰。

1.1.1.1. 日期/年月/年参数
    •  <#=@bbq#>

表示引用@bbq参数的实际值,显示为4、6或8位字符串;

表示引用@bbq参数的显示值,显示为带年、月或日的文字。

//说明:参数后加“.txt”的用法,为BI中的对象表达式的几种常用用法之一,其他对象详情还请参考对象表达式文档。

    • <#=od(@bbq,’y-1’)#>

宏引用中也支持使用函数,如od、diminf等函数,假设@bbq为日期参数,则表示选择日期20170301的去年今日,即显示为20160301。

1.1.1.2. 维下拉参数

表示引用@xzqh维下拉参数的显示值;

参数多选的情况下,此种写法,也会自动在多选项之间加上逗号分隔。

1.1.1.3. 枚举下拉参数

表示引用@type枚举下拉参数的显示值,即文字值显示;

在枚举下拉参数多选的情况下,使用该种写法可在多选项之间自动加逗号分隔,如需要加上其他符号,可直接替换join括号中的值。

以上参数,具体示例如下表所示:

类型

参数名称

参数标题

宏示例

返回值

日期参数

@year

年份

<#=@year#>

“2017”

<#=@year.txt#>

“2017年”

@month

月份

<#=@month#>

“201702”

<#=@month.txt#>

“2017年2月”

@day

日期

<#=@day#>

“20170301”

<#=@day.txt#>

“2017年3月1日”

维下拉参数

@xzqh

行政区划

<#=@xzqh.txt#>

单选:“上海市”;

多选:“上海市,北京市”

枚举下拉参数

@type

性别

单选:<#=@type.txt#>

单选:“男”;

多选:<#=@type.txt.split("|").join(",")#>

多选:“男,女”

1.1.2.  引用表元值

报表表格中计算出的值,也可以利用宏进行引用。

1.1.2.1.固定表元
    • <#=GRID1.B1#>

表示引用GRID1表格中B1表元的值,如下图所示:



1.1.2.2. 浮动表元

浮动表计算后会有多行数据,所以浮动表元的宏引用,需要加上$美元符号,即取出来的是一组数组值。

    • <#=GRID1.A2$#>

//此处示例中,A2单元格中拾取的是主题表中的关联维表的字段

表示取主题表字段关联的维表的id值,此处是一组数组,如下图所示:



    • <#= GRID1.A2$.select(true,@.txt)#>

表示取主题表字段关联的维表的文本值,此处也是一组数组,如下图所示:



1.2 参数默认值中使用宏

日期参数中经常需要动态设置默认值,此时,也需要用到宏。

  • 例如,日期参数,默认要求动态显示当天前一天的日期,如何实现?

//可以在日期参数属性中【默认值】中输入<#=od(today(),"d-1")#>。

  • 例如,日期参数,用户只能选择过去一年和未来一年的数据,如何实现?

//可以在日期参数属性中的【起始时间】中输入<#=od(today(),"y-1")#>,在【截止时间】中输入<#=od(today(),"y+1")#>。

1.3 分析区表格使用宏

  • 表格中列头文字需要引用参数时,也可以使用宏。

例如,表中的一列指标【收入】列头文字,希望显示选择的月份参数的值作为列头指标,如何实现?

//可以在表格单元格中【默认值】中输入“<#=@bbq.txt#>收入”。

  • 行/列显示隐藏

行或列右侧属性中【显示】,如需要根据条件,控制该行或列的显示隐藏,此时也需要用到宏。

//<#=if(@type=’0’,15,0)#>,意为如果@type的值为0,则该行/列显示(15=显示1+打印2+打印预览4+导出8),否则就隐藏。

  • 排序类型

浮动维单元设置报表排序时,其排序类型可根据参数动态选择升降序,此时需要使用宏。

//<#=if(@px="0","asc","desc")#>,意为如果@px的值为0时,升序排列,否则降序排列。

【补充:排序依据不需要用到宏,可以直接写if表达式,如:if(@px="0",B1,C1),意为当@px为0时,按照B1排序,否则按照C1排序】

 

说明:大多数情况下,如果定义条件的输入框没有【公式定义向导】对话框的,大多数写法中都需要使用宏来引用。

1.4 过滤条件中使用宏

过滤条件中也可以使用宏;

  • 过滤条件中带if判断的

例如,需要实现,当login.id为0000的时候,查看所有数据,不为0000时,用户只能看到userid等于当前登录用户id的数据,如何实现?

// if("<#=login.id#>"="admin","1=1",xxb.userid="<#=login.id#>")

  • 使用sql语句中的like语法

例如:需要实现根据参数输入框中的文字模糊匹配option字段存储的数据,如何实现?

//XXB.option like ‘%<#=@info#>%’

1.5 特殊函数使用宏

  • Mkfilter,作用是过滤掉报表参数为空的过滤条件,该函数需要配合宏来使用。

//<#=mkfilter(“xxb.bbq=@bbq and xxb.type=@type”)#>

意为,当@bbq参数为空时,xxb.bbq=@bbq过滤条件不会出现。

 

1.6 钻取传参使用宏

钻取在手动传递参数时,传递的值可能来自于已有的报表参数、表元值等,此时也需要利用宏来引用,写法如图所示:



1.7 SQL数据源中使用宏

SQL数据源需要跟参数联合进行报表的制作,其中对于参数在Sql语句中的引用,也是需要用到宏的。

//定义sql数据源:select * from XXB where bbq=’<#=@bbq#>’

具体使用详见Sql数据源文档。

2. 分析报告中宏的使用

除了报表模板以外,word式分析报告除了通过拾取,来引用报表内容外,还可以通过直接书写宏文本到报表中来实现相关的内容引用,以及一些文本内容的处理,例如条件显示,循环显示等。

2.1 替换宏

  • 简单的内容替换,下面的宏文本计算后将被替换为1000

 //<#=1000#>

  • 替换宏支持BI的表达式,下面宏文本在计算后将被替换为5000

// <#=if(1>2,1000+2000, 2000+3000)#>; 等号后面可以是BI的表达式,计算后将被替换为5000

  • 获取浮动分析表格中一组维表元的文字值,并用顿号分隔

// <#=djfd.GRID1.A2$.select(true,@.txt).join(‘、’)#>

2.2 表格宏

表格宏格式如下:

//<#Table(djfd,"GRID1")#>,<#Table(djfd,"GRID2")#>

2.3 条件宏

条件宏是通过条件判断来决定具体显示哪一段内容的方法;

// <#if(A>B)#>数字A要大于B<#elseif(A<B)#>数字A小于B<#else#>数字A等于B<#endif#> ;--------计算后将根据A于B的大小比较显示不同的语句

      当然,word分析报告的条件宏具有不仅仅是条件显示一些文本的能力,它还能够通过条件语句控制一大段文本是否显示,这一大段文本中可以拥有多种多样的段落,图片,甚至表格。

2.4 循环宏

循环宏是word式分析报告中引入的一种新的宏,它能够通过一条循环语句控制一段文本重复出现多次,并且能够在每段文本中使用获取与循环的次数相关的变化的值。

// <#for(I in ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"])#>1.小明在<#=I#><#if(I="星期六"|I="星期天")#>不需要<#else#>需要<#endif#>上班<#endfor#>

 计算后的文本为:

1.小明在星期一需要上班

2.小明在星期二需要上班

3.小明在星期三需要上班

4.小明在星期四需要上班

5.小明在星期五需要上班

6.小明在星期六不需要上班

7.小明在星期天不需要上班

循环宏的主要意义在于遍历一个数组,例如遍历某个浮动表元A1,我们便可以通过<#for i in A1$#>来依次取得A1的值来构造需要的文本内容了。循环过程中支持在需要循环显示的文本内部插入图片,表格,段落等等,也支持为循环内容加上标号,例如上例文本内容加上了数字标号,计算结果中则会自动将标号进行递增处理。

【Tips】上述循环宏示例中,每一行文字前面自动递增的数字是如何实现的呢?

这个功能借助了word的自动递增序号设置,只要我们将for和endfor之间的循环文本通过word设置好序号,那么计算后,每次循环的内容都将继续使用word的序号设置,从而产生递增的数字。

附件列表

0

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

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

上一篇BI中用脚本控制颜色

下一篇禁用固定分析表禁止内存计算功能对生产sql的影响

请先登录