Tableau中的排序与筛选器顺序

自从全身心的投入到新书的写作后,效率有了明显提高,一个多月的时间,已经基本完成了初稿。抛弃了眼前的苟且,为了那诗和远方,总是需要付出巨大的勇气。前路茫茫,愿不悔往事,不负当下,不惧未来,如此安好。

排序与筛选器顺序

TOPN也是Tableau中常用的功能。这里的TOPN特指通过集添加的TOPN操作,其计算顺序与FIXED相当,位于“上下文筛选器”和“维度筛选器之间”,属于行级别的运算,是计算整个数据集的TOPN。

如下图所示,创建销售额TOP5 的“城市集”,图中的5个城市是所有产品销售额合计的前5名。在数据集层面,与这5个城市相关的所有行都已经被标记为在集内(TRUE)。由于集计算的优先级更高,其结果可以作为维度筛选器使用,那么将“城市集”拖到筛选器,就可以筛选出销售额TOP5的城市。

如果增加一个“子类别”筛选器,仅保留桌子选项的时候,我们会发现只有4个城市,北京已经没有。由于北京这个城市没有销售过桌子这个子类别的商品,所以当筛选器只保留数据集中与桌子有关的行后,北京的数据也就全部被筛选掉了。虽然北京在所有产品的销售额中排名TOP5,也不会出现在结果中。原理与上一节讲的LOD与维度筛选器的关系一致,如果我们希望子类别筛选器起作用,那么就需要将子类别筛选器调整成上下文筛选器(下图),此时的结果就变成了桌子销售额TOP5的城市。

如果我们希望计算各省销售额TOP5的城市,使用集就不能完成了。Tableau Desktop中没有类似于Tableau Prep中的PARTITION和ORDERBY函数,所以在行级别层面无法计算这种分组排序的需求。这时不妨考虑排名函数RANK, RANK函数是一个表计算函数,通过RANK函数计算出排名后,再通过表计算筛选器将排名靠后的城市过滤掉即可。 

新建计算字段“RANK销售额排名”:RANK(SUM([销售额]))。如下图所示,编辑表计算依据:省作为分区,城市作为方向,可以计算出个各省不同城市的销售额排名。将“RANK销售额排名”拖到筛选器(表计算筛选器)同样编辑表计算依据后,只保留1-5名,就得到了各省销售额TOP5的城市。

如果我们增加“省/自治区”筛选器筛选省/自治区时(下图),视图先执行“省/自治区”筛选(维度筛选器),再执行“RANK销售额排名”(表计算),然后执行“RANK销售额排名”筛选器(表计算筛选器),所以我们得到的仍然是各省销售额TOP5的城市。

下面我们增加难度,如果我们希望在筛选不同“省/自治区”的时候,仍然可以查看城市的总体排名。从下图中可看到,由于“省/自治区”是维度筛选器,所以排名只是所选择的省中城市销售额的排名,而数据集中几百个城市的总排名,看起来常规方法是无法完成。

保留所有城市的总排名,也就是要“省/自治区”的筛选不能影响RANK函数的计算结果,由于RANK函数是表计算函数,那么不影响表计算函数的筛选器就只有表计算筛选器,所以除非使用表计算函数计算出一个新的“省/自治区”字段,才能完成这个任务。

如下图,新建计算字段 “LOOKUP省”:LOOKUP(MAX([省/自治区]),0),LOOKUP函数是表计算偏移函数,如果偏移值为0,得到的结果就是得到的结果就是MAX([省/自治区])本身,所以我们就通过这种方式构造出了由表计算得到的“省/自治区”,筛选这个字段就可不影响RANK计算的结果,得到所有城市销售额的总排名。

表计算通常只用于对度量字段进行计算,但在这个例子中,我们通过对维度字段进行表计算操作,结合对筛选器顺序的知识,完成了这种特殊场景的需求。

你可能感兴趣的:(Tableau中的排序与筛选器顺序)