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

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

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

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

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

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

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

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

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

ค่าเริ่มต้น: เท็จ
SqlCompatibleWindowsAuth ค่าตรรกะที่พิจารณาว่าจะสร้างนิพจน์ที่SQL Serverเข้ากันได้กับสตริงการเชื่อมต่อเมื่อใช้การรับรองความถูกWindowsหรือไม่—Trusted_Connection=Yes

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

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

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

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

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

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

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

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

ค่าเริ่มต้น: เท็จ
CredentialConnectionString ค่าข้อความหรือระเบียนที่ใช้เพื่อระบุคุณสมบัติระเบียนที่เกี่ยวข้องกับสตริงการเชื่อมต่อข้อมูลรับรอง
HideNativeQuery ค่าตรรกะที่ควบคุมว่าตัวเชื่อมต่อจะแสดงรายงานที่สร้างขึ้นSQLที่สร้างขึ้นในประสบการณ์Power Queryของผู้ใช้หรือไม่ ซึ่งควรได้รับการตั้งค่าเป็น จริง ถ้าแหล่งข้อมูล back end สนับสนุนในดั้งเดิม SQL-92

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

เขตข้อมูลนี้โดยปกติใช้กับเขตข้อมูล SQLGetTypeInfo เมื่อแทนที่ข้อมูลชนิดข้อมูลที่รายงานโดยโปรแกรมควบคุม
OnError ฟังก์ชันการจัดการข้อผิดพลาดที่ได้รับ errorRecord พารามิเตอร์ของ recordชนิด

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

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

ข้อมูลเพิ่มเติม: การแทนที่ SqlCapabilities
SQLColumns ฟังก์ชันที่ช่วยให้คุณสามารถแก้ไขเมตาดาต้าคอลัมน์ที่ฟังก์ชัน SQLColumns ส่งกลับ

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

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

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

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

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

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

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

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

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

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

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

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

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

การแทนที่ AstVisitor

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

หมายเหตุ

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

คง

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

LimitClause

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

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

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

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

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

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

ค่า คำอธิบาย ตัวอย่าง:
AfterQuerySpecification ส่วนย่อย LIMIT จะถูกวางไว้ที่ส่วนท้ายของSQLที่สร้างขึ้น

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

จากตาราง

>ที่ไหน 10

ขีดจํากัด 5
BeforeQuerySpecification เงื่อนไขย่อย LIMIT จะถูกใส่ก่อนการสร้างSQLสั่ง จํากัด 5 แถว

เลือก a, b, c

ตาราง FROM

>ที่ไหน 10
AfterSelect LIMIT จะต่อท้ายด้วยข้อความ SELECT และหลังการปรับเปลี่ยนใดๆ (เช่น DISTINCT) เลือกขีด จํากัดเฉพาะ 5 a, b, c

ตาราง FROM

>ที่ไหน 10
AfterSelectBeforeModifiers 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 เพื่อจํากัดจํานวนของแถวที่ส่งกลับ

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

ตัวอย่าง: {""}

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

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

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

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

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

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

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

ค่าเริ่มต้น: เท็จ
SupportsOdbcTimestampLiterals ค่าตรรกะที่ระบุว่านิพจน์ ที่สร้างขึ้น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 แทนการแปลง

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การสร้างเฉพาะโดยใช้SQLGetInfoSQLGetFunctionsคุณสมบัติ และ
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 และรายการที่เลือกไม่เกี่ยวข้องกัน ความหมายของคอลัมน์ที่ไม่ใช่คอลัมน์ที่รวมกลุ่มและไม่ได้รวมในรายการเลือกคือแหล่งข้อมูลที่ขึ้นต่อกัน ตัวอย่างเช่น เลือก พนักงานที่ขาย, เงินเดือนจากกลุ่มพนักงานตามฝ่าย, อายุ

ไปยังค่า 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ค่าคงที่ที่ประกอบด้วยข้อมูลชนิดเดียวกันกับการเรียก ODBC SQLGetTypeInfoไปยัง
  • ฟังก์ชันที่ยอมรับอาร์กิวเมนต์ตารางและส่งกลับตาราง อาร์กิวเมนต์ มีผลลัพธ์เดิมของการเรียก 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;

ขั้นตอนถัดไป