ตรวจสอบบริบทตัวกรอง
ฟังก์ชัน VALUES
DAX ช่วยให้สูตรของคุณกําหนดค่าที่อยู่ในบริบทตัวกรอง
ไวยากรณ์ของ VALUES
ฟังก์ชันมีดังนี้:
VALUES(<TableNameOrColumnName>)
ฟังก์ชันจำเป็นต้องส่งผ่านในการอ้างอิงตารางหรือการอ้างอิงคอลัมน์ เมื่อคุณส่งผ่านการอ้างอิง ตารางจะส่งกลับวัตถุตารางที่มีคอลัมน์เดียวกันที่มีแถวสำหรับสิ่งที่อยู่ในบริบทตัวกรอง เมื่อคุณส่งผ่านการอ้างอิง คอลัมน์จะส่งกลับตารางแบบคอลัมน์เดียวของค่าที่ไม่ซ้ำกันที่อยู่ในบริบทตัวกรอง
ฟังก์ชันจะส่งกลับวัตถุตารางเสมอและเป็นไปได้สำหรับตารางที่มีหลายแถว ดังนั้น เมื่อต้องทดสอบว่าค่าเฉพาะอยู่ในบริบทตัวกรองหรือไม่ สูตรของ VALUES
คุณต้องทดสอบว่าฟังก์ชันส่งกลับแถวเดียวก่อน ฟังก์ชันสองฟังก์ชันสามารถช่วยให้คุณทํางานนี้ได้สําเร็จ: ฟังก์ชัน HASONEVALUE
และ SELECTEDVALUE
ฟังก์ชัน DAX
ฟังก์ชัน HASONEVALUE
จะแสดง TRUE
เมื่อมีการกรองการอ้างอิงคอลัมน์ที่ระบุให้เป็นค่าเดียว
ฟังก์ชัน SELECTEDVALUE
นี้ช่วยลดความซับซ้อนของงานในการกําหนดว่าค่าเดียวจะเป็นอะไร เมื่อฟังก์ชันถูกส่งผ่านการอ้างอิงคอลัมน์ ฟังก์ชันจะส่งคืนค่าเดียวหรือเมื่อมีมากกว่าหนึ่งค่าอยู่ในบริบทตัวกรอง ฟังก์ชันจะส่งคืนค่า BLANK (หรือค่าทางเลือกที่คุณส่งผ่านไปยังฟังก์ชัน)
ในตัวอย่างต่อไปนี้ คุณจะใช้ HASONEVALUE
ฟังก์ชัน เพิ่มหน่วยวัดต่อไปนี้ซึ่งจะคํานวณค่าคอมมิชชันยอดขายลงในตารางยอดขาย โปรดทราบว่าที่ Adventure Works อัตราค่าคอมมิชชันคือ 10 เปอร์เซ็นต์ของรายได้สําหรับทุกประเทศ/ภูมิภาคยกเว้นสหรัฐอเมริกา ในสหรัฐอเมริกา พนักงานขายได้รับค่าคอมมิชชัน15เปอร์เซ็นต์ จัดรูปแบบหน่วยวัดเป็นสกุลเงินด้วยตำแหน่งทศนิยมสองจุด จากนั้นเพิ่มลงในตารางที่พบในหน้า 3 ของรายงาน
Sales Commission =
[Revenue]
* IF(
HASONEVALUE('Sales Territory'[Country]),
IF(
VALUES('Sales Territory'[Country]) = "United States",
0.15,
0.1
)
)
โปรดสังเกตว่าผลลัพธ์คอมมิชชันยอดขายทั้งหมดจะเป็นค่า BLANK เหตุผลคือเนื่องจากหลายค่าอยู่ในบริบทตัวกรองสําหรับคอลัมน์ประเทศในตารางพื้นที่ยอดขาย ในกรณีนี้ ฟังก์ชันจะ HASONEVALUE
ส่งกลับ FALSE
ซึ่งผลลัพธ์ในหน่วยวัด รายได้ จะถูกคูณด้วย BLANK (ค่าที่คูณด้วย BLANK คือ BLANK) หากต้องการสร้างผลรวม คุณจะต้องใช้ฟังก์ชันตัวทำซ้ำซึ่งจะอธิบายในภายหลังในโมดูลนี้
สามฟังก์ชันอื่นๆ ที่คุณสามารถใช้ได้เพื่อทดสอบสถานะตัวกรองได้แก่:
-
ISFILTERED
- ส่งกลับTRUE
เมื่อการอ้างอิงคอลัมน์ที่ส่งผ่านถูกกรองโดยตรง -
ISCROSSFILTERED
- ส่งกลับTRUE
เมื่อการอ้างอิงคอลัมน์ที่ส่งผ่านถูกกรองทางอ้อม คอลัมน์จะถูกกรองแบบไขว้เมื่อตัวกรองที่ใช้กับคอลัมน์อื่นในตารางเดียวกันหรือในตารางที่เกี่ยวข้องมีผลต่อคอลัมน์อ้างอิงโดยการกรอง -
ISINSCOPE
- ส่งกลับTRUE
เมื่อการอ้างอิงคอลัมน์ที่ส่งผ่านคือระดับในลําดับชั้นของระดับ
กลับไปที่ หน้า 2 ของรายงาน จากนั้นแก้ไขข้อกําหนดหน่วยวัด % รายได้ทั้งหมดของประเทศ เพื่อทดสอบว่าคอลัมน์ ภูมิภาค ในตาราง พื้นที่ขาย อยู่ในขอบเขต ถ้าไม่อยู่ในขอบเขต ผลลัพธ์ของหน่วยวัดควรเป็นค่า BLANK
Revenue % Total Country =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalCountryRevenue =
CALCULATE(
[Revenue],
REMOVEFILTERS('Sales Territory'[Region])
)
RETURN
IF(
ISINSCOPE('Sales Territory'[Region]),
DIVIDE(
CurrentRegionRevenue,
TotalCountryRevenue
)
)
ในภาพเมทริกซ์ โปรดสังเกตว่าตอนนี้ค่า% รายได้ทั้งหมดของประเทศ จะแสดงเฉพาะเมื่อภูมิภาคอยู่ในขอบเขตเท่านั้น