作者:Jeffrey A. Shaffer

翻译:张玲

校正:丁楠雅

phpdesktop报错433提速20倍3个细节优化Tableau工作簿加载进程附实例 JavaScript

本文约3000字,建议阅读10分钟。

本文为你简要先容快速加载Tableau事情簿的技巧,以优化其性能。

Katarzyna \公众Kasia\"大众 Gasiewska的Tableau Public主页上常常有一些精彩的可视化作品,她拥有100多位粉丝,如果你没有位列个中,那么你遗憾地错过了不少作品。

她在Twitter上揭橥的第一部可视化作品是她最近参加Iron Viz大赛的入选作品《Water, Water Everywhere》,以是当她上周发布新作品的时候,就立即引起了我的把稳。
这部作品叫《DID YOU SRSLY NAME ME THAT?》,是上周五的Tableau Viz。

《Water, Water Everywhere》:https://public.tableau.com/profile/kasia.gasiewska.holc#!/vizhome/Watereverywhere/WaterFootprint《DID YOU SRSLY NAME ME THAT?》:https://public.tableau.com/profile/kasia.gasiewska.holc#!/vizhome/USBabyNames_4/BabyNames

我在看到作品图片时就急速被牢牢吸引住,在终极点开作品链接前,我把稳到她的推文里写到“初始加载韶光太长太长”。
当打开作品时,我急速对她的痛楚感同身受。

仔细不雅观察Viz

除了漫长的加载韶光(我在Tableau Public上加载它花费了超过一分钟的韶光),点击男孩/女孩名字也须要很长的韶光才能筛选。
但当我仔细不雅观察时,我创造并没有任何太繁芜的东西,只有一个条形图、一个径向条形图和一个点图而已。

以是,我决定下载全体事情簿一探究竟。
这时,疼痛值明显增加,如果找一位年夜夫按1到10等级评定疼痛,这肯定是很高等别的疼痛了。
它在Tableau Public上加载和交互的速率就够慢了,当下载下来,想真的考试测验拖沓拽操作以改变作品时,我的疼痛值很快达到最高级别。

这时候,我非常同情Kasia,由于我知道她在设计这样一个作品时非常煎熬。
可以想象当她调度形状、颜色、slider大小,或者作出其他任意改动时,每一步都必须等待,眼睁睁看着韶光一分一秒的过去,直到Viz作品更新完毕为止。

后来,我们互换了一下,她也已经更新了她的作品,但我仍决定写这篇文章来先容一下我为帮助她提升可视化作品加载速率所做的事情,并为那些无法摆脱这种糟糕速率的人供应一些链接和资源。

如果你想亲自体验一下,可以在这里下载她的原始事情簿:

事情簿:https://dataplusscience.com/files/US%20Baby%20Names%20Original.twbx

剖析事情簿

关于“如何优化Tableau事情簿”,会有很多资源先容。
纵然你从未碰着过这类性能问题,我也鼓励你阅读一点有关这个主题的内容。
从长远来看,只需理解一些把稳事变和技巧就可以节省大量韶光。

以下是我为改进此事情簿所做的一些事情,请把稳,这个事情簿还可以进一步优化。
Kasia做了这些改进,并结合其他一些改进,现在她的作品要比原来的版本快得多,详细改进如下:

文件中有一个未利用的额外数据源。

这很随意马虎办理,右击数据源,然后选择关闭。
如果你不愿定它是否正在利用,请不要担心,Tableau会在关闭正在利用的数据源之前发出警告。
这样,TWBX文件大小险些会减少一半。

数据量有180万行,但大部分都未在可视化中用到。

在这个作品中,细节最详细的是点图,它显示了1990年至2014年男孩和女孩最盛行的Top10名字。
这意味着,我们在用180万行数据来显示2,300行数据(115年(1900-2014)10(Top 10)2(男孩/女孩))。
冗余数据太多了,我们须要将数据减少到真正须要的量。
这样才会大大提高事情簿的加载速率!

过程中进行了大量的打算。

首先,对每个名字进行计数求和,接着用另一个打算来对该计数的总和进行排名,然后是采取两个打算来算出用于显示男孩/女孩名字凑集的大小和形状。
这四个打算具有繁芜的if-then-elseif-then-elseif-then-else-end构造,而且还包含很多OR语句。
此外,这些打算的结果是一个字符串,例如“Size1”和“Size2”。

办理这些问题

我在Tableau Performance上看到的最好资料是Alan Eldridge撰写的白皮书,它是一本只有88页的迷你书,但涵盖了优化Tableau事情簿性能所需的广泛主题,是一个让人惊艳的资源!
如果你想提升你的事情簿性能,你必须阅读它:

白皮书链接:https://www.tableau.com/learn/whitepapers/designing-efficient-workbooks

以下是Alan白皮书的择要点:

1. 改进低效事情簿没有灵丹灵药。
从不雅观察性能记录器开始,理解韶光进展。
是否有永劫光查询?查询太多?打算慢?绘制繁芜?这种洞察力可以确保你的努力方向是精确的。
2. 本书的建议仅供参考。
虽然它们代表了最佳实践水平,但你仍须要测试它们是否会在特定情形下提高性能。
个中许多建议依赖于数据构造和正在利用的数据源(例如,flat file或者RDBM或数据提取)。
3. 数据提取是一种快速简便的方法,可以使大多数事情簿运行的更快。
4. 数据越干净,和问题的构造越匹配,你的事情簿也会运行的越快。
5. 大多数慢的仪表盘都是由设计不佳引起的,特殊是图表过多或者试图同时显示很多数据的仪表盘。
让仪表盘大略一点吧!
许可你的用户逐步向下钻取,理解细节信息,而不是考试测验一下子显示所有内容,然后再进行筛选。
6. 仅利用你须要的数据,包括引用的字段和返回记录的粒度。
这不仅可以使Tableau天生更少、更好、更快的查询,减少从数据源传输到Tableau引擎的数据量,还可以减少事情簿的大小,以便轻松分享和快速打开。
7. 在缩减数据的同时,请确保有效地利用筛选器
8. 字符串和日期很慢,数值和布尔值很快。

让我们把个中一部分技能运用到Kasia的事情簿,看能否够提升这部可视化作品的加载速率。

仅利用你须要的数据

在连续之前,让我们来查阅一下Tableau 的操作顺序。

来源:https://onlinehelp.tableau.com/current/pro/desktop/en-us/order_of_operations.html

以下是Kasis对列和行进行打算的度量值以及她所用的筛选器:

先利用Year和Gender筛选器,接着对Sales的求和进行排序。
不幸的是,这些筛选器只把180万行数据减少到1,052,480行。
接下来对计数值进行求和,然后对求和值排序,末了再把筛选器运用到排序上。
换句话说,求和和排序打算是在维度筛选之后的100万条记录上进行的。
这并不是必要的,由于我们只须要很少的数据来创建视图。

Alan写道,“仅利用你须要的数据”,这是非常棒的建议。
这个事情簿有180万行数据,而在细节粒度最小的视图中也只用了2300行数据。
空想情形下,我们会将数据减少到所须要的量,而不是利用全体数据集。
接下来,我将利用数据源筛选器这种快速简便的方法来减少数据量。

请把稳,在Tableau的操作顺序中,数据源筛选器(和提取筛选器)须要在其他类型筛选器之前运用,远在其他打算之前。
因此,利用它可以真正地加快事情簿的加载速率。
在Kasia Viz作品中,我用了2个快速简便的数据源筛选器:

Year筛选器

数据集最早的年份是1880年,但Kasia仅利用1900至2014年的数据,筛选“至少1900年”,将删除56,000条未在剖析中利用的记录。

Count筛选器

这很主要,每个男孩/女孩的名字每年都有一个计数,这个计数用来确定每年的Top 10。
利用的最低计数是1906,通过添加最低计数1906的数据源筛选器,可以删除未利用的180万行数据。

运用这两个数据源筛选器,可以将数据集从1,825,433行减少到24,130行。
只管这20,000条数据仍旧比我们须要的多,但已经可以快速简便地筛掉冗余数据,加速底层打算。
实际上,仅凭这一点,就可以使Tableau Public上的Viz作品更加可用。

字符串/日期 VS 数值/布尔值

来自Alan下一个非常有用的,有助于提升事情簿性能的提示是“字符串和日期很慢,数值和布尔值很快”。

这是一个不干系的例子。
我们可以利用布尔输出,而不是利用IF语句将高亮颜色指定为字符串。

将高亮颜色指定为字符串:

IF [State] = [State Parameter] then \公众Blue\"大众 ELSE \公众Gray\"大众 END

将高亮颜色指定为布尔值:

[State] = [State Parameter]

请把稳,在这种情形下,布尔值是一个更优雅的办理方案,它将在大数据集上表现更好。

Kasia的事情簿对繁芜的IF语句进行了一些打算,这些语句输出到一个字符串(而且是在一百万条记录上打算它们)。
我们不能利用布尔办理方案进行Kasia的打算,但是,我们可以通过将它们转换为数字来更快地进行这些打算。

Kasia将Size作为字符串的原始打算:

if [Circles - Boys]=0 then \"大众Size1\公众 ELSEIF [Circles - Boys]=1 OR [Circles - Boys]=2 OR [Circles - Boys]=4 then \"大众Size2\公众 ELSEIF [Circles - Boys]=3 then \公众Size3\公众 else \公众Size4\公众 end

以下是一个得到相同结果的改进打算,但它输出一个数字而不是字符串:

case [Circles - Boys] when 0 then 1 when 1 then 2 when 2 then 2 when 4 then 2 when 3 then 3 else 4 END

注:在这种情形下,还可以将它们分组,例如1,2和4分组为2,并利用组大小,而不该用打算。

末了,改动就变得非常大略。
Kasia能够进行一些小的改动,将数据减少到她须要的数据并更新一些打算,并且事情簿的性能显著提高。
在Tableau Desktop中,利用Tableau的性能记录器(“帮助”菜单 - >“设置和性能” - >“开始性能记录”),我们可以看到做了这些改进的事情簿与之前比较,有巨大的差异。

原来版本:39.57秒打开事情簿,23.15秒表打算更新版本:2.075秒打开事情簿

我希望这个信息对你有所帮助。
如果你有任何问题,请随时给我发电子邮件:

邮箱地址:Jeff@DataPlusScience.com

原文标题:

Optimizing Tableau Workbooks

原文链接:

https://www.dataplusscience.com/OptimizeTableau.html

译者简介

张玲,在岗数据剖析师,打算机硕士毕业。
从事数据事情,须要重塑自我的勇气,也须要终生学习的毅力。
但我依旧热爱它的严谨,痴迷它的艺术。
数据海洋一望无境,数据事情充满寻衅。
感谢数据派THU供应如此专业的平台,希望在这里能和最专业的你们共同进步!

— 完 —

关注清华-青岛数据科学研究院官方微信"大众平台“THU数据派”及姊妹号“数据派THU”获取更多讲座福利及优质内容。