เทพเอ็กเซล ช่วย "ปลุกเทพ Excel ในตัวคุณ"
0
  • No products in the cart.
Power Query

4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query

function query

ในบทความนี้ผมจะมาแนะนำวิธีสร้าง Function Query ขึ้นใน Power Query ซึ่งไม่ใช่แบบปกติ แต่จะเป็นแบบที่ยังยอมให้เราแก้ไข Step ต่างๆ ใน Function นั้นได้โดยง่าย

แต่ถ้าใครยังไม่รู้ว่าผมพูดถึงเรื่องอะไร ลองอ่าน recap นี้ดูก่อนเล็กน้อย…

Recap

Power Query เป็นเครื่องมือสำหรับการดัดแปลงข้อมูลที่ทรงพลังและใช้ง่ายมากๆ อยากจะทำอะไรก็มีเมนูสำเร็จรูปเอาไว้ให้กดได้เลยโดยแทบไม่ต้องเขียนสูตร แต่ว่าหลายครั้งก็น่าเบื่อเวลาที่เราต้องทำ Step อะไรซ้ำๆ เหมือนเดิมกับหลายๆ Query จะดีกว่ามั้ยถ้าเราทำ Step พวกนั้นเป็นฟังก์ชันแล้วเรียกใช้ได้อย่างง่ายๆ เลย?

ในหนังสือ Excel Power Up! ที่ผมเขียนไว้ ในบทหลังๆ ก็มีเขียนวิธีที่ทำให้ Query กลายเป็นฟังก์ชันได้ง่ายๆ โดยเปิด Advanced Editor แล้วใส่คำว่า (input1, input2)=> นำหน้า code เดิม

ซึ่งมันจะเปลี่ยน Query นั้นให้กลายเป็นฟังก์ชันที่มี input 2 ตัวคือ input1 กับ input2 ทันที แต่ข้อเสียคือถ้าจะแก้ต้องมาแก้ใน Advanced Editor ไม่สามารถมี User Interface ง่ายๆ ให้แก้อีกแล้ว

ในบทความนี้ผมก็เลยจะมาแชร์วิธีสร้าง Function อีกวิธีนึงซึ่งยังสามารถทำให้เราแก้ไขได้ง่ายๆ โดยใช้ User Interface ได้อยู่ โดยที่ผมเห็นวิธีนี้ครั้งแรกมาจากคุณโบแห่ง Excel Wizard ที่ไปตอบในคลิปของ อ. Mike แห่ง Excel is fun

ผมเห็นว่ามันเป็นประโยชน์มาก เลยขออนุญาตนำเทคนิคนี้มาถ่ายทอดอีกที แต่มีการดัดแปลงเล็กน้อยให้เข้าใจง่ายขึ้น (ล่ะมั๊ง) นะครับ 555

วิธีใช้ Function Query แบบแก้ไขได้

หลักการมี 4 ขั้นตอน คือ

  1. สร้าง New Parameter ขึ้นมา โดยจะสร้างกี่ตัวก็ได้ สมมติชื่อ Para1, Para2
  2. เอา Parameter จากข้อ 1 ไปเรียกใช้ใน Query ที่ต้องการจะให้เป็นต้นแบบ (อันนี้ต้อง Manual แก้สูตรนิดนึง) สมมติชื่อ StepQuery ซึ่ง Function ของเราจะทำ Step ตาม Query ตัวนี้เลย
  3. สร้างฟังก์ชัน โดยกดคลิ๊กขวา ที่ StepQuery แล้ว Create Function แล้วตั้งชื่อฟังก์ชันอะไรก็ได้
  4. นำฟังก์ชันไปใช้งาน เช่นเอาไปใช้ใน Query หลัก อาจใช้ผ่าน Invoke Custom Function ก็ได้ง่ายดี

ซึ่งแบบที่เข้าใจง่ายที่สุดก็คือ Parameter ที่เป็นพวกค่าเดี่ยวๆ เช่น ตัวเลข หรือ ข้อความ เป็นต้น

ตัวอย่างของการใช้ Parameter แบบนี้แล้วมีประโยชน์มากก็คือ การดึงข้อมูลจากเว็บไซต์ต่างๆ โดยเปลี่ยน URL ไปเรื่อยๆ เช่น การดึงข้อมูลหุ้น เป็นต้น

ตัวอย่างการสร้าง Function ดึงข้อมูลหุ้นจาก symbol ที่ต้องการ

สมมติผมต้องการข้อมูลจากเว็บหน้านี้ https://www.set.or.th/set/companyhighlight.do?symbol=SCC

4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 1

ผมก็สามารถสั่ง Get Data From Web ได้ โดยเลือกว่าจะดูด table ในรูป

4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 2

ที่นี้มันจะดูดข้อมูลเข้า Power Query เฉพาะ Symbol นี้อันเดียว

ให้เปลี่ยนชื่อ Query เป็น StepQuery ซะ เพราะตารางนี้แหละที่เราจะใช้เป็นแม่เแบบของการ Transform Data ซึ่งเราจะ Transform ข้อมูลให้เสร็จไปเลยก็ได้ แต่ผมยังไม่ทำ เพราะไปทีหลังได้

1. สร้าง Parameter

ทีนี้ให้เราสร้าง Parameter ขึ้นมา โดยกด Manage Parameter แล้ว New แล้วตั้งชื่อว่า StockSymbol จากนั้นเลือก Type เป็น Text เพราะว่า Parameter นี้คือข้อความ จากนั้นใส่ Current Value เป็น SCC ไปก่อน เพื่อจะได้ดึงค่าจากหุ้น SCC ได้

4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 3

2.เอา Parameter ไปใช้ใน Step Query

กดตามรูป แล้วไปแก้สูตรของ Source ซะ ให้เปลี่ยนจากข้อความว่า SCC เป็น Parameter ที่ชื่อว่า StockSymbol แทน ซึ่งเชื่อมด้วยเครื่องหมาย &

= Web.Page(Web.Contents("https://www.set.or.th/set/companyhighlight.do?symbol="&StockSymbol))
4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 4

พอลองกดกลับมาดู Step หลังๆ ก็ควรจะต้องเห็นว่ายังใช้งานได้อยู่เหมือนเดิม

4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 5

3.สร้างฟังก์ชัน

จากนั้นคลิ๊กขวาที StepQuery แล้วกด Create Function

4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 6

จากนั้นตั้งชื่อตามใจชอบเช่น GetStockData แล้วกด ok

4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 7

มันจะสร้างฟังก์ชันแล้วผูก Query ให้เราโดยอัตโนมัติ

4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 8

4.นำฟังก์ชันไปใช้งาน

ทีนี้เราจะลองใช้งานเพื่อดูดหุ้นซัก 5-6 ตัว แต่เนื่องจากเรายังไม่มี List รายชื่อหุ้นเลย ดังนั้นเดี๋ยวไปสร้าง List รายชื่อหุ้นก่อน ซึ่งเราจะสร้างใน Excel ไฟล์นี้แหละ

ดังนั้นก่อนอื่นให้เรา Close & Load To… -> Only Create Connection เพื่อออกไปยัง Excel ก่อน (ไม่งั้นมันไม่ให้ออกไปสร้าง)

ให้เราใส่ Data ลงไปตามต้องการ แล้วกดสร้าง Table ชื่อ StockList ซะ

4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 9

จากนั้นกด Get Data From Table/Range เพื่อเอาเข้า Power Query

จากนั้นกด Add Column -> Invoke Custom Function เพื่อเรียกใช้ฟังก์ชันที่เราสร้างขึ้นมา

4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 10

มันอาจจะมีขึ้นมาเตือนเรื่อง Data Privacy เพราะมีการดึงข้อมูลจาก Local ผสมกับจากแหล่งออนไลน์ ก็ให้กด Continue ไป

4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 11

จุดนี้ถ้าไม่คิดอะไรมาก ติ๊ก Ignore Privacy Level ก็ได้ (มันก็จะไม่แคร์เรื่องข้อมูลรั่วไหลอะไรเลย)

4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 12

จากนั้นมันก็จะดึงข้อมูล Symbol ทุกตัวออกมาเป็น Table ดังรูป เมื่อคลิ๊กแต่ละช่องที่เป็น Table เราก็จะเห็นไส้ในของ Table นั้น

4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 13

ถ้าเรากด Expand ที่มุมขวาบนของคอลัมน์ มันก็จะเอาทุก Table มา Append ต่อแถวกันโดยอัตโนมัติ โดยการ Append ก็จะยึดจากชื่อคอลัมน์ที่เป็นหัวตารางเป็นหลัก

แต่เนื่องจากหัวตารางไส้ในของเรายังไม่ ok ดังนั้นเราจะกลับไปแก้ StepQuery ให้เรียบร้อยก่อน

กลับไปแก้ StepQuery (เพราะเราข้ามมา)

4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 14

เอาล่ะ เรากดย้อนหลับมายัง StepQuery เพื่อจัดการตารางให้เรียบร้อยกัน

ก่อนอื่นจะ Filter เอาบรรทัดที่ไม่เกี่ยวข้องออก นั่นก็คือคอลัมน์แรกจะเอาตัวที่มีคำว่า “สำคัญ” ออกไปซะ

4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 15

ให้ Transpose ตารางลงมาก่อน

4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 16

แล้ว Use First Row as Header ซะ แต่จะลบ Step Change Type ออกเพื่อไม่ให้มันระบุชื่อหัวตารางในสูตร

4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 17

จากนั้นเราอยากใส่ลำดับปีเป็น Y-4, Y-3, Y-2, Y-1, Y-0 ดังนั้นจะกด Add Index Column ใหม่แบบ Custom

4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 18

จากนั้นจะได้เลขเรียง 4,3,2,1,0 ออกมา

แต่คราวนี้เราจะใส่คำว่า Y- ไว้ข้างหน้า ก็ไปที่ Transform -> Format-> Add Prefix

4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 19

ก็จะได้ผลลัพธ์ตามต้องการ

4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 20

กลับไปดูผลที่ Query หลัก (หลังจากแก้ StepQuery)

เมื่อกดกลับไปดูที่ StockList ซึ่งเป็น Query หลักของเรา จะเห็นว่าที่เราไปแก้ใน StepQuery นั้นได้สะท้อนออกมายัง Query หลักแล้ว

4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 21

คราวนี้เราก็ Expand ข้อมูลได้อย่างสบายใจแล้ว

4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 22

แค่นี้เราก็จะได้ข้อมูลจากทุก Symbol มารวมกันแล้วครับ

4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 23

ถ้าใครไม่อยากให้ตอน Expand มันระบุชื่อคอลัมน์ ก็สามารถทำตาม Tips ของบทความนี้ได้ เพื่อให้มันอ่านหัวคอลัมน์ใหม่ได้ตลอด

เช่น เราจะแก้สูตรเป็น

= Table.ExpandTableColumn(#"Invoked Custom Function", "GetStockData", List.Union(List.Transform(#"Invoked Custom Function"[GetStockData],each Table.ColumnNames(_))))

ผลลัพธ์ที่ได้จะเหมือนเดิม แต่จะยืดหยุ่นขึ้นกรณีที่ในอนาคตอาจจะมี Field เพิ่มก็จะเห็นทันที

4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 24

ต่อจากนี้จะเปลี่ยน Datatype ตัวไหนยังไงก็แล้วแต่เลยครับ ผมขอไม่ทำให้ดูแล้วนะ ^^

ตอนต่อไปคืออะไร?

ในบทความตอนถัดไป จะเป็นวิธีสร้างฟังก์ชันคล้ายๆ แบบบทความนี้ แต่สร้าง Parameter เป็น Any แทนที่จะเป็น Parameter แค่ Text ธรรมดา เพื่อให้ดึงข้อมูลจาก Table ที่ต้องการได้ ซึ่งจะยากขึ้นอีกเล็กน้อยครับ

ซึ่งแบบหลังนี้แหละที่คุณโบ Excel Wizard ทำให้ดูในคลิป Excel is fun แต่ถ้าให้ผมอธิบายวิธีนั้นเลย น่าจะงงแน่นอน เลยต้องสอนแบบง่ายก่อนนะ

แล้วพบกันในตอนต่อไปครับ รับรองว่าเจ๋งมากๆ อีกแล้ววว

แชร์ความรู้ให้เพื่อนๆ ของคุณ
  • 619
  •  
  •  
  •  
  •  
  • 619
  •  
  •  
  •  
  •  
Sira Ekabut
the authorSira Ekabut
• Microsoft Office Specialist : Excel ระดับ Expert • ก่อตั้งเว็บไซต์และ แฟนเพจเทพเอ็กเซล คนติดตาม 8 หมื่นคน+, คลิปวีดีโอ 1 ล้าน Views + • หนังสือ Best Seller คอมพิวเตอร์ : Excel Level Up! , จอมเวท เทพ Excel , Excel Power Up!วิทยากรใน SkillLane.com คอร์สออนไลน์ชั้นนำ / อบรม Excel ให้บริษัทชั้นนำ

Leave a Reply