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