Function.From ใช้เพื่อแปลงฟังก์ชันที่รับเฉพาะลิสต์เดียว (unary function) ให้กลายเป็นฟังก์ชันที่รับพารามิเตอร์แยกกัน
= Function.From(functionType as type, function as function) as function
= Function.From(functionType as type, function as function) as function
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| functionType | type | Yes | ประเภท (type) ของฟังก์ชันใหม่ที่ต้องการสร้าง กำหนดจำนวนพารามิเตอร์และประเภทของแต่ละตัว | |
| function | function | Yes | ฟังก์ชัน Unary (รับพารามิเตอร์เป็นลิสต์เดียว) ที่ต้องการแปลง |
let ConvertedSum = Function.From( type function (a as number, b as number) as number, List.Sum ), Result = ConvertedSum(5, 3) in Resultlet
ConvertedSum = Function.From(
type function (a as number, b as number) as number,
List.Sum
),
Result = ConvertedSum(5, 3)
in
Result
8
let ConcatenateList = (list as list) as text => Text.Combine( List.Transform(list, Text.From), "-" ), ConvertedConcat = Function.From( type function (a as text,…let
ConcatenateList = (list as list) as text =>
Text.Combine(
List.Transform(list, Text.From),
"-"
),
ConvertedConcat = Function.From(
type function (a as text, b as text, c as text) as text,
ConcatenateList
),
Result = ConvertedConcat("Hello", "World", "Power")
in
Result
"Hello-World-Power"
let FindMax = Function.From( type function (x as number, y as number, z as number) as number, List.Max ), Score1 = 78, Score2 = 92, Score3 = 85, HighestScore =…let
FindMax = Function.From(
type function (x as number, y as number, z as number) as number,
List.Max
),
Score1 = 78,
Score2 = 92,
Score3 = 85,
HighestScore = FindMax(Score1, Score2, Score3)
in
HighestScore
92
let CalculateAverage = Function.From( type function (score1 as number, score2 as number, score3 as number) as number, (list) => List.Sum(list) / List.Count(list…let
CalculateAverage = Function.From(
type function (score1 as number, score2 as number, score3 as number) as number,
(list) => List.Sum(list) / List.Count(list)
),
Result = CalculateAverage(85, 90, 88)
in
Result
87.66666666666667
Function.From ใช้เพื่อแปลงฟังก์ชัน Unary ให้กลายเป็นฟังก์ชันหลายพารามิเตอร์ ส่วน Function.Invoke ใช้เพื่อเรียกใช้ฟังก์ชันที่มีพารามิเตอร์เป็นลิสต์
สถานการณ์ที่ Function.Invoke มีประโยชน์คือเมื่อคุณต้องการสร้าง wrapper หรือปรับแต่งวิธีการรับพารามิเตอร์ของ unary function เพื่อให้ใช้งานได้สะดวกขึ้น
บางครั้ง unary function ในตัวของ Power Query ไม่สามารถเปลี่ยนแปลงได้ Function.From ช่วยให้คุณสร้าง interface ใหม่ที่เหมาะกับความต้องการของคุณได้
Function.From(functionType, function) ใช้ในสถานการณ์ที่คุณต้องการปรับแต่งฟังก์ชัน Unary (ฟังก์ชันที่รับพารามิเตอร์เป็นลิสต์เดียว) ให้กลายเป็นฟังก์ชันที่รับพารามิเตอร์แยกกันหลาย ตัว โดยฟังก์ชันนี้จะสร้างลิสต์จากพารามิเตอร์ที่ส่งมาแล้วส่งต่อให้กับฟังก์ชันต้นฉบับ
วิธีทำงานคือ Function.From จะรับพารามิเตอร์สองตัว:
1. functionType – กำหนดประเภทและลายเซ็นของฟังก์ชันใหม่ (จำนวนพารามิเตอร์และประเภทของแต่ละตัว)
2. function – ฟังก์ชันต้นฉบับที่รับเฉพาะลิสต์เดียว
ที่เจ๋งคือ Function.From ช่วยให้คุณสามารถใช้ฟังก์ชัน Unary เหล่านี้ได้เสมือนว่าเป็นฟังก์ชันปกติที่รับพารามิเตอร์แยก ทำให้โค้ดอ่านง่ายขึ้น ตัวอย่างเช่น List.Sum ในตัวมันเองต้องการลิสต์ แต่ Function.From ช่วยให้คุณใช้ได้เสมือนว่า Sum(a, b) แบบปกติ
ส่วนตัวผม ใช้ Function.From ตอนที่ต้องการสร้าง wrapper function หรือต้องการปรับแต่งวิธีการรับพารามิเตอร์ของฟังก์ชัน แต่สำหรับการใช้งานทั่วไปมักไม่ค่อยจำเป็นครับ 😎