ภาพรวมของ Microsoft Power Fx ใน Power Platform

Power Fx เป็นภาษาสำหรับการพัฒนาแบบโลว์โค้ด (Low-Code) ที่จะถูกใช้ใน Microsoft Power Platform ทั้งหมด เป็นภาษาที่มีโครงสร้างทั่วไป มีการกำหนดประเภทข้อมูลอย่างชัดเจน (Strongly Typed) และใช้แนวคิดแบบประกาศ (Declarative) และเชิงฟังก์ชัน (Functional Programming)

Power Fx ใช้ข้อความที่อ่านเข้าใจง่าย ผู้ใช้สามารถเขียนโค้ดได้โดยตรงผ่านแถบสูตรใน Power Apps (คล้ายกับใน Excel) หรือใน Visual Studio Code ความเป็น “โลว์โค้ด” หมายถึงโครงสร้างที่กระชับและเรียบง่าย ทำให้ทั้งผู้เริ่มต้นและนักพัฒนามืออาชีพสามารถทำงานได้โดยไม่มีช่องว่างด้านการเรียนรู้

หมายเหตุ: Power Fx เป็นชื่อใหม่ของภาษาสูตรที่ใช้ใน Canvas Apps ของ Power Apps โดย Microsoft กำลังขยายการรองรับไปยังผลิตภัณฑ์อื่น ๆ ใน Power Platform และจะเปิดเป็น โอเพนซอร์ส (Open Source)

รูปที่ 1  ที่ปรากฏเป็นตัวอย่าง สูตรใน Excel  

  1. SUBSTITUTE(A1, ” “, “|”, LEN(A1) – LEN(SUBSTITUTE(A1, ” “, “”))): แทนที่ช่องว่างในข้อความในเซลล์ A1 ด้วย “|” โดยนับจำนวนช่องว่างทั้งหมดในข้อความ
  2. FIND(“|”, …): ค้นหาตำแหน่งของ “|” ที่ถูกแทนที่ในขั้นตอนก่อนหน้า
  3. LEN(A1) – FIND(“|”, …): คำนวณความยาวของข้อความในเซลล์ A1 ลบด้วยตำแหน่งของ “|”
  4. RIGHT(A1, …): ดึงข้อความจากด้านขวาของเซลล์ A1 ตามจำนวนตัวอักษรที่คำนวณได้ในขั้นตอนก่อนหน้า

ผลลัพธ์ที่ได้ในเซลล์ A2 คือ “you!”

รูปที่ 2 Power Fx formula bar ใน  Power Apps  ซึ่งเป็นสูตรเดียวกันกับ Excel ในรูปที่ 1

ใน Text Input เมื่อพิมพ์ข้อความ “Hello, World! It is great to meet you!” ปรากฏขึ้นทีละตัวอักษร ขณะเดียวกันใน Text Label ตัวอักษรของคำสุดท้ายจะปรากฏขึ้น และเมื่อข้อความทั้งหมดปรากฏใน Text Input คำว่า “you!” จะปรากฏใน Text Label เมื่อค่าใน Text Input เปลี่ยนไป  ที่ Text Label จะคำนวณสูตรใหม่โดยอัตโนมัติและแสดงค่าที่เปลี่ยนแปลง ไม่มีตัวจัดการ Event OnChange ที่นี่ ซึ่งเป็นเรื่องปกติในภาษาอื่นๆ

Power Fx มีหลักการทำงานแบบเดียวกับ Excel ตัวอย่างเช่น

  • คุณสามารถสร้างแอปได้ง่ายเหมือนการสร้างชีตใน Excel
  • ใช้ความรู้เดิมจาก Excel ในการเขียนสูตร
  • เมื่อแก้ไขสูตรหรือค่าตัวแปร ทุกอย่างจะอัปเดตทันทีแบบเรียลไทม์
  • ไม่มีโหมดคอมไพล์ (Compile) หรือรันโหมด (Run Mode) แบบเดิม ๆ
  • มีระบบ Incremental Compiler ที่คอยคอมไพล์โค้ดแบบต่อเนื่อง

Power Fx ใช้สูตรที่กระชับในการกำหนดตรรกะทางธุรกิจ โดยส่วนใหญ่สามารถเขียนได้ในบรรทัดเดียว แต่ยังคงยืดหยุ่นและควบคุมตรรกะที่ซับซ้อนได้ เป้าหมายคือทำให้ผู้ใช้เข้าใจแนวคิดน้อยที่สุด โดยอ้างอิงจากความรู้เดิมของ Excel

  • ตัวอย่างเช่น การดึง ชื่อพนักงาน ตามคำสั่งซื้อ สามารถใช้ Power Fx เขียนได้ง่าย ๆ เช่น Order.Employee.’First Name’
  • แนวคิดที่เพิ่มเข้ามาจาก Excel คือ “จุด” (.) เพื่อเข้าถึงข้อมูลในโครงสร้างลำดับชั้น ซึ่งหากใช้ JavaScript จะต้องเขียนโค้ดที่ซับซ้อนกว่า

รูปที่ 3 เปรียบเทียบการเขียน code ใน Power Fx  กับ  JavaScrip

โครงสร้างของ Power Fx (Declarative Structure) ซึ่งเป็น concept ของ Lowcode ทำให้ใช้งานได้ง่ายกว่า JavaScrip มีดังนี้

  1. Asynchronous:
    • การดำเนินการข้อมูลทั้งหมดใน Power Fx เป็นแบบอะซิงโครนัส ซึ่งหมายความว่าการดำเนินการจะเกิดขึ้นในพื้นหลังโดยไม่ต้องรอให้เสร็จสิ้นก่อนที่จะทำงานอื่น ผู้สร้างไม่จำเป็นต้องรู้หรือจัดการกับแนวคิดนี้
  2. Local and remote:
    • Power Fx ใช้ไวยากรณ์และฟังก์ชันเดียวกันสำหรับข้อมูลที่อยู่ในหน่วยความจำและข้อมูลที่อยู่ในฐานข้อมูลหรือบริการระยะไกล ผู้ใช้ไม่ต้องกังวลเกี่ยวกับความแตกต่างนี้ ระบบจะจัดการให้โดยอัตโนมัติ
  3. Relational data:
    • คำสั่งซื้อและลูกค้าเป็นสองตารางที่มีความสัมพันธ์กัน ผู้สร้างสามารถใช้การจุด (.) เพื่อเข้าถึงข้อมูลที่เกี่ยวข้องได้ง่ายๆ โดยไม่ต้องรู้เรื่องคีย์ต่างประเทศหรือการ Join ใน SQL
  4. Projection:
    • Power Fx จะดึงเฉพาะคอลัมน์ที่ใช้ในแอปเท่านั้น ไม่ดึงข้อมูลทั้งหมดเหมือน select * from table ใน SQL ซึ่งช่วยให้การทำงานมีประสิทธิภาพมากขึ้น
  5. Retrieve only what is needed:
    • ฟังก์ชัน LookUp จะดึงระเบียนเพียงหนึ่งระเบียนเท่านั้น หากมีการร้องขอระเบียนเพิ่มเติมโดยใช้ฟังก์ชัน Filter ระบบจะดึงข้อมูลทีละหน้า (ประมาณ 100 ระเบียนต่อหน้า) เพื่อให้การทำงานมีประสิทธิภาพ
  6. Runs only when needed:
    • สูตรจะคำนวณใหม่โดยอัตโนมัติเมื่อมีการเปลี่ยนแปลงที่เกี่ยวข้อง ผู้สร้างไม่ต้องเขียนโค้ดเพิ่มเติมเพื่อจัดการกับการเปลี่ยนแปลงนี้
  7. Excel syntax translation:
    • Power Fx ใช้ไวยากรณ์ที่คล้ายกับ Excel เช่น การใช้เครื่องหมายแอมเพอร์แซนด์ (&) สำหรับการเชื่อมสตริง ซึ่งทำให้ผู้ใช้ Excel สามารถเรียนรู้และใช้งานได้ง่ายขึ้น
  8. Display names and localization:
    • Power Fx ใช้ชื่อที่แสดง (display names) ที่เป็นมิตรกับผู้ใช้และสามารถแปลเป็นภาษาท้องถิ่นได้ ซึ่งช่วยให้ทีมที่มีหลายภาษาสามารถทำงานร่วมกันได้ง่ายขึ้น

ผู้ใช้ไม่จำเป็นต้องเขียน Power Fx เองทั้งหมด เพราะสามารถใช้ UI Builder ที่รองรับการตั้งค่าสี พื้นหลัง และพฤติกรรมของแอปแบบง่าย ๆ ได้ โดยค่าเหล่านี้จะถูกแปลงเป็นสูตร Power Fx อัตโนมัติ

รูปที่ 4 แสดงการเปลี่ยนสีพื้นหลังโดยไม่ต้องเขียน Code เอง

ตัวอย่างที่ซับซ้อนขึ้น: แกลเลอรีแสดงรายชื่อพนักงานจาก Dataverse ซึ่งมีมุมมอง (views) สำหรับข้อมูลตาราง เราสามารถเลือกมุมมองเหล่านี้และสูตรจะเปลี่ยนไปใช้ฟังก์ชัน Filter กับชื่อนี้ได้ โดยใช้เมนูดรอปดาวน์สองเมนูเพื่อเลือกตารางและมุมมองที่ถูกต้องโดยไม่ต้องแตะที่แถบสูตร

หากต้องการเพิ่มการจัดเรียง (sort) เราสามารถทำได้ในแถบสูตร แผงคุณสมบัติจะมีไอคอน fx และแนะนำให้แก้ไขในแถบสูตร หากเราทำสูตรให้เรียบง่ายขึ้นจนแผงคุณสมบัติสามารถอ่านและเขียนได้ ก็สามารถใช้งานได้อีกครั้ง

รูปที่ 5 แสดง Filter ผ่าน View โดยไม่ต้องเขียนสูตร Filter เอง

ผู้สร้างแบบ low-code บางครั้งสร้างสิ่งที่ต้องการความช่วยเหลือจากผู้เชี่ยวชาญหรือถูกดูแลและปรับปรุงโดยนักพัฒนามืออาชีพ นักพัฒนามืออาชีพยังชื่นชมว่าการพัฒนาแบบ low-code สามารถทำได้ง่ายกว่า เร็วกว่า และมีค่าใช้จ่ายน้อยกว่าการสร้างเครื่องมือระดับมืออาชีพ ไม่ใช่ทุกสถานการณ์ที่ต้องการพลังเต็มรูปแบบของ Visual Studio

นักพัฒนามืออาชีพต้องการใช้เครื่องมือระดับมืออาชีพเพื่อให้มีประสิทธิภาพสูงสุด สูตร Power Fx สามารถเก็บในไฟล์ YAML ซึ่งแก้ไขได้ง่ายด้วย Visual Studio Code, Visual Studio หรือโปรแกรมแก้ไขข้อความอื่นๆ และสามารถนำ Power Fx ไปอยู่ภายใต้การควบคุมเวอร์ชันด้วย GitHub, Azure DevOps หรือระบบควบคุมซอร์สโค้ดอื่นๆ

รูปที่ 6  Procode – การจัดการโค้ด Power Apps ด้วย YAML ใน VS Code

1. เรียบง่าย (Simple)
Power Fx ถูกออกแบบมาให้ใช้งานง่ายสำหรับคนที่ไม่ได้เป็นนักพัฒนามืออาชีพ แต่ยังสามารถตอบโจทย์นักพัฒนาด้วยการลดเวลาสร้างโซลูชัน

2. คงความคุ้นเคยกับ Excel (Excel Consistency)
Power Fx ได้รับแรงบันดาลใจจากสูตรใน Excel เพื่อให้ผู้ใช้ที่คุ้นเคยกับ Excel สามารถเรียนรู้ได้เร็วที่สุด หากไม่มีตัวอย่างจาก Excel ก็จะอ้างอิง SQL เป็นลำดับถัดไป

3. เชิงประกาศ (Declarative)
Power Fx เน้นให้ผู้ใช้ “บอกว่าต้องการอะไร” แทนที่จะต้อง “บอกว่าจะทำอย่างไร” ซึ่งช่วยให้ระบบสามารถปรับแต่งการทำงานให้มีประสิทธิภาพขึ้น เช่น การคำนวณแบบขนานและการโหลดข้อมูลล่วงหน้า

4. เชิงฟังก์ชัน (Functional)
Power Fx เน้นใช้ฟังก์ชันที่ไม่มีผลข้างเคียง (ไม่มีการเปลี่ยนแปลงค่าภายนอก) เพื่อให้อ่านและเข้าใจง่าย แต่ในบางกรณี เช่น การบันทึกข้อมูล ระบบจำเป็นต้องมีฟังก์ชันที่ส่งผลกระทบกับสถานะของแอป

5. องค์ประกอบที่นำมาใช้ซ้ำได้ (Composition)
Power Fx ออกแบบให้สามารถผสานการทำงานของฟังก์ชันต่างๆ ได้ง่าย เช่น คำสั่ง Sort() และ Filter() สามารถใช้ร่วมกันในคุณสมบัติ Items ของ Gallery โดยไม่ต้องตั้งค่าแยกกัน

6. ระบบชนิดข้อมูลที่ชัดเจน (Strongly Typed)
Power Fx รู้จักประเภทของค่าต่างๆ ตั้งแต่ตอนเขียนโค้ด ทำให้สามารถตรวจจับข้อผิดพลาดได้เร็วขึ้นและแนะนำคำสั่งอัตโนมัติได้

7. การอนุมานประเภทข้อมูล (Type Inference)
Power Fx กำหนดประเภทของค่าจากการใช้งานโดยไม่ต้องประกาศก่อน เช่น ถ้ากำหนดตัวแปรเป็นตัวเลข ระบบจะเข้าใจว่าตัวแปรนั้นเป็นตัวเลข

8. รองรับทศนิยมตามท้องถิ่น (Locale-Sensitive Decimal Separators)
Power Fx รองรับรูปแบบตัวเลขตามภูมิภาค เช่น

  • สหรัฐฯ ใช้จุด (.) เป็นทศนิยม และใช้จุลภาค (,) คั่นค่าต่างๆ   ->  3.14
  • ฝรั่งเศสใช้จุลภาค (,) เป็นทศนิยม และใช้เซมิโคลอน (;) คั่นค่าต่างๆ  ->  3,14
Author’s language decimal separatorPower Fx decimal separatorPower Fx list separatorPower Fx chaining operator
. (dot). (dot), (comma); (semicolon)
, (comma), (comma); (semicolon);; (double semicolon)

จากตารางด้านบน Power Fx ปรับรูปแบบการใช้ตัวคั่นให้เข้ากับรูปแบบที่ผู้ใช้ในแต่ละภูมิภาคคุ้นเคย ซึ่งช่วยให้ใช้งานได้สะดวกขึ้น โดยที่

  • หากใช้ จุด (.) เป็นทศนิยม → ใช้ , คั่นพารามิเตอร์ และ ; เชื่อมคำสั่ง
  • หากใช้ จุลภาค (,) เป็นทศนิยม → ใช้ ; คั่นพารามิเตอร์ และ ;; เชื่อมคำสั่ง

10. รองรับการขยาย (Extensible)
ผู้ใช้สามารถสร้างฟังก์ชันและคอมโพเนนต์ของตัวเองใน Power Fx และนักพัฒนาสามารถใช้ JavaScript เพื่อเพิ่มความสามารถเพิ่มเติม

11. เป็นมิตรกับนักพัฒนา (Developer Friendly)
แม้จะเป็นภาษาสำหรับผู้ใช้ทั่วไป แต่ก็ยังคำนึงถึงนักพัฒนา เช่น รองรับการเพิ่มคอมเมนต์ในโค้ด ซึ่ง Excel ไม่มี

12. รองรับการพัฒนาอย่างต่อเนื่อง (Language Evolution)
Power Fx สามารถพัฒนาและเปลี่ยนแปลงได้โดยที่โค้ดเก่ายังคงทำงานได้ ตัวอย่างเช่น ฟังก์ชัน ShowError() ถูกแทนที่ด้วย Notify() แต่แอปเก่าก็ยังสามารถทำงานต่อไปได้โดยอัตโนมัติ

13. ไม่มีค่าที่ไม่กำหนด (No Undefined Value)
Power Fx ไม่มีค่า undefined เหมือนใน JavaScript แต่จะใช้ค่าที่ว่างเปล่า (Blank) หรือเกิดข้อผิดพลาด (Error) แทน

จากบทความนี้ ได้กล่าวถึง Microsoft Power Fx ซึ่งเป็นภาษาสำหรับการพัฒนาแบบ Low-Code ที่ใช้ใน Power Platform โดยมีโครงสร้างที่คล้าย Excel และทำงานแบบ เรียลไทม์ (Always Live)

เนื้อหาครอบคลุมแนวคิดหลักของ Power Fx เช่น การทำงานแบบ Declarative, การจัดการข้อมูลแบบ Asynchronous, การรองรับ No-Code และ Pro-Code รวมถึง การขยายความสามารถผ่าน Open Source ซึ่งช่วยให้เข้าใจแนวทางของ Power Fx และวิธีนำไปใช้ในการพัฒนาแอปได้ง่ายขึ้น

แนะนำหลักสูตร

Microsoft 365 for End User Training
Microsoft SharePoint Online For Front-End
Microsoft Power Apps (Canvas App) Workshop
Microsoft Power Automate (Cloud)
Microsoft Copilot Studio (Former Power Virtual Agent)

สนใจสอบถามรายละเอียดเพิ่มเติม

Tel: 021198405

Line: @M365th

Email: Sales@m365.co.th

Reference : https://learn.microsoft.com/en-us/power-platform/power-fx/overview