TREATAS เป็นเสมือนการสร้าง “virtual relationship” โดยไม่ต้องแก้โมเดล ช่วยให้ส่งเงื่อนไขข้ามตารางที่ไม่เชื่อมกัน หรือเมื่อต้องการส่งหลายคีย์พร้อมกัน
=TREATAS(table_expression, column, [column])
=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) พร้อมกัน |
เมื่อมีตาราง lookup แยกต่างหากและต้องการให้การเลือกใน slicer ไปจำกัดตาราง fact
ใช้ตารางที่มีหลายคอลัมน์ (เช่น ปี/เดือน) แล้วส่งไปจำกัดหลายคอลัมน์ในตารางปลายทาง
Total Sales by Selected Categories = CALCULATE( SUM(Sales[Amount]), TREATAS( VALUES(ProductLookup[Category]), Product[Category] ) )Total Sales by Selected Categories =
CALCULATE(
SUM(Sales[Amount]),
TREATAS(
VALUES(ProductLookup[Category]),
Product[Category]
)
)
ยอดขายที่ match กับ Category ที่เลือกใน ProductLookup
Sales for Red Blue White = CALCULATE( SUM(Sales[Amount]), TREATAS( {"Red", "Blue", "White"}, Product[Color] ) )Sales for Red Blue White =
CALCULATE(
SUM(Sales[Amount]),
TREATAS(
{"Red", "Blue", "White"},
Product[Color]
)
)
ยอดขายเฉพาะสีแดง น้ำเงิน และขาว
Sales by Period Selected = VAR SelectedPeriods = SUMMARIZE(DateLookup, DateLookup[Year], DateLookup[Month]) RETURN CALCULATE( SUM(Sales[Amount]), TREATAS( Selec…Sales by Period Selected =
VAR SelectedPeriods = SUMMARIZE(DateLookup, DateLookup[Year], DateLookup[Month])
RETURN
CALCULATE(
SUM(Sales[Amount]),
TREATAS(
SelectedPeriods,
Date[Year],
Date[Month]
)
)
ยอดขายจะถูกจำกัดให้ตรงกับปี-เดือนที่เลือก
Sales Intersected = CALCULATE( SUM(Sales[Amount]), KEEPFILTERS( TREATAS( VALUES(Lookup[ProductCode]), Product[Code] ) ) )Sales Intersected =
CALCULATE(
SUM(Sales[Amount]),
KEEPFILTERS(
TREATAS(
VALUES(Lookup[ProductCode]),
Product[Code]
)
)
)
ยอดขายตัดกับเงื่อนไข Lookup และเงื่อนไขเดิมจาก slicer
Count Customers in Selected Regions = CALCULATE( DISTINCTCOUNT(Customer[ID]), TREATAS( VALUES(RegionLookup[RegionName]), Customer[Region] ) )Count Customers in Selected Regions =
CALCULATE(
DISTINCTCOUNT(Customer[ID]),
TREATAS(
VALUES(RegionLookup[RegionName]),
Customer[Region]
)
)
จำนวน unique customers ใน region ที่เลือก
TREATAS ใช้เมื่อ: 1) ต้องส่งค่าจากตารางหนึ่งไปจำกัดอีกตารางที่ไม่เชื่อม 2) ต้องการ map columns (compound key) 3) ต้องการ performance ดี (ไม่ iterate). FILTER ใช้เมื่อต้องการเงื่อนไขที่ซับซ้อน หรือ iterate ทีละ row
USERELATIONSHIP ใช้เปิดความสัมพันธ์ที่มีอยู่แล้ว แต่อยู่ในสถานะ inactive (ระบุด้วย Relationship ID). TREATAS สร้างความสัมพันธ์เสมือน โดยไม่ต้องมี relationship จริงในโมเดล
ไม่เป็นไร ค่าที่ไม่อยู่จะถูกไม่สนใจ (ignored) TREATAS ไม่ผิดพลาด มันแค่ไม่ลบแถวใดๆ ก็ได้ เหมือนจำนวน intersection ของเซต
ได้ แต่มีข้อจำกัด ใช้ได้ใน Measure แต่ไม่ใช้ได้ใน Calculated Column หรือ RLS (Row-Level Security) ใน DirectQuery
TREATAS ทำหน้าที่ “ทำความเป็นตัวแทน” ให้กับคอลัมน์หนึ่ง ว่าเป็นคอลัมน์อีกตัวหนึ่งเพื่อให้ filter ทะลุข้ามตาราง โดยไม่ต้องสร้าง relationship จริง.
สิ่งที่เจ๋งของ TREATAS คือมันไม่สร้างการตัดทอนข้อมูล ถ้าค่าใน Expression ไม่อยู่ในคอลัมน์ปลายทาง มันแค่ไม่มีผลใช้ – ไม่ผิดพลาด 😎 ยิ่งไปกว่านั้น ถ้าคุณมีตาราง lookup ที่เลือกบางค่า TREATAS จะช่วยให้คุณส่งค่าที่เลือกไปจำกัดข้อมูลในตารางอื่นได้อย่างง่าย