使用Tableau做数据分析的一些思考
参考:
对于Tableau数据分析有两句话非常重要:
- 分析即聚合。
- 维度是聚合依据。
问题分析
需要理解复杂问题的层级关系,通常与当前层级有:向上/向下,两种关系
- 向下的层级问题,需要用
fixed
固定层级关系,也可以使用INCLUDE
- 向上的层级问题,有三种方法:
- 表计算:window_sum/total
建议使用,因为表计算是计算展示出来的数据,计算速度比较快 - fixed:直接指定需要计算的层级
- exclude:排除当前视图的层级,排除之后就根据更高级一级的维度聚合。
exclude:是按照排除指定层级之后,最小层级聚合的,比如说有三个层级,A、B、C,将B层级排除之后,将按照C层级进行聚合。
- 表计算:window_sum/total
例如:
- 简单的问题是可以直接从明细表中将维度提取出来,比如说每个国家的销量,每个国家就可以直接从明细表中
group by
出来。 - 复杂问题是引用了其他聚合的结果作为维度。比如说销售量
1、2...N
的客户数,这里的1、2...N
,无法直接从明细表中提取出来,需要先进行聚合,将聚合的结果作为维度(一般使用Fixed),再一步的聚合。
那么遇到复杂问题该怎么办呢?
首先应该做的是问题分析。将问题拆解为三个内容:
- 问题范围
- 问题描述(维度)
- 问题答案(度量)
例如问题:
有多少客户购买了1次、2次、3次…N次订单?
现在看一下这个问题的描述,思考三个问题,问题的范围是什么?问题描述是什么?问题的答案又是什么?
问题范围:可以看到,该问题没有设定范围,也就是所有数据。
问题描述(维度):它需要的是,购买了1次、2次、3次....N次订单
的XXX,所以它的维度是不同频次
。
问题答案(度量):它最后需要什么,多少客户
,因此客户数量
就是它的结果。
综上,将问题转换为标准问题结果:(no filter),不同购买频次的客户数量?
将问题转换为标准问题之后,就根据维度,度量,范围,做一定的数据分析。
遇到问题最主要的是能够分解问题,主要是对于问题维度的思考,适合这个问题的维度。
Tableau使用技巧
- 对于表的计算,
window_sum
,在使用目前视图中已经有的数据很有效。比如使用IIF
判断得到的数据,若想要都进行赋值,可以使用window_sum
,来计算。 - 对于赋予想要筛选的值/不确定的值,可以将这个字段转换为参数,之后在公式中使用这个参数,就可以根据这个参数进行筛选了。
- 在tableau中,交互条件也可以进行设置,设置交互条件之后,点击某个值,可以修改参数的值。
- 对于sum和相减,建议先sum再相减,若先相减再sum,性能会较差
SUM(IIF({INCLUDE [Product]:SUM([Profit])-SUM([Target Profit])}>0,1,0))
可以判断LOD的结果,它与SUM({INCLUDE [Product]:IIF(SUM([Profit])-SUM([Target Profit])>0,1,0)})
结果相同
-
先从熟悉的层次开始,从交叉表开始,最后转换为图形。
-
对于综合问题的层次、筛选的影响,合理的选择计算。
FIXED
是绝对的引用,不收视图的影响INCLUDE
是相对的引用,通常用于更低层次的聚合。INCLUDE
为空,相当于当前视图完成聚合,并可以根据当前视图的变换而变化。同理,EXCLUED
为空,也是基于当前视图完场聚合。
-
表计算是聚合的聚合,而LOD是在指定层级的聚合。
-
表计算,可以进行辅助计算,设定辅助计算的维度,以及计算的方法。
-
在实际业务中,关于周的数据需要多一点考虑,例如日期虽然同步了,但是每周的数量不一致。这是在实际业务中需要注意的地方。
-
将筛选器添加到上下文,会将筛选的优先级提高到最高,例如字段中有fixed,默认筛选器在fixed优先级之后,所以筛选之后不会影响fixed的计算结果。将筛选器添加到上下文之后,筛选器的优先级会高于fixed,筛选之后的结果会影响fixed的计算结果。有一种特殊情况,当筛选器的对象和fixed定义的层级是一一对应的,这时是否将筛选器添加到上下文,对fixed的计算都没有影响了。
-
tableau中集合的运用是,可以理解成多个参数,在一个仪表盘中,可以创建一个操作,用来更新集合的值。
- 默认的窗口函数的累加是从头开始累加的。
WINDOW_SUM(COUNTD([Customer ID]),0,LAST())
,注意后面两个参数,可以实现从后往前加,利用的类似与sql中的窗口函数,将末尾固定,每次累计当前行到最后一行。