Odbc.DataSource เชื่อมต่อแหล่งข้อมูล ODBC และดึงรายชื่อตารางพร้อมวิว ช่วยให้คุณเข้าถึงฐานข้อมูลจากเครื่อง ODBC-compliant โดยไม่ต้องใช้ SQL Server Connection โดยตรง
= Odbc.DataSource(connectionString as any, optional options as nullable record) as table
= Odbc.DataSource(connectionString as any, optional options as nullable record) as table
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| connectionString | Text or Record | Yes | Connection string สำหรับแหล่งข้อมูล ODBC เช่น ‘dsn=MyDatabase’ หรือ record ที่มี property-value pairs (Driver, Server, Database, Uid, Pwd) | |
| options | Record | Optional | null | ตัวเลือกการตั้งค่าเพิ่มเติม เช่น CreateNavigationProperties, HierarchicalNavigation, ConnectionTimeout, CommandTimeout, SqlCompatibleWindowsAuth |
Odbc.DataSource("dsn=MyDatabase")= Odbc.DataSource("dsn=MyDatabase")
Table ที่มีรายชื่อตารางและวิวทั้งหมดจากแหล่งข้อมูล ODBC
let Options = [CommandTimeout = Duration.FromSeconds(30), ConnectionTimeout = Duration.FromSeconds(20)], DataSource = Odbc.DataSource("dsn=MyDatabase", Options)…let
Options = [CommandTimeout = Duration.FromSeconds(30), ConnectionTimeout = Duration.FromSeconds(20)],
DataSource = Odbc.DataSource("dsn=MyDatabase", Options),
SelectedTable = DataSource{[Name = "Customers"]}
in
SelectedTable
ข้อมูลจากตาราง Customers พร้อม timeout control ที่กำหนดเอง
let ConnInfo = [Driver = "MySQL ODBC 8.0 Driver", Server = "localhost", Database = "MyDB", Uid = "user", Pwd = "password"], DataSource = Odbc.DataSource(ConnInf…let
ConnInfo = [Driver = "MySQL ODBC 8.0 Driver", Server = "localhost", Database = "MyDB", Uid = "user", Pwd = "password"],
DataSource = Odbc.DataSource(ConnInfo),
SalesTable = DataSource{[Name = "Sales"]}
in
SalesTable
ข้อมูลจากตาราง Sales โดยใช้ ODBC driver ของ MySQL
let Options = [HierarchicalNavigation = true, CreateNavigationProperties = true], DataSource = Odbc.DataSource("dsn=CorpDatabase", Options) in DataSourcelet
Options = [HierarchicalNavigation = true, CreateNavigationProperties = true],
DataSource = Odbc.DataSource("dsn=CorpDatabase", Options)
in
DataSource
Table ที่จัดกลุ่มตารางตามชื่อ schema เรียบร้อย
คิดแบบนี้ – Odbc.DataSource เป็นตัวช่วยที่เข้ากับได้หลายระบบ (MySQL, PostgreSQL, Excel Files ผ่าน ODBC) ส่วน Sql.Database เนี่ย มันจบจำเพาะแค่ SQL Server ตรงๆ ผมแนะนำให้ใช้ Odbc.DataSource ถ้าฐานข้อมูลไม่ใช่ SQL Server แต่ถ้าแน่ใจว่าเป็น SQL Server แล้ว Sql.Database จะเร็วกว่า
ConnectionTimeout เนี่ยคือ ‘นานไหนถึงจะยอมแพ้ว่าเชื่อมต่อไม่ได้’ (ค่าเริ่มต้น 15 วินาที) CommandTimeout เป็น ‘นานไหนถึงจะยอมแพ้ว่า query มันแล่นไม่จบ’ (ค่าเริ่มต้น 10 นาที) สองตัวนี้ต้องคำนึงถึง network condition ของคุณ ผมแนะนำให้ปรับ CommandTimeout สูงขึ้นถ้า query เป็นแบบหนัก
แน่นอนครับ ต้องติดตั้ง ODBC driver ที่เข้ากับฐานข้อมูลของคุณ MySQL ODBC, PostgreSQL ODBC, ACCESS ODBC – แบบนี้ เครื่องของคุณต้องมีมัน ไม่งั้น Power Query จะไม่เห็น data source
นี่ตัวเลือกที่ช่วยให้ Power Query แสดงตารางและวิวเป็นนวิเกชันที่เข้าใจง่าย (ค่าเริ่มต้น true) ปกติจะตั้งเป็น true แล้ว ถ้าตั้ง false ก็ต้องหาตารางแบบ manual มากกว่า ผมไม่ค่อยปิดตัวนี้หรอก
ตัวนี้บอก Power Query ว่าให้ใช้วิธี Windows authentication ที่เข้ากับ SQL Server (ค่าเริ่มต้น true) ถ้างานของคุณใช้ Windows credentials ก็ปล่อยให้ true ไป
Odbc.DataSource ตัวสำคัญสำหรับคนที่ต้องงานกับ MySQL, PostgreSQL, Excel Files หรือฐานข้อมูลอื่นๆ ที่เข้ากับ ODBC มันจะช่วยเปิด connection ไปยังแหล่งข้อมูล แล้วดึงรายชื่อตารางและวิวทั้งหมดให้คุณ
ที่เจ๋งคือ ฟังก์ชันนี้จะคืนมาเป็น table ที่พร้อมใช้ มีทุกตารางและวิวอยู่ในนั้น คุณเพียงแค่เลือกตารางที่ต้องการเข้ามา Power Query ได้เลย ไม่ต้องเขียน SQL ยาวๆ แล้วยังสามารถปรับ timeout ให้พอดีกับสภาพแวดล้อมของคุณได้อีก
ส่วนตัวผม ใช้ Odbc.DataSource ตอนที่งานต้องเชื่อมต่อเข้ากับระบบเก่า (Legacy System) หรือเวลาที่ฐานข้อมูลไม่ได้เป็น SQL Server ตรงๆ ความเก่งของมันคือ flexibility – ปรับ timeout ได้, เลือกจากหลายตารางได้, งานแบบ multi-source data pull ก็ยังไหว