Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Syntaxe
Function.ScalarVector(scalarFunctionType as type, vectorFunction as function) as function
O nás
Vrátí skalární funkci typu scalarFunctionType, která vyvolá vectorFunction s jedním řádkem argumentů a vrátí její jediný výstup. Navíc, pokud skalární funkce je opakovaně použita pro každý řádek tabulky vstupů, například v Table.AddColumn, místo toho vectorFunction se použije jednou pro všechny vstupy.
vectorFunction se předá tabulka, jejíž sloupce odpovídají názvem a umístěním parametrům scalarFunctionType. Každý řádek této tabulky obsahuje argumenty pro jedno volání skalární funkce se sloupci odpovídajícími parametrům scalarFunctionType.
vectorFunction musí vrátit seznam se stejnou délkou jako vstupní tabulka, jejíž položka na každé pozici musí být stejný výsledek jako vyhodnocení skalární funkce na vstupním řádku stejné pozice.
Očekává se, že se vstupní tabulka streamuje, takže se očekává, že vectorFunction streamuje svůj výstup jako vstup, přičemž současně pracuje jenom s jedním blokem vstupu. Zejména vectorFunction nesmí vytvořit výčet vstupní tabulky více než jednou.
Příklad 1
Vynásobte dva sloupce vstupní tabulky zpracováním vstupů v dávkách 100.
Využití
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ýstup
Table.FromRecords({
[a = 1, b = 2, Result = 2],
[a = 3, b = 4, Result = 12]
})
Příklad 2
Počítejte skóre testů ve dvojicích a vyplňte pole ID dávky, které lze použít k ověření, že dávkování funguje, jak se očekává.
Využití
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ýstup
#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}
}
)