今天这条恶龙有点儿硬,但是你一定可以战胜它!
还是先来看一个Viz。
原文链接:https://public.tableau.com/zh-cn/gallery/winners-and-losers-coronavirus-stock-market?tab=viz-of-the-day&type=viz-of-the-day
行级别与聚合
打开Tableau,选择示例-超市数据源。
我们想看一下2019年各产品子类别的利润率情况(利润率=利润/销售额)
很明显我们要写个计算字段啦。
更改一下利润率的默认属性为百分比,你会看到如下结果。
这个数据是不是高的离谱了?我们来看一下数据源
如果你不确定这个利润率的计算结果,可以自行用计算器检验。
检验完之后,你会发现确实是这样算的,每一行的利润/销售额得到了我们的利润率,然后呢?因为我们视图中要看到的数据是各子类别的利润率情况,Tableau会把每一行的利润率做SUM,得到各子类别的利润率。这里就有问题了。
我们有点常识的人都知道,比率相加是没有意义的,如果要算某一个类别的利润率,应该用这个类别总的利润/总的销售额,是这样吧?
也就是说,当我们要计算利润率的时候,不能使用行级别数据来做运算然后再相加,这样会得到错误的结果,所以我们要修改利润率计算:
然后我们把v1、v2放在一起做一个对比。
很明显,v2版本是我们按对应子类别先累加利润和销售额,然后再相除的结果。
在多数情况下,我们的计算字段会使用聚合字段来做分析运算,因为从业务视角通常都会有一个维度对度量做聚合,而行级别的数据更多情况会聚焦在开发视角。
我已经尽力讲的很通俗易懂了,当你的计算字段复杂的时候,理解什么时候用聚合运算什么时候用行级别运算就更重要了。
IF ELSE
如果你懂编程的基本内容,这部分对你应该没什么难度~
开始,现在我们想看一下各产品子类别的盈亏情况,利润大于0时,盈利,利润小于0是亏损,利润等于0时,保本,我需要在图表中用三种不同的颜色标识出来。
- 拖动子类别到行功能区
- 拖动利润到列功能区
根据需求,我们需要对利润来做一个条件判断:
- 如果利润>0,盈利
- 如果利润=0,保本
- 如果利润<0,亏损
今天我们讲最简单的一种,IF ELSE。
按照上面的思路,把它按Tableau能认识语言描述一下:
IF SUM([利润]) > 0 then "盈利"
ELSEIF SUM([利润]) = 0 then "保本"
ELSE "亏损"
END
固定语法结构你可以查看示例:
做好字段后把它拖动到颜色标记卡上,修改一下颜色
结束
今天讲了两个很常用的计算功能,多多实践才能完全掌握~
Practice makes perfect!
下期预告:计算(三)
网友评论