Thep Excel

Odbc.DataSourceเชื่อมต่อแหล่งข้อมูล ODBC

Odbc.DataSource เชื่อมต่อแหล่งข้อมูล ODBC และดึงรายชื่อตารางพร้อมวิว ช่วยให้คุณเข้าถึงฐานข้อมูลจากเครื่อง ODBC-compliant โดยไม่ต้องใช้ SQL Server Connection โดยตรง

fx
= Odbc.DataSource(connectionString, [options]) as table

ความนิยม6/10
ความยาก5/10
ประโยชน์6/10

อัปเดต 12 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด ค่าเริ่มต้น คำอธิบาย
connectionString Text or Record Connection string สำหรับแหล่งข้อมูล ODBC เช่น ‘dsn=MyDatabase’ หรือ record ที่มี property-value pairs (Driver, Server, Database, Uid, Pwd)
[options]ไม่บังคับ Record null ตัวเลือกการตั้งค่าเพิ่มเติม เช่น CreateNavigationProperties, HierarchicalNavigation, ConnectionTimeout, CommandTimeout, SqlCompatibleWindowsAuth

[ ] = อาร์กิวเมนต์ที่ไม่บังคับ

Additional Notes

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 ก็ยังไหว

Examples

เชื่อมต่อแหล่งข้อมูล ODBC ด้วย DSNOdbc.DataSource("dsn=MyDatabase")

เชื่อมต่อไปยัง ODBC data source ที่มีชื่อ 'MyDatabase' และคืนค่าเป็น table ของตารางทั้งหมด ถ้า DSN ลงทะเบียนแล้วในระบบ ก็เพียงพอ

fx
= Odbc.DataSource("dsn=MyDatabase")

ผลลัพธ์Table ที่มีรายชื่อตารางและวิวทั้งหมดจากแหล่งข้อมูล ODBC
เชื่อมต่อพร้อมตั้งค่า timeoutlet Options = [CommandTimeout = Duration.FromSeconds(30), ConnectionTimeout = Duration.FromSeconds(20)], DataSource = Odbc.DataSource("dsn=MyDatabase", Options)…

ตั้งค่า command timeout เป็น 30 วินาทีและ connection timeout เป็น 20 วินาที จากนั้นเลือกตาราง Customers จากผลลัพธ์ CommandTimeout ใช้สำหรับระยะเวลาการทำงาน query ส่วน ConnectionTimeout คือระยะเวลารอการเชื่อมต่อ

fx
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 ที่กำหนดเอง
ใช้ Record สำหรับ connection stringlet ConnInfo = [Driver = "MySQL ODBC 8.0 Driver", Server = "localhost", Database = "MyDB", Uid = "user", Pwd = "password"], DataSource = Odbc.DataSource(ConnInf…

ใช้ record เพื่อส่งข้อมูลการเชื่อมต่อแบบละเอียด แล้วเลือกตาราง Sales การใช้ record format นี้ปลอดภัยกว่า string เพราะสามารถเก็บข้อมูลไวพจน์ได้

fx
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
ใช้ HierarchicalNavigation เมื่อมีตารางเยอะlet Options = [HierarchicalNavigation = true, CreateNavigationProperties = true], DataSource = Odbc.DataSource("dsn=CorpDatabase", Options) in DataSource

เมื่องานมีตารางมากขึ้น ตั้ง HierarchicalNavigation เป็น true เพื่อให้แสดงกลุ่มตามชื่อ schema ทำให้หาตารางได้ง่ายขึ้น

fx
let
Options = [HierarchicalNavigation = true, CreateNavigationProperties = true],
DataSource = Odbc.DataSource("dsn=CorpDatabase", Options)
in
DataSource

ผลลัพธ์Table ที่จัดกลุ่มตารางตามชื่อ schema เรียบร้อย

FAQs

Odbc.DataSource กับ Sql.Database ต่างกันยังไง+

คิดแบบนี้ – Odbc.DataSource เป็นตัวช่วยที่เข้ากับได้หลายระบบ (MySQL, PostgreSQL, Excel Files ผ่าน ODBC) ส่วน Sql.Database เนี่ย มันจบจำเพาะแค่ SQL Server ตรงๆ ผมแนะนำให้ใช้ Odbc.DataSource ถ้าฐานข้อมูลไม่ใช่ SQL Server แต่ถ้าแน่ใจว่าเป็น SQL Server แล้ว Sql.Database จะเร็วกว่า

ConnectionTimeout vs CommandTimeout อะไรต่างกัน+

ConnectionTimeout เนี่ยคือ 'นานไหนถึงจะยอมแพ้ว่าเชื่อมต่อไม่ได้' (ค่าเริ่มต้น 15 วินาที) CommandTimeout เป็น 'นานไหนถึงจะยอมแพ้ว่า query มันแล่นไม่จบ' (ค่าเริ่มต้น 10 นาที) สองตัวนี้ต้องคำนึงถึง network condition ของคุณ ผมแนะนำให้ปรับ CommandTimeout สูงขึ้นถ้า query เป็นแบบหนัก

ต้อง install ODBC driver ไหม+

แน่นอนครับ ต้องติดตั้ง ODBC driver ที่เข้ากับฐานข้อมูลของคุณ MySQL ODBC, PostgreSQL ODBC, ACCESS ODBC – แบบนี้ เครื่องของคุณต้องมีมัน ไม่งั้น Power Query จะไม่เห็น data source

CreateNavigationProperties มันคืออะไร+

นี่ตัวเลือกที่ช่วยให้ Power Query แสดงตารางและวิวเป็นนวิเกชันที่เข้าใจง่าย (ค่าเริ่มต้น true) ปกติจะตั้งเป็น true แล้ว ถ้าตั้ง false ก็ต้องหาตารางแบบ manual มากกว่า ผมไม่ค่อยปิดตัวนี้หรอก

SqlCompatibleWindowsAuth ทำไมต้องใช้+

ตัวนี้บอก Power Query ว่าให้ใช้วิธี Windows authentication ที่เข้ากับ SQL Server (ค่าเริ่มต้น true) ถ้างานของคุณใช้ Windows credentials ก็ปล่อยให้ true ไป

Resources & Related

ฟังก์ชันที่ผู้เขียนโยงไว้กับ Odbc.DataSource จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง

ฟังก์ชันนี้Odbc.DataSourceAccessing data functions
Accessing data functions (3)
Odbc.InferOptions

Odbc.InferOptions ใช้สำหรับการประมวลผล

Odbc.Query

Odbc.Query ใช้สำหรับดำเนินการคำสั่ง SQL โดยตรงต่อฐานข้อมูล ODBC ใดๆ เช่น SQL Server, MySQL, PostgreSQL, Oracle และส่งคืนผลลัพธ์เป็นตาราง

Sql.Database

Sql.Database เป็นฟังก์ชันที่ใช้เชื่อมต่อกับฐานข้อมูล SQL Server แล้วดึงข้อมูลเข้ามาประมวลผลใน Power Query ได้เลยครับ
.
ฟังก์ชันนี้จะคืนค่าออกมาเป็น table ที่แสดงรายการของ tables, views และ stored functions ทั้งหมดที่มีในฐานข้อมูลที่เราระบุ ที่เจ๋งคือฟังก์ชันนี้รองรับการทำ query folding ซึ่งทำให้การประมวลผลข้อมูลเกิดขึ้นที่ SQL Server โดยตรง ได้ประสิทธิภาพสูงสุดและลดการใช้ memory ลงมาก
.
นอกจากนี้ยังมี options หลากหลายให้เราปรับแต่งการเชื่อมต่อได้ เช่น การกำหนด CommandTimeout สำหรับ query ที่ใช้เวลานาน การเขียน native SQL query เพื่อดึงข้อมูลแบบกำหนดเองเลย การทำ cross-database folding เพื่อทำงานข้ามหลายฐานข้อมูล และรองรับ authentication หลายรูปแบบด้วย ส่วนตัวผมใช้บ่อยมากเวลาทำงานกับข้อมูลขนาดใหญ่จาก SQL Server ครับ 😎

Comments

อีเมลของคุณจะไม่ถูกเผยแพร่