Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Syntaxis
Function.ScalarVector(scalarFunctionType as type, vectorFunction as function) as function
Over
Retourneert een scalaire functie van het type scalarFunctionType die vectorFunction aanroept met één rij argumenten en retourneert de enkelvoudige uitvoer. Bovendien wordt, wanneer de scalaire functie herhaaldelijk wordt toegepast voor elke rij in een invoertabel, zoals in Table.AddColumn, vectorFunction daarentegen slechts eenmaal toegepast voor alle invoer.
vectorFunction wordt een tabel doorgegeven waarvan de kolommen qua naam en positie overeenkomen met de parameters van scalarFunctionType. Elke rij van deze tabel bevat de argumenten voor één aanroep van de scalaire functie, met de kolommen die overeenkomen met de parameters van scalarFunctionType.
vectorFunction moet een lijst met dezelfde lengte retourneren als de invoertabel, waarvan het item op elke positie hetzelfde resultaat moet hebben als het evalueren van de scalaire functie op de invoerrij van dezelfde positie.
De invoertabel wordt naar verwachting gestreamd, dus vectorFunction stroomt zijn uitvoer terwijl de invoer binnenkomt en werkt daarbij steeds met één deel invoer tegelijk. In het bijzonder mag vectorFunction de invoertabel niet meer dan één keer inventariseren.
Voorbeeld 1
Vermenigvuldig twee kolommen van de invoertabel door de invoer in batches van 100 te verwerken.
Gebruik
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
Uitvoer
Table.FromRecords({
[a = 1, b = 2, Result = 2],
[a = 3, b = 4, Result = 12]
})
Voorbeeld 2
Rekentestscores in groepjes van twee en vul een batch-ID-veld in dat kan worden gebruikt om te controleren of de batchverwerking naar verwachting werkt.
Gebruik
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
Uitvoer
#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}
}
)