หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
ทําตามคําแนะนําเหล่านี้เพื่อรับประโยชน์สูงสุดจาก Execute DAX Queries REST API ในปริมาณงานการผลิต
เลือกปลายทางที่เหมาะสม
Note
API ดําเนินการคิวรี DAX จะพร้อมใช้งานสําหรับแบบจําลองความหมายที่อยู่บนความจุ Power BI (Premium, Fabric หรือ Embedded) เท่านั้น ไม่รองรับโมเดลความหมายที่ไม่มีการกําหนดความจุ
Power BI มี REST API สองรายการสําหรับการดําเนินการคิวรี DAX เลือกสิ่งที่ตรงกับความสามารถของลูกค้าของคุณ:
-
ดําเนินการคิวรี DAX (ลูกศร) — ใช้เมื่อใดก็ตามที่แอปพลิเคชันไคลเอ็นต์ของคุณสามารถใช้สตรีม IPC ลูกศรไบนารีได้ ความเที่ยงตรงของประเภทแบบไม่สูญเสียข้อมูล และการ deserialization แบบไม่มีสําเนาลงในเฟรมเวิร์กแบบคอลัมน์ เช่น แพนด้า โพลาร์ และ Apache Spark API นี้ยังรองรับพารามิเตอร์ขั้นสูง เช่น
queryTimeoutและresultsetRowcountLimit. ต้องใช้ความจุแบบพรีเมียมหรือ Fabric - ดําเนินการสืบค้น (JSON) — ใช้เมื่อผู้บริโภคของคุณเป็นแพลตฟอร์มแบบ low-code/no-code โฟลว์ Power Automate หรือเครื่องมือใดๆ ที่สามารถแยกวิเคราะห์ JSON เท่านั้น API นี้ทํางานบนความจุ Pro, PPU และ Premium/Fabric แต่มีขีดจํากัดแบบตายตัวที่ 100,000 แถวและ 1,000,000 ค่าต่อการสืบค้น
ตามกฎทั่วไป หากชุดผลลัพธ์ของคุณเกินสองสามร้อยแถว ป้อนเข้าสู่ไปป์ไลน์การวิเคราะห์ หรือต้องการความเที่ยงตรงของชนิดที่แม่นยํา ให้ใช้ Execute DAX Queries API ด้วย Arrow
ปรับคิวรี DAX ให้เหมาะสมสําหรับจุดสิ้นสุดลูกศร
DAX ที่มีประสิทธิภาพช่วยลดทั้งเวลาดําเนินการคิวรีและขนาดเพย์โหลดการตอบสนอง:
- ส่งคืนเฉพาะคอลัมน์ที่คุณต้องการ ใช้
SELECTCOLUMNSหรือแสดงรายการคอลัมน์ที่ชัดเจนแทนการส่งกลับทั้งตาราง ทุกคอลัมน์พิเศษจะเพิ่มลงใน Schema และขนาดชุดงานของเรกคอร์ด - ชอบ
SUMMARIZECOLUMNSมากกว่าADDCOLUMNS.FILTERSUMMARIZECOLUMNSสร้างแผนการสืบค้นที่มีประสิทธิภาพมากขึ้นในกลไกจัดการ VertiPaq - ใช้เพื่อ
TOPNจํากัดแถว เมื่อคุณต้องการเพียงผลลัพธ์สูงสุด ให้TOPNผลักดันขีดจํากัดลงในกลไกจัดการแทนที่จะถ่ายโอนแถวทั้งหมดและกรองฝั่งไคลเอ็นต์ - หลีกเลี่ยงคอลัมน์จากการคํานวณที่ซับซ้อนในคิวรี การวัดผลและการรวมนั้นใช้ได้ แต่การคํานวณระดับแถวบนตารางขนาดใหญ่อาจทําให้การดําเนินการช้าลงอย่างมาก
- รวม
EVALUATEหลายใบแจ้งยอดในคําขอเดียว Execute DAX Queries API สนับสนุนคําสั่งหลายEVALUATEคําสั่งภายในสตริงเดียวqueryโดยแต่ละคําสั่งจะส่งคืนชุดผลลัพธ์แยกต่างหาก วิธีนี้จะหลีกเลี่ยงค่าใช้จ่ายของไปกลับ HTTP แยกต่างหาก
จัดการการรับรองความถูกต้องอย่างมีประสิทธิภาพ
- แคชและนําโทเค็นกลับมาใช้ใหม่ ใช้แคชโทเค็นในตัวของ MSAL เพื่อหลีกเลี่ยงการเรียก Microsoft Entra ID ในทุกคําขอ สําหรับโฟลว์ไคลเอ็นต์ที่เป็นความลับ MSAL จะแคชโทเค็นโดยอัตโนมัติเมื่อคุณใช้อินสแตนซ์เดียวกัน
ConfidentialClientApplicationซ้ํา - ใช้ข้อมูลประจําตัวของลูกค้าที่เป็นความลับสําหรับบริการ สําหรับบริการระดับกลางแบบไม่ต้องใส่ข้อมูล ให้ใช้ข้อมูลเข้าสู่ระบบไคลเอ็นต์ (ข้อมูลลับไคลเอ็นต์หรือใบรับรอง) แทนโทเค็นผู้ใช้ที่ได้รับมอบหมาย วิธีนี้จะหลีกเลี่ยงการพึ่งพาเซสชันผู้ใช้ที่ลงชื่อเข้าใช้
- ต้องการข้อมูลประจําตัวที่มีการจัดการใน Azure เมื่อบริการของคุณทํางานใน Azure (App Service, Functions, AKS) ให้ใช้ข้อมูลประจําตัวที่มีการจัดการเพื่อกําจัดการจัดการข้อมูลประจําตัวทั้งหมด
- จัดการกับการหมดอายุของโทเค็นอย่างสง่างาม โดยทั่วไปโทเค็นการเข้าถึงจะหมดอายุหลังจากผ่านไปหนึ่งชั่วโมง ตรวจสอบ
401 Unauthorizedการตอบกลับและรีเฟรชโทเค็นก่อนลองอีกครั้ง
จัดการข้อผิดพลาดและการลองใหม่
API ดําเนินการคิวรี DAX สามารถส่งคืนข้อผิดพลาดได้สองวิธี:
ข้อผิดพลาดระดับ HTTP — รหัสสถานะ HTTP มาตรฐานที่มีเนื้อหาข้อผิดพลาด JSON รหัสทั่วไป:
รหัสสถานะ ความหมาย แอคชัน 400คําขอไม่ถูกต้อง (DAX ไม่ถูกต้อง พารามิเตอร์ขาดหายไป) แก้ไขคําขอ — อย่าลองอีกครั้ง 401ไม่ได้รับอนุญาต (โทเค็นหมดอายุหรือไม่ถูกต้อง) รีเฟรชโทเค็นและลองอีกครั้งหนึ่งครั้ง 403ต้องห้าม (สิทธิ์ไม่เพียงพอ) ตรวจสอบว่าผู้เรียกมีสิทธิ์สร้างและอ่านในแบบจําลองความหมาย 429คําขอมากเกินไป (ถูกควบคุม) รอระยะเวลาในส่วน Retry-Afterหัว แล้วลองอีกครั้ง500/502/503ข้อผิดพลาดของเซิร์ฟเวอร์ชั่วคราว ลองอีกครั้งด้วยการย้อนกลับแบบเอ็กซ์โพเนนเชียล ข้อผิดพลาดระดับสตรีม — HTTP 200 ที่มีชุดแถวข้อผิดพลาดฝังอยู่ในการตอบสนองลูกศร ตรวจสอบข้อมูลเมตาของสคีมาลูกศรและ
IsError=trueอ่านค่าและFaultCodeFaultStringข้อมูลเมตา รวมถึงแถวข้อผิดพลาดสําหรับข้อมูลตําแหน่งโดยละเอียด
สําหรับข้อผิดพลาดชั่วคราว ให้ใช้การแบ็คออฟแบบเอ็กซ์โพเนนเชียลด้วยความกระวนกระวายใจ เริ่มที่หนึ่งวินาที สองเท่าในการลองใหม่แต่ละครั้ง และจํากัดที่ 30 วินาที จํากัดการลองใหม่ไว้ที่สามหรือสี่ครั้ง
ควบคุมขนาดชุดผลลัพธ์
ชุดผลลัพธ์ขนาดใหญ่ใช้หน่วยความจําทั้งในความจุในบริการและไคลเอ็นต์ที่เรียก คําขอแต่ละรายการถูกผูกมัดโดยขีดจํากัดหน่วยความจําของความจุ
วิธีจัดการชุดผลลัพธ์ให้ได้
- ตั้งค่า
resultsetRowcountLimitในเนื้อหาคําขอ การดําเนินการนี้จะบังคับใช้ขีดจํากัดแถวฝั่งเซิร์ฟเวอร์ต่อชุดผลลัพธ์ หากคุณทราบว่าผู้บริโภคต้องการเพียง 10,000 แถว ให้กําหนดขีดจํากัดอย่างชัดเจน - ใช้ใน
TOPNคิวรี DAX ของคุณTOPNจํากัดแถวที่ระดับกลไกจัดการ ซึ่งมีประสิทธิภาพมากกว่าการตัดทอนฝั่งไคลเอ็นต์ - ประมวลผลชุดงานเรกคอร์ดแบบเพิ่มหน่วย การตอบสนองของลูกศรจะถูกแบ่งออกเป็นชุดงานบันทึกสูงสุด 100,000 แถว ใน Python ให้วนซ้ําแบทช์ด้วย
reader.read_next_batch()แทนการเรียกreader.read_all()เมื่อทํางานกับผลลัพธ์ขนาดใหญ่ เพื่อให้การใช้หน่วยความจําคงที่
รักษาความปลอดภัยให้กับบริการระดับกลางของคุณ
หากคุณสร้างบริการระดับกลางที่พร็อกซีคิวรี DAX สําหรับผู้บริโภคดาวน์สตรีม:
- ตรวจสอบข้อมูลประจําตัวของผู้โทร รับรองความถูกต้องของคําขอขาเข้าด้วย Microsoft Entra ID หรือผู้ให้บริการข้อมูลประจําตัวอื่นก่อนที่จะส่งต่อคิวรีไปยัง Power BI อย่าเปิดเผยตําแหน่งข้อมูล Execute DAX Queries เป็นพร็อกซีแบบเปิด
- บังคับใช้สิทธิ์การใช้งานน้อยที่สุด ให้สิทธิ์เฉพาะบริการหลักที่จําเป็น (สร้างและอ่านบนโมเดลความหมายเฉพาะ) อย่าใช้บทบาทผู้ดูแลระบบพื้นที่ทํางานหรือผู้ดูแลระบบผู้เช่าสําหรับการเข้าถึง API
- อย่าฝังข้อมูลเข้าสู่ระบบในโค้ด จัดเก็บข้อมูลลับของไคลเอ็นต์ใน Azure Key Vault หรือใช้ข้อมูลประจําตัวที่มีการจัดการ หมุนเวียนข้อมูลลับตามกําหนดเวลาปกติ
- ฆ่าเชื้ออินพุต DAX ถ้าระดับกลางของคุณยอมรับข้อความคิวรี DAX จากผู้โทร ให้ตรวจสอบความถูกต้องของอินพุตเพื่อป้องกันการแทรกการดําเนินการที่ไม่คาดคิด
- ใช้
effectiveUsernameพารามิเตอร์ด้วยความระมัดระวัง พารามิเตอร์นี้ใช้ Row-Level ความปลอดภัยในนามของผู้ใช้ที่ระบุ ตรวจสอบให้แน่ใจว่าข้อมูลประจําตัวที่โทรได้รับอนุญาตให้แอบอ้างเป็นผู้ใช้ที่ระบุ
ตรวจสอบและบันทึก
ติดตามความสมบูรณ์และประสิทธิภาพของการใช้งาน API ของคุณ:
- ข้อมูลเมตาของการค้นหาบันทึก — บันทึกข้อความการค้นหา ขนาดการตอบกลับ สถานะ HTTP และระยะเวลาสําหรับแต่ละคําขอ วิธีนี้จะช่วยระบุคิวรีที่ช้าและข้อผิดพลาดที่ไม่คาดคิด
-
ตรวจสอบอัตราการควบคุม — ติดตาม
429การตอบกลับเป็นเปอร์เซ็นต์ของคําขอทั้งหมด แนวโน้มที่เพิ่มขึ้นบ่งชี้ว่าคุณต้องลดความถี่ในการร้องขอหรือกระจายภาระตลอดเวลา - วัดเวลา deserialization — สําหรับการตอบกลับของ Arrow ให้บันทึกเวลาที่ใช้ในการอ่านและทําให้แบทช์บันทึกเป็นรูปธรรมแยกต่างหากจากเวลาไปกลับ HTTP สิ่งนี้จะช่วยแยกความแตกต่างของเวลาแฝงของเครือข่ายจากการประมวลผลฝั่งไคลเอ็นต์
- ใช้ Application Insights หรือเทียบเท่า — หากระดับกลางของคุณทํางานใน Azure ให้เปิดใช้งาน Application Insights เพื่อรับการติดตามการขึ้นต่อกัน การแจ้งเตือนความล้มเหลว และการติดตามแบบกระจายแบบครบวงจร
- ติดตามอัตราการเข้าชมแคชโทเค็น — อัตราการเข้าชมแคชที่ต่ําหมายถึงการเรียกรับโทเค็นบ่อยครั้ง ซึ่งเพิ่มเวลาแฝงและเป็นสัญญาณของการแคช MSAL ที่กําหนดค่าไม่ถูกต้อง