不要害怕关系中的计算
- 版本 :2022.1 及更高版本
计算可能令人生畏。使用关系的数据源中的计算看起来可能更吓人。但是没有理由害怕关系中的计算。
注意:如果您还不太适应使用关系的数据源背后的原理,则在深入探讨本主题之前阅读不要害怕关系可能会有所帮助。
计算类型
行级计算针对数据中的每条记录进行运算。例如,每个销售交易都有一个销售金额,即价格,可能会通过折扣百分比进行调整:Price * (1- ZN([Discount]))
。这是为每个交易逐行计算的,结果可以认为是在销售金额数据源中添加了一个新列。
还有聚合计算。聚合计算在可视化项的详细级别进行运算,其值取决于视图的结构。计数是聚合计算的一个示例。Count([Title])
的值取决于我们是按格式、作者还是销售日查看计数。
有关计算类型的详细信息,请参见我们的博客。
表详细级别
因为 Tableau 数据源中的每一个表都可以有自己的详细级别,因此计算与哪个表关联会产生很大的影响。例如,过去在 Tableau 中(2020.2 之前,关系之前的版本),可以通过使用常量值 1
创建计算并求和来对数据源中的记录数进行计数。1
分配给数据源中的每一行,因此总和等于行数。
但是,现在该计算的值为 1
。整个数据源没有全局详细级别,并且常量计算位于“数据”窗格底部的未分配区域中。它有自己的详细级别。对 1
进行求和就是 1
。
如前所述,与表具有相同详细级别的计算(通常是因为它们包含表中的字段)应归入“数据”窗格中的该表。例如,将名字和姓氏级联在一起得到每个作者的全名的计算(即 [First Name] + " " + [Last Name]
)放在作者表中。
但是,如果我们在一个计算中使用多个表中的字段,则计算将转到“数据”窗格底部的未分配区域。这称为跨表行级计算;它需要相关的表的行级联接,这可能会影响性能。(确保在关系的“性能选项”中设置了正确的关联基数)。
分配详细级别
由于表的详细信息级别控制计算结果的表示,因此相应的表中有计算非常重要。FIXED 详细级别表达式可用于将计算拉入特定表。表达式固定到的字段(维度声明)确定了结果的详细级别。
示例:作者图书巡展
问:每位作者参加多少次图书巡展?
答:此编号应“属于”每个作者,因此应放在作者表中。
Author Book Tour Events =
{FIXED [Author Name] : SUM([Book Tour Events])}
(这可以简单地理解为“对每个作者来说,与他们关联的图书巡展活动的总数”)
问:有多少作者没有进行任何图书巡展?
答:尝试这样的计算是诱人的
COUNTD(IF ISNULL([Book Tour Events]) THEN ([Author Name]) END)
。(这可以简单地理解为“如果“Book Tour Events”(图书巡展活动)为事件为 null,则返回作者的姓名。对每个唯一作者姓名进行计数”)
但是,这是一个跨表行级计算,因为图书巡展活动来自系列表,作者姓名来自作者表。这样的跨表计算使用内部联接,这意味着当两个表中没有相应的值时,会从联接结果中删除行。这反过来又意味着我们要求 Tableau 对不存在的内容进行计数。但是请注意,如果两个字段在同一个表中,这将是一个很好的方法。目前的计算没有任何问题,除了它不能很好地适应数据源的结构。
相反,我们需要指出每个作者是否存在图书巡展活动,并将这些结果保留在作者表中。一旦每个作者被标记为“参与图书巡展”或不参与,我们就可以计算未参与图书巡展的作者数量。
图书巡展参与者?=
IF {FIXED [Author Name]: COUNT([Book Tour Events])} = 0 THEN "No" ELSE "Yes" END
(这可以简单地理解为“对于每个作者,对图书巡展活动数量进行计数。如果该计数为零,则将作者标记为“No”,否则将他们标记为“Yes”。通过将字段命名为“Book tour participant?”(图书巡展参与者?,标记为“No”的作者和标记为 “Yes”的作者将排列出来。)
现在,我们可以对“No” 的数量进行计数,并回答原始问题。
如果我们的计算为 Authors without book tours = IF [Book tour participant?]= "No" THEN ([Author Name]) END
,我们将获得未参与图书巡展的作者的列表。(这可以理解为“对于‘Book tour participant?’(图书巡展参与者?)为 no 的每个作者,列出作者的姓名。”)
如果我们的计算为 COUNTD(IF [Book tour participant?]= "No" THEN ([Author Name]) END)
,我们将得到一个位于数据窗格底部未分配区域中的数字答案。为何会这样?因为此计算是聚合计算。
附加问题:
也可以直接使用“Book tour participant?”(图书巡展参与者?)计算的结构返回作者姓名的列表。IF {FIXED [Author Name]: COUNT([Book Tour Events])} = 0 THEN ([Author Name]) END
。此计算将位于“数据”窗格中的何处?为何会这样?在您自己的 Tableau Desktop 副本中试用,或下载此工作簿进行查看。(需要 Tableau Desktop 2020.2 或更高版本。进入工作簿后,右键单击“数据”窗格中的计算,并选择“编辑”以打开计算编辑器并查看计算注释中的说明。)
相关资源
感觉有点不知所措, 想退回去一步吗?请尝试不要害怕关系。
准备好继续探索如何使用关系进行复杂的分析了吗?请查看不要害怕更深层次的关系。
有关直接来自产品管理团队的关系的技术基础的详细信息,请查看 Tableau 博客上有关关系的系列文章。
另请参见 Action Analytics 中有关关系的视频播客,例如为什么 Tableau 发明了关系?单击 Library(库)中的“Video Podcast”(视频播客)以查看更多信息。