美文网首页tableau技能
【Tableau】TC- 表计算之求和

【Tableau】TC- 表计算之求和

作者: 匏瓜君 | 来源:发表于2018-10-07 11:59 被阅读495次

在Tableau中,有多个求和的计算,典型的有 sum() 、total() 、 window_sum () 、 running_sum()四种,今天我们对比一下它们的区别,在合适他们相互等价。

1、聚合计算与表计算

sum()是聚合计算,是基于数据源的计算,它的参数就是数据源的字段,比如 sum([sales]);而其他三个都是表计算,是基于视图的计算,因此参数必须是聚合,比如说 total( sum([sales]))

2、total(expression)

total(expression) 、 running_sum(expression)这两个表计算的参数都只有一个,就是要执行表计算的聚合。比如

TOTAL(SUM([数量]))

RUNNING_SUM(SUM([数量]))

区别在于,total是为每个分区返回同一个结果。我们知道,表计算的逻辑是 partition分区+addressing寻址,total为各个分区返回同一个数值。

为了更好的理解total,可以参考一下“总计百分比”这个表计算,它的公式就是sum/total,从而计算每个产品在总数中的占比,因此对于多个产品而言,一个分类的total是一致的。

合计百分比 表计算 : SUM([数量]) / TOTAL(SUM([数量]))

3、 running_sum(expression)

我们看一下running_sum()

同样是分区和寻址,假定分区和上面total一样,也是每个类别一个分区;寻址也是向下。但是,对于同一个分区的不同行,running_sum()返回了不同的数值,这就是它的魅力。

在统计上,这就递归运算(recursion),递归运算的结果依赖于它自己。

Recursion occurs when a thing is defined in terms of itself or of its type.

3、window_sum(expression,[start,end] )

这个的重要特点是,它的参数可以有三个,也就是可以指定范围的开头和结尾,然后在计算求和。因此,可以理解为是指定了起止范围的Total().

这里就涉及到另外两个表计算函数,first()和last()。

first(),返回当前行到分区中第一行的行数。

last(),返回当前行到分区中最后一行的行数。

这里需要注意一个问题,如果是当前行,first和last都会返回的是0 。为了方便对比,还有两个表计算也会用到,

size(),返回分区的行数;有点像total+count+分区,分区中行数的汇总数值。

index(),返回分区的当前行的索引;

回来说window_sum()

没有没有起止范围的window_sum(),和total()是一样的。

WINDOW_SUM(SUM([数量]),FIRST(),last())  = TOTAL(SUM([数量]))

我们写一个新的表计算,把last()改为0,绝对值0代表当前行的索引,也就是如下:

WINDOW_SUM(SUM([数量]),FIRST(), 0 )

这个的意思是说,返回分区中,从第一行到当前行的总计求和。我们看一下结果:

上面红色部分是到当前行的window_sum(),

你也许会发现,这个结果,和running-sum()的结果是一样的。

从分区第一行,到当前行的总计求和(累计求和)

WINDOW_SUM(SUM([数量]),FIRST(), 0 )  =  RUNNING_SUM(SUM([数量]))

7 Oct 2018 

相关文章

网友评论

    本文标题:【Tableau】TC- 表计算之求和

    本文链接:https://www.haomeiwen.com/subject/bihlaftx.html