在这篇博客中,Joshua Milligan介绍了如何使用Prep来实现字段按照销售来排序,这里使用了聚合aggregate功能和连接join,有助于更好地理解这两个功能。
让我们使用熟悉的超市样本数据,下图我们使用订单销售额为各个州的顾客做了排名。在Tableau desktop中,我们使用了表计算函数——rank,这本身倒也不是难事。
不过难点在于,使用表计算你不得不设定正确的寻址方向和分区(在这个例子中不是特别难),而且随着分析层次的增加,分析的复杂性也会增加,这会导致问题。如何在数据源层面实现排序呢? ——表计算可是在视图层面计算,与数据源无关。
Tableau prep的排序
让我们看看如何在prep中实现这个功能。我们以各州的顾客排名为例,下面是操作步骤:
- 创建一个“聚合”步骤,用“分组”保留州和顾客字段:
- 在聚合之后,添加一个步骤,从而包含了聚合中的所有字段:
- 出于分析的目的,把这个步骤和之前的聚合做连接——实际上就是自己与自己连接:
注意我这里使用了“内关联”,先用州做相等匹配(保证排名实在各州内部做排名),然后增加了一个条件,聚合的销售要小于等于聚合后的步骤中的字段。换句话说,我想匹配的是同一个州中,拥有更多销售的顾客。如果顾客A有最高的销售额,它只能和它自己匹配,因此计数时就只有1——排序就是1
- 增加一个聚合,计算每个州每个顾客的记录数 the Number of Records per State and Customer :
这个数字就是在各州中,各个顾客的排名The Number of Records is the number of matches from the join which ultimately is the Rank of the customer within the State. So, we’ll…
- 最后添加一个清理步骤,重命名字段即可:
- 最后,我们可以把清理的结果和原始的记录关联起来,最后就可以输出具有排名的原始数据!
至此,我们把在desktop中可能会非常复杂的问题简化了。你想要比较每个州贡献前10名的顾客吗?很容易了。你想看看哪些顾客在这个州是前几名在另外的州却垫底儿吗?也容易。类似的分析其实无穷无尽,只因为我把复杂的问题放到了prep中,分析从此变得更加简单了。
///当然,在原文的评论中,有人提出来,如果两个顾客的销售相同,就会出错,后期我们会修改这个方法。
原文地址:
- Rank and Ranking in Tableau Prep by Joshua Milligan