吃土的日子里 来一篇“集合分析入门篇”暖暖胃

浏览: 1761

随着时代和市场的发展,BI工具在当今世界企业的发展和前进中正在变得越来越不可或缺。QlikView和Qlik Sense作为BI领域的个中翘楚,被运用的也越来越广泛。在Qlik关联引擎技术支撑下,结合Qlik独有的“绿白灰”概念,我们在日常的分析中,可以轻松实现筛选,然后基于当前的筛选结果,得到我们想要的分析结果。


然而,在更加高级的分析中,我们可能经常要实现跟当前选择项不完全相同的计算需求。这时候,我们需要利用到集合分析。


何为集合分析

众所周知,在计算分析中,我们常用到的函数,包括sum,max,min,count等等都被称之为聚合函数,是指这些函数对一组值执行计算并返回单一的值。集合分析就是指在这个聚合过程中对聚合的范围(集合)加以限定。


集合分析的格式规范

以一个简单的事实表为例:


1. 我们想计算种类为鞋子的商品的总销售额,表达式:

sum({<Category={'Shoes'}>}Sales)


以此,我们可以引出集合分析表达式的基本结构:

聚合函数:sum(),max(),min()等等

最终被计算的字段:Sales

对聚合范围的限定:{    }      

需要具体进行限定的字段:<Category(需要被限定范围的字段名称)={具体限定范围}>}

格式:   <字段名称={字段范围}>(称之为集合修饰符)

字段范围中的值若为字符需要用单引号(大多数情况不加也能识别,但请一律加上......),有多个值用逗号隔开,对多个字段进行限定,再加逗号,如:

<Product={'A','B','C'},Category={'Shoes'},Date=>

注:"字段=" 表示的范围为字段所有值的集合。


集合标识符

1. 在QlikView和Qlik Sense(以下简称Qlik)中,我们用常数“1”代表应用中的所有记录,当前的选择项也是一个集合,我们用符号“$”表示。自然的,“1-$”意味着当前选择项的反选,即不包括当前选择项的所有记录。集合标识符的位置位于集合修饰符之前,如:

{1-$<字段名称={字段范围}>},    sum(1-${<Category={'Shoes'}>}Sales)

{1<字段名称={字段范围}>},      sum(1{<Category={'Shoes'}>}Sales)

{$<字段名称={字段范围}>},      sum(${<Category={'Shoes'}>}Sales)

省略集合标识符视为基于当前选择项,即sum({<Category={'Shoes'}>}Sales)

等同于sum(${<Category={'Shoes'}>}Sales)


2.应用实例,基于前面用到的事实表。

(a).加上标识符1:sum({1<Category={'Shoes'}>}Sales)


此时,可以看到在进行日期的筛选后,记录已变为两条,

之前的表达式值已由600变为350,而加上标识符1的表达式值仍保持600,筛选其他维度结果也一样(即在表达式的计算逻辑中,忽略了所有当前选择项,只保留了集合分析表达式内的范围限定)

(b).加上标识符$(当前选择项),1-$(当前选择项的反选)


此时,可以看到在进行产品的筛选后,记录已变为四条,第一个的表达式结果为450,是前两条数据002,003的加总,即加总的范围由当前筛选项Product和集合分析中Category的交集组成。

    加上$,如第二个表达式,结果相同;

    加上1-$,如第三个表达式,加总的范围为并集的反选,结果为1950,即去除002,003后剩余的数据汇总,如图: 


集合运算符

(a).在第3点的介绍中,我们知道当使用集合标识符"1"时,聚合的范围只与表达式中的字段限制相关,当使用集合标识符"$"时,是基于当前选择项与表达式中字段限制的交集。那在当前选择项中对某一维度进行筛选,同时在集合分析表达式中也对该维度进行限制时,在Qlik中是怎么进行逻辑运算的呢?

此时,相当于将当前选择项中的该维度清除来进行计算。如图:


我们在筛选框中对Category选中Clothes,但计算的结果依然是基于Category=Shoes的加总。相当于Category的筛选框未进行任何筛选。


(b).如果我们希望该维度的当前选择也对最终的结果产生影响,该如何实现呢?例如我想根据Product维度来进行汇总,需要最终的结果是在当前选择项的基础上永远加上Product=F.

此时,需要引入集合运算符。例:sum({<Product+={'F'}>}Sales),以"+="来定义集合运算的并集,即当前选择项加上表达式中范围限制。


如图,当前选择项的和为750,加上Product=F时的700,共计1450。

同理,当希望不论筛选项如何变动,都排除某一维度值时,使用"-="。

即:"+="定义并集,"-="定义补集,"*="定义交集,"/="定义对称差集。

集合修饰符

在集合分析的格式规范中,我们有提到,对某些字段的具体限制的表达式部分我们简称为集合修饰符。如图:


在之前的例子中我们使用字段范围都是某个值或某几个值,如:

<Product={'A','B','C'}>,在实际使用中,我们可能需要通过某个范围或者表达式来实现对字段范围的限定。由于文章篇幅有限,这里就直接给出实例:sum({<Date={"<=$(=max(Date))"}>}Sales) 

范围:<=;              表达式:max(Date)

注意:1.运用表达式时需记住“$”和“=”。

          2.对范围值进行限定时,使用双引号""(即使单引号一般也能识别)。

计算日期小于等于所选最大日期的销售额总和。


又如:sum({<Date={"<=$(=num('2016/8/1'))>=$(=num('2016/7/30'))"}>}Sales)。

集合分析的入门篇就先简单介绍到这里。更多精彩内容请关注后续的集合分析进阶篇,包括:集合分析中对变量,模糊匹配,高级搜索,书签,替代状态,基于另一字段的范围值,元素函数P()/E()的运用以及在集合修饰符中进行集合的运算(包括集合运算的优先顺序),集合分析中OR条件的实现等等。


总结:通过集合分析,我们可以更加自由的完成自己的分析目标,不再仅仅拘泥于当前的选择项,可以更加随心所欲的驾驭我们所掌握的数据,真正释放出数据所蕴含的价值和分析潜力,实现更加高效的自助式分析!


亦策软件

EBIStrategy 

一家国内领先的专注于大数据整体解决方案的高科技企业,

为客户提供大数据分析平台端到端的解决方案。


咨询电话:400-676-1711

推荐 1
本文由 ebistrategy 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册