หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
วากยสัมพันธ์
Function.ScalarVector(scalarFunctionType as type, vectorFunction as function) as function
ประมาณ
แสดงฟังก์ชันสเกลาของชนิด scalarFunctionType ที่เรียกใช้ vectorFunction กับแถวเดียวของอาร์กิวเมนต์ และแสดงผลลัพธ์เดียว นอกจากนี้ เมื่อมีการใช้ฟังก์ชันสเกลาซ้ําสําหรับแต่ละแถวของตารางของอินพุต เช่น ใน Table.AddColumnvectorFunction จะถูกนําไปใช้ครั้งเดียวสําหรับอินพุตทั้งหมด
vectorFunction จะถูกส่งผ่านไปยังตารางที่มีชื่อคอลัมน์ตรงกัน และจัดตําแหน่งพารามิเตอร์ของ scalarFunctionType แต่ละแถวของตารางนี้มีอาร์กิวเมนต์สําหรับการเรียกฟังก์ชันสเกลาร์หนึ่งครั้ง โดยมีคอลัมน์ที่สอดคล้องกับพารามิเตอร์ของ scalarFunctionType
vectorFunction ต้องส่งกลับรายการความยาวเดียวกันกับตารางอินพุต ซึ่งมีหน่วยข้อมูลในแต่ละตําแหน่งต้องเป็นผลลัพธ์เดียวกับการประเมินฟังก์ชันสเกลาบนแถวอินพุตของตําแหน่งเดียวกัน
คาดว่าตารางอินพุตจะสตรีมดังนั้น vectorFunction คาดว่าจะสตรีมเอาต์พุตเป็นอินพุตที่เข้ามา ทํางานกับอินพุตครั้งละหนึ่งกลุ่มเท่านั้น โดยเฉพาะอย่างยิ่ง vectorFunction ต้องไม่ระบุตารางอินพุตมากกว่าหนึ่งครั้ง
ตัวอย่างที่ 1
คูณสองคอลัมน์ของตารางอินพุตโดยการประมวลผลอินพุตเป็นชุด 100
การใช้งาน
let
Compute.ScoreScalar = (left, right) => left * right,
// When Function.ScalarVector batching kicks in, we'll receive all
// of the inputs for the entire table here at once.
Compute.ScoreVector = (input) => let
chunks = Table.Split(input, 100),
scoreChunk = (chunk) => Table.TransformRows(chunk, each Compute.ScoreScalar([left], [right]))
in
List.Combine(List.Transform(chunks, scoreChunk)),
Compute.Score = Function.ScalarVector(
type function (left as number, right as number) as number,
Compute.ScoreVector
),
Final = Table.AddColumn(
Table.FromRecords({
[a = 1, b = 2],
[a = 3, b = 4]
}),
"Result",
each Compute.Score([a], [b])
)
in
Final
ผลลัพธ์ของ
Table.FromRecords({
[a = 1, b = 2, Result = 2],
[a = 3, b = 4, Result = 12]
})
ตัวอย่างที่ 2
คํานวณคะแนนการทดสอบในชุดงานสองชุด และเติมข้อมูลฟิลด์รหัสชุดงานที่สามารถใช้เพื่อตรวจสอบว่าชุดงานทํางานตามที่คาดไว้
การใช้งาน
let
_GradeTest = (right, total) => Number.Round(right / total, 2),
_GradeTests = (inputs as table) as list => let
batches = Table.Split(inputs, 2),
gradeBatch = (batch as table) as list =>
let
batchId = Text.NewGuid()
in
Table.TransformRows(batch, each [Grade = _GradeTest([right], [total]), BatchId = batchId])
in
List.Combine(List.Transform(batches, gradeBatch)),
GradeTest = Function.ScalarVector(type function (right as number, total as number) as number, _GradeTests),
Tests = #table(type table [Test Name = text, Right = number, Total = number],
{
{"Quiz 1", 3, 4},
{"Test 1", 17, 22},
{"Quiz 2", 10, 10}
}),
// To break batching, replace [Right] with {[Right]}{0}.
TestsWithGrades = Table.AddColumn(Tests, "Grade Info", each GradeTest([Right], [Total]), type record),
// To verify batching, also expand BatchId.
Final = Table.ExpandRecordColumn(TestsWithGrades, "Grade Info", {"Grade"})
in
Final
ผลลัพธ์ของ
#table(
type table [Test Name = text, Right = number, Total = number, Grade = number],
{
{"Quiz 1", 3, 4, 0.75},
{"Test 1", 17, 22, 0.77},
{"Quiz 2", 10, 10, 1}
}
)