List.FindText ค้นหาสมาชิกในรายการที่มีข้อความย่อยที่กำหนด เหมาะเมื่อต้องการกรองข้อมูลไม่ใช่แค่ตรงแม่นทั้งคำ แต่ต้องการค้นหาแบบบางส่วนก็ได้
=List.FindText(list as list, text as text) as list
=List.FindText(list as list, text as text) as list
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| list | list | Yes | List ที่ต้องการค้นหา (ต้องเป็นรายการข้อความ) | |
| text | text | Yes | ข้อความย่อย (Substring) ที่ต้องการค้นหา |
ค้นหารายการสินค้าที่มีคำว่า "Samsung" หรือ "iPhone" อยู่ในชื่อสินค้า
เลือกเฉพาะบรรทัดใน Log File ที่มีคำว่า "Error" หรือ "Warning" เพื่อตรวจสอบปัญหา
List.FindText({"apple", "banana", "cherry"}, "a")=List.FindText({"apple", "banana", "cherry"}, "a")
{"apple", "banana"}
List.FindText({"Power Query", "Query Language", "SQL"}, "Query")=List.FindText({"Power Query", "Query Language", "SQL"}, "Query")
{"Power Query", "Query Language"}
List.FindText({"Product-001", "Product-002", "Order-001", "Order-002"}, "Product")=List.FindText({"Product-001", "Product-002", "Order-001", "Order-002"}, "Product")
{"Product-001", "Product-002"}
let Data = Table.FromRecords({{Name="Alice Smith", Age=25}, {Name="Bob Johnson", Age=30}, {Name="Alice Brown", Age=28}}), FilterList = List.FindText(Data[Name],…let
Data = Table.FromRecords({{Name="Alice Smith", Age=25}, {Name="Bob Johnson", Age=30}, {Name="Alice Brown", Age=28}}),
FilterList = List.FindText(Data[Name], "Alice"),
Result = Table.SelectRows(Data, each List.Contains(FilterList, [Name]))
in
Result
ตารางที่มีแค่ Alice Smith และ Alice Brown
เป็น Case Sensitive ครับ ผม test ดูแล้ว List.FindText({“Apple”, “apple”}, “apple”) จะได้แค่ {“apple”} ไม่จับ “Apple” ถ้าต้องไม่สนใจตัวพิมพ์ใหญ่/เล็ก ต้องใช้ Text.Lower กับทั้ง List และ Text
ผมชี้แจงนะ – List.Contains เป็นการหา Exact Match พอดีๆ (หรือเกือบพอดี) ส่วน List.FindText เป็นการหา Substring Match (ค้นหาข้อความย่อยภายใน) ดังนั้น List.FindText ยืดหยุ่นกว่า
ถ้า List ว่าง จะได้ List ว่าง ถ้า Text ว่าง ผมเดาว่าจะได้ List เต็มทั้งหมด (เพราะทุกข้อความมี Empty String อยู่) ลองเองดีที่สุด
List.FindText เป็นฟังก์ชันสำหรับค้นหาเนื้อหาข้อความภายในสมาชิกของ List โดยมันจะตรวจสอบทีละสมาชิก แล้วคืนค่า List ใหม่ที่มีเฉพาะสมาชิกที่ ‘มี’ ข้อความที่ค้นหาอยู่ภายใน (Substring matching) ไม่ใช่แค่ Match ทั้งคำ
ที่เจ๋งคือ มันทำให้ผมค้นหาได้ยืดหยุ่นมาก เช่นค้นหา ‘cat’ ในรายชื่อสัตว์ก็จะจับ ‘cat’, ‘catfish’, ‘concatenate’ ไปหมด ไม่ต้องเขียน Complex Formula
ส่วนตัวผม ผมใช้กับ Table.SelectRows เพื่อกรองข้อมูลจากตารางใหญ่ พอมีเงื่อนไขค้นหาข้อความแล้ว มันเร็วและชัดเจนมาก 😎