Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Sintaksis
Function.ScalarVector(scalarFunctionType as type, vectorFunction as function) as function
Tentang
Mengembalikan fungsi skalar jenis scalarFunctionType yang memanggil vectorFunction dengan satu baris argumen dan mengembalikan output tunggalnya. Selain itu, ketika fungsi skalar berulang kali diterapkan untuk setiap baris tabel input, seperti di Table.AddColumn, sebagai gantinya vectorFunction akan diterapkan sekali untuk semua input.
vectorFunction akan diteruskan tabel yang kolomnya sesuai dengan nama dan posisi parameter scalarFunctionType. Setiap baris tabel ini berisi argumen untuk satu panggilan ke fungsi skalar, dengan kolom yang sesuai dengan parameter scalarFunctionType.
vectorFunction harus mengembalikan daftar yang panjangnya sama dengan tabel input, di mana item di setiap posisinya harus merupakan hasil yang sama setelah mengevaluasi fungsi skalar pada baris input di posisi yang sama.
Tabel input diharapkan untuk dialirkan, sehingga vectorFunction diharapkan mengalirkan outputnya seiring input masuk, hanya bekerja dengan satu bagian input pada satu waktu. Secara khusus, vectorFunction tidak boleh menghitung tabel inputnya lebih dari sekali.
Contoh 1
Kalikan dua kolom tabel input dengan memproses input dalam batch 100.
Penggunaan
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
Hasil
Table.FromRecords({
[a = 1, b = 2, Result = 2],
[a = 3, b = 4, Result = 12]
})
Contoh 2
Menghitung skor pengujian dalam batch dua, dan mengisi bidang ID batch yang dapat digunakan untuk memverifikasi bahwa batching berfungsi seperti yang diharapkan.
Penggunaan
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
Hasil
#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}
}
)