ตัวดำเนินการ 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 จะแปลงเป็นชนิดข้อมูลทั่วไปเพื่อนําตัวดําเนินการไปใช้ในบางกรณี:
- ตัวถูกดําเนินการทั้งสองจะถูกแปลงเป็นชนิดข้อมูลทั่วไปที่ใหญ่ที่สุดเท่าที่เป็นไปได้
- ตัวดําเนินการ จะถูกนําไปใช้ ถ้าเป็นไปได้
ตัวอย่างเช่น สมมติว่าคุณมีตัวเลขสองค่าที่คุณต้องการรวม ตัวเลขหนึ่งเป็นผลลัพธ์จากสูตร เช่น =[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 คุณต้องแน่ใจว่าได้ตรวจทานสูตรอย่างรอบคอบแล้วเนื่องจากตัวดําเนินการหรือองค์ประกอบบางอย่างในสูตรอาจไม่ถูกต้อง เมื่อมีข้อสงสัยเกี่ยวกับลําดับของการดําเนินการ เราขอแนะนําให้คุณใช้วงเล็บเพื่อควบคุมลําดับของการดําเนินการและกําจัดความคลุมเครือเกี่ยวกับผลลัพธ์
เนื้อหาที่เกี่ยวข้อง
คำติชม
https://aka.ms/ContentUserFeedback
เร็วๆ นี้: ตลอดปี 2024 เราจะขจัดปัญหา GitHub เพื่อเป็นกลไกคำติชมสำหรับเนื้อหา และแทนที่ด้วยระบบคำติชมใหม่ สำหรับข้อมูลเพิ่มเติม ให้ดู:ส่งและดูข้อคิดเห็นสำหรับ