对于曾在大规模数据集上进行过大量数据准备工作的人来说,在清洗和整理数据来适应 Tableau 可视化需求的过程中,管理工作簿的“性能资源”至关重要。
这意味着,考虑 Tableau 工作簿性能时,需要计算系统中每个点击操作的成本消耗。如果你主要使用 Tableau Desktop 创建分析,就会发现它支持更复杂的数据转换,并能通过快捷方式统一管理字段的默认属性。
虽然之前我们也分享过一些性能慢排查清单,但本文将重点分享几个立竿见影的优化技巧,不仅能帮助最终用户节省时间(如避免看板加载时的漫长等待),也能让分析师在日常维护和更新工作簿时保持高效。
Part.A 警惕高数据标记量
作为 Tableau 报表开发者,你可以看到每个工作表中的某些功能组件。这些组件被称为“摘要卡”,可支持你查看关于视图中数据的各种汇总统计信息,包括视图中标记的总数量。
为什么这很重要?
众所周知,大量的数据标记会导致 Tableau 性能变慢,因为每个标记代表一个需要在工作表中渲染的数据点。为了避免标记数量过多,并同时仍能向最终用户展示大致的分析视图,以下是一些可以思考的选项,帮助你创造双赢的局面。
最佳实践#1:考虑仅在需要时使用文本表格
很多时候,报表的最终用户(如部门主管和企业高层)认为表格是绝对必要的。所以,你仍然可以在需要时提供这些额外的细节,但不必在仪表板中强行加入明细表。
作为替代方案,你可以利用仪表板操作,在选择主仪表板(如概览)某个字段的基础上,将用户引导到一个单独的(即次级)仪表板,并在次级仪表板中展示完整的(甚至是经过筛选的)数据表。设置一个导航按钮,提供返回主仪表板的选项,如此就能保持高效。
如果分析要求你将所有内容都包含在单个仪表板中,则可考虑使用仪表板筛选操作,将表格设置为不可见(排除所有值)。这可能需要强制选择才能显示表格中的相关数据,从而完全避免原始数据和高标记数量。
如上图只需处理 6,000 个标记,而原始表格的标记数量接近 107,000 个。当用户单击选中条形图中的第一个类别(“技术”)时,表格会在仪表板中以更有限的标记数量出现。然后,就可以使用其他的筛选器进行深层交互。
这个技巧关键在于确保初次加载仪表板时不显示表格,从而大大减少仪表板的整体加载时间。
最佳实践#2:也可考虑使用集
集是从表格中获取关键数据并将其移动到顶部的最佳方式。一般来说,报表用户不会探索已经减少到 6,000 个标记的全部数据。也许他们更愿意查看前 10 个、25 个或 100 个呢?
在上面的筛选视图中,可以看到“技术”和“手机”两个类别为选中状态。然后,我们从表格中得到了 10 个最盈利的订单。通过采用这种交互设计,加载仪表板完全没有延迟。
PS:通过使用工作簿菜单中的“分析”标签,表格顶部显示了总计。此外,散点图有助于突出显示基于销售额和利润值的异常值,无论是好是坏。
Part.B 创建良好的关系模型
在 Tableau 中,不要忽视默认设置。意思是,Tableau 的默认设置往往也是实现所需结果的最有效方式,包括 Tableau 工作簿中的数据模型。
当然也有一些例外,比如无论如何都要避免使用层次结构。
最佳实践#3:考虑使用关系建模而非联接
在 Tableau 中,当你连接到数据源时,连接界面会默认展示关系模型的逻辑层。在这里,你可以通过使用共同字段(或相关字段)将两个或多个表“关联”在一起。
虽然进入物理层,仍然可以使用联接。然而,如果你的操作方式只能使用大型、非规范化的表格,那么确保数据正确就可能需要额外的处理。众所周知,由于不同粒度级别的数据容易导致重复计算或数据重复问题,使用联接操作常常会出现不理想的表现。
切记,混乱的数据只会让分析结果变得混乱!
不过,在 Tableau 2020.2 版本中,随着关系模型的面世,情况发生了变化。实际上,Tableau 将原本在数据源层进行的“联接”行为下放到可视化层,从而让各个数据表能更好地协同工作,帮助你实现最终分析目标。
所以在理想的数据建模过程中,首先要在逻辑层中加载一个事实表作为主表;接着,再加载结构清晰的维度表,为事实表中的数据提供补充说明。这种高效模型被称为星型模式(star schema)。
这么做有什么好处?最大的优点在于,确保只有在需要生成某个特定可视化时,相关数据才会被处理。例如,如果有一张事实表和两张维度表,但只用事实表和其中一张维度表的字段来创建工作表,那么另一张维度表就不会被激活,Tableau 也会忽略它。
这与完成工作簿后使用“隐藏所有未使用字段”的原理类似,隐藏的字段不会被处理,从而节省存储空间和计算资源。
在 Tableau 2019 及更早的版本中,你只能依靠联接和并集来处理数据。而随着数据关系功能的增强,一切都得到了极大的改善。尤其是当数据粒度不同的时候,Tableau 都能轻松应对。
Part.C 其他性能优化技巧
以下是一些开发工作表和仪表板时有助于你提升工作簿性能的小技巧。
最佳实践#4:使用固定的仪表板尺寸
这样,Tableau 就可以将尺寸信息缓存到内存中,从而实现更快的响应速度。此外,我们甚至建议你将所有对象都放置在结构整齐的容器中,精确到仪表板尺寸的每一个像素。以后,你就会感叹,尺寸原来这么关键!
最佳实践#5:优先使用“计数”而非“计数唯一”
你可能会说,单个数据表无法支持这一点,但其实可以实现。如果你通过 SQL 将数据整合在一起,或使用联接来补充上下文,那么尝试采用“数据关系”,能让上下文保持独立,再利用 Tableau 自动生成的度量(计数)字段,就能轻松实现“计数”,从而避免使用“计数唯一”。
此外,如果你按照以上建议操作,最终可能会出现一个非常大的维度表与一个相似甚至更大的事实表相连接。这时,无需担心,你可以尝试将维度表作为“锚定”表(即核心表),看看是否能够提升性能。通过性能记录功能,你可以实际测量出性能改进的秒级或毫秒级效果。
最佳实践#6:关系的基数和引用完整性也会影响性能
如果你的维度表中所有值均为唯一,那么它与事实表之间的关联就是多对一关系。同样,如果你确定两张关联表中的数据完全匹配,那么可以选择“所有记录匹配”。
不过,需特别注意后者:建议保留默认设置(即“某些记录匹配”),只有在针对工作簿性能进行专项调优时才做调整。因为如果不确定,很可能会出现数据缺失,导致分析结果错误,最终引发争议……你懂的。