---
schema_version: "1"
id: 6ec05054df018ebbeae2123343fcdec4b3322ab77d009dd7fc5e565f3113c1d2
title: แนวทางปฏิบัติที่ดีที่สุดสำหรับการสร้างการคำนวณใน Tableau
collection: tableau
version: current
locale: th-th
portal_url: https://docs.salesforce.com/tableau/current/th-th/public/desktop/calculations_calculatedfields_bestpractices.md
canonical_url: https://help.tableau.com/current/public/desktop/th-th/calculations_calculatedfields_bestpractices.htm
source_site: help.tableau.com
content_type: documentation
content_hash: 7d71fc627eeff741fc6db86e26d022e400ec6eb372207f51fac937da6857dc99
description: Tips and guidelines for creating efficient calculations in Tableau to optimize workbook performance.
---
[ข้ามไปยังเนื้อหาหลัก](#main-content)

# แนวทางปฏิบัติที่ดีที่สุดสำหรับการสร้างการคำนวณใน Tableau

## กฎทั่วไป: หลีกเลี่ยงการใช้ฟิลด์ที่คำนวณหลายๆ ครั้งในการคำนวณอื่น

การอ้างอิงถึงฟิลด์ที่คำนวณฟิลด์เดิมหลายครั้งในการคำนวณอื่นๆ จะส่งผลให้เกิดปัญหาด้านประสิทธิภาพได้ หากคุณใช้ฟิลด์ที่คำนวณในการคำนวณ (หรือที่เรียกกันว่าการสร้างการคำนวณที่ซ้อนกัน) ให้อ้างอิงถึงฟิลด์ดังกล่าวในการคำนวณเพียงครั้งเดียวเท่านั้น

โปรดทราบว่าการอ้างอิงถึงฟิลด์ดังกล่าว (ฟิลด์เทอร์มินัล) หลายๆ ครั้งในการคำนวณจะไม่เป็นการลดประสิทธิภาพลง

### ตัวอย่าง

สมมติว่าคุณสร้างฟิลด์ที่คำนวณที่ใช้การคำนวณหลายบรรทัดที่ซับซ้อนเพื่อค้นหาการกล่าวถึง หรือชื่อรองของ Twitter ในทวีต ฟิลด์ที่คำนวณดังกล่าวมีชื่อว่า Twitter Handle ชื่อรองแต่ละรายการดังกล่าวที่ส่งคืนจะเริ่มต้นด้วยเครื่องหมาย '@' (เช่น: @user)

สำหรับการวิเคราะห์ คุณต้องลบสัญลักษณ์ '@' ออก

หากต้องการทำเช่นนั้น คุณสามารถใช้การคำนวณต่อไปนี้เพื่อลบตัวอักษรตัวแรกออกจากสตริง:

`RIGHT([Twitter Handle], LEN([Twitter Handle]) -1)`

การคำนวณนี้ค่อนข้างเรียบง่าย แต่เนื่องจากเป็นการอ้างอิงถึงการคำนวณ Twitter Handle ถึงสองครั้ง จึงมีการดำเนินการคำนวณดังกล่าวสองครั้งสำหรับระเบียนแต่ละรายการในแหล่งข้อมูลของคุณ ครั้งแรกสำหรับฟังก์ชัน RIGHT และอีกครั้งสำหรับฟังก์ชัน LEN

หากต้องการหลีกเลี่ยงการคำนวณแบบเดียวกันมากกว่าหนึ่งครั้ง คุณสามารถเขียนการคำนวณใหม่ให้กับรายการที่ใช้การคำนวณ Twitter Handle เพียงหนึ่งครั้งได้ ในตัวอย่างนี้ คุณสามารถใช้ MID เพื่อบรรลุเป้าหมายเดียวกันได้:

`MID([Twitter Handle], 2)`

## เคล็ดลับที่ 1: แปลงการเปรียบเทียบความเท่ากันหลายรายการให้กับนิพจน์ CASE หรือกลุ่ม

ลองสมมติว่าคุณมีการคำนวณต่อไปนี้ที่ใช้ฟิลด์ที่คำนวณ Person (calc) หลายครั้งและใช้ชุดฟังก์ชัน OR การคำนวณนี้แม้มีนิพจน์ทางตรรกศาสตร์ที่เรียบง่ายแต่อาจทำให้เกิดปัญหาด้านประสิทธิภาพของการสืบค้นได้เนื่องจากมีการดำเนินการคำนวณ Person (calc) อย่างน้อยสิบครั้ง

`IF [Person (calc)] = 'Henry Wilson'   OR [Person (calc)] = 'Jane Johnson'   OR [Person (calc)] = 'Michelle Kim'   OR [Person (calc)] = 'Fred Suzuki'   OR [Person (calc)] = 'Alan Wang'   THEN 'Lead'   ELSEIF [Person (calc)] = 'Susan Nguyen'   OR [Person (calc)] = 'Laura Rodriguez'   OR [Person (calc)] = 'Ashley Garcia'   OR [Person (calc)] = 'Andrew Smith'   OR [Person (calc)] = 'Adam Davis'   THEN 'IC'   END`

แทนที่จะใช้การเปรียบเทียบความเท่ากัน ให้ลองใช้โซลูชันดังต่อไปนี้

### โซลูชัน 1

ใช้นิพจน์ CASE ตัวอย่าง:

`CASE [Person (calc)]   WHEN 'Henry Wilson' THEN 'Lead'   WHEN 'Jane Johnson' THEN 'Lead'   WHEN 'Michelle Kim' THEN 'Lead'   WHEN 'Fred Suzuki' THEN 'Lead'   WHEN 'Alan Wang' THEN 'Lead'      WHEN 'Susan Nguyen' THEN 'IC'   WHEN 'Laura Rodriguez' THEN 'IC'   WHEN 'Ashley Garcia' THEN 'IC'   WHEN 'Andrew Smith' THEN 'IC'   WHEN 'Adam Davis' THEN 'IC'   END`

ในตัวอย่างนี้ จะมีการอ้างถึงฟิลด์ Person (calc) ที่คำนวณเพียงหนึ่งครั้ง ดังนั้นจึงมีการดำเนินการเพียงครั้งเดียวเท่านั้น นิพจน์ CASE ยังมีการปรับปรุงให้เหมาะสมเพิ่มเติมในกระบวนการค้นหา ดังนั้นคุณจึงได้รับประโยชน์ด้านประสิทธิภาพเพิ่มเติมอีกด้วย

### โซลูชัน 2

สร้างกลุ่มแทนฟิลด์ที่คำนวณ หากต้องการข้อมูลเพิ่มเติม โปรดดู [จัดกลุ่มข้อมูลของคุณ](https://help.tableau.com/current/public/desktop/th-th/sortgroup_groups_creating.htm)

## เคล็ดลับที่ 2: แปลงการคำนวณหลายสตริงให้เป็นนิพจน์ REGEXP เดียว

**หมายเหตุ**: นิพจน์ REGEXP จะสามารถใช้งานได้เฉพาะเมื่อใช้การแยกข้อมูล Tableau หรือเมื่อเชื่อมต่อกับ Text File, Hadoop Hive, Google BigQuery, PostgreSQL, Tableau Data Extract, Microsoft Excel, Salesforce, Vertica, Pivotal Greenplum, Teradata (เวอร์ชัน 14.1 ขึ้นไป) และแหล่งข้อมูล Oracle หากต้องการข้อมูลเพิ่มเติม โปรดดู[ฟังก์ชันเพิ่มเติม (Regex, Hadoop Hive, Google Big Query)](https://help.tableau.com/current/public/desktop/th-th/functions_functions_additional.htm)

  

### ตัวอย่าง 1: CONTAINS

ลองสมมติว่าคุณมีการคำนวณต่อไปนี้ที่ใช้ฟิลด์ที่คำนวณ Category (calc) หลายครั้ง การคำนวณนี้แม้มีนิพจน์ทางตรรกศาสตร์ที่เรียบง่ายแต่อาจทำให้เกิดปัญหาด้านประสิทธิภาพของการค้นหาได้เนื่องจากมีการดำเนินการคำนวณ Category (calc) หลายครั้ง

`IF CONTAINS([Segment (calc)],'UNKNOWN')   OR CONTAINS([Segment (calc)],'LEADER')   OR CONTAINS([Segment (calc)],'ADVERTISING')   OR CONTAINS([Segment (calc)],'CLOSED')   OR CONTAINS([Segment (calc)],'COMPETITOR')   OR CONTAINS([Segment (calc)],'REPEAT')   THEN 'UNKNOWN'   ELSE [Segment (calc)] END`

คุณสามารถใช้นิพจน์ REGEXP เพื่อให้ได้ผลลัพธ์เดียวกันโดยไม่ต้องดำเนินการซ้ำหลายครั้ง

#### โซลูชัน

`IF REGEXP_MATCH([Segment (calc)], 'UNKNOWN|LEADER|ADVERTISING|CLOSED|COMPETITOR|REPEAT') THEN 'UNKNOWN'   ELSE [Segment (calc)] END`

  

คุณสามารถใช้นิพจน์ REGEXP เดียวกันกับการคำนวณสตริงที่ใช้รูปแบบเดียวกันได้

### ตัวอย่างที่ 2: STARTSWITH

`IF STARTSWITH([Segment (calc)],'UNKNOWN')   OR STARTSWITH([Segment (calc)],'LEADER')   OR STARTSWITH([Segment (calc)],'ADVERTISING')   OR STARTSWITH([Segment (calc)],'CLOSED')   OR STARTSWITH([Segment (calc)],'COMPETITOR')   OR STARTSWITH([Segment (calc)],'REPEAT')   THEN 'UNKNOWN'`

#### โซลูชัน

`IF REGEXP_MATCH([Segment (calc)], '^(UNKNOWN|LEADER|ADVERTISING|CLOSED|COMPETITOR|REPEAT)') THEN 'UNKNOWN'   ELSE [Segment (calc)] END`

โปรดทราบว่าสัญลักษณ์ '^' จะใช้ในโซลูชันนี้

### ตัวอย่างที่ 3: ENDSWITH

`IF ENDSWITH([Segment (calc)],'UNKNOWN')   OR ENDSWITH([Segment (calc)],'LEADER')   OR ENDSWITH([Segment (calc)],'ADVERTISING')   OR ENDSWITH([Segment (calc)],'CLOSED')   OR ENDSWITH([Segment (calc)],'COMPETITOR')   OR ENDSWITH([Segment (calc)],'REPEAT')   THEN 'UNKNOWN'   ELSE [Segment (calc)] END`

#### โซลูชัน

`IF REGEXP_MATCH([Segment (calc)], '(UNKNOWN|LEADER|ADVERTISING|CLOSED|COMPETITOR|REPEAT)$') THEN 'UNKNOWN'   ELSE [Segment (calc)] END`

โปรดทราบว่าสัญลักษณ์ '$' จะใช้ในโซลูชันนี้

## ตัวอย่างที่ 3: จัดการสตริงด้วย REGEXP แทน LEFT, MID, RIGHT, FIND, LEN

นิพจน์ทั่วไปก็สามารถเป็นเครื่องมือที่มีประสิทธิภาพได้ เมื่อต้องจัดการกับสตริงที่ซับซ้อน ให้พิจารณาการใช้งานนิพจน์ทั่วไป ในหลายๆ กรณีแสดงให้เห็นว่าการใช้นิพจน์ทั่วไปจะส่งผลให้เกิดการคำนวณที่สั้นลงและมีประสิทธิภาพยิ่งขึ้น หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับนิพจน์ทั่วไป โปรดดู โพสต์ [การใช้ regex ปกติและการต่อสู้กับข้อมูลที่ไม่สมบูรณ์](https://www.tableau.com/th-th/about/blog/2015/6/become-regular-regular-expressions-39802) บนบล็อกของ Tableau

### ตัวอย่างที่ 1

ลองสมมติว่าคุณมีการคำนวณต่อไปนี้ให้ลบโปรโตคอลจาก URL ตัวอย่างเช่น: "https://www.tableau.com" เป็น "www.tableau.com"

`IF (STARTSWITH([Server], "http://")) THEN   MID([Server], Len("http://") + 1)   ELSEIF(STARTSWITH([Server], "https://")) THEN   MID([Server], Len("https://") + 1)   ELSEIF(STARTSWITH([Server], "tcp:")) THEN   MID([Server], Len("tcp:") + 1)   ELSEIF(STARTSWITH([Server], "\\")) THEN   MID([Server], Len("\\") + 1)   ELSE [Server]   END`

#### โซลูชัน

คุณสามารถลดความซับซ้อนของการคำนวณและเพิ่มประสิทธิภาพได้โดยใช้ฟังก์ชัน REGEXP\_REPLACE ได้

`REGEXP_REPLACE([Server], "^(http://|https://|tcp:|\\\\)", " )`

### ตัวอย่างที่ 2

ลองสมมติว่าคุณมีการคำนวณต่อไปนี้ซึ่งส่งกลับส่วนที่สองของที่อยู่ IPv4 ตัวอย่างเช่น: "172.16.0.1" เป็น "16"

`IF (FINDNTH([Server], ".", 2) > 0) THEN   MID([Server],   FIND([Server], ".") + 1,   FINDNTH([Server], ".", 2) - FINDNTH([Server], ".", 1) - 1   )   END`

#### โซลูชัน

คุณสามารถลดความซับซ้อนของการคำนวณและเพิ่มประสิทธิภาพได้โดยใช้ฟังก์ชัน REGEXP\_EXTRACT ได้

`REGEXP_EXTRACT([Server], "\.([^\.]*)\.")`

## เคล็ดลับที่ 4: อย่าใช้เซ็ตในการคำนวณ

หากคุณใช้เซ็ตในการคำนวณ ให้พิจารณาถึงทางเลือกอื่นแทนโดยให้มีการคำนวณที่เท่าเทียมกัน

### ตัวอย่าง

ลองสมมติว่าคุณมีการคำนวณต่อไปนี้ซึ่งใช้เซ็ต Top Customers (set)

`IF ISNULL([Customer Name]) OR [Top customers (set)] THEN [Segment] ELSE [Customer Name] END`

### โซลูชัน 1

หากเซ็ตที่ใช้มีความเรียง่าย คุณก็สามารถสร้างฟิลด์ที่คำนวณซึ่งส่งคืนผลลัพธ์เดียวกันกับเซ็ตได้ ตัวอย่าง:

`CASE [Customer Name]   WHEN 'Henry Wilson' THEN True   WHEN 'Jane Johnson' THEN True   WHEN 'Michelle Kim' THEN True   WHEN 'Fred Suzuki' THEN True   WHEN 'Alan Wang' THEN True   ELSE False   END`

  

**หมายเหตุ**: แนะนำให้ใช้รูปแบบ WHEN TRUE … ELSE ในสถานการณ์นี้เพื่อหลีกเลี่ยงปัญหาด้านประสิทธิภาพเนื่องจากการใช้เซต โดยไม่แนะนำให้ใช้รูปแบบในสถานการณ์ส่วนใหญ่

### โซลูชัน 2

หากเซตมีความซับซ้อนยิ่งขึ้น ให้พิจารณาสร้างกลุ่มที่แมปทุกองค์ประกอบในเซตกับค่าหรือแอตทริบิวต์ที่กำหนด เช่น 'IN' แล้วปรับแต่งการคำนวณเพื่อตรวจสอบค่า/แอตทริบิวต์ดังกล่าว ตัวอย่าง:

`IF ISNULL([Customer Name]) OR [Top Customers(group)]='IN' THEN [Segment] ELSE [Customer Name] END`

หากต้องการข้อมูลเพิ่มเติม โปรดดู [จัดกลุ่มข้อมูลของคุณ](https://help.tableau.com/current/public/desktop/th-th/sortgroup_groups_creating.htm) และ [สร้างเซต](https://help.tableau.com/current/public/desktop/th-th/sortgroup_sets_create.htm)

## เคล็ดลับที่ 5: อย่าใช้เซตเพื่อจัดกลุ่มข้อมูลของคุณ

เซตมีไว้เพื่อเปรียบเทียบสับเซตของข้อมูล กลุ่มมีไว้เพื่อรวมสมาชิกที่เกี่ยวข้องในฟิลด์ ไม่แนะนำให้แปลงเซตเป็นกลุ่มดั่งเช่นในตัวอย่างต่อไปนี้:

`IF [Americas Set] THEN "Americas"   ELSEIF [Africa Set] THEN "Africa"   ELSEIF [Asia Set] THEN "Asia"   ELSEIF [Europe Set] THEN "Europe"   ELSEIF [Oceania Set] THEN "Oceania"   ELSE "Unknown"   END`

ไม่แนะนำให้ดำเนินการเช่นนี้เนื่องจากเหตุผลหลายประการ:

- **เซตไม่ได้มีความเป็นเฉพาะตัวเสมอไป** สมาชิกบางรายอาจปรากฏอยู่ในหลายๆ เซต ตัวอย่างเช่น รัสเซียอาจอยู่ทั้งในเซตยุโรปและเซตเอเชีย
- **เซตไม่สามารถแปลงเป็นกลุ่มได้เสมอไป** หากกำหนดเซตไว้ด้วยข้อยกเว้น เงื่อนไข หรือข้อจำกัดอาจทำให้ยากหรือแม้กระทั่งเป็นไปไม่ได้ที่จะสร้างกลุ่มที่เท่าเทียมกันขึ้นมาได้

### โซลูชัน

จัดกลุ่มข้อมูลของคุณด้วยฟีเจอร์ Group หากต้องการข้อมูลเพิ่มเติม โปรดดู [จัดกลุ่มข้อมูลของคุณ](https://help.tableau.com/current/public/desktop/th-th/sortgroup_groups_creating.htm)

## ดูเพิ่มเติม

[ประเภทของการคำนวณใน Tableau](https://help.tableau.com/current/public/desktop/th-th/calculations_calculatedfields_understand_types.htm)

[ฟังก์ชันใน Tableau](https://help.tableau.com/current/public/desktop/th-th/functions.htm)