Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Syntax
Function.ScalarVector(scalarFunctionType as type, vectorFunction as function) as function
About
Gibt eine skalare Funktion vom Typ scalarFunctionType zurück, die mit einer einzelnen Zeile mit Argumenten vectorFunction aufgerufen wird, und gibt die einzelne Ausgabe zurück. Wenn die skalare Funktion wiederholt auf jede Zeile einer Eingabetabelle angewendet wird, z. B. in Table.AddColumn, wird stattdessen vectorFunction einmal für alle Eingaben angewendet.
vectorFunction wird eine Tabelle übergeben, deren Spalten in Namen und Position den Parametern von scalarFunctionType entsprechen. Jede Zeile dieser Tabelle enthält die Argumente für einen Aufruf der Skalarfunktion mit den Spalten, die den Parametern entsprechen scalarFunctionType.
vectorFunction muss eine Liste derselben Länge wie die Eingabetabelle zurückgeben, deren Element an jeder Position dasselbe Ergebnis sein muss wie die Auswertung der Skalarfunktion in der Eingabezeile derselben Position.
Es wird erwartet, dass die Eingabetabelle gestreamt wird. Daher vectorFunction wird erwartet, dass die Ausgabe beim Eingang gestreamt wird und nur mit einem Teil der Eingabe gleichzeitig funktioniert. Insbesondere vectorFunction darf die Eingabetabelle nicht mehr als einmal durchlaufen.
Beispiel 1
Multiplizieren Sie zwei Spalten der Eingabetabelle, indem Sie die Eingaben in Batches von 100 verarbeiten.
Verwendung
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]
})
Beispiel 2
Berechnen Sie Testergebnisse in Zweiergruppen und füllen Sie ein Batch-ID-Feld aus, das verwendet werden kann, um zu überprüfen, ob die Batchverarbeitung wie erwartet funktioniert.
Verwendung
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}
}
)