公司已經採購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是什麼,但很大程度上歸因於查詢性能。嘗試返回較少的數據,不要查詢記錄總數。


推薦閱讀:
相关文章