การทําความเข้าใจฟังก์ชันของ Power Query M
ในภาษา สูตร Power Query M ฟังก์ชัน จะเป็นการแมปจากชุดของค่าอินพุตไปยังค่าเอาต์พุตเดียว ฟังก์ชันจะถูกเขียนโดยการตั้งชื่อพารามิเตอร์ฟังก์ชันก่อน จากนั้นจึงใส่นิพจน์เพื่อคํานวณผลลัพธ์ของฟังก์ชัน เนื้อความของฟังก์ชันจะต่อหลังสัญลักษณ์ไปเป็น (=>) อีกทางหนึ่งคือ สามารถรวมข้อมูลชนิดไว้บนพารามิเตอร์และค่าผลลัพธ์ของฟังก์ชัน มีการกําหนดและเรียกใช้ฟังก์ชันในเนื้อความของคําสั่ง let พารามิเตอร์และ/หรือค่าผลลัพธ์อาจเป็นทางอ้อมหรือทางอ้อม พารามิเตอร์ทางอ้อมและ/หรือค่าผลลัพธ์คือชนิด ใด ๆ พิมพ์ ใด ๆ คล้ายกับชนิดออบเจ็กต์ในภาษาอื่น ๆ ชนิดทั้งหมดใน M รับมาจากชนิด ใด ๆ
ฟังก์ชัน เป็นค่าเช่นเดียวกับค่าตัวเลขหรือข้อความ และสามารถรวมไว้ในบรรทัดเช่นเดียวกับนิพจน์อื่น ๆ ตัวอย่างต่อไปนี้แสดงฟังก์ชันที่เป็นค่าของตัวแปร เพิ่ม ซึ่งจากนั้นจะถูกเรียกใช้ หรือปฏิบัติการ จากตัวแปรอื่นๆ หลายตัว เมื่อมีการเรียกใช้ฟังก์ชัน ระบบจะระบุชุดของค่าซึ่งถูกแทนที่เชิงตรรกะสําหรับชุดค่าอินพุตที่จําเป็นภายในนิพจน์เนื้อความของฟังก์ชัน
ตัวอย่าง – พารามิเตอร์ทางชัดแจ้งและค่าผลลัพธ์
let
AddOne = (x as number) as number => x + 1,
//additional expression steps
CalcAddOne = AddOne(5)
in
CalcAddOne
ตัวอย่าง – พารามิเตอร์ทางอ้อมและค่าผลลัพธ์
let
Add = (x, y) => x + y,
AddResults =
[
OnePlusOne = Add(1, 1), // equals 2
OnePlusTwo = Add(1, 2) // equals 3
]
in
AddResults
ค้นหาองค์ประกอบแรกของรายการที่มีค่ามากกว่า 5 หรือ null ถ้าเป็นอย่างอื่น
let
FirstGreaterThan5 = (list) =>
let
GreaterThan5 = List.Select(list, (n) => n> 5),
First = List.First(GreaterThan5)
in
First,
Results =
[
Found = FirstGreaterThan5({3,7,9}), // equals 7
NotFound = FirstGreaterThan5({1,3,4}) // equals null
]
in
Results
สามารถใช้ฟังก์ชันซ้ําได้ เพื่ออ้างอิงฟังก์ชันซ้ํา ให้ระบุคํานําหน้าตัวระบุด้วย @
let
fact = (num) => if num = 0 then 1 else num * @fact (num-1)
in
fact(5) // equals 120
คําสําคัญแต่ละรายการ
คํา สําคัญแต่ละรายการ จะถูกใช้เพื่อสร้างฟังก์ชันอย่างง่ายได้อย่างง่ายดาย "each ..." เป็นน้ําตาลทรายไวยากรณ์สําหรับลายเซ็นของฟังก์ชันที่ใช้พารามิเตอร์ _ "(_) => ..."
แต่ละรายการจะมีประโยชน์เมื่อรวมกับตัวดําเนินการค้นหาซึ่งจะใช้ตามค่าเริ่มต้นเป็น _
ตัวอย่างเช่น [CustomerID] แต่ละรายการจะเหมือนกับ _[CustomerID] แต่ละรายการ ซึ่งเหมือนกับ (_) => _[CustomerID]
ตัวอย่าง – การใช้แต่ละรายการในตัวกรองแถวตาราง
Table.SelectRows(
Table.FromRecords({
[CustomerID = 1, Name = "Bob", Phone = "123-4567"],
[CustomerID = 2, Name = "Jim", Phone = "987-6543"] ,
[CustomerID = 3, Name = "Paul", Phone = "543-7890"] ,
[CustomerID = 4, Name = "Ringo", Phone = "232-1550"]
}),
each [CustomerID] = 2
)[Name]
// equals "Jim"