เปิดใช้งาน Direct Query กับตัวเชื่อมต่อจาก ODBC

ภาพรวม

การใช้ฟังก์ชันOdbc.DataSourceภายในของ M เป็นวิธีที่แนะนทางในการสร้างตัวเชื่อมต่อแบบปรับแต่งเองให้กับแหล่งข้อมูลที่มีโปรแกรมควบคุม ODBC และ/หรือสนับสนุนไวยากรณ์คิวSQLคิวรีอยู่แล้ว การตัดฟังก์ชัน Odbc.DataSource จะอนุญาตให้ตัวเชื่อมต่อของคุณสืบทอดลักษณะการพับคิวรีตามค่าเริ่มต้นโดยยึดตามความสามารถที่รายงานโดยโปรแกรมควบคุมของคุณ ซึ่งจะช่วยให้กลไกจัดการ M สามารถสร้างSQLต่างๆ ตามตัวกรองและการแปลงอื่น ๆ ที่ผู้ใช้กําหนดภายในประสบการณ์ใช้งาน Power Query โดยไม่ต้องระบุตรรกะนี้ภายในตัวตัวเชื่อมต่อเอง

ส่วนขยาย ODBC สามารถเปิดใช้งานโหมด Direct Query ได้ ซึ่งอนุญาตให้ Power BI สร้างคิวรีแบบไดนามิกในขณะนั้นโดยไม่ต้องแคชแบบโมเดลข้อมูลของผู้ใช้ก่อน

หมายเหตุ

การเปิดใช้งานการสนับสนุนคิวรีโดยตรงจะยกระดับความยุ่งยากและระดับความซับซ้อนของตัวเชื่อมต่อของคุณ เมื่อเปิดใช้งาน Direct Query แล้ว Power BI จะป้องกันไม่ให้กลไกจัดการ M เปิดการดําเนินการที่ไม่สามารถผลักไปยังแหล่งข้อมูลพื้นฐานได้อย่างสมบูรณ์

ส่วนนี้สร้างบนแนวคิดที่แสดงในการอ้างอิงความสามารถในการเพิ่ม M และสมมติว่าคุ้นเคยกับการสร้างตัวเชื่อมต่อข้อมูลพื้นฐาน

ดูตัวอย่าง SqlODBC ส่วนใหญ่ของตัวอย่างโค้ดในส่วนด้านล่าง สามารถพบตัวอย่างเพิ่มเติมในไดเรกทอรีตัวอย่าง ODBC

ฟังก์ชันการขยาย ODBC

โปรแกรม M มีฟังก์ชันแหล่งข้อมูลที่เกี่ยวข้องกับ ODBC สองฟังก์ชัน: Odbc.DataSourceและOdbc.Query

ฟังก์ชัน Odbc.DataSource มีตารางการนําทางเริ่มต้นที่มีฐานข้อมูล ตาราง และมุมมองทั้งหมดจากระบบของคุณ รองรับการพับคิวรี และอนุญาตให้มีการเลือกเลือกเองหลากหลายตัวเลือก ส่วนขยายที่ยึดตาม ODBC ส่วนใหญ่จะใช้สิ่งนี้เป็นฟังก์ชันความสามารถในการเพิ่มหลัก ฟังก์ชันยอมรับสองอาร์กิวเมนต์ใน — สตริงการเชื่อมต่อ และเรกคอร์ดตัวเลือกเพื่อให้การแทนที่ลักษณะการงาน

ฟังก์ชันOdbc.Queryช่วยให้คุณสามารถเรียกใช้รายงานSQLทั้งหมดผ่านโปรแกรมควบคุม ODBC ซึ่งหน้าที่เป็นพาส-ผ่านการฝึกปฏิบัติเพื่อการปฏิบัติการคิวรี ซึ่งแตกต่างจากฟังก์ชัน Odbc.DataSourceไม่มีฟังก์ชันการพับคิวรีและต้องการให้SQLคิวรีจะได้รับจากตัวเชื่อมต่อ (หรือผู้ใช้ปลายทาง) เมื่อสร้างตัวเชื่อมต่อแบบปรับแต่งเอง โดยทั่วไปแล้วฟังก์ชันนี้จะใช้เพื่อเรียกใช้คิวรีเพื่อเรียกใช้เมตาดาต้าที่อาจไม่ได้รับเปิดเผยผ่านช่องทาง ODBC ปกติ ฟังก์ชันยอมรับสองอาร์กิวเมนต์ — ในสตริงการเชื่อมต่อและSQLคิวรี

พารามิเตอร์ของฟังก์ชันแหล่งข้อมูลของคุณ

ตัวเชื่อมต่อแบบปรับแต่งเองสามารถยอมรับอาร์กิวเมนต์ฟังก์ชันตัวเลขใดก็ได้ แต่ยังคงสอดคล้องกับฟังก์ชันแหล่งข้อมูลภายในที่จัดส่งPower Queryขอแนะนําให้ปฏิบัติตามหลักเกณฑ์ต่อไปนี้:

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

  • แม้ว่าคุณจะสามารถกําหนดพารามิเตอร์ด้วยจํานวนค่าคงที่ (นั่นคือ รายการแบบเลื่อนลงใน UI) พารามิเตอร์จะถูกป้อนก่อนที่ผู้ใช้จะรับรองความถูกต้อง ค่าใด ๆ ที่สามารถค้นพบทางโปรแกรมได้หลังจากที่ผู้ใช้ได้รับการรับรองความถูกต้อง (เช่น แค็ตตาล็อกหรือชื่อฐานข้อมูล) ควรสามารถเลือกได้ผ่านตัวนําทาง ลักษณะการงานเริ่มต้นของฟังก์ชัน Odbc.DataSource จะเป็นการส่งคืนตารางการนําทางแบบลวจแบบลวจที่ประกอบด้วยแค็ตตาล็อก (ฐานข้อมูล), Schema และชื่อตาราง แม้ว่าชื่อนี้สามารถแทนที่ได้ภายในตัวเชื่อมต่อของคุณ

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

  • พารามิเตอร์สุดท้ายของฟังก์ชันของคุณควรเป็นเรกคอร์ดทางเลือกที่เรียกว่า "ตัวเลือก" โดยทั่วไปพารามิเตอร์นี้อนุญาตให้ผู้ใช้ขั้นสูงตั้งค่าคุณสมบัติที่เกี่ยวข้องกับ ODBC ทั่วไป (เช่น CommandTimeout) ตั้งค่าลักษณะการพฤติกรรมจะแทนที่เฉพาะเจาะจงกับตัวเชื่อมต่อของคุณ และอนุญาตให้มีการเพิ่มในอนาคตโดยไม่ส่งผลกระทบต่อความเข้ากันได้ย้อนกลับของฟังก์ชันของคุณ

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

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

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

พารามิเตอร์สำหรับ Odbc.DataSource

ฟังก์ชัน Odbc.DataSource ใช้พารามิเตอร์ — สองตัวใน connectionString ของโปรแกรมควบคุมของคุณ และเรกคอร์ดตัวเลือกที่ช่วยให้คุณสามารถแทนที่พฤติกรรมของโปรแกรมควบคุมต่างๆ ได้ ด้วยการบันทึกตัวเลือก คุณสามารถแทนที่ความสามารถและข้อมูลอื่น ๆ ที่รายงานโดยโปรแกรมควบคุม ควบคุมลักษณะการงานของตัวนําทาง และSQLคิวรีที่สร้างขึ้นโดยโปรแกรม M

เขตข้อมูลตัวเลือกที่ได้รับการสนับสนุนจะแบ่งออกเป็นสองประเภทที่เป็นสาธารณะ / พร้อมใช้งานเสมอ และตัวเลือกที่พร้อมใช้งานในบริบท — ความสามารถในการเพิ่มได้เท่านั้น

ตารางต่อไปนี้อธิบายเกี่ยวกับเขตข้อมูลสาธารณะในเรกคอร์ดตัวเลือก

ฟิลด์ คำอธิบาย
CommandTimeout

ค่าระยะเวลาที่ควบคุมว่าคิวรีฝั่งเซิร์ฟเวอร์ได้รับอนุญาตให้เรียกใช้นานเท่าใด ก่อนที่จะยกเลิก

ค่าเริ่มต้น: 10 นาที

ConnectionTimeout

ค่าระยะเวลาที่ควบคุมว่าต้องรอนานเท่าใดก่อนที่จะละทิ้งความพยายามที่จะเชื่อมต่อกับเซิร์ฟเวอร์

ค่าเริ่มต้น: 15 วินาที

CreateNavigationProperties

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

ถ้าการคํานวณการอ้างอิง Foreign Key เป็นการดําเนินการที่มีราคาแพงในโปรแกรมควบคุมของคุณ คุณอาจต้องการตั้งค่านี้เป็นเท็จ

ค่าเริ่มต้น: จริง

ล.ว.ต.ล.ต.ล.ต.

ค่าตรรกะที่ตั้งค่าว่าจะดูตารางโดยจัดกลุ่มตามชื่อรูปแบบหรือไม่ เมื่อตั้งค่าเป็น false ตารางจะแสดงในรายการแฟลตภายใต้แต่ละฐานข้อมูล

ค่าเริ่มต้น: เท็จ

SqlCompatibleWindowsAuth

ค่าตรรกะที่พิจารณาว่าจะสร้างสตริงการเชื่อมต่อที่สามารถSQL Serverได้เมื่อใช้นิพจน์ Windows Authentication — Trusted_Connection=ใช่ หรือไม่

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

ค่าเริ่มต้น: จริง

ตารางต่อไปนี้อธิบายถึงเขตข้อมูลเรกคอร์ดของตัวเลือกที่พร้อมใช้งานผ่านความสามารถในการเพิ่มได้เท่านั้น เขตข้อมูลที่ไม่ใช่ค่าสัญพจน์อย่างง่ายจะอธิบายไว้ในส่วนถัดไป

ฟิลด์ คำอธิบาย
AstVisitor

ระเบียนที่มีอย่างน้อยหนึ่งการแทนที่เพื่อควบคุมการสร้างSQLคิวรี การใช้เขตข้อมูลนี้ใช้บ่อยที่สุดคือการให้ตรรกะเพื่อสร้างส่วนสั่ง LIMIT/OFFSET ของโปรแกรมควบคุมที่ไม่สนับสนุน TOP

เขตข้อมูลประกอบด้วย:

  • คง

  • LimitClause

ดูส่วน AstVisitor เพื่อดูข้อมูลเพิ่มเติม

CancelQueryExplicitly

ค่าตรรกะที่สั่งให้กลไก M ยกเลิกการเรียกใช้ผ่านโปรแกรมควบคุม ODBC อย่างชัดเจน ก่อนที่จะยุติการเชื่อมต่อไปยังเซิร์ฟเวอร์ ODBC

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

ค่าเริ่มต้น: เท็จ

ClientConnectionPooling

ค่าตรรกะที่เปิดใช้งานการเชื่อมต่อฝั่งไคลเอ็นต์ร่วมกันกับโปรแกรมควบคุม ODBC โปรแกรมควบคุมส่วนใหญ่จะต้องตั้งค่านี้เป็นจริง

ค่าเริ่มต้น: เท็จ

CredentialConnectionString

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

ดูส่วนข้อมูลรับรอง ( Credential) เพื่อดูรายละเอียดเพิ่มเติม

HideNativeQuery

ค่าตรรกะที่ควบคุมว่าตัวเชื่อมต่อของคุณอนุญาตให้SQLดั้งเดิมถูกส่งผ่านโดยคิวรีโดยใช้ฟังก์ชัน Value.NativeQuery() หรือไม่

หมายเหตุ: ฟังก์ชันนี้จะไม่แสดงในประสบการณ์Power Queryของผู้ใช้ ผู้ใช้จะต้องแก้ไขคิวรีของพวกเขาด้วยตนเองเพื่อใช้ประโยชน์จากความสามารถนี้

ค่าเริ่มต้น: เท็จ

ImplicitTypeConversions

ค่าตารางที่มีการแปลงประเภทโดยนัยที่ได้รับการสนับสนุนโดยโปรแกรมควบคุมหรือเซิร์ฟเวอร์ Backend ของคุณ ค่าในตารางนี้จะบวกกับการแปลงรายงานโดยโปรแกรมควบคุมเอง

เขตข้อมูลนี้จะใช้ร่วมกับเขตข้อมูล SQLGetTypeInfo เมื่อแทนที่ข้อมูลชนิดข้อมูลที่รายงานโดยโปรแกรมควบคุม

ดูส่วน ImplicitTypeConversions เพื่อดูข้อมูลเพิ่มเติม

OnError

ฟังก์ชันจัดการข้อผิดพลาดที่ได้รับพารามิเตอร์ errorRecord ของเรกคอร์ดชนิด

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

ดูส่วน OnErrorเพื่อดูข้อมูลเพิ่มเติม

SoftNumbers

อนุญาตให้กลไกจัดการ M เลือกชนิดข้อมูลที่เข้ากันได้เมื่อการแปลงระหว่างชนิดตัวเลขเฉพาะสองชนิดไม่ได้ประกาศเป็นการสนับสนุนในSQL_CONVERT_*

ค่าเริ่มต้น: เท็จ

ความสามารถของ SqlCapabilities

ระเบียนที่มีการแทนที่ความสามารถของโปรแกรมควบคุมต่าง ๆ และวิธีระบุความสามารถที่ไม่ได้แสดงผ่าน ODBC 3.8

ดูส่วนความสามารถของ SqlCapabilitiesเพื่อดูข้อมูลเพิ่มเติม

SQLColumns

ฟังก์ชันที่ช่วยให้คุณสามารถปรับเปลี่ยนเมตาดาต้าคอลัมน์ที่ส่งกลับโดยฟังก์ชัน SQLColumns

ดูส่วน SQLColumnsเพื่อดูข้อมูลเพิ่มเติม

SQLGetFunctions

ระเบียนที่ช่วยให้คุณสามารถแทนที่ค่าที่ส่งกลับโดยการเรียกไปยัง SQLGetFunctions

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

ดูส่วน SQLGetFunctionsเพื่อดูข้อมูลเพิ่มเติม

SQLGetInfo

ระเบียนที่ช่วยให้คุณสามารถแทนที่ค่าที่ส่งกลับโดยการเรียกไปยัง SQLGetInfo ได้

ดูส่วน SQLGetInfoเพื่อดูข้อมูลเพิ่มเติม

SQLGetTypeInfo

ตารางหรือฟังก์ชันที่ส่งกลับตารางที่แทนที่ข้อมูลชนิดที่ส่งกลับโดย SQLGetTypeInfo

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

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

เขตข้อมูลนี้มักใช้เมื่อมีไม่ตรงกันระหว่างชนิดข้อมูลที่รายงานโดย SQLGetTypeInfo และ SQLColumns

ดูส่วน SQLGetTypeInfoเพื่อดูข้อมูลเพิ่มเติม

SQLTables

ฟังก์ชันที่ช่วยให้คุณสามารถปรับเปลี่ยนเมตาดาต้าของตารางที่ส่งกลับโดยการเรียกไปยัง SQLTables

ดูส่วน SQLTablesเพื่อดูข้อมูลเพิ่มเติม

การยอมรับในกระแสข้อมูล

อนุญาตให้มีการแปลงชนิดตัวเลขและข้อความเป็นชนิดที่มีขนาดใหญ่กว่าถ้าการดําเนินการจะทําให้ค่าไม่อยู่ในช่วงของชนิดเดิม

ตัวอย่างเช่น เมื่อเพิ่ม Int32.Max + Int32.Max กลไกจะแคสต์ผลลัพธ์เป็น Int64 เมื่อการตั้งค่านี้ถูกตั้งค่าเป็น จริง เมื่อต้องการเพิ่ม VARCHAR(4000) และเขตข้อมูล VARCHAR (4000) บนระบบที่สนับสนุนขนาด VARCHAR สูงสุด 4000 กลไกจะแคสต์ผลลัพธ์เป็นชนิด CLOB

ค่าเริ่มต้น: เท็จ

UseSmbeddedDriver

(การใช้งานภายใน): ค่าตรรกะที่ควบคุมว่าควรโหลดโปรแกรมควบคุม ODBC จากไดเรกทอรีภายในเครื่อง (โดยใช้ฟังก์ชันใหม่ที่กําหนดไว้ในข้อมูลกําหนดของ ODBC 4.0) หรือไม่ ซึ่งโดยทั่วไปแล้วจะตั้งค่าโดยตัวเชื่อมต่อที่สร้างขึ้นโดย Microsoft ที่จัดส่งพร้อมกับPower Queryเท่านั้น

เมื่อตั้งค่าเป็น false ผู้จัดการโปรแกรมควบคุม ODBC ระบบจะถูกใช้เพื่อค้นหาและโหลดโปรแกรมควบคุม

ตัวเชื่อมต่อส่วนใหญ่ไม่ควรต้องตั้งค่าเขตข้อมูลนี้

ค่าเริ่มต้น: เท็จ

การแทนที่ AstVisitor

เขตข้อมูล AstVisitor ถูกตั้งค่าผ่านเรกคอร์ดตัวเลือก Odbc.DataSource ซึ่งใช้เพื่อแก้ไขข้อความSQLการสร้างขึ้นเพื่อสถานการณ์คิวรีที่เฉพาะเจาะจง

หมายเหตุ

โปรแกรมควบคุมที่สนับสนุน LIMIT และ OFFSET ส่วนย่อย (แทนที่จะ TOP เป็น ) จะต้องระบุการแทนที่ LimitClause ของ AstVisitor

คง

การให้การแทนที่ค่านี้เลิกใช้และอาจถูกลบออกจากการใช้งานในอนาคต

LimitClause

เขตข้อมูลนี้เป็นฟังก์ชันที่ได้รับสองอาร์กิวเมนต์ Int64.Type (ข้าม ใช้) และส่งกลับระเบียนที่มีเขตข้อมูลข้อความสองอัน (ข้อความ, สถานที่)

LimitClause = (skip as nullable number, take as number) as record => ...

พารามิเตอร์ข้ามคือจํานวนแถวที่จะข้าม (นั่นคือ อาร์กิวเมนต์ไปยัง OFFSET) ถ้าไม่ได้ระบุออฟเซต ค่าข้ามจะเป็นค่าว่าง ถ้าโปรแกรมควบคุมของคุณสนับสนุน LIMIT แต่ไม่สนับสนุน ฟังก์ชัน OFFSET LimitClause ควรส่งกลับข้อผิดพลาดที่ไม่ได้ว่าง (...) เมื่อข้ามมากกว่า 0

พารามิเตอร์ take คือจํานวนแถวที่จะใช้ (ซึ่งก็คือ อาร์กิวเมนต์ไปยัง LIMIT)

เขตข้อมูล Text ของผลลัพธ์ประกอบด้วยSQLที่คุณต้องการเพิ่มลงในคิวรีที่สร้างขึ้น

เขตข้อมูล Location ระบุว่าจะแทรกส่วนย่อยของส่วนใด ตารางต่อไปนี้อธิบายเกี่ยวกับค่าที่ได้รับการสนับสนุน

ค่า คำอธิบาย ตัวอย่าง:
AfterQuerySpecification

ส่วนสั่ง LIMIT จะถูกวางไว้ที่ส่วนท้ายของไฟล์SQLสร้างขึ้น

นี่คือไวยากรณ์ LIMIT ที่ได้รับการสนับสนุนมากที่สุดโดยทั่วไป

เลือก a, b, c

ตาราง FROM

ที่ไหน > 10

ขีดจํากัด 5

BeforeQuerySpecification ส่วนสั่ง LIMIT จะถูกใส่ก่อนการสร้างSQLสั่ง

จํากัด 5 แถว

เลือก a, b, c

ตาราง FROM

ที่ไหน > 10

AfterSelect LIMIT จะต่อท้ายด้วยข้อความ SELECT และหลังการปรับเปลี่ยนใดๆ (เช่น DISTINCT)

เลือกขีด จํากัดเฉพาะ 5 a, b, c

ตาราง FROM

ที่ไหน > 10

AfterSelectBeforsModifiers LIMIT จะต่อท้ายด้วยข้อความ SELECT แต่ก่อนการปรับเปลี่ยนใดๆ (เช่น DISTINCT)

เลือก จํากัด 5 DISTINCT a, b, c

ตาราง FROM

ที่ไหน > 10

โค้ดย่อยต่อไปนี้มีการใช้งาน LimitClause ของโปรแกรมควบคุมที่คาดหวังส่วนสั่ง LIMIT ด้วย OFFSET แบบทางเลือกในรูปแบบต่อไปนี้: [OFFSET <offset> ROWS] LIMIT <row_count>

LimitClause = (skip, take) =>
    let
        offset = if (skip > 0) then Text.Format("OFFSET #{0} ROWS", {skip}) else "",
        limit = if (take <> null) then Text.Format("LIMIT #{0}", {take}) else ""
    in
        [
            Text = Text.Format("#{0} #{1}", {offset, limit}),
            Location = "AfterQuerySpecification"
        ]

โค้ดย่อยต่อไปนี้มีการใช้งาน LimitClause เป็นโปรแกรมควบคุมที่สนับสนุน LIMIT แต่ไม่ใช่ OFFSET รูปแบบ: LIMIT <row_count>

LimitClause = (skip, take) =>
    if (skip > 0) then error "Skip/Offset not supported"
    else
    [
        Text = Text.Format("LIMIT #{0}", {take}),
        Location = "AfterQuerySpecification"
    ]

การแทนที่ความสามารถของ Sql

ฟิลด์ รายละเอียด
FractionalSecondsScale

ค่าตัวเลขตั้งแต่ 1 ถึง 7 ที่ระบุจํานวนหลักทศนิยมที่สนับสนุนในค่ามิลลิวินาที ค่านี้ควรได้รับการตั้งค่าโดยตัวเชื่อมต่อที่ต้องการเปิดใช้งานการพับคิวรีผ่านค่า วันที่เวลา

ค่าเริ่มต้น: null

PrepareStatements

ค่าตรรกะที่ระบุว่า ควรเตรียมข้อความโดยใช้SQLPrepars

ค่าเริ่มต้น: เท็จ

SupportsTop

ค่าตรรกะที่ระบุโปรแกรมควบคุมสนับสนุนส่วนสั่ง TOP เพื่อจํากัดจํานวนของแถวที่ส่งกลับ

ค่าเริ่มต้น: เท็จ

StringLiteralSscapeCharacters

รายการของค่าข้อความที่ระบุอักขระที่จะใช้เมื่อใส่สัญพจน์ของสตริงที่ตัดออก และ นิพจน์ LIKE

เช่น {""}

ค่าเริ่มต้น: null

SupportsDerivedTable

ค่าตรรกะที่ระบุโปรแกรมควบคุมสนับสนุนตารางที่ได้รับมา (การเลือกย่อย)

ค่านี้ถือว่าเป็นจริงกับโปรแกรมควบคุมที่ตั้งค่าระดับความสอดคล้องของตนเป็น SQL_SC_SQL92_FULL (รายงานโดยโปรแกรมควบคุมหรือแทนที่ด้วยการตั้งค่า Sql92Conformance (ดูด้านล่าง)) ระดับความสอดคล้องอื่น ๆ ทั้งหมด ค่าเริ่มต้นนี้เป็นเท็จ

ถ้าโปรแกรมควบคุมของคุณไม่รายงานระดับSQL_SC_SQL92_FULLการปฏิบัติตามกฎระเบียบ แต่จะสนับสนุนตารางที่ได้รับมา ตั้งค่านี้เป็น จริง

โปรดทราบว่าตารางที่ได้รับการสนับสนุนเป็นตารางที่สืบทอดมานั้นต้องอยู่ในสถานการณ์คิวรีโดยตรงมากมาย

สนับสนุนNumericLiterals

ค่าตรรกะที่ระบุว่านิพจน์ที่สร้างขึ้นSQLค่าสัญพจน์ตัวเลขหรือไม่ เมื่อตั้งค่าเป็น false ค่าตัวเลขจะถูกระบุเสมอโดยใช้การผูกพารามิเตอร์

ค่าเริ่มต้น: เท็จ

รองรับสตริงที่Literals

ค่าตรรกะที่ระบุว่านิพจน์ ที่สร้างขึ้นSQLค่าสัญพจน์สตริงหรือไม่ เมื่อตั้งค่าเป็น false ค่าสตริงจะถูกระบุเสมอโดยใช้การผูกพารามิเตอร์

ค่าเริ่มต้น: เท็จ

รองรับOdbcDateLiterals

ค่าตรรกะที่ระบุว่าคอลัมน์ที่สร้างขึ้นควรSQLค่าสัญพจน์วันที่หรือไม่ เมื่อตั้งค่าเป็น false ค่าวันที่จะถูกระบุเสมอโดยใช้การผูกพารามิเตอร์

ค่าเริ่มต้น: เท็จ

รองรับOdbcTimeLiterals

ค่าตรรกะที่ระบุว่านิพจน์ที่สร้างขึ้นSQLรวมค่าสัญพจน์เวลาหรือไม่ เมื่อตั้งค่าเป็น false ค่าเวลาจะถูกระบุเสมอโดยใช้การผูกพารามิเตอร์

ค่าเริ่มต้น: เท็จ

รองรับOdbcTimempLiterals

ค่าตรรกะที่ระบุว่านิพจน์ ที่สร้างขึ้นSQLรวมค่าสัญพจน์ประทับเวลาหรือไม่ เมื่อตั้งค่าเป็น false ค่าประทับเวลาจะถูกระบุเสมอโดยใช้การผูกพารามิเตอร์

ค่าเริ่มต้น: เท็จ

การแทนที่ SQLColumns

SQLColumnsคือตัวจัดการฟังก์ชันที่ได้รับผลลัพธ์ของการเรียก ODBC ไปยังSQLColumns พารามิเตอร์ ต้นทาง มีตารางพร้อมข้อมูลชนิดข้อมูล โดยทั่วไป การแทนที่นี้จะใช้เพื่อแก้ไขปัญหาชนิดข้อมูลที่ไม่เข้าบ่อยระหว่างการเรียก SQLGetTypeInfo SQLColumns ถึง และ

เมื่อต้องการรายละเอียดของรูปแบบของพารามิเตอร์ตารางต้นทาง ให้ไปที่ ฟังก์ชันSQLColumns

การแทนที่ SQLGetFunctions

เขตข้อมูลนี้ใช้เพื่อแทนที่ค่า SQLFunctions ที่ส่งคืนโดยโปรแกรมควบคุม ODBC ซึ่งประกอบด้วยเรกคอร์ดที่มีชื่อเขตข้อมูลเท่ากับค่าคงที่ FunctionId ที่กําหนดไว้เพื่อฟังก์ชัน ODBC SQLGetFunctions ค่าคงที่ตัวเลขของแต่ละเขตข้อมูลเหล่านี้ สามารถพบได้ในข้อมูลเพาะของODBC

ฟิลด์ รายละเอียด
SQL_CONVERT_FUNCTIONS ระบุว่าฟังก์ชันใดที่รองรับเมื่อประเภทการแปลง ตามค่าเริ่มต้น กลไกจัดการ M จะพยายามใช้ฟังก์ชัน CONVERT โปรแกรมควบคุมที่ชอบการใช้ CAST สามารถแทนที่ค่านี้เพื่อรายงานที่มีSQL_FN_CVT_CAST (ค่าตัวเลขของ0x2) ได้รับการสนับสนุน
SQL_API_SQLBINDCOL

ค่าตรรกะ (จริง/เท็จ) ที่ระบุว่า กลไกจัดการ Mashup ควรใช้ SQLBindCol API เมื่อดึงข้อมูลหรือไม่ เมื่อตั้งค่าเป็น false จะใช้ SQLGetData แทน

ค่าเริ่มต้น: เท็จ

ส่วนย่อยของโค้ดต่อไปนี้แสดงตัวอย่างอย่างชัดเจนที่บอกให้โปรแกรม M ใช้ CAST แทน CONVERT

SQLGetFunctions = [
    SQL_CONVERT_FUNCTIONS = 0x2 /* SQL_FN_CVT_CAST */
]

การแทนที่ SQLGetInfo

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

ตารางต่อไปนี้ประกอบด้วยคุณสมบัติ SQLGetInfo ที่แทนที่โดยทั่วไป:

ฟิลด์ รายละเอียด
SQL_SQL_CONFORMANCE

ค่าจํานวนเต็มที่ระบุระดับของค่า SQL-92 ที่รองรับโดยโปรแกรมควบคุม:

(1) SQL_SC_SQL92_ENTRY = ระดับรายการSQL-92 ที่ตรงตามมาตรฐาน

(2) SQL_SC_FIPS127_2_TRANSITIONAL = FIPS 127-2 สอดคล้องกับระดับการเปลี่ยนผ่าน

(4) SQL_SC_ SQL92_INTERMEDIATE = ระดับกลาง SQL-92 สอดคล้องกับ

(8) SQL_SC_SQL92_FULL = ตรงตามSQL-92 ระดับ

โปรดทราบว่า Power Queryเหล่านี้ ตัวเชื่อมต่อจะถูกใช้ในโหมดอ่านอย่างเดียว โปรแกรมควบคุมส่วนใหญ่จะต้องการรายงานระดับSQL_SC_SQL92_FULLการปฏิบัติตามกฎระเบียบ และแทนที่ลักษณะSQLการสร้างเฉพาะโดยใช้คุณสมบัติ SQLGetInfo และ SQLGetFunctions

SQL_SQL92_PREDICATES

Bitmask ที่ระบุเพรดิเคตที่รองรับในรายงาน SELECT ตามที่กําหนดSQL-92

ดูค่า SQL_SP_* ใน ข้อมูลทางเทคนิค ODBC

SQL_AGGREGATE_FUNCTIONS

การสนับสนุนโดยการแจงระดับบิตของฟังก์ชันการรวม

SQL_AF_ALL

SQL_AF_AVG

SQL_AF_COUNT

SQL_AF_DISTINCT

SQL_AF_MAX

SQL_AF_MIN

SQL_AF_SUM

ดูค่า คงที่ SQL_AF_* ใน ข้อมูลทางเทคนิค ODBC

SQL_GROUP_BY

ค่าจํานวนเต็มที่ระบุความสัมพันธ์ระหว่างคอลัมน์ในส่วนสั่ง GROUP BY และคอลัมน์ที่ไม่รวมในรายการเลือก:

SQL_GB_COLLATE = สามารถระบุส่วนสั่ง COLLATE ที่ส่วนท้ายของแต่ละคอลัมน์การจัดกลุ่มได้

SQL_GB_NOT_SUPPORTED = ส่วนสั่ง GROUP BY ไม่ได้รับการสนับสนุน

SQL_GB_GROUP_BY_EQUALS_SELECT = ส่วนสั่ง GROUP BY ต้องมีคอลัมน์ที่ไม่รวมทั้งหมดในรายการเลือก ซึ่งไม่สามารถประกอบด้วยคอลัมน์อื่น ๆ ได้ ตัวอย่างเช่น เลือก DEPT, MAX(เงินเดือน) จากกลุ่มพนักงานตามฝ่าย

SQL_GB_GROUP_BY_CONTAINS_SELECT = ส่วนสั่ง GROUP BY ต้องมีคอลัมน์ที่ไม่รวมทั้งหมดในรายการเลือก ซึ่งสามารถประกอบด้วยคอลัมน์ที่จะไม่อยู่ในรายการที่เลือก ตัวอย่างเช่น เลือก DEPT, MAX(เงินเดือน) จากกลุ่มพนักงานตามฝ่าย อายุ

SQL_GB_NO_RELATION = คอลัมน์ในส่วนสั่ง GROUP BY และรายการที่เลือกจะไม่เกี่ยวข้องกัน ความหมายของคอลัมน์ที่ไม่ใช่คอลัมน์ที่รวมกลุ่มแล้วและไม่ได้รวมในรายการที่เลือกคือแหล่งข้อมูลที่ขึ้นต่อกันได้ ตัวอย่างเช่น เลือก DEPT, เงินเดือนจากกลุ่มพนักงานตามฝ่ายอายุ

ดูค่า SQL_GB_* ใน ข้อมูลเฉพาะของ ODBC

ฟังก์ชันผู้ช่วยเหลือต่อไปนี้สามารถใช้ในการสร้างค่า bitmask จากรายการของค่าจํานวนเต็ม:

Flags = (flags as list) =>
    let
        Loop = List.Generate(
                  ()=> [i = 0, Combined = 0],
                  each [i] < List.Count(flags),
                  each [i = [i]+1, Combined =*Number.BitwiseOr([Combined], flags{i})],
                  each [Combined]),
        Result = List.Last(Loop, 0)
    in
        Result;

การแทนที่ SQLGetTypeInfo

SQLGetTypeInfo สามารถระบุได้สองวิธี:

  • ค่า table คงที่ที่มีข้อมูลชนิดเดียวกันกับการเรียก SQLGetTypeInfo ODBC ไปยัง
  • ฟังก์ชันที่ยอมรับอาร์กิวเมนต์ตารางและส่งกลับตาราง อาร์กิวเมนต์ จะประกอบด้วยผลลัพธ์เดิมของการเรียก ODBC SQLGetTypeInfo ไปยัง การใช้งานฟังก์ชันของคุณสามารถปรับเปลี่ยน/เพิ่มลงในตารางนี้

วิธีการแรกถูกใช้เพื่อแทนที่ค่าที่ส่งกลับโดยโปรแกรมควบคุม ODBC อย่างสมบูรณ์ วิธีที่สองใช้ถ้าคุณต้องการเพิ่มหรือปรับเปลี่ยนค่าเหล่านี้

โปรดดู การอ้างอิงฟังก์ชัน SQLGetTypeInfoเพื่อจัดรูปแบบของพารามิเตอร์ตารางชนิดและค่าที่ส่งกลับที่คาดหวัง

SQLGetTypeInfo โดยใช้ตารางแบบคงที่

โค้ดต่างๆ ต่อไปนี้จะให้การดําเนินการแบบคงที่กับ SQLGetTypeInfo

SQLGetTypeInfo = #table(
    { "TYPE_NAME",      "DATA_TYPE", "COLUMN_SIZE", "LITERAL_PREF", "LITERAL_SUFFIX", "CREATE_PARAS",           "NULLABLE", "CASE_SENSITIVE", "SEARCHABLE", "UNSIGNED_ATTRIBUTE", "FIXED_PREC_SCALE", "AUTO_UNIQUE_VALUE", "LOCAL_TYPE_NAME", "MINIMUM_SCALE", "MAXIMUM_SCALE", "SQL_DATA_TYPE", "SQL_DATETIME_SUB", "NUM_PREC_RADIX", "INTERNAL_PRECISION", "USER_DATA_TYPE" }, {

    { "char",           1,          65535,          "'",            "'",              "max. length",            1,          1,                3,            null,                 0,                  null,                "char",            null,            null,            -8,              null,               null,             0,                    0                }, 
    { "int8",           -5,         19,             "'",            "'",              null,                     1,          0,                2,            0,                    10,                 0,                   "int8",            0,               0,               -5,              null,               2,                0,                    0                },
    { "bit",            -7,         1,              "'",            "'",              null,                     1,          1,                3,            null,                 0,                  null,                "bit",             null,            null,            -7,              null,               null,             0,                    0                },
    { "bool",           -7,         1,              "'",            "'",              null,                     1,          1,                3,            null,                 0,                  null,                "bit",             null,            null,            -7,              null,               null,             0,                    0                },
    { "date",           9,          10,             "'",            "'",              null,                     1,          0,                2,            null,                 0,                  null,                "date",            null,            null,            9,               1,                  null,             0,                    0                }, 
    { "numeric",        3,          28,             null,           null,             null,                     1,          0,                2,            0,                    0,                   0,                  "numeric",         0,               0,               2,               null,               10,               0,                    0                },
    { "float8",         8,          15,             null,           null,             null,                     1,          0,                2,            0,                    0,                   0,                  "float8",          null,            null,            6,               null,               2,                0,                    0                },
    { "float8",         6,          17,             null,           null,             null,                     1,          0,                2,            0,                    0,                   0,                  "float8",          null,            null,            6,               null,               2,                0,                    0                },
    { "uuid",           -11,        37,             null,           null,             null,                     1,          0,                2,            null,                 0,                  null,                "uuid",            null,            null,            -11,             null,               null,             0,                    0                },
    { "int4",           4,          10,             null,           null,             null,                     1,          0,                2,            0,                    0,                   0,                  "int4",            0,               0,               4,               null,               2,                0,                    0                },
    { "text",           -1,         65535,          "'",            "'",              null,                     1,          1,                3,            null,                 0,                  null,                "text",            null,            null,            -10,             null,               null,             0,                    0                },
    { "lo",             -4,         255,            "'",            "'",              null,                     1,          0,                2,            null,                 0,                  null,                "lo",              null,            null,            -4,              null,               null,             0,                    0                }, 
    { "numeric",        2,          28,             null,           null,             "precision, scale",       1,          0,                2,            0,                    10,                 0,                   "numeric",         0,               6,               2,               null,               10,               0,                    0                },
    { "float4",         7,          9,              null,           null,             null,                     1,          0,                2,            0,                    10,                 0,                   "float4",          null,            null,            7,               null,               2,                0,                    0                }, 
    { "int2",           5,          19,             null,           null,             null,                     1,          0,                2,            0,                    10,                 0,                   "int2",            0,               0,               5,               null,               2,                0,                    0                }, 
    { "int2",           -6,         5,              null,           null,             null,                     1,          0,                2,            0,                    10,                 0,                   "int2",            0,               0,               5,               null,               2,                0,                    0                }, 
    { "timestamp",      11,         26,             "'",            "'",              null,                     1,          0,                2,            null,                 0,                  null,                "timestamp",       0,               38,              9,               3,                  null,             0,                    0                }, 
    { "date",           91,         10,             "'",            "'",              null,                     1,          0,                2,            null,                 0,                  null,                "date",            null,            null,            9,               1,                  null,             0,                    0                }, 
    { "timestamp",      93,         26,             "'",            "'",              null,                     1,          0,                2,            null,                 0,                  null,                "timestamp",       0,               38,              9,               3,                  null,             0,                    0                }, 
    { "bytea",          -3,         255,            "'",            "'",              null,                     1,          0,                2,            null,                 0,                  null,                "bytea",           null,            null,            -3,              null,               null,             0,                    0                }, 
    { "varchar",        12,         65535,          "'",            "'",              "max. length",            1,          0,                2,            null,                 0,                  null,                "varchar",         null,            null,           -9,               null,               null,             0,                    0                }, 
    { "char",           -8,         65535,          "'",            "'",              "max. length",            1,          1,                3,            null,                 0,                  null,                "char",            null,            null,           -8,               null,               null,             0,                    0                }, 
    { "text",           -10,        65535,          "'",            "'",              "max. length",            1,          1,                3,            null,                 0,                  null,                "text",            null,            null,           -10,              null,               null,             0,                    0                }, 
    { "varchar",        -9,         65535,          "'",            "'",              "max. length",            1,          1,                3,            null,                 0,                  null,                "varchar",         null,            null,           -9,               null,               null,             0,                    0                },
    { "bpchar",         -8,         65535,           "'",            "'",              "max. length",            1,          1,                3,            null,                 0,                  null,                "bpchar",          null,            null,            -9,               null,               null,            0,                    0                } }
);

SQLGetTypeInfo โดยใช้ฟังก์ชัน

ส่วนย่อยโค้ดต่อไปนี้จะ bpchar ผนวกชนิดเข้ากับชนิดที่มีอยู่ซึ่งส่งคืนโดยโปรแกรมควบคุม

SQLGetTypeInfo = (types as table) as table =>
   let
       newTypes = #table(
           {
               "TYPE_NAME",
               "DATA_TYPE",
               "COLUMN_SIZE",
               "LITERAL_PREF",
               "LITERAL_SUFFIX",
               "CREATE_PARAS",
               "NULLABLE",
               "CASE_SENSITIVE",
               "SEARCHABLE",
               "UNSIGNED_ATTRIBUTE",
               "FIXED_PREC_SCALE",
               "AUTO_UNIQUE_VALUE",
               "LOCAL_TYPE_NAME",
               "MINIMUM_SCALE",
               "MAXIMUM_SCALE",
               "SQL_DATA_TYPE",
               "SQL_DATETIME_SUB",
               "NUM_PREC_RADIX",
               "INTERNAL_PRECISION",
               "USER_DATA_TYPE"
            },
            // we add a new entry for each type we want to add
            {
                {
                    "bpchar",
                    -8,
                    65535,
                    "'",
                    "'",
                    "max. length",
                    1,
                    1,
                    3,
                    null,
                    0,
                    null,
                    "bpchar",
                    null,
                    null,
                    -9,
                    null,
                    null,
                    0,
                    0
                }
            }),
        append = Table.Combine({types, newTypes})
    in
        append;

การตั้งค่าสตริงการเชื่อมต่อ

สตริงการเชื่อมต่อของโปรแกรมควบคุม ODBC ของคุณถูกตั้งค่าโดยใช้อาร์กิวเมนต์แรกเป็นฟังก์ชันOdbc.DataSourceและ/หรือOdbc.Query ค่าอาจเป็นข้อความตัวอักษร หรือระเบียน M เมื่อใช้เรกคอร์ด แต่ละเขตข้อมูลในเรกคอร์ดจะกลายเป็นคุณสมบัติในสตริงการเชื่อมต่อ สตริงการเชื่อมต่อทั้งหมดจะต้องใช้เขตข้อมูล Driver (หรือเขตข้อมูล DSN หากคุณต้องการให้ผู้ใช้กําหนดค่า DSN ระดับระบบไว้ล่วงหน้า) คุณสมบัติที่เกี่ยวข้องกับข้อมูลรับรองจะถูกตั้งค่าแยกต่างหาก (ดูด้านล่าง) คุณสมบัติอื่นๆ จะเป็นแบบเฉพาะเจาะจงของโปรแกรมควบคุม

ส่วนย่อยของโค้ดด้านล่างแสดงนิยามของฟังก์ชันแหล่งข้อมูลใหม่ การสร้างระเบียน ConnectionString และการเรียกฟังก์ชันOdbc.DataSource

[DataSource.Kind="SqlODBC", Publish="SqlODBC.Publish"]
shared SqlODBC.Contents = (server as text) =>
    let
        ConnectionString = [
            Driver = "SQL Server Native Client 11.0",
            Server = server,
            MultiSubnetFailover = "Yes",
            ApplicationIntent = "ReadOnly",
            APP = "PowerBICustomConnector"
        ],
        OdbcDatasource = Odbc.DataSource(ConnectionString)
    in
        OdbcDatasource;

การแก้ไขปัญหาและการทดสอบ

เมื่อต้องการเปิดใช้งานการติดตามใน Power BI Desktop:

  1. ไปที่ ไฟล์ > ตัวเลือกและการตั้งค่า > ตัวเลือก
  2. เลือก ที่แท็บ การวินิจฉัย
  3. เลือกตัวเลือก เปิดใช้งาน การติดตาม
  4. เลือก ลิงก์เปิดโฟลเดอร์การติดตาม (ควร %LOCALAPPDATA%/Microsoft/Power BI Desktop/Traces เป็น)
  5. ลบไฟล์การติดตามที่มีอยู่
  6. ทดสอบการใช้งาน
  7. ปิดPower BI Desktopเพื่อให้แน่ใจว่าไฟล์บันทึกทั้งหมดจะถูกใส่ลงในดิสก์

ต่อไปนี้คือขั้นตอนที่คุณสามารถใช้ได้เพื่อการทดสอบเริ่มต้นใน Power BI Desktop:

  1. เปิด Power BI Desktop
  2. ล้างไดเรกทอรีการติดตามของคุณ
  3. เปิด Power BI desktop และเปิดใช้งานการติดตาม
  4. เชื่อมต่อไปยังแหล่งข้อมูลของคุณและเลือกโหมด Direct Query
  5. เลือกตารางในบานหน้าต่างตัวนําทาง แล้วเลือก แก้ไข
  6. จัดการคิวรีในหลายวิธี รวมถึง:
  • ใช้ N แถวแรก (ตัวอย่างเช่น 10)
  • ตั้งค่าตัวกรองความเท่ากันบนชนิดข้อมูลที่แตกต่างกัน (int, string, bool และอื่น ๆ)
  • ตั้งค่าตัวกรองช่วงอื่นๆ (มากกว่า น้อยกว่า)
  • กรองเป็น NULL / NOT NULL
  • เลือกชุดย่อยของคอลัมน์
  • รวม/จัดกลุ่มตามการรวมคอลัมน์ที่แตกต่างกัน
  • เพิ่มคอลัมน์ที่คํานวณจากคอลัมน์อื่น ([C] = [A] + [B])
  • จัดเรียงจากหนึ่งคอลัมน์ หลายคอลัมน์ 7. นิพจน์ที่พับไม่ได้จะส่งผลให้มีแถบคําเตือน โปรดสังเกตความล้มเหลว ลบขั้นตอน และย้ายไปยังกรณีการทดสอบถัดไป รายละเอียดเกี่ยวกับสาเหตุของความล้มเหลวควรถูกปล่อยไปยังบันทึกการติดตาม 8. เปิด Power BI Desktop 9. คัดลอกไฟล์การติดตามไปยังไดเรกทอรีใหม่ 10. ใช้สมุดงาน Power BI ที่แนะนาเพื่อแยกวิเคราะห์และวิเคราะห์ไฟล์การติดตาม

เมื่อคุณมีคิวรีแบบง่ายที่ใช้งานได้ คุณสามารถลองสถานการณ์ Direct Query (ตัวอย่างเช่น สร้างรายงานในมุมมองรายงาน) คิวรีที่สร้างขึ้นในโหมด Direct Query จะซับซ้อนมากขึ้น (นั่นคือ การใช้การเลือกย่อย รายงาน COALESCE และการรวม)

การเรียงต่อกันของสตริงในโหมด Direct Query

กลไกจัดการ M ใช้การตรวจสอบขีดจํากัดของขนาดชนิดพื้นฐานซึ่งเป็นส่วนหนึ่งของตรรกะ Query Folding หากคุณได้รับข้อความข้อผิดพลาดการพับเมื่อพยายามเชื่อมสตริงสองสตริงที่อาจเกินขนาดสูงสุดของชนิดฐานข้อมูลที่เกี่ยวข้อง:

  1. ตรวจสอบให้แน่ใจว่าฐานข้อมูลของคุณสามารถสนับสนุนการแปลงชนิดของ CLOB เมื่อมีการเกิดสตริงที่มากเกินไป
  2. ตั้งค่า TolerateConcatOverflow ตัวเลือก ให้ Odbc.DataSource true เป็น

ในขณะนี้ ฟังก์ชัน DAX CONCATENATE ไม่ได้Power Query/ODBC ผู้เขียนส่วนขยายควรตรวจสอบให้แน่ใจว่าการเรียงต่อสตริงใช้งานได้ผ่านตัวแก้ไขคิวรีโดยการเพิ่มคอลัมน์ที่มี [stringCol1] & [stringCol2] คํานวณ ( ) เมื่อมีการเพิ่มความสามารถในการพับการดําเนินการ CONCATENATE ในอนาคต ควรมีการดําเนินการได้อย่างราบรื่นกับส่วนขยายที่มีอยู่