Bemærk
Adgang til denne side kræver godkendelse. Du kan prøve at logge på eller ændre mapper.
Adgang til denne side kræver godkendelse. Du kan prøve at ændre mapper.
Syntaks
Function.ScalarVector(scalarFunctionType as type, vectorFunction as function) as function
Omtrent
Returnerer en skalarfunktion af typen scalarFunctionType, der aktiverer vectorFunction med en enkelt række argumenter og returnerer dets enkelt output. Når skalarfunktionen anvendes gentagne gange for hver række i en tabel med input, f.eks. i Table.AddColumn, anvendes vectorFunction desuden én gang for alle input.
vectorFunction overføres en tabel, hvis kolonner stemmer overens med navnet og placeringen af parametrene for scalarFunctionType. Hver række i denne tabel indeholder argumenterne for ét kald til skalarfunktionen, hvor kolonnerne svarer til parametrene for scalarFunctionType.
vectorFunction skal returnere en liste med samme længde som inputtabellen, hvis element på hver position skal være det samme resultat som evalueringen af skalarfunktionen på inputrækken for den samme position.
Inputtabellen forventes at blive streamet, så vectorFunction forventes at streame outputtet, efterhånden som inputtet kommer ind, og fungerer kun med ét inputsegment ad gangen.
vectorFunction må især ikke optælle inputtabellen mere end én gang.
Eksempel 1
Multiplicer to kolonner i inputtabellen ved at behandle inputtene i batches på 100.
brug
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
output
Table.FromRecords({
[a = 1, b = 2, Result = 2],
[a = 3, b = 4, Result = 12]
})
Eksempel 2
Beregn testresultater i batches på to, og udfyld et batch-id-felt, der kan bruges til at kontrollere, at batching fungerer som forventet.
brug
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
output
#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}
}
)