Share via


ตัวดำเนินการ DAX

ภาษา Data Analysis Expression (DAX) ใช้ตัวดําเนินการเพื่อสร้างนิพจน์ที่เปรียบเทียบค่า ทําการคํานวณทางคณิตศาสตร์ หรือทํางานกับสตริง

ชนิดของตัวดําเนินการ

ตัวดําเนินการคํานวณมีสี่ประเภท: คณิตศาสตร์ การเปรียบเทียบ การเรียงต่อข้อความ และตรรกะ

ตัวดำเนินการทางคณิตศาสตร์

เมื่อต้องการดําเนินการทางคณิตศาสตร์ขั้นพื้นฐาน เช่น การบวก การลบ หรือการคูณ รวมตัวเลข; การดู และสร้างผลลัพธ์ที่เป็นตัวเลข ให้ใช้ตัวดําเนินการทางคณิตศาสตร์ต่อไปนี้

ตัวดําเนินการทางคณิตศาสตร์ ความหมาย ตัวอย่าง
+ (เครื่องหมายบวก) การเพิ่มเติม 3+3
– (เครื่องหมายลบ) การลบหรือสัญลักษณ์ 3–1–1
* (เครื่องหมายดอกจัน) การคูณ 3*3
/ (เครื่องหมายทับ) ประเภทย่อย 3/3
^ (อักขระ ^) เลขยกกำลัง 16^4

หมายเหตุ

เครื่องหมายบวกสามารถทํางานทั้งในฐานะ ตัวดําเนินการ ไบนารีและเป็น ตัวดําเนินการเอกภาค ตัวดําเนินการแบบไบนารีต้องการตัวเลขทั้งสองด้านของตัวดําเนินการและดําเนินการบวก เมื่อคุณใช้ค่าในสูตร DAX ทั้งสองด้านของตัวดําเนินการไบนารี DAX จะพยายามแปลงค่าเป็นชนิดข้อมูลตัวเลขหากยังไม่ได้ใช้ตัวเลข ในทางตรงกันข้าม ตัวดําเนินการเอกภาคสามารถนําไปใช้กับอาร์กิวเมนต์ชนิดใดก็ได้ สัญลักษณ์เครื่องหมายบวกจะไม่ส่งผลกระทบต่อชนิดหรือค่า และจะถูกละเว้นเพียงอย่างเดียว ในขณะที่ตัวดําเนินการลบจะสร้างค่าลบ ถ้านําไปใช้กับค่าตัวเลข

ตัวดำเนินการเปรียบเทียบ

คุณสามารถเปรียบเทียบสองค่ากับตัวดําเนินการต่อไปนี้ เมื่อมีการเปรียบเทียบค่าสองค่าโดยใช้ตัวดําเนินการเหล่านี้ ผลลัพธ์จะเป็นค่าตรรกะ ไม่ว่า TRUE หรือ FALSE

ตัวดําเนินการเปรียบเทียบ ความหมาย ตัวอย่าง
= เท่ากับ [Region] = "USA"
== เท่ากับสามตัว [Region] == "USA"
> มากกว่า [Sales Date] > "ม.ค. 2009"
< น้อยกว่า [Sales Date] < "1 ม.ค. 2009"
>= มากกว่าหรือเท่ากับ [Amount] >= 20000
<= น้อยกว่าหรือเท่ากับ [Amount] <= 100
<> ไม่เท่ากับ [Region] <> "สหรัฐอเมริกา"

ตัวดําเนินการเปรียบเทียบทั้งหมดยกเว้น == ถือว่า BLANK เท่ากับตัวเลข 0, สตริงว่าง "", DATE(1899, 12, 30) หรือ FALSE ด้วยเหตุนี้ [Column] = 0 จะเป็นจริงเมื่อค่าของ [Column] เป็น 0 หรือ BLANK (ค่าว่าง) ในทางตรงกันข้าม [Column] == 0 จะเป็นจริงเฉพาะเมื่อค่า [Column] เป็น 0 เท่านั้น

ตัวดำเนินการการเรียงต่อกันของข้อความ

ใช้เครื่องหมายและ (&) เพื่อต่อหรือเชื่อมสตริงข้อความสองตัวขึ้นไปเพื่อสร้างเป็นข้อความชิ้นเดียว

ตัวดําเนินการข้อความ ความหมาย ตัวอย่าง
& (เครื่องหมายและ) เชื่อมต่อหรือเชื่อมสองค่าเพื่อสร้างค่าข้อความแบบต่อเนื่องหนึ่งค่า [Region] & ", " & [City]

ตัวดำเนินการทางตรรกะ

ใช้ตัวดําเนินการเชิงตรรกะ (&&) และ (||) เพื่อรวมนิพจน์เพื่อสร้างผลลัพธ์เดียว

ตัวดําเนินการข้อความ ความหมาย ตัวอย่าง
& (ดับเบิลแซนด์) สร้างเงื่อนไข AND ระหว่างนิพจน์สองรายการที่แต่ละรายการมีผลลัพธ์บูลีน หากนิพจน์ทั้งสองส่งคืน TRUE การรวมกันของนิพจน์จะส่งคืน TRUE ด้วยเช่นกัน มิฉะนั้นการรวมจะส่งคืน FALSE ([Region] = "France") & ([BikeBuyer] = "yes"))
|| (สัญลักษณ์ไปป์คู่) สร้างเงื่อนไข OR ระหว่างนิพจน์เชิงตรรกะสองรายการ ถ้านิพจน์ใดนิพจน์หนึ่งให้ผลลัพธ์เป็น TRUE ผลลัพธ์จะเป็น TRUE แต่ถ้านิพจน์ใดนิพจน์หนึ่งส่งกลับ TRUE เฉพาะเมื่อนิพจน์ทั้งสองเป็น FALSE จะเป็นผลลัพธ์ FALSE (([Region] = "France") || ([BikeBuyer] = "yes"))
IN สร้างเงื่อนไข OR เชิงตรรกะระหว่างแต่ละแถวที่ถูกเปรียบเทียบกับตาราง หมายเหตุ: ไวยากรณ์ของคอนสตรักเตอร์ตารางใช้วงเล็บปีกกา 'Product'[Color] IN { "Red", "Blue", "Black" }

ตัวดําเนินการและลําดับความสําคัญ

ในบางกรณี ลําดับในการคํานวณอาจส่งผลต่อค่าผลลัพธ์ ดังนั้นจึงเป็นสิ่งสําคัญที่ต้องทําความเข้าใจวิธีการกําหนดลําดับและวิธีการเปลี่ยนลําดับเพื่อให้ได้ผลลัพธ์ที่ต้องการ

ลําดับการคํานวณ

นิพจน์ประเมินค่าตัวดําเนินการและค่าตามลําดับที่ระบุ นิพจน์ทั้งหมดจะเริ่มต้นด้วยเครื่องหมายเท่ากับ (=) เสมอ เครื่องหมายเท่ากับแสดงว่าอักขระความสําเร็จเป็นนิพจน์

ที่อยู่หลังเครื่องหมายเท่ากับคือองค์ประกอบที่จะคํานวณ (ตัวถูกดําเนินการ) ซึ่งคั่นด้วยตัวดําเนินการคํานวณ นิพจน์จะอ่านจากซ้ายไปขวาเสมอ แต่ลําดับที่มีการจัดกลุ่มองค์ประกอบสามารถควบคุมได้ในระดับหนึ่งโดยใช้วงเล็บ

ลำดับความสำคัญของตัวดำเนินการ

ถ้าคุณรวมตัวดําเนินการหลายตัวในสูตรเดียว การดําเนินการจะถูกเรียงลําดับตามตารางต่อไปนี้ ถ้าตัวดําเนินการมีค่าลําดับความสําคัญเท่ากัน ตัวดําเนินการเหล่านั้นจะถูกเรียงลําดับจากซ้ายไปขวา ตัวอย่างเช่น ถ้านิพจน์มีทั้งตัวดําเนินการคูณและหาร ตัวดําเนินการดังกล่าวจะถูกประเมินตามลําดับที่ปรากฏในนิพจน์ จากซ้ายไปขวา

Operator คำอธิบาย
^ เลขยกกำลัง
เครื่องหมาย (เช่นใน –1)
*และ/ การคูณและการหาร
+ และ – การบวกและการลบ
& เชื่อมต่อสองสตริงของข้อความ (การเรียงต่อกัน)
=,==,,<>,<=,>=,<>,IN เปรียบ เทียบ
NOT NOT (ตัวดําเนินการเอกภาค)

การใช้วงเล็บเพื่อควบคุมลําดับการคํานวณ

เมื่อต้องการเปลี่ยนลําดับการประเมิน คุณควรใส่เครื่องหมายวงเล็บในส่วนนั้นของสูตรที่ต้องคํานวณก่อน ตัวอย่างเช่น สูตรต่อไปนี้สร้าง 11 เนื่องจากการคูณจะถูกคํานวณก่อนการบวก สูตรคูณ 2 ด้วย 3 จากนั้นเพิ่ม 5 เข้ากับผลลัพธ์

=5+2*3  

ในทางตรงกันข้าม ถ้าคุณใช้วงเล็บเพื่อเปลี่ยนไวยากรณ์ ลําดับจะเปลี่ยนด้วย โดยที่ 5 และ 2 จะถูกรวมเข้าด้วยกัน และผลลัพธ์จะคูณด้วย 3 เพื่อสร้าง 21

=(5+2)*3  

ในตัวอย่างต่อไปนี้ วงเล็บที่อยู่รอบส่วนแรกของสูตรจะบังคับการคํานวณเพื่อประเมินนิพจน์ (3 + 0.25) ก่อน แล้วจึงหารผลลัพธ์ด้วยผลลัพธ์ของนิพจน์ (3 - 0.25))

=(3 + 0.25)/(3 - 0.25)  

ในตัวอย่างต่อไปนี้ ตัวดําเนินการยกกําลังจะถูกนําไปใช้ก่อนตามกฎลําดับความสําคัญสําหรับตัวดําเนินการ จากนั้นจึงใช้ตัวดําเนินการเครื่องหมาย ผลลัพธ์สําหรับนิพจน์นี้คือ -4

=-2^2  

เพื่อให้แน่ใจว่าตัวดําเนินการเครื่องหมายถูกนําไปใช้กับค่าตัวเลขก่อน คุณสามารถใช้วงเล็บเพื่อควบคุมตัวดําเนินการ ดังที่แสดงในตัวอย่างต่อไปนี้ ผลลัพธ์สําหรับนิพจน์นี้คือ 4

= (-2)^2  

ความเข้ากันได้

DAX จัดการและเปรียบเทียบชนิดข้อมูลต่าง ๆ ได้ง่ายดาย เช่น Microsoft Excel อย่างไรก็ตาม กลไกการคํานวณพื้นฐานอ้างอิงจาก SQL Server Analysis Services และให้คุณลักษณะขั้นสูงเพิ่มเติมของการจัดเก็บข้อมูลเชิงสัมพันธ์ รวมถึงการสนับสนุนที่สมบูรณ์ยิ่งขึ้นสําหรับประเภทวันที่และเวลา ดังนั้น ในบางกรณีผลลัพธ์ของการคํานวณหรือลักษณะการทํางานของฟังก์ชันอาจไม่เหมือนกับใน Excel นอกจากนี้ DAX ยังรองรับชนิดข้อมูลได้มากกว่า Excel อีกด้วย ในส่วนนี้จะอธิบายความแตกต่างที่สําคัญ

การแปลงชนิดข้อมูลของตัวถูกดําเนินการ

โดยทั่วไป ตัวถูกดําเนินการทั้งสองทางด้านซ้ายและด้านขวาของตัวดําเนินการใดก็ตามควรเป็นชนิดข้อมูลเดียวกัน อย่างไรก็ตาม หากชนิดข้อมูลแตกต่างกัน DAX จะแปลงเป็นชนิดข้อมูลทั่วไปเพื่อนําตัวดําเนินการไปใช้ในบางกรณี:

  1. ตัวถูกดําเนินการทั้งสองจะถูกแปลงเป็นชนิดข้อมูลทั่วไปที่ใหญ่ที่สุดเท่าที่เป็นไปได้
  2. ตัวดําเนินการ จะถูกนําไปใช้ ถ้าเป็นไปได้

ตัวอย่างเช่น สมมติว่าคุณมีตัวเลขสองค่าที่คุณต้องการรวม ตัวเลขหนึ่งเป็นผลลัพธ์จากสูตร เช่น =[Price] * .20 และผลลัพธ์อาจมีทศนิยมหลายตําแหน่ง ตัวเลขอื่นๆ คือจํานวนเต็มที่ได้รับการระบุเป็นค่าสตริง

ในกรณีนี้ DAX จะแปลงตัวเลขทั้งสองเป็นจํานวนจริงในรูปแบบตัวเลข โดยใช้รูปแบบตัวเลขที่ใหญ่ที่สุดที่สามารถเก็บตัวเลขทั้งสองชนิดได้ จากนั้น DAX จะใช้การคูณ

การแปลงชนิดข้อมูลอาจไม่สามารถนํามาใช้สําหรับการดําเนินการเปรียบเทียบได้ ทั้งนี้ขึ้นอยู่กับชุดชนิดข้อมูล สําหรับรายการทั้งหมดของชนิดข้อมูลที่ DAX สนับสนุน ดูชนิดข้อมูลที่ได้รับการสนับสนุนในแบบจําลองตารางและชนิดข้อมูลใน Power BI Desktop

จํานวนเต็ม จํานวนจริง สกุลเงิน วันที่/เวลา และค่าว่างถือเป็นตัวเลขเพื่อวัตถุประสงค์ในการเปรียบเทียบ Blank (ค่าว่าง) ประเมินเป็นศูนย์เมื่อดําเนินการเปรียบเทียบ ชุดชนิดข้อมูลต่อไปนี้ได้รับการสนับสนุนสําหรับการดําเนินการเปรียบเทียบ

ชนิดข้อมูลด้านซ้าย ชนิดข้อมูลด้านขวา
ตัวเลข ตัวเลข
Boolean Boolean
สตริง สตริง

การเปรียบเทียบชนิดข้อมูลผสมอื่นๆ จะส่งกลับข้อผิดพลาด ตัวอย่างเช่น สูตร เช่น ="1" > 0 ส่งกลับข้อผิดพลาดที่ระบุว่าการดําเนินการเปรียบเทียบ DAX ไม่สนับสนุนการเปรียบเทียบค่าของชนิดข้อความกับค่าชนิดจํานวนเต็ม

ชนิดข้อมูลที่ใช้ใน DAX ชนิดข้อมูลที่ใช้ใน Excel
Numbers (I8, R8) Numbers (R8)
สตริง สตริง
Boolean Boolean
DateTime ตัวแปร
สกุลเงิน สกุลเงิน

ความแตกต่างในลําดับความสําคัญ

ลําดับความสําคัญของการดําเนินการในสูตร DAX โดยทั่วไปจะเหมือนกับที่ใช้โดย Microsoft Excel แต่ไม่รองรับตัวดําเนินการของ Excel บางตัว เช่น เปอร์เซ็นต์ นอกจากนี้ ยังไม่รองรับช่วงอีกด้วย

ดังนั้น เมื่อใดก็ตามที่คุณคัดลอกและวางสูตรจาก Excel คุณต้องแน่ใจว่าได้ตรวจทานสูตรอย่างรอบคอบแล้วเนื่องจากตัวดําเนินการหรือองค์ประกอบบางอย่างในสูตรอาจไม่ถูกต้อง เมื่อมีข้อสงสัยเกี่ยวกับลําดับของการดําเนินการ เราขอแนะนําให้คุณใช้วงเล็บเพื่อควบคุมลําดับของการดําเนินการและกําจัดความคลุมเครือเกี่ยวกับผลลัพธ์

ไวยากรณ์ DAX
การตั้งชื่อพารามิเตอร์ DAX