=NOT(<logical>)
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| logical | boolean | Yes | นิพจน์ตรรกะที่ต้องการกลับผล (เช่น [Sales] > 0 หรือ ISBLANK([Measure])) |
ใช้ NOT เพื่อกลับผลของเงื่อนไข แล้วนำไปใช้ใน IF หรือเป็นตัวกรองใน Visual
คืน BLANK() เมื่อเงื่อนไขบางอย่าง “ไม่เป็นจริง” โดยใช้ NOT เพื่อทำให้โค้ดอ่านง่ายขึ้น
NOT(TRUE)= NOT(TRUE)
FALSE
Has Value = NOT( ISBLANK([Total Sales]) )Has Value =
NOT(
ISBLANK([Total Sales])
)
TRUE เมื่อ [Total Sales] ไม่เป็น BLANK(), FALSE เมื่อเป็น BLANK
Status = IF( NOT([Total Profit] > 0), "ขาดทุนหรือเท่าทุน", "กำไร" )Status =
IF(
NOT([Total Profit] > 0),
"ขาดทุนหรือเท่าทุน",
"กำไร"
)
"ขาดทุนหรือเท่าทุน" เมื่อกำไร <= 0, "กำไร" เมื่อกำไร > 0
Non-A Sales = CALCULATE( SUM([Amount]), NOT([Category] = "A") )Non-A Sales =
CALCULATE(
SUM([Amount]),
NOT([Category] = "A")
)
ผลรวมของยอดขายที่ไม่ใช่หมวด A
ผมขอพูดถึงสองแบบที่ใช้บ่อย ถ้าเงื่อนไขง่าย ๆ การเขียนกลับด้านโดยตรง (เช่น แทน =) อาจสั้นกว่า และอ่านทีเดียว แต่ถ้าเป็นนิพจน์ยาวหรือซับซ้อน NOT ช่วยให้กลับผลทั้งก้อนและอ่านเจตนาได้ชัดกว่า ผมเลือก NOT เพราะ 1) อ่านค่อนข้างได้ว่าเป็น “ไม่” 2) ดูเหมือนการปฏิเสธของประพจน์ เช่น IF NOT(…) ดูเหมือน “if not this then…”
ทางเทคนิค NOT ควรรับนิพจน์ที่ให้ผลเป็นตรรกะ ถ้าส่งค่าอื่นมา ระบบจะพยายามแปลงตามกฎของ DAX (เช่น 0 = FALSE, ตัวเลข ≠ 0 = TRUE) แต่ผมแนะนำให้เขียนให้เป็นเงื่อนไขตรรกะก่อนเสมอ เช่น NOT(value > 0) แทน NOT(value) เพื่อให้ชัดเจนว่าสิ่งที่กลับนั้นหมายถึงอะไร
ได้ และผมใช้บ่อยเมื่อต้องการสร้างมาตรวัดที่เป็น “ไม่ใช่” เงื่อนไขบางอย่าง เช่น CALCULATE(SUM(Sales[Amount]), NOT(Sales[Category] = “A”)) จะให้ผลรวมของหมวดที่ไม่ใช่ A ทั้งนี้ต้องแน่ใจว่า NOT ครอบเงื่อนไขตรรกะที่สมบูรณ์
NOT เป็นตัวดำเนินการตรรกะที่กลับค่าบูลีน TRUE เป็น FALSE และ FALSE เป็น TRUE ใช้เมื่อคุณต้องการนิเสธเงื่อนไข เช่น “ไม่ว่าง” “ไม่กำไร” หรือ “ไม่ใช่หมวดนี้” ระบบจะประเมินนิพจน์ที่ส่งเข้า แล้วคืนค่าตรงข้าม
ที่เจ๋งคือ NOT ไม่ใช่ฟังก์ชันทั่วไป แต่เป็นตัวดำเนินการตรรกะที่เขียนด้วยไวยากรณ์ฟังก์ชัน จึงทำงานได้รวดเร็ว และเมื่อใช้ในแถว Context มันจะดำเนินการ Context Transition ได้สอดคล้องกับ AND/OR ทำให้ผสมกับตรรกะซับซ้อนได้ง่าย
ส่วนตัวผม ผมชอบใช้ NOT เวลาที่เขียนเงื่อนไขแบบ “ปฏิเสธ” เพราะมันอ่านออกว่า “ไม่” ซึ่งสื่อสารเจตนาได้ชัดกว่าการเขียนสัญลักษณ์กลับด้าน (เช่น = หรือ = ยอดขาย…” 😎