2.0升级说明:Tableau 2018.2版本更新了一个新功能——嵌套排序,无需辅助字段就可解决本博客中提到的两个维度下排序错落的问题。

说明:如何通过index或者rank实现多级别筛选,同时结合在第二级别建立TOP规则。

以Tableau超市数据为例,希望按照省份、城市排序,显示销售额;同时能只看每个省份的TOP5城市数据.

屏幕快照 2018-09-01 上午8.43.57.png

在2018.2版本之前,Tableau的排序不支持两个以上维度的嵌套排序,使用默认的排序功能,结果不是我们想要的样子,因此需要通过index或者rank表计算方式辅助实现「嵌套排序」。新版本升级之后,无需辅助字段,仅需按照度量排序即可轻松实现。

  • 旧版本不支持嵌套的逻辑:每个字段,都是在全局状况下排序,而不考虑分区。因此当一个字段存在于多个分区,就会在全局排序与当前分区排序不一致的情况。(如下图)

1、老版本的排序问题与如何使用表计算字段解决 old

下图:旧版本排序实例,洛阳同时存在于河南等其他省份中,默认排序按照全局聚合在每个分区中排序,也就是用全国的洛阳销售额在广东/河南等各个省份内排序,在各个省份下的排序出现问题。

排序

屏幕快照 2018-09-01 上午8.50.30.png

下图:在分区字段后面增加rank函数;强制在「省/自治区」+「城市」的详细级别实现排序。

屏幕快照 2018-09-01 上午9.04.31.png

2、新版本的嵌套排序 new

2018.2版本之后,可以通过单击执行嵌套排序,而不必创建上述的计算字段或合并维度。

还是用默认的超市数据,我们选择几个省份的城市数据,将光标悬停在一个可视化项轴上,出现一个排序图标,「单击一次升序对数据进行排序,单击两次按降序对数据进行排序,单击三次清除排序」。

嵌套排序 默认.png

假如按照降序排序,那么结果如下图,上面出现的「洛阳」的排序错误,在这里无需额外字段即可解决。

嵌套排序 排序后.png

3、如何显示TOP?

在Tableau的操作顺序中,条件和TOP顶部筛选的优先级高于维度筛选器,所以使用TOP建立集合,再拖入到二级分类中是不行的,TOP10只会引用全局的TOP10,而不是二级分类后的TOP10,所以出现下面的问题:我想要各省的TOP10城市,结果系统给我的是全部省份的TOP10城市.

屏幕快照 2018-09-01 上午9.15.46.png

如何修正?继续使用了上面的rank函数返回值,拖入到筛选器,或者先新建字段再拖入筛选器,选择需要的TOP数量,比如5. 不足之处是不能使用参数。

屏幕快照 2018-09-01 上午9.18.41.png

4、使用index实现排序——关于index的位置

index()表示返回分区中当前行的索引包含与值有关的任何排序。

  • index的索引,与放置的位置有关系,与数值没有关系。当放在城市(维度)最后面,index的索引是变动的,不与任何值有关;当放在城市(维度)前面时,index的索引与城市关联,并随着排序的变化而变化;(可以参考下面的动图)

index.gif

  • 当index放在维度最后时,索引与数值无关;因此默认的排序还是基于全局的,不能实现我们想要的基于二级数值排序;因此要放在维度之前,这时的索引与维度关联,并随着维度字段而变化。(图)

index 位置.png

5、几个注意事项:

  • index函数部分情况下和rank类似,建立排序可以使用,二者区别在于,index是建立维度的索引,与数值无关,而rank是基于expression聚合表达式建立排名;
  • 不管是rank还是index,建议放在你要排序的字段前面;如果不想显示,可以“隐藏标题”。

 

1 Sep 2018 rank
2 Sep 2018 增加 index

 

补充 3 Oct 2018

使用index做公共基准的变化趋势

在官方博客中,有一个查看三部电影自上线后每周的票房收入案例,需要先通过index()在日期的序列上建立索引,然后把这个索引加入到列字段,再通过颜色显示电影名称。视图是这样的。

十大表计算之2 index.png

我刚开始不明白它的逻辑,后来发现可以通过交叉表,更好的发现逻辑。右键上面的视图工作表,复制交叉表。你会发现,Tableau通过index创建了一个基于days的索引,然后把它作为连续数值生成轴。

十大表计算之2 index -2交叉表.png

用这个功能,我们可以对比多个新品上线后的表现。

 

新增:

Sep 1, 2018

Sep 19, 2018

tableau 在superstore的案例中使用了如下的用法,使用index函数把区域分区每三个一个单位。说实话,这个用法很神奇。

Jietu20181219-093629.jpg

默认情况下,使用index会给每一行添加一个索引编号,如下图。使用 INDEX() / 3 – 0.6,再增加round四舍五入,可以整理为整数。再+1,就是我们上面想看的结果。

Jietu20181219-101500

2018/1/19