Thep Excel

TREATAS – ส่งค่าข้ามตารางแบบเสมือน ไม่ต้องมี Relationship

TREATAS เป็นเสมือนการสร้าง “virtual relationship” โดยไม่ต้องแก้โมเดล ช่วยให้ส่งเงื่อนไขข้ามตารางที่ไม่เชื่อมกัน หรือเมื่อต้องการส่งหลายคีย์พร้อมกัน

=TREATAS(table_expression, column, [column])

By ThepExcel AI Agent
13 December 2025

Function Metrics


Popularity
6/10

Difficulty
6/10

Usefulness
7/10

Syntax & Arguments

=TREATAS(table_expression, column, [column])

Argument Type Required Default Description
table_expression Table Yes ตาราง/นิพจน์ที่จะใช้เป็นแหล่งค่า (เช่น VALUES() หรือ SUMMARIZE() ที่คืนตาราง)
column Column Yes คอลัมน์ปลายทาง (target column) ที่จะถูกจำกัดด้วยค่าจาก table_expression สามารถระบุ 2-3 คอลัมน์เพื่อส่งหลายคีย์ (compound key) พร้อมกัน

How it works

ส่งเงื่อนไขจากตารางที่ไม่ได้เชื่อม relationship

เมื่อมีตาราง lookup แยกต่างหากและต้องการให้การเลือกใน slicer ไปจำกัดตาราง fact

ส่งเงื่อนไขไปหลายคอลัมน์พร้อมกัน

ใช้ตารางที่มีหลายคอลัมน์ (เช่น ปี/เดือน) แล้วส่งไปจำกัดหลายคอลัมน์ในตารางปลายทาง

Examples

ตัวอย่างพื้นฐาน: ส่งค่า Category จาก Lookup ไปจำกัด Sales
Total Sales by Selected Categories = CALCULATE( SUM(Sales[Amount]), TREATAS( VALUES(ProductLookup[Category]), Product[Category] ) )
VALUES() ดึงค่า Category ที่ unique จาก ProductLookup แล้ว TREATAS ทำให้มันเป็นเงื่อนไขจำกัดบน Product[Category] ได้ แม้ ProductLookup ไม่มี relationship กับ Sales
DAX Formula:

Total Sales by Selected Categories =
CALCULATE(
    SUM(Sales[Amount]),
    TREATAS(
        VALUES(ProductLookup[Category]),
        Product[Category]
    )
)

Result:

ยอดขายที่ match กับ Category ที่เลือกใน ProductLookup

ส่งค่าแบบ Hard-Coded (ไม่ใช่ dynamic)
Sales for Red Blue White = CALCULATE( SUM(Sales[Amount]), TREATAS( {"Red", "Blue", "White"}, Product[Color] ) )
{} bracket สร้าง list ของค่า TREATAS นำค่า 3 สีนี้ไปจำกัด Product[Color] ง่ายกว่า FILTER และเร็วกว่า
DAX Formula:

Sales for Red Blue White =
CALCULATE(
    SUM(Sales[Amount]),
    TREATAS(
        {"Red", "Blue", "White"},
        Product[Color]
    )
)

Result:

ยอดขายเฉพาะสีแดง น้ำเงิน และขาว

Compound Key: ส่งปี-เดือนพร้อมกัน
Sales by Period Selected = VAR SelectedPeriods = SUMMARIZE(DateLookup, DateLookup[Year], DateLookup[Month]) RETURN CALCULATE( SUM(Sales[Amount]), TREATAS( Selec…
SUMMARIZE() คืนตาราง 2 คอลัมน์ (Year, Month) และ TREATAS จับคู่กับ Date[Year] กับ Date[Month] พร้อมกัน ใช้ VAR เพื่อความชัดเจน
DAX Formula:

Sales by Period Selected =
VAR SelectedPeriods = SUMMARIZE(DateLookup, DateLookup[Year], DateLookup[Month])
RETURN
CALCULATE(
    SUM(Sales[Amount]),
    TREATAS(
        SelectedPeriods,
        Date[Year],
        Date[Month]
    )
)

Result:

ยอดขายจะถูกจำกัดให้ตรงกับปี-เดือนที่เลือก

ใช้ร่วมกับ KEEPFILTERS เพื่อไม่ให้ลบเงื่อนไขเดิม
Sales Intersected = CALCULATE( SUM(Sales[Amount]), KEEPFILTERS( TREATAS( VALUES(Lookup[ProductCode]), Product[Code] ) ) )
TREATAS ปกติจะ replace filter context (เช่น CALCULATE) แต่ KEEPFILTERS ทำให้มันทำงานร่วม (AND) แทน replace (OR)
DAX Formula:

Sales Intersected =
CALCULATE(
    SUM(Sales[Amount]),
    KEEPFILTERS(
        TREATAS(
            VALUES(Lookup[ProductCode]),
            Product[Code]
        )
    )
)

Result:

ยอดขายตัดกับเงื่อนไข Lookup และเงื่อนไขเดิมจาก slicer

นับ Customers ที่ตรงกับ Selected Regions
Count Customers in Selected Regions = CALCULATE( DISTINCTCOUNT(Customer[ID]), TREATAS( VALUES(RegionLookup[RegionName]), Customer[Region] ) )
ไม่ต้องตั้ง relationship ระหว่าง Customer และ RegionLookup ใช้ TREATAS ก็ได้ผล แถมสามารถเปลี่ยนค่า regionlookup ได้เลย
DAX Formula:

Count Customers in Selected Regions =
CALCULATE(
    DISTINCTCOUNT(Customer[ID]),
    TREATAS(
        VALUES(RegionLookup[RegionName]),
        Customer[Region]
    )
)

Result:

จำนวน unique customers ใน region ที่เลือก

FAQs

TREATAS vs FILTER – เมื่อไหร่ใช้ตัวไหน?

TREATAS ใช้เมื่อ: 1) ต้องส่งค่าจากตารางหนึ่งไปจำกัดอีกตารางที่ไม่เชื่อม 2) ต้องการ map columns (compound key) 3) ต้องการ performance ดี (ไม่ iterate). FILTER ใช้เมื่อต้องการเงื่อนไขที่ซับซ้อน หรือ iterate ทีละ row

TREATAS vs USERELATIONSHIP ต่างกันอย่างไร?

USERELATIONSHIP ใช้เปิดความสัมพันธ์ที่มีอยู่แล้ว แต่อยู่ในสถานะ inactive (ระบุด้วย Relationship ID). TREATAS สร้างความสัมพันธ์เสมือน โดยไม่ต้องมี relationship จริงในโมเดล

ถ้าค่าใน Expression ไม่อยู่ในคอลัมน์ปลายทาง จะเกิดอะไร?

ไม่เป็นไร ค่าที่ไม่อยู่จะถูกไม่สนใจ (ignored) TREATAS ไม่ผิดพลาด มันแค่ไม่ลบแถวใดๆ ก็ได้ เหมือนจำนวน intersection ของเซต

TREATAS สนับสนุน DirectQuery ไหม?

ได้ แต่มีข้อจำกัด ใช้ได้ใน Measure แต่ไม่ใช้ได้ใน Calculated Column หรือ RLS (Row-Level Security) ใน DirectQuery

Resources & Related

Related functions

Additional Notes

TREATAS ทำหน้าที่ “ทำความเป็นตัวแทน” ให้กับคอลัมน์หนึ่ง ว่าเป็นคอลัมน์อีกตัวหนึ่งเพื่อให้ filter ทะลุข้ามตาราง โดยไม่ต้องสร้าง relationship จริง.

สิ่งที่เจ๋งของ TREATAS คือมันไม่สร้างการตัดทอนข้อมูล ถ้าค่าใน Expression ไม่อยู่ในคอลัมน์ปลายทาง มันแค่ไม่มีผลใช้ – ไม่ผิดพลาด 😎 ยิ่งไปกว่านั้น ถ้าคุณมีตาราง lookup ที่เลือกบางค่า TREATAS จะช่วยให้คุณส่งค่าที่เลือกไปจำกัดข้อมูลในตารางอื่นได้อย่างง่าย

Leave a Reply

Your email address will not be published. Required fields are marked *