建立高效的計算

當您的資料未提供回答問題所需的所有資訊時,您可以建立計算欄位以幫助您進行分析。

在計算欄位內,您可以定義硬編碼常量(如稅率)、執行像減法或乘法這樣非常簡單的數學運算(例如,收入減去成本)、使用較複雜的數學公式、執行邏輯測試 (IF/THEN, CASE)、執行類型轉換、將運算式傳送到諸如 R 之類的外部服務等等。

Tableau 中有以下不同的計算類型:

基本和彙總計算查詢基礎資料來源時會組建這些類型的計算並在資料庫中執行這些計算。通常,基本計算和彙總計算伸縮性非常好,而且許多資料庫調整技術可以提高其效能。

表計算:Tableau 會對查詢結果集執行這些計算。雖然這意味著 Tableau 要做更多的工作,但是表計算通常透過比原始資料來源中的記錄集小得多的記錄集來完成。如果表計算效能成問題(可能因為返回到 Tableau 的結果集很大),請考慮將計算的某些方面推回到資料來源層。執行此操作的一種方法是彙總資料,然後對彙總的資料執行計算。

詳細資料層級 (LOD) 運算式:系統會在資料庫中計算查詢基礎資料來源時組建的 LOD 運算式。這些運算式表示為巢狀選取,所以它們依賴於資料庫的效能。表計算或混合的效能可能比 LOD 運算式的效能好,或者情況相反。

如果懷疑 LOD 運算式造成了效能緩慢,則可以嘗試將其取代為表計算或資料混合,看看是否提高了效能。有關範例,請參閱Tableau 的操作順序中的範例 2。

聯接挑選可能會影響 LOD 運算式,所以如果在使用 LOD 運算式時您的查詢執行緩慢,請看一看聯結的假設存在參考完整性

有關詳情,請參閱 Tableau 白皮書瞭解詳細資料層級 (LOD) 運算式

使用條件計算的參數

Tableau 中常用的技巧是顯示參數控制,以便使用者可以選取一個值來確定如何執行計算。通常,為了向使用者提供易於理解的選項,將參數建立為字串類型是有道理的。但是數值計算比字串計算快得多,因此,請利用參數的 [顯示為] 功能;即顯示文字標籤,但是對計算邏輯使用基礎整數值。有關詳情,請參閱建立參數

轉換日期欄位

使用者經常具有未以本機日期格式存儲的日期資料 - 例如,日期可能是字串或數位時間戳記。如果資料支援的話,您可以使用 DATEPARSE 函數,此函數適用於非舊版 Microsoft Excel 和文字檔連線、MySQL、Oracle、PostgreSQL 和 Tableau 資料擷取資料來源。否則,將欄位解析為日期字串,例如 [2012-01-01] 。ISO 字串是首選項,因為它們並非特定於地區設定。然後將值傳遞給 DATE 函數。如果原始資料是數位欄位,則先將其轉換為字串然後轉換為日期的做法效率非常低下。使資料保持為數位並使用 DATEADD 和日期文字值來執行計算要好得多。對於大型資料集,效能提升可能較顯著。有關這些函數的更多資訊,請參閱日期函式

使用 CASE 邏輯陳述式

使用複雜的邏輯陳述式時,CASE 陳述式可能比 IF 或 ELSEIF 陳述式更快。

請記住 ELSEIF 比 ELSE IF 更快,因為巢狀的 IF 會計算第二個 IF 陳述式,而不是作為第一個的一部分進行計算。

有關詳細資訊,請參閱白皮書設計高效的工作簿

彙總度量

如果建立的檢視較慢,請確保使用彙總度量。對於分解的資料,您可能會嘗試一次檢視多列資料。可透過對資料進行彙總來減少列數。為此,請選取 [分析] > [彙總度量]

計算提示

您可以做有很多小事情以提高計算效能。

  • 非重複計數值是幾乎所有資料來源中最慢的彙總類型之一。慎用 COUNTD 彙總。

  • 如果使用影響範圍廣泛的參數(例如,在自訂的 SQL 語句中),則會影響快取效能。

  • 對複雜的計算進行篩選可能會導致基礎資料中缺少索引。

  • 像 RAWSQL 和 SCRIPT_* 之類用於與外部服務整合的指令碼函數可能效能緩慢,特別是在有很多需要與 DBMS/R 伺服器相互傳遞的值的情況下。

  • 只有在需要時間戳記詳細資料層級時才使用 NOW。使用 TODAY 進行日期層級計算。

  • 請記住,所有基本計算都會傳遞到基礎資料 - 甚至像標籤字串這樣的文字計算也是如此。如果您需要建立標籤(例如,針對列標題而建立)並且您的資料很大,請建立一個簡單的文字/Excel 檔資料來源,其中只包含一個記錄來容納這些標籤,以便它們不會為大資料來源新增開銷。

感謝您的意見反應!已成功提交您的意見回饋。謝謝!