在这篇博客中,Joshua Milligan介绍了如何使用Prep来实现字段按照销售来排序,这里使用了聚合aggregate功能和连接join,有助于更好地理解这两个功能。

Ranking in Tableau Prep Race - First, Second, Third

让我们使用熟悉的超市样本数据,下图我们使用订单销售额为各个州的顾客做了排名。在Tableau desktop中,我们使用了表计算函数——rank,这本身倒也不是难事。

不过难点在于,使用表计算你不得不设定正确的寻址方向和分区(在这个例子中不是特别难),而且随着分析层次的增加,分析的复杂性也会增加,这会导致问题。如何在数据源层面实现排序呢? ——表计算可是在视图层面计算,与数据源无关。

Ranking in Tableau

Tableau prep的排序

让我们看看如何在prep中实现这个功能。我们以各州的顾客排名为例,下面是操作步骤:

  1. 创建一个“聚合”步骤,用“分组”保留州和顾客字段:
  2. 在聚合之后,添加一个步骤,从而包含了聚合中的所有字段:
    Aggregate Rows Step in Tableau Prep
  3. 出于分析的目的,把这个步骤和之前的聚合做连接——实际上就是自己与自己连接:
    Join to get Rank in Tableau prep注意我这里使用了“内关联”,先用州做相等匹配(保证排名实在各州内部做排名),然后增加了一个条件,聚合的销售要小于等于聚合后的步骤中的字段。换句话说,我想匹配的是同一个州中,拥有更多销售的顾客。如果顾客A有最高的销售额,它只能和它自己匹配,因此计数时就只有1——排序就是1
  4. 增加一个聚合,计算每个州每个顾客的记录数 the Number of Records per State and Customer :
    Count the number of matches to get the rank in Tableau Prep这个数字就是在各州中,各个顾客的排名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…
  5. 最后添加一个清理步骤,重命名字段即可:
  6. 最后,我们可以把清理的结果和原始的记录关联起来,最后就可以输出具有排名的原始数据!

至此,我们把在desktop中可能会非常复杂的问题简化了。你想要比较每个州贡献前10名的顾客吗?很容易了。你想看看哪些顾客在这个州是前几名在另外的州却垫底儿吗?也容易。类似的分析其实无穷无尽,只因为我把复杂的问题放到了prep中,分析从此变得更加简单了。

///当然,在原文的评论中,有人提出来,如果两个顾客的销售相同,就会出错,后期我们会修改这个方法。

原文地址: