公司已经采购tableau,但是一个月的数据在一千万条左右,tableau跑单个视图在30以上,扫仪表板更慢,请教各位大神,有什么好的解决办法吗?


我曾经优化过公司的Tableau Server性能,以下是一点经验。

第一步:想清楚用户和仪表板交互的全过程。

「仪表板速度慢」是一个症状,作为治疗医生,我们需要通过「望闻问切」了解病症产生的原因。这里面最重要的,就是想清楚用户和仪表板交互的全过程,因为「慢」可能发生在任何一个环节,没有搞清楚全局,就是盲人摸象。

以下是用户和仪表板交互时,伺服器上发生的全过程【极简版】:

  1. 用户在Tableau Server上打开仪表板;
  2. Tableau Server向资料库发起查询;
  3. 资料库查询数据,聚合后返回给Tableau Server;
  4. Tableau Server进行表计算,绘制图形;
  5. 用户浏览器载入图形。

以上步骤,视具体情况略有变化,但总体差异不大。

第二步:学会使用官方提供的性能测试。

有了全局理解,下面就需要借助Tableau提供的性能分析功能——性能记录工作簿,对指定仪表板进行分析,就像医生让病人拍片一样。如果你还不会这一招,赶快Get新技能吧:

https://onlinehelp.tableau.com/current/server/zh-cn/perf_record_create_server.htm

第三步:优化步骤。

经过了前两步,你对仪表板为什么慢就有了明确的答案,此时就可以采取定向的优化步骤。

3.1 资料库优化

  1. 提升伺服器硬体配置
  2. 使用宽表,减少使用表关联
  3. 使用表而非视图
  4. 增加索引

3.2 仪表板设计优化

  1. 提升伺服器硬体配置,包括使用分散式伺服器
  2. 减少自定义SQL的使用
  3. 减少表关联和数据融合的使用
  4. 使用高粒度汇总表,而低粒度的明细表
  5. 使用数据提取(.hpyer最好)
  6. 善用数据源筛选器,将Tableau使用的数据限制在最低数量级【如资料库中有1亿行,但你实际上只需要其中的10万行,那么就没有必要让Tableau连接1亿行数据。如无必要,勿增数据。】
  7. 将在Tableau计算的复杂指标,前移至在资料库中计算
  8. 在用户初始打开的界面,只显示最少必要数据

最后,无论使用何种优化方法,「性能优化」面临著不变的物理定律,即:

在硬体和软体相同的条件下,数据量越大,图形越复杂,速度越慢。

因此,终极的性能调优方法是只使用最少必要数据进行分析或制作报表。在连接数千万行后台表进行分析或做报表前,一定要三思:一定要这样吗?一定要这样吗?一定要这样吗?如果确实无法避免,要么投入大资源优化(加硬体简单粗暴有效,但很贵),要么对此类报表的性能有一定忍耐度。

总结起来,后台资料库表结构越简洁高效,数据量越小,前台Tableau图表越简单,实现方法越优雅,用户的总体性能就越快。

发布于 2018-11-21继续浏览内容知乎发现更大的世界打开Chrome继续JackRacerJackRacerhi there!
  1. Tableau支持数据源最好的是自家的hyper文件,因此在ETL阶段尽量把各种异构数据源全部整合到一个hyper文件里面,每月刷新hyper数据源,实时连接hyper文件;
  2. 如果表上有很多表计算的话需要考虑把尽可能多的计算放在ETL阶段先固化下来,表计算是影响视图性能的大头;
  3. 数据源筛选器 - 上下文筛选器 - LOD - 普通筛选器 - 聚合计算 - 表计算,如有可能所有的计算尽可能往左边挪;
  4. 实在不行,按照分析主题,将报表分拆为几个单独主题的报表,报表之间做跳转。
  5. 伺服器上性能分析页面看看每个报表loading时间,针对性地改善一下。


  1. Tableau支持数据源最好的是自家的hyper文件,因此在ETL阶段尽量把各种异构数据源全部整合到一个hyper文件里面,每月刷新hyper数据源,实时连接hyper文件;
  2. 如果表上有很多表计算的话需要考虑把尽可能多的计算放在ETL阶段先固化下来,表计算是影响视图性能的大头;
  3. 数据源筛选器 - 上下文筛选器 - LOD - 普通筛选器 - 聚合计算 - 表计算,如有可能所有的计算尽可能往左边挪;
  4. 实在不行,按照分析主题,将报表分拆为几个单独主题的报表,报表之间做跳转。
  5. 伺服器上性能分析页面看看每个报表loading时间,针对性地改善一下。


  • 1.测试表明,对于相同的数据,IE7需要11秒返回运算值,而Firefox需要3秒, 因此tableau所搭乘的平台十分重要
  • 2.当处理大量数据时,可考虑先对数据预处理,然后再导入tableau
  • 3.使用尽可能少的数据源,然后去掉没有必要的数据
  • 4.如果可以的话,关闭自动更新
  • 5.使用「数据提取」
  • 6.使用筛选时,尽量少使用「排除」。因为使用排除时,tableau会扫描所有的数据
  • 7.有可能的话,使用boolean进行计算(用别名表示)

欢迎加入我们微信,一起学习和分享数据分析知识

https://u.wechat.com/MClLWuTQelDk2dNEy_X05iM (二维码自动识别)


你这种情况可以从以下几方面排查原因进而进行优化:

1.要保证安装tableau的机器本身配置达到要求,如果机器配置比较低,必然会慢;

2.如果数据在资料库中很慢,导进tableau做分析必然会慢;

3.建议采用提取的数据连接方式,并且,如果是多表,建议尽量使用表连接而不是数据融合或者自定义SQL;

4.优化计算,减少计算公式的复杂度;

5.可在Tableau Desktop和Tableau Server创建性能记录,监测是在哪方面引起速度慢,参考以下链接:

Desktop:https://onlinehelp.tableau.com/current/pro/desktop/zh-cn/perf_record_create_desktop.html

Server:https://onlinehelp.tableau.com/current/server/zh-cn/perf_record_create_server.htm


我觉得题主可能对tableau的理解有点误差。

虽然tableau没有limit但是1000+万行肯定是慢成狗了。它主要还是做图做dashboard的工具。我不觉得任何business context下需要用全部1000+万行做图。

说白了,数据还是处理一下再导进tableau吧,颗粒级别再好好想想

虽然不知道tableau是什么,但很大程度上归因于查询性能。尝试返回较少的数据,不要查询记录总数。


推荐阅读:
相关文章