跳至正文

【Tableau】TC-排序与筛选-rank与index 2.0

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

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

更多表计算,参考官方10大表计算解读:

【Tableau】10大Tableau表计算——深度解读

新增:

Sep 1, 2018

Sep 19, 2018

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

Jietu20181219-093629.jpg

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

Jietu20181219-101500

2018/1/19


了解 喜乐君 的更多信息

订阅后即可通过电子邮件收到最新文章。

《【Tableau】TC-排序与筛选-rank与index 2.0》有0个想法

    1. 你好,非常感谢我的博客能帮到你学习。
      rank是表计算,表计算仅仅对视图级别的数据有效,在Tableau中的操作顺序低于维度筛选器和度量筛选器,所以会出现你说的情况。换个说法说,表计算不是数据源层面的计算,你想要的是数据源层面的数据排序。

  1. 请教一个问题:我创建了一个地区分层结构,有省市县三级;然后创建了一个表格,行是这个地区分层结构,列是各个度量。
    默认情况下分层机构显示的是省级,我指定按某一个度量(比如人口)降序排列。
    现在我对这个分层结构进行下钻操作,钻取到市级,得到的是先对省进行排序,然后在省内对市排序,也就是说大省的小城市排在小省的大城市前面。
    我要看到每个城市在全国的排名,现在的做法是做两张表。
    我希望能用一张表实现,发布之后,读者默认看到的是省的排序,钻取之后看到的是市的排序。
    可以实现吗?

    1. 如果筛选之后还想做全国的排名,rank和index肯定是不行的,它们优先级仅限于筛选之后。当然,也可以借助于p
      rep中的排序,把排序预先计算好,这样就变成了行级别的数据。

      1. 我不是要筛选,是要钻取到下一级。首先需要的是按某个度量排序,是不是需要写出排名第几倒还在下一步。
        Prep大概没法用,因为整个视图要放在服务器端自动更新。

    了解 喜乐君 的更多信息

    立即订阅以继续阅读并访问完整档案。

    Continue reading