คิวรี DAX
การรายงานไคลเอ็นต์ เช่น Power BI และ Excel ดําเนินการ DAX คิวรีเมื่อใดก็ตามที่วิชวลแสดงในรายงาน หรือเขตข้อมูลที่เพิ่มลงในตาราง และคิวรี DAX เหล่านี้จะปรับเมื่อมีการใช้ตัวกรอง ของตัววิเคราะห์ประสิทธิภาพ
โดยใช้ มุมมองคิวรี
คิวรี DAX ส่งกลับผลลัพธ์เป็นตารางภายในเครื่องมือ ที่ช่วยให้คุณสามารถสร้างและทดสอบประสิทธิภาพของสูตร DAX ของคุณในหน่วยวัดหรือเพียงแค่ดูข้อมูลในแบบจําลองความหมายของคุณ ข้อมูลและข้อมูล ฟังก์ชัน VIEW DAX ยังสามารถรับข้อมูลเกี่ยวกับแบบจําลองความหมายของคุณ เช่น รายการของตาราง คอลัมน์ หน่วยวัด และอื่น ๆ อีกมากมาย
ก่อนที่จะเรียนรู้เกี่ยวกับคิวรี เป็นสิ่งสําคัญที่คุณต้องทําความเข้าใจอย่างจริงจังเกี่ยวกับ DAX พื้นฐาน ถ้าคุณยังไม่ได้ตรวจสอบให้แน่ใจว่าได้เช็คเอาท์ภาพรวม DAX
คำ
คิวรี DAX มีไวยากรณ์ง่าย ๆ ที่ประกอบด้วยคําสําคัญที่จําเป็นเพียงคําเดียว EVALUATE EVALUATE จะตามด้วยนิพจน์ตาราง เช่น ฟังก์ชัน DAX หรือชื่อตาราง ซึ่งเมื่อเรียกใช้ผลลัพธ์ตารางผลลัพธ์ นิพจน์ตารางที่แสดงตารางผลลัพธ์ประกอบด้วย:
- ฟังก์ชัน DAX ทั่วไปที่แสดงผลตาราง เช่น SUMMARIZE, SUMMARIZECOLUMNS, SELECTCOLUMNS, FILTER, UNION, TOPN, ADDCOLUMNS, DATATABLEและอื่นๆ อีกมากมาย ทํางานกับ EVALUATE เพื่อแสดงตารางผลลัพธ์
- ตารางในแบบจําลองเมื่ออ้างอิงตามชื่อทํางานกับ EVALUATE เพื่อแสดงตารางผลลัพธ์ที่แสดงข้อมูลในตาราง ตัวอย่างเช่น EVALUATE 'ชื่อตาราง' สามารถเรียกใช้เป็นคิวรี DAX ได้
- หน่วยวัดในแบบจําลองหรือสูตร DAX ใด ๆ ซึ่งส่งกลับค่าสเกลาร์ ทํางานกับ EVALUATE เพื่อแสดงค่าเป็นตารางผลลัพธ์เมื่อใส่ไว้ในวงเล็บปีกกา ตัวอย่างเช่น EVALUATE {[Total Sales]} หรือ EVALUATE {COUNTROWS('Sales')} สามารถเรียกใช้เป็นคิวรี DAX ได้ สิ่งเหล่านี้เรียกว่า คอนสตรัคเตอร์ของตาราง
มีคําสําคัญที่เลือกได้หลายคําสําหรับ DAX คิวรี: ORDER BY, START AT, DEFINE, MEASURE, VAR, ตาราง และ คอลัมน์
EVALUATE (จําเป็น)
ในระดับพื้นฐานที่สุด คิวรี DAX คือคําสั่ง EVALUATE
ที่มีนิพจน์ตาราง จําเป็นต้องมีคําสั่ง EVALUATE อย่างน้อยหนึ่งคําสั่ง อย่างไรก็ตาม คิวรีสามารถมีคําสั่ง EVALUATE จํานวนใดก็ได้
ไวยากรณ์ EVALUATE
EVALUATE <table>
พารามิเตอร์ EVALUATE
เทอม | นิยาม |
---|---|
table |
นิพจน์ตาราง |
ตัวอย่าง EVALUATE
EVALUATE
'Sales Order'
แสดงแถวและคอลัมน์ทั้งหมดจากตารางคําสั่งขาย เป็นตารางผลลัพธ์ ซึ่งสามารถจํากัดด้วยการใช้ TOPN หรือ FILTERและเรียงลําดับด้วย ORDER BY
ORDER BY (ไม่บังคับ)
คําสําคัญ ORDER BY
ที่เลือกได้จะกําหนดคอลัมน์อย่างน้อยหนึ่งคอลัมน์ในคิวรีหรือนิพจน์ที่ใช้ในการเรียงลําดับผลลัพธ์คิวรี นิพจน์ใด ๆ ที่สามารถประเมินสําหรับแต่ละแถวของผลลัพธ์ถูกต้อง คอลัมน์ใด ๆ ในคิวรีก็ถูกต้องเช่นกัน
เรียงลําดับตามคุณสมบัติคอลัมน์ในแบบจําลองความหมายไม่สามารถใช้กับผลลัพธ์คิวรี DAX ถ้าคอลัมน์ควรเรียงลําดับตามคอลัมน์ที่แตกต่างกันในแบบจําลอง เช่น ในกรณีของชื่อเดือน ควรรวมการเรียงลําดับตามคอลัมน์ในคิวรี DAX ที่จะใช้ใน ORDER BYด้วย
ไวยากรณ์ ORDER BY
EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]]
พารามิเตอร์ ORDER BY
เทอม | นิยาม |
---|---|
expression |
นิพจน์ DAX ใด ๆ ที่แสดงค่าสเกลาเดียวหรือคอลัมน์ที่รวมอยู่ในคิวรี DAX |
ASC |
(ค่าเริ่มต้น) การเรียงลําดับจากน้อยไปหามาก |
DESC |
การเรียงลําดับจากมากไปหาน้อย |
ตัวอย่าง ORDER BY
EVALUATE
SUMMARIZECOLUMNS(
// Group by columns
'Date'[Month Name],
'Date'[Month of Year],
'Product'[Category],
// Optional filters
FILTER(
VALUES('Product'[Category]),
[Category] = "Clothing"
),
// Measures or explicit DAX formulas to aggregate and analyze the data by row
"Orders", [Orders],
"Avg Profit per Order", DIVIDE(
[Total Sales Profit],
[Orders]
)
)
// DAX queries do not use sort order defined in Power BI,
// sort by columns must be included in the DAX query to be used in order by
ORDER BY 'Date'[Month of Year] ASC
แสดงลําดับเสื้อผ้าและกําไรเฉลี่ยต่อคําสั่งซื้อตามเดือน โดยเรียงลําดับจากน้อยไปหามากตามเดือน เป็นตารางผลลัพธ์
TOPN ไม่ได้เลือกจํานวนแถวที่ระบุเพื่อส่งกลับตามลําดับการจัดเรียงที่ระบุใน ORDER BY แต่ TOPN มีไวยากรณ์ของตัวเองเพื่อเลือกที่จะระบุการเรียงลําดับก่อนส่งกลับ 100 แถวบนสุด ORDER BY เรียงลําดับเฉพาะตารางผลลัพธ์ที่ส่งกลับโดย TOPNเท่านั้น
EVALUATE
TOPN(
100,
'Sales Order',
// The way the data is sorted before the top 100 rows are selected
'Sales Order'[SalesOrderLineKey], ASC
)
// The way the data is sorted for the results
ORDER BY
'Sales Order'[Sales Order] ASC,
'Sales Order'[Sales Order Line] ASC
แสดงคําสั่งขาย 100 อันดับแรกที่เรียงลําดับตาม SalesOrderLienKey จากน้อยไปมาก จากนั้นเรียงลําดับผลลัพธ์ตามคําสั่งขายก่อน แล้วเรียงลําดับตามบรรทัดใบสั่งขาย
START AT (ไม่บังคับ)
คําสําคัญ START AT
ที่เลือกได้ ถูกใช้ภายในส่วนคําสั่ง ORDER BY
ซึ่งจะกําหนดค่าที่ผลลัพธ์คิวรีเริ่มต้น
ไวยากรณ์ START AT
EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]
[START AT {<value>|<parameter>} [, …]]]
พารามิเตอร์ START AT
เทอม | นิยาม |
---|---|
value |
ค่าคงที่ ไม่สามารถเป็นนิพจน์ได้ |
parameter |
ชื่อของพารามิเตอร์ในคําสั่ง XMLA ขึ้นต้นด้วยอักขระ @ |
หมายเหตุ START AT
อาร์กิวเมนต์ START AT มีความสัมพันธ์แบบหนึ่งต่อหนึ่งกับคอลัมน์ในส่วนคําสั่ง ORDER BY สามารถมีอาร์กิวเมนต์จํานวนมากได้ในส่วนคําสั่ง START AT ตามที่มีอยู่ในส่วนคําสั่ง ORDER BY แต่ไม่สามารถระบุได้มากกว่านี้ อาร์กิวเมนต์แรกใน START AT กําหนดค่าเริ่มต้นในคอลัมน์ 1 ของคอลัมน์ ORDER BY อาร์กิวเมนต์ที่สองใน START AT กําหนดค่าเริ่มต้นในคอลัมน์ 2 ของคอลัมน์ ORDER BY ภายในแถวที่ตรงกับค่าแรกสําหรับคอลัมน์ 1
ตัวอย่าง START AT
EVALUATE
'Sales Order'
ORDER BY 'Sales Order'[Sales Order] ASC
// Start at this order, orders before this order will not be displayed
START AT "SO43661"
แสดงคอลัมน์ทั้งหมดจากตาราง คําสั่งซื้อ จากน้อยไปหามากตามใบสั่งขาย โดยเริ่มต้นที่ SO43661 แถวก่อนใบสั่งขายนี้จะไม่ได้รวมอยู่ในตารางผลลัพธ์
DEFINE (ไม่บังคับ)
คําสําคัญ DEFINE
ที่เลือกได้จะแนะนําข้อกําหนดของเอนทิตีจากการคํานวณอย่างน้อยหนึ่งรายการที่มีไว้สําหรับระยะเวลาของคิวรีเท่านั้น ซึ่งแตกต่างจาก EVALUATE
สามารถมีบล็อก DEFINE
ที่มีข้อกําหนดอย่างน้อยหนึ่งรายการในคิวรี DAX เดียวเท่านั้น
DEFINE
ต้องนําหน้าคําสั่ง EVALUATE
แรกและถูกต้องสําหรับคําสั่ง EVALUATE ทั้งหมดในคิวรี ข้อกําหนดอาจเป็นตัวแปร หน่วยวัด ตาราง1และคอลัมน์1 ข้อกําหนดสามารถอ้างอิงถึงข้อกําหนดอื่น ๆ ที่ปรากฏก่อนหรือหลังข้อกําหนดปัจจุบัน จําเป็นต้องมีข้อกําหนดอย่างน้อยหนึ่งคําถ้าคําสําคัญ DEFINE
รวมอยู่ในคิวรี
DEFINE MEASURE
คือสถานการณ์ทั่วไปในการสร้างหน่วยวัดใหม่หรือแก้ไขหน่วยวัดที่มีอยู่ในแบบจําลองความหมาย เมื่อมีหน่วยวัดอยู่แล้วในแบบจําลอง คิวรี DAX จะใช้หน่วยวัด DAX สูตรที่กําหนดไว้ในคิวรี ซึ่งจะเป็นประโยชน์สําหรับการทดสอบหน่วยวัดด้วยคิวรี DAX ก่อนอัปเดตแบบจําลอง
DEFINE MEASURE
ยังเป็นประโยชน์ในการสร้างการวิเคราะห์เพิ่มเติมด้วยสูตร DAX สําหรับคิวรี DAX เฉพาะที่คุณอาจไม่มีสิทธิ์ในการเพิ่มหน่วยวัดแบบจําลองหรือไม่จําเป็นต้องมีในแบบจําลอง
ไวยากรณ์ DEFINE
[DEFINE
(
(MEASURE <table name>[<measure name>] = <scalar expression>) |
(VAR <var name> = <table or scalar expression>) |
(TABLE <table name> = <virtual table definition>) |
(COLUMN <table name>[<column name>] = <scalar expression>) |
) +
]
(EVALUATE <table expression>) +
พารามิเตอร์ DEFINE
เทอม | นิยาม |
---|---|
Entity |
MEASURE, VAR, ตาราง1, หรือ คอลัมน์1 |
name |
ชื่อของหน่วยวัด ความแปรปรวน ตาราง หรือข้อกําหนดคอลัมน์ ไม่สามารถเป็นนิพจน์ได้ ชื่อไม่จําเป็นต้องไม่ซ้ํากัน ชื่อมีไว้สําหรับระยะเวลาของคิวรีเท่านั้น |
expression |
นิพจน์ DAX ใด ๆ ที่แสดงตารางหรือค่าสเกลา นิพจน์สามารถใช้เอนทิตีที่กําหนดไว้ใด ๆ ถ้ามีความจําเป็นต้องแปลงนิพจน์สเกลาเป็นนิพจน์ตาราง ให้ตัดนิพจน์ภายในคอนสตรักเตอร์ตารางด้วยวงเล็บปีกกา {} หรือใช้ฟังก์ชัน ROW() เพื่อส่งคืนตารางแถวเดียว |
[1]คําเตือน: ข้อกําหนดขอบเขตของคิวรี ตารางและคอลัมน์ มีไว้สําหรับการใช้งานภายในเท่านั้น แม้ว่าคุณจะสามารถกําหนดนิพจน์ TABLE และ COLUMN สําหรับคิวรีได้โดยไม่มีข้อผิดพลาดทางไวยากรณ์ แต่อาจก่อให้เกิดข้อผิดพลาดรันไทม์และไม่แนะนํา
หมายเหตุ DEFINE
คิวรี DAX สามารถมีคําสั่ง EVALUATE ได้หลายคําสั่ง แต่สามารถมีคําสั่ง DEFINE เดียวเท่านั้น ข้อกําหนดในคําสั่ง DEFINE สามารถนําไปใช้กับคําสั่ง EVALUATE ใด ๆ ในคิวรีได้
ต้องมีข้อกําหนดอย่างน้อยหนึ่งข้อกําหนดในคําสั่ง DEFINE
ข้อกําหนดหน่วยวัดสําหรับหน่วยวัดการแทนที่คิวรีของชื่อเดียวกัน แต่จะใช้ภายในคิวรีเท่านั้น ซึ่งจะไม่ส่งผลกระทบต่อหน่วยวัดแบบจําลอง
ชื่อ VAR มีข้อจํากัดที่ไม่ซ้ํากัน เมื่อต้องการเรียนรู้เพิ่มเติม โปรดดู VAR - พารามิเตอร์
ตัวอย่าง DEFINE
DEFINE
VAR _firstyear = MIN('Date'[Fiscal Year])
VAR _lastyear = MAX('Date'[Fiscal Year])
TABLE 'Unbought products' = FILTER('Product', [Orders] + 0 = 0)
COLUMN 'Unbought products'[Year Range] = _firstyear & " - " & _lastyear
MEASURE 'Unbought products'[Unbought products] = COUNTROWS('Unbought products')
EVALUATE
'Unbought products'
EVALUATE
{[Unbought products]}
แสดงตารางที่กําหนดไว้ในคิวรี DAX เพื่อแสดงผลิตภัณฑ์ที่ไม่เป็นที่ต้องการด้วยคอลัมน์ที่กําหนดไว้เพิ่มเติมที่อ้างอิงตัวแปรที่กําหนดไว้ นอกจากนี้ยังมีการกําหนดและประเมินหน่วยวัดเพื่อนับจํานวนแถวของผลิตภัณฑ์ที่ไม่เป็นที่ต้องการ
DEFINE
MEASURE 'Pick a sales measure'[Orders] = DISTINCTCOUNT('Sales Order'[Sales Order])
MEASURE 'Pick a sales measure'[Customers] = CALCULATE(
COUNTROWS(Customer),
FILTER(
'Sales',
[Orders] > 0
)
)
MEASURE 'Pick a sales measure'[Orders per Customer] = DIVIDE(
[Orders],
[Customers],
0
)
EVALUATE
SUMMARIZECOLUMNS(
'Date'[Fiscal Year],
"Orders", [Orders],
"Customers", [Customers],
"Orders per Customer", [Orders per Customer]
)
ส่งกลับตารางที่ประเมินหน่วยวัดที่กําหนดไว้สามรายการเพื่อแสดงผลลัพธ์ตามปีบัญชี หน่วยวัดทั้งหมดยังมีอยู่ในแบบจําลอง และคําสั่งซื้อต่อลูกค้าได้รับการแก้ไขในคิวรี DAX
พารามิเตอร์ในคิวรี DAX
คําสั่งคิวรี DAX ที่กําหนดไว้อย่างดีสามารถเป็นพารามิเตอร์ได้ จากนั้นใช้ซ้ําแล้วซ้ําอีก โดยเปลี่ยนแปลงเพียงค่าพารามิเตอร์เท่านั้น
เมธอด Execute Method (XMLA) มีองค์ประกอบพารามิเตอร์ (XMLA) องค์ประกอบคอลเลกชันที่อนุญาตให้สามารถกําหนดและกําหนดค่าพารามิเตอร์ได้ ภายในคอลเลกชัน แต่ละ องค์ประกอบพารามิเตอร์ (XMLA) จะกําหนดชื่อของพารามิเตอร์และค่า
อ้างอิงพารามิเตอร์ XMLA โดยใส่คํานําหน้าชื่อของพารามิเตอร์ที่มีอักขระ @
ตําแหน่งใด ๆ ในไวยากรณ์ที่อนุญาตค่า คุณสามารถแทนที่ค่าได้ด้วยการเรียกพารามิเตอร์ พารามิเตอร์ XMLA ทั้งหมดถูกพิมพ์เป็นข้อความ
สําคัญ
พารามิเตอร์ที่กําหนดในส่วนพารามิเตอร์และไม่ได้ใช้ในองค์ประกอบ <STATEMENT>
จะสร้างการตอบสนองข้อผิดพลาดใน XMLA
พารามิเตอร์ที่ใช้และไม่ได้กําหนดในองค์ประกอบ <Parameters>
จะสร้างการตอบสนองข้อผิดพลาดใน XMLA