ตัวดําเนินการ DAX
ภาษานิพจน์การวิเคราะห์ข้อมูล (DAX) ใช้ตัวดําเนินการเพื่อสร้างนิพจน์ที่เปรียบเทียบค่า ทําการคํานวณทางคณิตศาสตร์ หรือทํางานกับสตริง
ชนิดของตัวดําเนินการ
ตัวดําเนินการคํานวณมีสี่ประเภท: คณิตศาสตร์ การเปรียบเทียบ การเรียงต่อข้อความ และตรรกะ
ตัวดําเนินการทางคณิตศาสตร์
เมื่อต้องการดําเนินการทางคณิตศาสตร์ขั้นพื้นฐาน เช่น การบวก การลบ หรือการคูณ รวมตัวเลข; การดู และสร้างผลลัพธ์ที่เป็นตัวเลข ให้ใช้ตัวดําเนินการทางคณิตศาสตร์ต่อไปนี้
ตัวดําเนินการทางคณิตศาสตร์ | ความหมาย | ตัวอย่าง |
---|---|---|
+ (เครื่องหมายบวก) |
การบวก | 3+3 |
- (เครื่องหมายลบ) |
การลบหรือสัญลักษณ์ | 3-1-1 |
* (เครื่องหมายดอกจัน) |
การคูณ | 3*3 |
/ (เครื่องหมายทับ) |
แผนก | 3/3 |
^ (อักขระแคร์ท) |
การยกกําลัง | 16^4 |
โน้ต
เครื่องหมายบวกสามารถทํางานทั้งในฐานะตัวดําเนินการไบนารี และเป็นตัวดําเนินการยูนารี ตัวดําเนินการแบบไบนารีต้องการตัวเลขทั้งสองด้านของตัวดําเนินการและดําเนินการบวก เมื่อคุณใช้ค่าในสูตร DAX ทั้งสองด้านของตัวดําเนินการไบนารี DAX พยายามแปลงค่าเป็นชนิดข้อมูลตัวเลข หากยังไม่ได้ใช้ตัวเลข ในทางตรงกันข้าม ตัวดําเนินการเอกภาคสามารถนําไปใช้กับอาร์กิวเมนต์ชนิดใดก็ได้ สัญลักษณ์เครื่องหมายบวกจะไม่ส่งผลกระทบต่อชนิดหรือค่า และจะถูกละเว้นเพียงอย่างเดียว ในขณะที่ตัวดําเนินการลบจะสร้างค่าลบ ถ้านําไปใช้กับค่าตัวเลข
ตัวดําเนินการเปรียบเทียบ
คุณสามารถเปรียบเทียบสองค่ากับตัวดําเนินการต่อไปนี้ เมื่อมีการเปรียบเทียบค่าสองค่าโดยใช้ตัวดําเนินการเหล่านี้ ผลลัพธ์จะเป็นค่าตรรกะ TRUE
หรือ FALSE
ตัวดําเนินการเปรียบเทียบ | ความหมาย | ตัวอย่าง |
---|---|---|
= |
เท่ากับ | [Region] = "USA" |
== |
เทียบเท่ากับ | [Region] == "USA" |
> |
มากกว่า | [Sales Date] > "Jan 2009" |
< |
น้อยกว่า | [Sales Date] < "1 ม.ค. 2009" |
>= |
มากกว่าหรือเท่ากับ | [Amount] >= 20000 |
<= |
น้อยกว่าหรือเท่ากับ | [Amount] <= 100 |
<> |
ไม่เท่ากับ | [Region] <> "USA" |
ตัวดําเนินการเปรียบเทียบทั้งหมดยกเว้น == ถือว่า 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 ; เฉพาะเมื่อนิพจน์ทั้งสอง FALSE เป็นผลลัพธ์ FALSE |
(([Region] = "France") || ([BikeBuyer] = "yes")) |
IN |
สร้างเงื่อนไข OR เชิงตรรกะระหว่างแต่ละแถวที่กําลังเปรียบเทียบกับตาราง หมายเหตุ: ไวยากรณ์ของคอนสตรักเตอร์ตารางใช้วงเล็บปีกกา | 'Product'[Color] IN { "Red", "Blue", "Black" } |
ตัวดําเนินการและลําดับความสําคัญ
ในบางกรณี ลําดับในการคํานวณอาจส่งผลต่อค่าผลลัพธ์ ดังนั้นจึงเป็นสิ่งสําคัญที่ต้องทําความเข้าใจวิธีการกําหนดลําดับและวิธีการเปลี่ยนลําดับเพื่อให้ได้ผลลัพธ์ที่ต้องการ
ลําดับการคํานวณ
นิพจน์ประเมินค่าตัวดําเนินการและค่าตามลําดับที่ระบุ นิพจน์ทั้งหมดจะเริ่มต้นด้วยเครื่องหมายเท่ากับ (=) เสมอ เครื่องหมายเท่ากับแสดงว่าอักขระความสําเร็จเป็นนิพจน์
ที่อยู่หลังเครื่องหมายเท่ากับคือองค์ประกอบที่จะคํานวณ (ตัวถูกดําเนินการ) ซึ่งคั่นด้วยตัวดําเนินการคํานวณ นิพจน์จะอ่านจากซ้ายไปขวาเสมอ แต่ลําดับที่มีการจัดกลุ่มองค์ประกอบสามารถควบคุมได้ในระดับหนึ่งโดยใช้วงเล็บ
ลําดับความสําคัญของตัวดําเนินการ
ถ้าคุณรวมตัวดําเนินการหลายตัวในสูตรเดียว การดําเนินการจะถูกเรียงลําดับตามตารางต่อไปนี้ ถ้าตัวดําเนินการมีค่าลําดับความสําคัญเท่ากัน ตัวดําเนินการเหล่านั้นจะถูกเรียงลําดับจากซ้ายไปขวา ตัวอย่างเช่น ถ้านิพจน์มีทั้งตัวดําเนินการคูณและหาร ตัวดําเนินการดังกล่าวจะถูกประเมินตามลําดับที่ปรากฏในนิพจน์ จากซ้ายไปขวา
ผู้ปฏิบัติการ | คำอธิบาย |
---|---|
^ |
การยกกําลัง |
– |
เครื่องหมาย (เช่น –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 จะแปลงเป็นชนิดข้อมูลทั่วไปเพื่อนําตัวดําเนินการไปใช้ในบางกรณี:
- ตัวถูกดําเนินการทั้งสองจะถูกแปลงเป็นชนิดข้อมูลทั่วไปที่ใหญ่ที่สุดเท่าที่เป็นไปได้
- ตัวดําเนินการ จะถูกนําไปใช้ ถ้าเป็นไปได้
ตัวอย่างเช่น สมมติว่าคุณมีตัวเลขสองค่าที่คุณต้องการรวม ตัวเลขหนึ่งเป็นผลลัพธ์จากสูตร เช่น =[Price] * .20
และผลลัพธ์อาจมีทศนิยมหลายตําแหน่ง ตัวเลขอื่นๆ คือจํานวนเต็มที่ได้รับการระบุเป็นค่าสตริง
ในกรณีนี้ DAX จะแปลงตัวเลขทั้งสองเป็นจํานวนจริงในรูปแบบตัวเลข โดยใช้รูปแบบตัวเลขที่ใหญ่ที่สุดที่สามารถจัดเก็บตัวเลขทั้งสองชนิดได้ จากนั้น DAX จะใช้การคูณ
การแปลงชนิดข้อมูลอาจไม่สามารถนํามาใช้สําหรับการดําเนินการเปรียบเทียบได้ ทั้งนี้ขึ้นอยู่กับชุดชนิดข้อมูล สําหรับรายการทั้งหมดของชนิดข้อมูลที่ได้รับการสนับสนุนโดย DAXโปรดดู ชนิดข้อมูล ที่ได้รับการสนับสนุนในแบบจําลองตาราง และ ชนิดข้อมูล ใน Power BI Desktop
จํานวนเต็ม จํานวนจริง สกุลเงิน วันที่/เวลา และค่าว่างถือเป็นตัวเลขเพื่อวัตถุประสงค์ในการเปรียบเทียบ Blank (ค่าว่าง) ประเมินเป็นศูนย์เมื่อดําเนินการเปรียบเทียบ ชุดชนิดข้อมูลต่อไปนี้ได้รับการสนับสนุนสําหรับการดําเนินการเปรียบเทียบ
ชนิดข้อมูลด้านซ้าย | ชนิดข้อมูลด้านขวา |
---|---|
ตัวเลข | ตัวเลข |
บูลีน | บูลีน |
เชือก | เชือก |
การเปรียบเทียบชนิดข้อมูลผสมอื่นๆ จะส่งกลับข้อผิดพลาด ตัวอย่างเช่น สูตร เช่น ="1" > 0 ส่งกลับข้อผิดพลาดที่ระบุว่าการดําเนินการเปรียบเทียบ DAX ไม่สนับสนุนการเปรียบเทียบค่าของชนิดข้อความกับค่าชนิดจํานวนเต็ม
ชนิดข้อมูลที่ใช้ใน DAX | ชนิดข้อมูลที่ใช้ใน Excel |
---|---|
Numbers (I8, R8) | Numbers (R8) |
เชือก | เชือก |
บูลีน | บูลีน |
วันที่เวลา | ตัว แปร |
เงินตรา | เงินตรา |
ความแตกต่างในลําดับความสําคัญ
ลําดับความสําคัญของการดําเนินการในสูตร DAX โดยทั่วไปเหมือนกับที่ใช้โดย Microsoft Excel แต่ไม่รองรับตัวดําเนินการของ Excel บางตัว เช่น เปอร์เซ็นต์ นอกจากนี้ ยังไม่รองรับช่วงอีกด้วย
ดังนั้น เมื่อใดก็ตามที่คุณคัดลอกและวางสูตรจาก Excel คุณต้องแน่ใจว่าได้ตรวจทานสูตรอย่างรอบคอบแล้วเนื่องจากตัวดําเนินการหรือองค์ประกอบบางอย่างในสูตรอาจไม่ถูกต้อง เมื่อมีข้อสงสัยเกี่ยวกับลําดับของการดําเนินการ เราขอแนะนําให้คุณใช้วงเล็บเพื่อควบคุมลําดับของการดําเนินการและกําจัดความคลุมเครือเกี่ยวกับผลลัพธ์