跳至正文

[知乎问答] 计算业绩TOP N团队在全公司的销售占比

问:

使用场景:筛选器中有大类、小类、项目三个维度,视图中行级别是团队(一个维度),求前10团队团队对应的某度量聚合值在整体度量值中的占比是多少?

尝试一:用{exclude [团队]: sum([度量])}作为”整体度量“,发现这个计算字段得出来的值会比真实的少,因为团队作为维度筛选器是在excelude这个lod计算表达式之前的。这种方式结果有问题的,又尝试了fixed。。。

尝试二:用{ fixed [大类]、[小类]、[项目]:sum([度量])} 作为“整体总量”时发现,某些团队的项目有3项,某些有5项,这样得出来的“整体总量“是不一样的,这也不是想要的效果。

想请教各位大神有没有遇到类似的情况,如何解决?

喜乐君答:

大清早掠过,既然提问者到我的知乎私信了,我就回来回答一下,说一下此类问题的思路,而非简单地回答问题。 1、但凡涉及到“占比”问题,首选的计算是表计算——表计算的“合计百分比”(total),而非FIXED LOD。

虽然合计百分比也是两个详细级别的问题,虽然表计算的“合计”(Total)也确实可以对应LOD表达式的Exclude LOD;但是表计算永远是最优考虑,因为性能更好、更容易理解。

2、由于表计算的计算级别比较低,表计算只能对视图中数据有效,所以第一确认是,“占比”是否仅仅对视图中筛选后的结果有效。

3、占比的对象是“前10”,这就涉及到要把数据库中的离散字段,取出来一部分作为样本。“前10”最早是出现在“筛选器”功能——顶部筛选中,但是筛选仅能保留 前10,不能同时保留“前10”和“前10之外”,所以需要用“筛选”之后的更高级的功能——集set。

集用于把某一部分筛选的结果保存为样本,同时集是布尔计算,相对于把数据一分为二,特别适合于基于动态条件的内外对比

4、有了集set,有了表计算,占比就可以完成了。

5、筛选器仅仅用于缩小整体的数据样本。但是由于集的操作顺序优先于维度筛选器,因此如果要对筛选之后的数据有效(大类、中类等),那么把筛选器“加到上下文”,解决优先级问题。

6、注意,全程其实不会涉及到LOD表计算——虽然Total背后可以对应exclude LOD!

不要因为刚刚学习了LOD,加上LOD看上去很高级,就认为高级计算都要用它,LOD计算,仅用于在表计算无法完成任务,且当前视图中增加另一个详细级别(level of detail)的聚合时才有效!

如果学习了什么,就用什么解决一切问题,这就是典型的“铁锤人倾向”:

——“在手里拿出锤子的人看来,到处都是钉子”。

最后,推荐一下我的新书吧 ,京东有售。刷新历史最高价,但是也刷新你对tableau的认识。

《数据可视化分析:Tableau原理与实践》

了解 喜乐君 的更多信息

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

Continue reading