Web.Contents เป็นฟังก์ชันสำหรับดาวน์โหลดเนื้อหาจากเว็บไซต์หรือแหล่งข้อมูลบนอินเทอร์เน็ตผ่าน URL และคืนค่าเป็นข้อมูลแบบ binary data ที่สามารถนำไปประมวลผลต่อได้
.
รองรับการเชื่อมต่อและเรียกใช้งาน REST API อย่างครบถ้วนพร้อมระบบการยืนยันตัวตนผ่านทางตัวเลือกต่างๆ เช่น การกำหนดค่า Headers สำหรับส่งข้อมูลเพิ่มเติมในคำขอ การใช้ Query parameters สำหรับการกรองข้อมูลและส่งพารามิเตอร์ และการระบุ ApiKeyName เพื่อจัดเก็บคีย์การเข้าถึงอย่างปลอดภัย
.
เหมาะอย่างยิ่งสำหรับการเชื่อมต่อกับบริการเว็บและจุดเชื่อมต่อ API แบบไดนามิก โดยใช้ความสามารถของ RelativePath และตัวเลือก Query เพื่อสร้าง URL แบบยืดหยุ่นและทำให้กระบวนการรีเฟรชข้อมูลทำงานได้อย่างราบรื่นและมีประสิทธิภาพในระบบ Power BI Service
| อาร์กิวเมนต์ | ชนิด | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
| url | text | ที่อยู่ URL ของแหล่งข้อมูลบนเว็บที่ต้องการดาวน์โหลดและดึงข้อมูลเข้ามา สามารถระบุเป็น HTTP protocol หรือ HTTPS protocol ก็ได้ โดยระบบจะทำการ upgrade จาก HTTP ไปเป็น HTTPS ให้โดยอัตโนมัติเพื่อความปลอดภัย สำหรับกรณีที่ต้องการสร้าง dynamic URLs ที่เปลี่ยนแปลงได้ตามสถานการณ์ ควรระบุเฉพาะ base URL ที่คงที่ไว้ในพารามิเตอร์นี้ แล้วใช้พารามิเตอร์ RelativePath สำหรับระบุส่วนของ path ที่เปลี่ยนแปลงแบบไดนามิก | |
| [options]ไม่บังคับ | nullable record | null | Record ที่มี optional properties สำหรับควบคุม HTTP request behavior รวมถึง Query, Headers, Timeout, RelativePath, ApiKeyName, Content, ExcludedFromCacheKey, IsRetry, และ ManualStatusHandling |
| [Query (in options)]ไม่บังคับ | record | null | Record ของ query parameters ที่จะเพิ่มใน URL โดย Power Query จะทำ URL encoding ให้อัตโนมัติ เหมาะสำหรับสร้าง dynamic API calls โดยไม่ต้องทำ string concatenation ด้วยตัวเอง |
| [ApiKeyName (in options)]ไม่บังคับ | text | null | ชื่อ (ไม่ใช่ค่า) ของ API key parameter สำหรับ authentication ค่าจริงจะถูกดึงจาก Power Query credentials (Web API authentication) และแทรกเข้าไปใน request อัตโนมัติ เพื่อความปลอดภัยและป้องกันการเปิดเผย credentials ใน M code |
| [Headers (in options)]ไม่บังคับ | record | null | Record ของ HTTP headers ที่ต้องการส่งไปพร้อม request เช่น Content-Type, Authorization (Bearer token), Accept, User-Agent เป็นต้น field names ที่มี special characters ต้องใช้ #”Header-Name” syntax |
| [Timeout (in options)]ไม่บังคับ | duration | #duration(0, 0, 1, 40) | ระยะเวลา timeout สำหรับ HTTP request ใช้ #duration() function เพื่อระบุค่า เช่น #duration(0, 0, 5, 0) สำหรับ 5 นาที ค่า default คือ 100 วินาที เหมาะสำหรับ API endpoints ที่ response ช้า |
| [ExcludedFromCacheKey (in options)]ไม่บังคับ | list | null | List ของ HTTP header keys ที่ไม่ต้องการนำมาคำนวณใน cache key เหมาะสำหรับ headers ที่เปลี่ยนแปลงบ่อยแต่ไม่ส่งผลต่อ response เช่น request timestamp หรือ correlation IDs |
| [IsRetry (in options)]ไม่บังคับ | logical | false | ตั้งค่าเป็น true เพื่อบังคับให้ดึงข้อมูลใหม่และไม่ใช้ cached response มีประโยชน์เมื่อต้องการ fresh data หรือเมื่อทดสอบ API changes |
| [ManualStatusHandling (in options)]ไม่บังคับ | list | null | List ของ HTTP status codes ที่ต้องการจัดการเอง แทนที่จะใช้ built-in error handling ของ Power Query เช่น {404, 500} เหมาะสำหรับ custom error handling logic |
| [RelativePath (in options)]ไม่บังคับ | text | null | Path ที่จะเพิ่มต่อท้าย base URL ก่อนทำ request ใช้สำหรับสร้าง dynamic endpoints โดยที่ Power Query ยังคงรู้จัก base URL เป็น data source เดียวกัน ซึ่งช่วยให้ refresh ใน Power BI Service ทำงานได้ถูกต้อง |
| [Content (in options)]ไม่บังคับ | binary | null | Request body สำหรับ POST request เมื่อระบุ Content จะเปลี่ยน HTTP method จาก GET เป็น POST อัตโนมัติ มักใช้ร่วมกับ Json.FromValue() เพื่อแปลง record เป็น JSON binary สำหรับส่งไปยัง REST APIs |
[ ] = อาร์กิวเมนต์ที่ไม่บังคับ
Web.Contents เป็น Power Query function ที่ใช้ดึงข้อมูลจากเว็บไซต์และเรียกใช้งาน REST API แบบครบวงจร
.
ที่เจ๋งคือมันรองรับทั้งการดาวน์โหลดไฟล์ต่างๆ (HTML, CSV, JSON) และการเชื่อมต่อ API endpoints ที่มีระบบยืนยันตัวตน
.
ส่วนตัวผมใช้บ่อยมากเลยครับ โดยเฉพาะตอนต้องดึงข้อมูลจาก REST APIs มาทำงานใน Power BI 😎
ฟังก์ชันนี้จะคืนค่าเป็นข้อมูลประเภท binary data จากที่อยู่ URL ที่คุณระบุ และยังรองรับการตั้งค่าพารามิเตอร์เพิ่มเติมผ่าน options record ซึ่งช่วยให้คุณสามารถควบคุมพฤติกรรมของ HTTP request ได้อย่างละเอียดและแม่นยำ เช่น การส่งข้อมูล Headers สำหรับการระบุข้อมูลเพิ่มเติม การกำหนด Query parameters สำหรับการกรองข้อมูล การตั้งค่าระยะเวลา Timeout เพื่อรองรับการเชื่อมต่อที่ใช้เวลานาน และการใช้ RelativePath เพื่อสร้าง dynamic URLs ที่เหมาะสมกับการทำงานแบบรีเฟรชอัตโนมัติในระบบ Power BI Service
การใช้งาน Web.Contents มีความสำคัญอย่างยิ่งในการทำงานด้าน data integration หรือการรวมข้อมูลจากระบบภายนอกเข้ามาในระบบของเรา โดยเฉพาะอย่างยิ่งเมื่อต้องเชื่อมต่อกับ REST APIs ที่มีความต้องการด้านความปลอดภัยและการยืนยันตัวตน เช่น การใช้ API keys สำหรับการเข้าถึงข้อมูล การใช้ Bearer tokens สำหรับการยืนยันสิทธิ์ หรือการกำหนด custom HTTP headers เพื่อระบุข้อมูลเฉพาะในการเชื่อมต่อ การตั้งค่าเหล่านี้จะช่วยให้ Power Query สามารถรีเฟรชข้อมูลได้อัตโนมัติและต่อเนื่องทั้งใน Power BI Service และใน Excel โดยไม่ต้องมีการตั้งค่าซ้ำหรือป้อนข้อมูลการยืนยันตัวตนทุกครั้ง
Web.Contents รองรับการทำงานทั้งแบบ GET requests และ POST requests ซึ่งเป็นรูปแบบการเรียกใช้งาน API ที่พบเห็นได้บ่อยที่สุด โดย GET request จะเกิดขึ้นเมื่อคุณไม่ได้ระบุพารามิเตอร์ Content ในการเรียกใช้งาน เหมาะสำหรับการดึงข้อมูลจากเซิร์ฟเวอร์โดยไม่ต้องส่งข้อมูลใดๆ ไปพร้อมกับคำขอ ในขณะที่ POST request จะถูกใช้งานโดยอัตโนมัติเมื่อคุณระบุพารามิเตอร์ Content เช่น การส่ง JSON payload หรือข้อมูลอื่นๆ ไปยัง API endpoint ซึ่งเหมาะสำหรับการส่งข้อมูลไปยัง API endpoints เพื่อสร้าง อัปเดต หรือค้นหาข้อมูลตามเงื่อนไขที่ซับซ้อน
สำหรับการทำงานที่ต้องการการยืนยันตัวตนกับ APIs คุณควรใช้พารามิเตอร์ ApiKeyName แทนการฝัง API key ลงใน M code โดยตรง เพื่อความปลอดภัยและป้องกันการเปิดเผยข้อมูลสำคัญ ค่าของ API key จริงๆ จะถูกจัดเก็บอย่างปลอดภัยใน Power Query credentials และระบบจะแทรกเข้าไปใน request อัตโนมัติโดยไม่แสดงในโค้ด M formula ที่เขียน วิธีการนี้ช่วยให้คุณสามารถแชร์โค้ดหรือเผยแพร่รายงานไปยัง Power BI Service ได้อย่างปลอดภัยโดยไม่ต้องกังวลเรื่องการรั่วไหลของข้อมูล credentials
การใช้พารามิเตอร์ RelativePath และ Query parameters ช่วยให้คุณสามารถสร้าง dynamic URLs ได้อย่างถูกต้องและมีประสิทธิภาพ โดย Power Query จะทำการ URL encoding ให้อัตโนมัติและยังสามารถจดจำได้ว่า base URL ใดเป็น data source เดียวกัน ซึ่งจะช่วยให้ระบบ refresh behavior ทำงานได้ดีและราบรื่นใน Power BI Service โดยไม่ต้องตั้งค่า credentials ซ้ำสำหรับทุก URL ที่เกิดจากการสร้างแบบไดนามิก วิธีการนี้ดีกว่าการใช้ text concatenation มากเพราะช่วยให้ระบบสามารถทำ scheduled refresh ได้อย่างถูกต้อง
Web.Contents มักจะถูกใช้งานร่วมกับฟังก์ชันอื่นๆ ในหลายรูปแบบ เช่น Json.Document สำหรับแปลงข้อมูล JSON response ให้เป็น record หรือ table structure, Json.FromValue สำหรับแปลง M record เป็น JSON binary เพื่อส่งเป็น POST request payload, Web.Page สำหรับการแยกวิเคราะห์เนื้อหา HTML content และแปลงเป็น tables, และ Binary.Buffer สำหรับ cache ผลลัพธ์ไว้ใน memory เพื่อลดการดาวน์โหลดซ้ำ นอกจากนี้ยังสามารถใช้ร่วมกับ Table.FromRecords และ Table.FromList สำหรับแปลง JSON arrays เป็น Power Query tables, Table.FromColumns สำหรับจัดรูปแบบข้อมูลในรูปแบบที่ต้องการ, Number.ToText สำหรับแปลงตัวเลขเป็น text เพื่อใช้ใน query parameters, Splitter.SplitByNothing สำหรับการแยกข้อมูล list, AccessControlEntry.ConditionToIdentities และ AdoDotNet.DataSource สำหรับการเชื่อมต่อข้อมูลที่ต้องการการยืนยันตัวตนอย่างปลอดภัย
ใช้ Web.Contents ดาวน์โหลดไฟล์ CSV, JSON, XML หรือ Excel จาก web URL แล้วนำมาประมวลผลด้วย Table functions, Json.Document หรือ Xml.Document
ดึงข้อมูลจาก REST API endpoints โดยใช้ Query parameters สำหรับ filtering และ pagination ร่วมกับ Json.Document เพื่อแปลง JSON response เป็น table structure
ใช้ Content parameter ส่ง JSON payload ไปยัง API endpoint เพื่อ create, update หรือ query ข้อมูลแบบ complex โดยใช้ Headers สำหรับ authentication และ content type
ใช้ ApiKeyName parameter สำหรับ authenticate กับ APIs ที่ต้องการ API key โดยเก็บ key ใน Power Query credentials แทนการฝังใน M code เพื่อความปลอดภัยและให้ refresh ทำงานได้ใน Power BI Service
สร้าง dynamic API endpoints โดยใช้ RelativePath และ Query parameters เพื่อให้ Power Query รู้จัก base URL และทำ refresh ได้อัตโนมัติ เหมาะสำหรับ APIs ที่มี resource IDs หรือ date ranges ที่เปลี่ยนแปลง
ดาวน์โหลด JSON file จาก URL และแปลงเป็น M record/list ด้วย Json.Document
นี่คือรูปแบบพื้นฐานที่สุดของการใช้ Web.Contents สำหรับดึงข้อมูล JSON โดยไม่มี authentication หรือ parameters พิเศษ
ใช้ Query parameter ใน options record เพื่อสร้าง URL query string แบบ dynamic โดยไม่ต้องทำ text concatenation ด้วยตัวเอง
Power Query จะทำ URL encoding ให้อัตโนมัติ และรู้จักว่า base URL เป็น data source เดียวกัน ซึ่งช่วยให้ refresh ทำงานได้ดีใน Power BI Service 💡
ส่ง HTTP headers พร้อม request เพื่อ authenticate กับ API โดยใช้ Bearer token ใน Authorization header และระบุ Content-Type และ Accept headers
หมายเหตุ: ใน production ควรใช้ ApiKeyName หรือเก็บ token ใน credentials แทนการฝังใน M code โดยตรงนะครับ
ใช้ RelativePath เพื่อสร้าง dynamic endpoint path ที่เปลี่ยนแปลงตาม ResourceType และ ResourceId โดยที่ Power Query ยังคงรู้จัก BaseUrl เป็น data source เดียวกัน
วิธีนี้ดีกว่าการทำ text concatenation เพราะช่วยให้ refresh behavior ทำงานได้ถูกต้องใน scheduled refresh และ Power BI Service ครับ 😎
ส่ง POST request โดยใช้ Content parameter ที่มี JSON payload ที่สร้างจาก record ด้วย Json.FromValue
เมื่อระบุ Content จะเปลี่ยน HTTP method จาก GET เป็น POST อัตโนมัติ เหมาะสำหรับ APIs ที่ต้องการ complex query criteria หรือต้องการส่งข้อมูลจำนวนมากผ่าน request body แทนการใช้ query string
ใช้ ApiKeyName parameter เพื่อระบุชื่อของ API key parameter (เช่น "api_key", "apikey", "token") โดยไม่ต้องใส่ค่าจริงใน M code
ค่า API key จริงจะถูกดึงจาก Power Query credentials (Web API authentication) และแทรกเข้าไปใน URL อัตโนมัติ วิธีนี้ปลอดภัยกว่าการฝัง API key ใน M code และทำให้ refresh ทำงานได้ใน Power BI Service ครับ
ตั้งค่า Timeout เป็น 10 นาที (แทน default 100 วินาที) สำหรับ API endpoints ที่ response ช้า
ใช้ IsRetry = true เพื่อบังคับให้ดึงข้อมูลใหม่และไม่ใช้ cached response เหมาะสำหรับ testing หรือเมื่อต้องการ fresh data ทุกครั้ง และใช้ Binary.Buffer เพื่อ cache ผลลัพธ์ใน memory หลังจากดาวน์โหลดแล้ว
Web.Contents คืนค่า binary data จาก URL เหมาะสำหรับดึงไฟล์ JSON, CSV, XML หรือเรียก REST APIs ส่วน Web.Page ใช้สำหรับ parse HTML content และแปลงเป็น tables จาก HTML tables ใน webpage
ถ้าต้องการดึงข้อมูลจาก API ใช้ Web.Contents ร่วมกับ Json.Document แต่ถ้าต้องการ scrape ข้อมูลจาก HTML tables ใช้ Web.Page ครับ
สาเหตุหลักคือ Power BI Service มองว่า URL ที่ต่างกันเป็นคนละ data source เมื่อใช้ text concatenation สร้าง dynamic URLs
แนะนำให้ใช้ RelativePath และ Query parameters แทนการทำ & "?param=" & value เพื่อให้ Power Query รู้จัก base URL เป็น data source เดียวกัน นอกจากนี้ต้องแน่ใจว่า credentials ถูกตั้งค่าใน Power BI Service สำหรับ base URL นั้นนะครับ
ใช้ ApiKeyName parameter แทนการฝัง API key ใน M code โดยระบุเฉพาะชื่อ parameter (เช่น "api_key") แล้วตั้งค่า Web API credentials ใน Power Query โดยใส่ URL และ API key value
ค่าจริงจะถูกแทรกเข้าไปใน request อัตโนมัติโดยไม่แสดงใน M formula วิธีนี้ปลอดภัยและทำให้ publish ไปยัง Power BI Service ได้โดยไม่เปิดเผย credentials ครับ 😎
ระบุ Content parameter ใน options record จะเปลี่ยน HTTP method จาก GET เป็น POST อัตโนมัติ
โดยทั่วไปจะใช้ Json.FromValue() แปลง M record เป็น JSON binary แล้วส่งเป็น Content พร้อมตั้งค่า Headers = [#"Content-Type" = "application/json"] สำหรับบอก server ว่าเป็น JSON payload หมายเหตุ: POST requests ใน Power Query จำเป็นต้องใช้ anonymous authentication ครับ
Web.Contents เองไม่รองรับ query folding เพราะเป็นการดาวน์โหลดข้อมูลจาก web endpoint ที่ไม่มี query engine
แต่ถ้า API รองรับ server-side filtering/pagination คุณสามารถใช้ Query parameters หรือ RelativePath เพื่อส่ง filters ไปให้ API ทำงานฝั่ง server ซึ่งให้ผลลัพธ์คล้าย query folding โดยลด data transfer และเพิ่มความเร็วครับ
RelativePath ช่วยให้ Power Query รู้จัก base URL และ dynamic parts แยกจากกัน
เมื่อใช้ text concatenation เช่น BaseUrl & "/customers/" & ID จะทำให้แต่ละ URL ถูกมองเป็นคนละ data source ทำให้ refresh ใน Power BI Service ล้มเหลวหรือต้องตั้งค่า credentials หลายครั้ง ส่วน RelativePath จะทำให้ Power Query รู้ว่าทุก endpoint ใช้ credentials เดียวกันจาก base URL ครับ
ใช้ ManualStatusHandling parameter เพื่อระบุ HTTP status codes ที่ต้องการจัดการเอง เช่น [ManualStatusHandling = {404, 500}] จะทำให้ Power Query ไม่ throw error เมื่อเจอ status code เหล่านี้
แล้วใช้ try…otherwise เพื่อ handle errors และคืนค่า default หรือใช้ Web.Contents(…)[Response][StatusCode] เพื่อตรวจสอบ status code แล้วทำ conditional logic ตามต้องการครับ
Binary.Buffer(Web.Contents(url)) จะ cache binary response ใน memory หลังจากดาวน์โหลดครั้งแรก
ถ้ามีการอ้างอิง result หลายครั้งใน query จะไม่ต้องดาวน์โหลดซ้ำ เหมาะสำหรับ API responses ขนาดใหญ่ที่ใช้ในหลาย steps หรือเมื่อต้องการลด API calls แต่ระวังการใช้ memory มากเกินไปถ้าไฟล์ใหญ่มากนะครับ 😅
ฟังก์ชันที่ผู้เขียนโยงไว้กับ Web.Contents จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
AccessControlEntry.ConditionToIdentities แปลงเงื่อนไขการควบคุมการเข้าถึงไปเป็นรายการตัวตนที่ตรงกัน
AzureStorage.DataLake ดึงข้อมูลจากเสถียร Azure Data Lake Storage (ADLS) โดยส่งคืนตารางนำทางของไฟล์ในระบบไฟล์
Csv.Document แปลงข้อมูลรูปแบบ CSV (Comma-Separated Values) ให้เป็นตารางข้อมูล (table) ใน Power Query โดยรองรับการกำหนดตัวแบ่งข้อมูล (delimiter), รหัสภาษา (encoding) และโครงสร้างคอลัมน์ (column structure) แบบต่างๆ ได้ตามความต้องการ function นี้สามารถแยกวิเคราะห์ทั้งข้อมูลแบบ binary content ที่ได้จาก File.Contents และข้อความแบบ text string ที่ได้จาก Web.Contents พร้อมจัดการข้อความที่ครอบด้วย quote ตามมาตรฐานสากล CSV standard เหมาะสมสำหรับการนำเข้าไฟล์ CSV จากระบบไฟล์ในเครื่อง (local), ที่อยู่เว็บไซต์ (URL) หรือการตอบกลับจาก API (API response) ที่มีตัวแบ่งข้อมูลแบบกำหนดเอง (custom delimiter), เนื้อหาภาษาต่างประเทศ หรือโครงสร้างพิเศษที่ต้องการการควบคุมเฉพาะ คืนค่าออกมาเป็นตารางที่ทุกคอลัมน์มีประเภทข้อมูลเป็นข้อความ (text type) ควรใช้ร่วมกับ Table.PromoteHeaders เพื่อยกแถวแรกขึ้นเป็นหัวตาราง และ Table.TransformColumnTypes เพื่อแปลงประเภทข้อมูลให้เหมาะสมกับการใช้งาน
Excel.Workbook อ่าน binary content ของไฟล์ Excel แล้วคืนค่าเป็น table ที่แต่ละ row แทนด้วย worksheet, named range หรือ Excel table โดยมี columns คือ Item (ชื่อ), Kind (ประเภท), Name (ชื่อเต็ม), Data (nested table ของข้อมูลจริง), และ Hidden (boolean) รองรับ useHeaders และ delayTypes เป็น parameters แต่ Microsoft แนะนำให้ใช้ Table.PromoteHeaders แทนเพื่อหลีกเลี่ยงปัญหา culture conversion นอกจากนี้ยังมี InferSheetDimensions option สำหรับแก้ปัญหา metadata ที่ผิดพลาด ใช้ร่วมกับ File.Contents หรือ Web.Contents สำหรับโหลดไฟล์
Json.Document ใช้สำหรับแปลง JSON text หรือ binary data ให้เป็น Power Query record ทำให้คุณสามารถเข้าถึง field แต่ละตัวได้อย่างง่ายดาย
MySQL.Database เป็นฟังก์ชันตัวเชื่อมต่อ (connector) ที่ใช้ส่งข้อมูลจากฐานข้อมูล MySQL ไปยัง Power Query ช่วยให้คุณสามารถโหลดตารางและมุมมองจากเซิร์ฟเวอร์ MySQL ได้
OData.Feed เชื่อมต่อบริการ OData และดึงข้อมูลจาก OData endpoints ซึ่งมักจะเป็น API ที่มีโครงสร้างมาตรฐาน
SharePoint.Tables เป็นฟังก์ชันสำหรับดึงข้อมูลทั้งหมดจาก SharePoint List มา Power Query โดยคืนค่าตารางที่มีแถวสำหรับแต่ละรายการใน List พร้อมกับจัดการการเชื่อมต่อและการรับรองตัวตนอัตโนมัติ
Web.Page ใช้สำหรับการประมวลผล
Binary.ToText แปลงข้อมูลไบนารี่เป็นข้อความโดยระบุวิธีการเข้ารหัส ใช้ได้ทั้ง Base64 และ Hex
Function.InvokeAfter เรียกใช้ฟังก์ชันหลังจากรอเวลาที่กำหนด นำไปใช้ในการควบคุมความเร็วเรียกข้อมูล API หรือเพิ่มความล่าช้าระหว่างการประมวลผล
WebMethod.Type เป็นชุดค่าคงที่สำหรับระบุ HTTP method (GET/POST/PUT/DELETE/PATCH/HEAD) โดยค่าพวกนี้จะถูกใช้ในบริบทของ Custom Connector เพื่อกำหนดว่า "คำขอ HTTP" ต้องการทำอะไรกับปลายทาง เช่น ดึงข้อมูล (GET) หรือส่งข้อมูล (POST)
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่