Nota
Prístup na túto stránku vyžaduje autorizáciu. Môžete sa pokúsiť prihlásiť alebo zmeniť adresár.
Prístup na túto stránku vyžaduje autorizáciu. Môžete skúsiť zmeniť adresáre.
Syntax
Function.ScalarVector(scalarFunctionType as type, vectorFunction as function) as function
O
Vráti skalárnu funkciu typu scalarFunctionType, ktorá vyvoláva vectorFunction s jedným riadkom argumentov a vracia jej jeden výstup. Keď sa ale skalárna funkcia opakovane použije pre každý riadok tabuľky vstupov, napríklad v Table.AddColumn, namiesto toho sa vectorFunction použije pre všetky vstupy.
vectorFunction sa odovzdá tabuľke, ktorej stĺpce sa zhodujú v názve, a umiestni parametre scalarFunctionType. Každý riadok tejto tabuľky obsahuje argumenty pre jedno volanie skalárnej funkcie so stĺpcami zodpovedajúcimi parametrom scalarFunctionType.
vectorFunction musí vrátiť zoznam s rovnakou dĺžkou ako vstupná tabuľka, ktorej položka na každej pozícii musí byť rovnaký výsledok ako vyhodnotenie skalárnej funkcie vo vstupnom riadku na rovnakej pozícii.
Vstupná tabuľka má byť streamovaná, takže sa očakáva, že vectorFunction po vstupe streamuje svoj výstup, pričom bloky vstupných údajov takto spracuje po jednom. Funkcia vectorFunction nesmie vyčísliť vstupnú tabuľku viackrát.
Príklad č. 1
Vynásobte dva stĺpce vstupnej tabuľky spracovaním vstupov v dávkach po 100.
používania
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
výstupu
Table.FromRecords({
[a = 1, b = 2, Result = 2],
[a = 3, b = 4, Result = 12]
})
Príklad č. 2
Vypočítajte výsledky testov v dávkach po dvoch a vyplňte pole ID dávky, ktoré možno použiť na overenie, či dávkovanie funguje podľa očakávania.
používania
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
výstupu
#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}
}
)