แชร์ผ่าน


ไวยากรณ์ DAX

บทความนี้อธิบายไวยากรณ์และข้อกําหนดสําหรับภาษาของนิพจน์สูตร DAX

ข้อกําหนดไวยากรณ์

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

  • ค่าคงที่สเกลา หรือนิพจน์ที่ใช้ตัวดําเนินการสเกลา (+,-,*,/,>=,...,&&, ...)

  • การอ้างอิงไปยังคอลัมน์หรือตาราง ภาษา DAX จะใช้ตารางและคอลัมน์เป็นข้อมูลป้อนเข้าไปยังฟังก์ชันไม่ใช่อาร์เรย์หรือชุดค่าแบบกําหนดเอง

  • ตัวดําเนินการ ค่าคงที่ และค่าที่ระบุเป็นส่วนหนึ่งของนิพจน์

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

    ฟังก์ชัน DAX ส่วนใหญ่จําเป็นต้องมีอย่างน้อยหนึ่งอาร์กิวเมนต์ซึ่งสามารถรวมตาราง คอลัมน์ นิพจน์ และค่าได้ อย่างไรก็ตาม ฟังก์ชันบางอย่าง เช่น PIไม่จําเป็นต้องมีอาร์กิวเมนต์ใด ๆ แต่จําเป็นต้องมีวงเล็บเพื่อระบุอาร์กิวเมนต์ null เสมอ ตัวอย่างเช่น คุณต้องพิมพ์ PIเสมอ () ไม่ใช่ PI คุณยังสามารถซ้อนฟังก์ชันภายในฟังก์ชันอื่นได้

  • นิพจน์ นิพจน์อาจมีสิ่งใดสิ่งหนึ่งหรือทั้งหมดดังต่อไปนี้: ตัวดําเนินการ ค่าคงที่ หรือการอ้างอิงไปยังคอลัมน์

ตัวอย่างเช่น สูตรต่อไปนี้เป็นสูตรที่ถูกต้องทั้งหมด

สูตร ผล
= 3 3
= "Sales" ยอดขาย
= 'Sales'[Amount] ถ้าคุณใช้สูตรนี้ภายในตารางยอดขาย คุณจะได้รับค่าของจํานวนคอลัมน์ในตารางยอดขายสําหรับแถวปัจจุบัน
= (0.03 *[Amount])

=0.03 * [Amount]
สามเปอร์เซ็นต์ของค่าในคอลัมน์ยอดเงินของตารางปัจจุบัน

แม้ว่าสูตรนี้สามารถใช้ในการคํานวณเปอร์เซ็นต์ แต่ผลลัพธ์จะไม่แสดงเป็นเปอร์เซ็นต์เว้นแต่ว่าคุณใช้การจัดรูปแบบในตาราง
= PI() ค่าของ pi คงที่

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

ข้อกําหนดการตั้งชื่อ

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

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

เมื่อคุณใช้ตารางหรือคอลัมน์เป็นข้อมูลป้อนเข้าไปยังฟังก์ชัน คุณต้อง รับรองคุณสมบัติ ชื่อคอลัมน์ ชื่อ ที่ตรงตามหลักเกณฑ์ของคอลัมน์คือชื่อตาราง ตามด้วยชื่อคอลัมน์ในวงเล็บสี่เหลี่ยม: ตัวอย่างเช่น 'U.S. Sales'[Products] จําเป็นต้องมีชื่อที่ตรงตามหลักเกณฑ์เสมอเมื่อคุณอ้างอิงคอลัมน์ในบริบทต่อไปนี้:

  • เป็นอาร์กิวเมนต์สําหรับฟังก์ชัน VALUES

  • เป็นอาร์กิวเมนต์สําหรับฟังก์ชัน ALL หรือ ALLEXCEPT

  • ในอาร์กิวเมนต์ตัวกรองสําหรับฟังก์ชัน CALCULATE หรือ CALCULATETABLE

  • เป็นอาร์กิวเมนต์สําหรับฟังก์ชัน RELATEDTABLE

  • เป็นอาร์กิวเมนต์สําหรับฟังก์ชันตัวแสดงเวลาใด ๆ

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

ถ้าชื่อของตารางประกอบด้วยช่องว่าง คําสําคัญที่สงวนไว้ หรืออักขระที่ไม่ได้รับอนุญาต คุณต้องใส่ชื่อตารางไว้ในเครื่องหมายอัญประกาศเดี่ยว นอกจากนี้ คุณยังต้องใส่ชื่อตารางในเครื่องหมายอัญประกาศถ้าชื่อประกอบด้วยอักขระใด ๆ ที่อยู่นอกช่วงอักขระพยัญชนะผสมตัวเลข ANSI โดยไม่ต้องคํานึงถึงว่าตําแหน่งที่ตั้งของคุณสนับสนุนชุดอักขระหรือไม่ ตัวอย่างเช่น ถ้าคุณเปิดสมุดงานที่ประกอบด้วยชื่อตารางที่เขียนในอักขระ Cyrillic เช่น 'Таблица' ชื่อตารางจะต้องอยู่ในเครื่องหมายอัญประกาศแม้ว่าจะไม่มีช่องว่างก็ตาม

โน้ต

เพื่อให้ง่ายต่อการป้อนชื่อของคอลัมน์ที่ตรงตามคุณสมบัติให้ใช้คุณลักษณะ AutoComplete ในตัวแก้ไขสูตร

ตาราง

  • ต้องระบุชื่อตารางเมื่อใดก็ตามที่คอลัมน์มาจากตารางอื่นนอกเหนือจากตารางปัจจุบัน ชื่อตารางต้องไม่ซ้ํากันภายในฐานข้อมูล

  • ชื่อตารางต้องอยู่ในเครื่องหมายอัญประกาศเดียวหากมีช่องว่าง อักขระพิเศษอื่น ๆ หรืออักขระพยัญชนะผสมตัวเลขที่ไม่ใช่ภาษาอังกฤษ

มาตรการ

  • ชื่อหน่วยวัดต้องอยู่ในเครื่องหมายวงเล็บเสมอ

  • ชื่อหน่วยวัดสามารถมีช่องว่างได้

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

คอลัมน์

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

โดยทั่วไป คอลัมน์สามารถอ้างอิงได้โดยไม่ต้องอ้างอิงตารางฐานที่เป็นของคอลัมน์ ยกเว้นเมื่ออาจมีความขัดแย้งของชื่อที่จะแก้ไข หรือฟังก์ชันบางอย่างที่ต้องการชื่อคอลัมน์ที่ตรงตามหลักเกณฑ์

คําสําคัญที่สงวนไว้

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

โน้ต

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

อักขระพิเศษ

อักขระและชนิดอักขระต่อไปนี้ไม่ถูกต้องในชื่อของตาราง คอลัมน์ หรือหน่วยวัด:

  • ช่องว่างนําหน้าหรือต่อท้าย เว้นแต่วรรคช่องว่างจะล้อมรอบด้วยตัวคั่นชื่อ เครื่องหมายวงเล็บ หรือเครื่องหมายอัญประกาศเดี่ยว

  • อักขระควบคุม

  • อักขระต่อไปนี้ที่ไม่ถูกต้องในชื่อของออบเจ็กต์:

    .,;':/\\*|?&%$!+=()[]{}<>

ตัวอย่างของชื่อวัตถุ

ตารางต่อไปนี้แสดงตัวอย่างของชื่อออบเจ็กต์บางอย่าง:

Object Types ตัว อย่าง เช่น ติชม
ชื่อตาราง ยอดขาย ถ้าชื่อตารางไม่มีช่องว่างหรืออักขระพิเศษอื่น ๆ ชื่อไม่จําเป็นต้องอยู่ในเครื่องหมายอัญประกาศ
ชื่อตาราง 'Canada Sales' ถ้าชื่อประกอบด้วยช่องว่าง แท็บ หรืออักขระพิเศษอื่น ๆ ให้ใส่ชื่อในเครื่องหมายอัญประกาศเดี่ยว
ชื่อคอลัมน์ที่ตรงตามหลักเกณฑ์ Sales[Amount] ชื่อตารางอยู่ก่อนหน้าชื่อคอลัมน์และชื่อคอลัมน์อยู่ในเครื่องหมายวงเล็บ
ชื่อหน่วยวัดที่มีตรงตามหลักเกณฑ์ Sales[Profit] ชื่อตารางอยู่ก่อนหน้าชื่อหน่วยวัดและชื่อหน่วยวัดอยู่ในเครื่องหมายวงเล็บ ในบางบริบท ต้องมีชื่อที่ตรงตามหลักเกณฑ์เสมอ
ชื่อคอลัมน์ที่ไม่เหมาะสม [Amount] ชื่อที่ไม่เหมาะสมเป็นเพียงชื่อคอลัมน์ในเครื่องหมายวงเล็บ บริบทที่คุณสามารถใช้ชื่อที่ไม่เหมาะสมรวมถึงสูตรในคอลัมน์จากการคํานวณภายในตารางเดียวกัน หรือในฟังก์ชันการรวมที่กําลังสแกนผ่านตารางเดียวกัน
คอลัมน์ที่ตรงตามเกณฑ์ในตารางพร้อมช่องว่าง 'Canada Sales'[Qty] ชื่อตารางมีช่องว่าง ดังนั้นชื่อจึงต้องล้อมรอบด้วยอัญประกาศเดี่ยว

ข้อจํากัดอื่น ๆ

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

  • สูตรและนิพจน์ DAX ไม่สามารถปรับเปลี่ยนหรือแทรกแต่ละค่าในตารางได้

  • คุณไม่สามารถสร้างแถวจากการคํานวณโดยใช้ DAXได้ คุณสามารถสร้างได้เฉพาะคอลัมน์จากการคํานวณและหน่วยวัดเท่านั้น

  • เมื่อกําหนดคอลัมน์จากการคํานวณ คุณสามารถซ้อนฟังก์ชันในระดับใดก็ได้

  • DAX มีหลายฟังก์ชันที่แสดงตาราง โดยทั่วไปแล้ว คุณจะใช้ค่าที่ฟังก์ชันเหล่านี้แสดงเป็นข้อมูลป้อนเข้าไปยังฟังก์ชันอื่น ๆ ซึ่งจําเป็นต้องมีตารางเป็นข้อมูลป้อนเข้า

ตัวดําเนินการ DAX และค่าคงที่

ตารางต่อไปนี้แสดงรายการตัวดําเนินการที่ได้รับการสนับสนุนโดย DAX สําหรับข้อมูลเพิ่มเติมเกี่ยวกับไวยากรณ์ของตัวดําเนินการแต่ละตัว โปรดดูตัวดําเนินการ DAX

ชนิดตัวดําเนินการ สัญลักษณ์และการใช้งาน
ตัวดําเนินการวงเล็บ ลําดับความสําคัญ () และการจัดกลุ่มอาร์กิวเมนต์
ตัวดําเนินการทางคณิตศาสตร์ + (เพิ่มเติม)

- (การลบ)

* (การคูณ)

/ (หาร)

^ (การยกกําลัง)
ตัวดําเนินการเปรียบเทียบ = (เท่ากับ)

> (มากกว่า)

< (น้อยกว่า)

>= (มากกว่าหรือเท่ากับ)

<= (น้อยกว่าหรือเท่ากับ)

<> (ไม่เท่ากับ)
ตัวดําเนินการเรียงต่อข้อความ & (การเรียงต่อกัน)
ตัวดําเนินการตรรกะ && (และ)

|| (หรือ)

ชนิดข้อมูล

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

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

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

สําคัญ

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

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

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

วันที่และเวลา

DAX จัดเก็บค่าวันที่และเวลาโดยใช้ชนิดข้อมูล datetime ที่ใช้โดย Microsoft SQL Server รูปแบบ Datetime ใช้ตัวเลขจุดทศนิยมลอยตัวที่ค่าวันที่สอดคล้องกับส่วนจํานวนเต็มที่แสดงจํานวนวันตั้งแต่วันที่ 30 ธันวาคม 1899 ค่าเวลาสอดคล้องกับส่วนทศนิยมของค่าวันที่ซึ่งชั่วโมง นาที และวินาทีจะแสดงด้วยเศษส่วนทศนิยมของวัน DAX ฟังก์ชันวันที่และเวลาจะแปลงอาร์กิวเมนต์เป็นชนิดข้อมูล datetime โดยนัย

โน้ต

ค่า DateTime สูงสุดแน่นอนที่ได้รับการสนับสนุนโดย DAX คือ 31 ธันวาคม 9999 00:00:00

สัญพจน์วันที่และเวลา

เริ่มตั้งแต่เวอร์ชันสิงหาคม 2021 ของ Power BI Desktop ค่าวันที่และวันที่เวลา DAX สามารถระบุเป็นสัญพจน์ในรูปแบบ dt"YYYY-MM-DD"dt"YYYY-MM-DDThh:mm:ss"หรือ dt"YYYY-MM-DD hh:mm:ss"ได้ เมื่อระบุเป็นสัญพจน์ แล้ว ไม่จําเป็นต้องใช้ฟังก์ชัน DATE, TIME, DATEVALUETIMEVALUE ในนิพจน์

ตัวอย่างเช่น นิพจน์ต่อไปนี้ใช้ฟังก์ชัน DATE และ TIME เพื่อกรองข้อมูลบน OrderDate:

EVALUATE
FILTER (
        FactInternetSales,
        [OrderDate] > (DATE(2015,1,9) + TIME(2,30,0)) &&[OrderDate] < (DATE(2015,12,31) + TIME(11,59,59))
)

นิพจน์ตัวกรองเดียวกันสามารถระบุเป็นสัญพจน์:

EVALUATE
FILTER (
        FactInternetSales,
        [OrderDate] > dt"2015-1-9T02:30:00" && [OrderDate] < dt"2015-12-31T11:59:59"
)

โน้ต

รูปแบบสัญพจน์ที่พิมพ์วันที่และวันที่และเวลา DAX ไม่ได้รับการสนับสนุนใน Power BI Desktop, Analysis Services และ Power Pivot ใน Excel ทุกเวอร์ชัน โดยทั่วไปแล้ว ฟังก์ชัน DAX ใหม่และที่อัปเดตแล้วจะถูกนํามาใช้ใน Power BI Desktop ก่อน จากนั้นจะรวมอยู่ใน Analysis Services และ Power Pivot ใน Excel ในภายหลัง