本文通过税务总局重点税源预警分析项目中的多指标权重计算解决方案,介绍了BI中的自定义统计算子功能。
一.复杂的评价统计需求
1. 多指标权重统计分析背景
用户希望通过一组指标及各指标的权重计算出各基层单位的风险指数,从而找出风险较大的企业或单位。如在税务行业中,用来进行风险预警的指标有税负类指标、能耗类指标、收益类指标和弹性类指标;在统计分析前,需要根据纳税人适用的预警指标的影响程度分别设置权重,各指标的权重会直接决定统计标识出的风险企业结果。因此如何确定这些指标的权重就显得非常重要了。
2. 税务行业的多指标评价赋权方法——熵值法
熵值法是根据指标的取值变异程度来赋权的,指标变异程度越大,信息熵越小,该指标提供的信息量越大,权重也应越大;反之,某项指标的指标值变异程度越小,信息熵越大,该指标提供的信息量越小,该指标的权重也越小。将多指标分析简化为各指标的信息量大小的权值分配,从而为进行综合评价提供了一种科学、有效的方法。因此,税务行业用户比较倾向于使用熵值法进行企业涉税风险分析。
3. 期望的权重计算表样
权重的计算会根据选择的报表时期、企业范围,统计各指标在企业群体中和历史时期中的变异程度;因此,权重计算时,我们需要让用户能灵活的指定报表时期和企业范围。
下表列出了含部分指标的权重统计结果表样:

图1:权重计算表样
4. 具体的统计算法描述
以上图中指标B3【总体税负与行业比较】的信息量和权重计算为例:
首先需要计算出B3指标的原始值,即企业的总体税负与企业所在行业总体税负预警下限值间的比较差异;假设这个【企业与行业比较差异】指标值确定后记作zb,根据统计算法需要对zb进行某种同度量化(非负标准化)运算,在此案例中选择的同度量化方法是将每个企业的zb和所有企业zb的平均、所有企业zb的方差进行比对运算后加常量的算法,具体如下:
(单个企业【zb】-【zb】总体平均)/【zb】总体方差+5
假设该结果为D,在这个结果上再进行统计分析,才能得到一个信息熵因子:
D/SUM(D) * LN(D/SUM(D))
假设这个结果是F,通过如下处理,得到信息量:
1+1/(LN(_n()))*SUM(F)
假设求和统计函数记作_s,求平均记作_a,求计数记作_n,求方差记作stdev,综合以上统计过程,图1中B4表元【总体税负与行业比较指标信息量】的“超复杂”统计表达式如下:
1+1/LN(_n())*_s(((zb-_a(zb))/stdev(zb)+5)/_s(((zb-_a(zb))/stdev(zb)+5))*ln(((zb-_a(zb))/stdev(zb)+5)/_s(((zb-_a(zb))/stdev(zb)+5))))
此信息量占各大税种指标的信息量总和的比,就是我们要计算的图1中的B5表元【总体税负与行业比较指标权重】。
可以看出,权重的计算相当复杂,企业个体zb值与总体zb统计值间频繁进行比对,每个个体比对后的结果再次做总体统计,然后是再次的复杂比对运算…
BI@Report能实行如此复杂的统计计算吗?答案是肯定的!BI@Report不但可以实现,而且因为支持自定义算子还可以实现得很简单。这里,我们还是先来看看用一般的报表制作方法该如何实现。
二.一般的报表实现方法

图2:一般权重计算表样
1.说明:
图2是用一般报表实现方法设计的【多指标权重计算报表】部分列截图,其中第6行是浮动行,计算后,可以浮动罗列出所有企业的明细数据。
可以看出,为了计算出【总体税负】的权重(I7表元),需要罗列所有企业的与行业比较值(G6),在G6基础上,需要计算很多中间的辅助统计结果,如:总体平均(G4),总体标准差(G5),并根据熵值法评价算法,多次计算个体和总体间的运算比对结果(如:H6,I6),最终才能计算出信息量(I4),此因子占所有指标信息量总和的比重即是总体税负的权重(I7)。
图2的报表上增加了很多中间行列,在展现时,需要特别将辅助中间计算的行列设置隐藏。
2.不足之处
- a).表样复杂,维护不便;如图2,一个指标【总体税负与行业比较】的权重计算,在报表上就使用了许多行列来辅助运算和统计,在维护此报表的设计过程中,用户需要清楚所有的业务细节,否则会无从下手。
- b).由于报表设计需要在罗列所有企业的指标值基础上,做表内的多行统计;由于统计的样本户数一般情况下都会比较多(>6w户),在不分页的情况下,此表计算很慢;
- c).若出于报表显示和效率考虑给报表设置分页,由于权重中间结果都依赖于表内计算,此时,得到的统计结果只对当前页的企业样本有效,不满足用户统计评价的要求。
三.使用自定义统计算子

图3:用自定义算子实现的权重计算表样
1.说明
图3是在BI@Report中使用自定义算子实现的权重计算报表。可以看出,对于每个要计算权重的指标,报表设计时都很简洁,只需要一个表元定义统计方法就可以完成信息量的计算了;如【总体税负与行业比较】这个指标,在上图中的表元C5中即可直接计算出其信息量,再和总信息量y5求比重即可得到该指标的权重,见C6表元。
2.寻找函数_xxl
那么表元C5定义中的_xxl()函数到底做了些什么,为何能将那么复杂的统计算法如此魔法的化繁就简呢?
|
原来,自定义函数_xxl()将所有业务相关的统计描述和统计算法定义在了_xxl函数体中,正因为有了这个定义,我们才可以在设计报表时,无需考虑中间的那么多单个和总体间的比对和再统计过程。
3.理解_xxl自定义统计算子
通常地,算子其实就是一种特殊的操作符,它能对输入的参数进行各种运算处理后得到一个结果;从这个意义上说,所有的函数也可叫做算子。
在BI@Report中,算子特指涉及到数据库统计运算的函数,其命名一般用下划线“_”开头,如求计数算子_n( ),求和算子_s( ),求平均数算子_a( )。
从图4可以看出,_xxl函数体中引用了大量的求计数_n(),求和_s(),求平均等算子,有很多次数据库统计和多层的嵌套;所以准确的说,_xxl是在BI@Report中定义的一个熵值法计算指标信息量的算子。
4.使用自定义统计算子的好处
BI统计算子功能可实现个体指标和总体统计数据间的复杂运算比对分析;虽然统计算子定义和解读起来比较复杂,但统计算子将用户复杂的业务统计数理模型封装到了公式模版内,只需要定义的专业人员理解和维护就行,报表制作的业务人员可以轻松引用;使用统计算子,报表制作时无需生成每个企业单个的统计比对结果数据行,系统可直接对数据库进行整体统计和比对运算。
自定义统计算子给用户带来了如下惊喜:
- a).报表制作简单;由于所有的业务统计模型都被封装到算子的函数定义体中,报表设计用户仅需要了解_xxl算子的作用,不用关心具体如何定义,就可以制作出满足用户需要的报表;
- b).报表维护安全清晰;图3和图2比较起来,维护的工作该何其简单!因为业务统计中间过程已不再暴露和分散在分析表样里,各中间计算结果都由BI@Report的算子支持引擎作为一个整体自动解析和执行。
- c).统计计算准确,执行效率高;由于复杂统计过程统一交由BI后台算子引擎处理,BI直接将统计表达式解析为数据库端的多个子查询连接并进行优化,强大的数据库统计查询确保了数据统计的正确性和高效性。
- d).统计方法维护集中,扩充方便,业务用户在业务推进过程中可不断积累和完善适合本行业的数理统计模型。
四.认识BI@Report的统计算子
1.算子概念
在BI@Report中,算子特指涉及到数据库统计运算的函数,其命名一般用下划线“_”开头,如求计数算子_n( ),求和算子_s( ),求平均数算子_a( )。
2.BI中的基本算子:
_n() 计数
_a() 平均值
_s() 求和
_max() 最大值
_min() 最小值
在BI统计函数中也有通用的sum、max等函数,如图:

图5:BI@Report的统计函数
这些统计函数和基本算子有什么差别呢?如上图说明文字所说,一般的统计函数会对传入的一组参数计算,而算子是专门对数据库内满足条件的记录做统计的。
注意问题:
对算子_n(),系统统计方法是不计算空值表元的,所以如果不想因为表元空值漏计,就必须以非空表元为参数,如单位代码、单位名称等。
3.常用数理统计函数及其算子表达式
在BI@Report中,用户通过基本的统计算子,可定义出自己所要的任意数理统计分析算法。用户仅需掌握3个基本算子,SUM、AVE、COUNT,大大降低了用户进行个性化数理统计分析的门槛。
假设参加运算的表元叫ZB1和ZB2,在BI中我们可以将常用统计函数定义如下:
方差: 统计表达式(n*∑X2 – (∑X)2)/(n*(n-1))
BI中可定义为:(_n(ZB1)*_s(ZB1*ZB1)-_s(ZB1)*_s(ZB1))/( _n(ZB1)*( _n(ZB1)-1))
标准差:也叫均差,是方差的平方根,反应变量波动的程度;
BI中可定义为:
SQRT((_n(ZB1)*_s(ZB1*ZB1)-_s(ZB1)*_s(ZB1))/( _n(ZB1)*( _n(ZB1)-1)))
另,BI中也支持直接提供了标准差函数stdev
偏差:也叫离差,是实际值与平均数之间的差,定义是X-∑X/n*(n-1);
BI中可定义为:ZB1-_s(ZB1)/_n(ZB1)*(_n(ZB1)-1)![]()
平均偏差:
BI中可定义为:_s(abs(ZB1-_a(ZB1)))/ __n(ZB1)
协方差:即每对数据点的偏差乘积的平均数COVAR(array1,array2)
BI中可定义为:s(ZB1 – _a(ZB1)) * (ZB2 – a(ZB2))) / _n(ZB1)
4.BI自定义统计算子功能特色
- a).可扩充的数理统计模型
通过BI@Report的公式模版管理,用户可以自定义适合行业业务需要的数理统计分析算子,来实现行业中不断发展的数理统计模型需求。
- b).复杂多层统计嵌套,轻松解析
目前,BI@Report能支持指标统计的多层嵌套处理,再复杂的统计表达式组合,BI都能轻松解析,精确统计。
- c).执行效率高
由于复杂的统计算法解析后,BI生成了数据库端的优化后的sql语句,提交数据库执行,可确保复杂数理统计较高的执行效率。
- d).一次定义随处可用
统计算子定义后,无需做特殊设置,即可在BI系统中随处可按需查看和引用,如拖拽式即席分析,qbe查询界面,过滤条件定义向导等。