Megosztás a következőn keresztül:


Function.ScalarVector

Szintaxis

Function.ScalarVector(scalarFunctionType as type, vectorFunction as function) as function

Rólunk

Egy scalarFunctionType típusú skaláris függvényt ad vissza, amely egyetlen argumentumsorsal hívja meg vectorFunction, és egyetlen kimenetét adja vissza. Ezenkívül ha a skaláris függvényt ismételten alkalmazza egy bemeneti tábla minden sorára, például a Table.AddColumn, akkor a vectorFunction minden bemenetre egyszer lesz alkalmazva.

vectorFunction kap egy táblázatot, amelynek oszlopai névben és pozícióban egyeznek scalarFunctionTypeparamétereivel. A táblázat minden sora tartalmazza a skaláris függvény egy hívásának argumentumait, a scalarFunctionTypeparamétereinek megfelelő oszlopokkal.

vectorFunction a bemeneti táblával megegyező hosszúságú listát kell visszaadnia, amelynek az egyes pozícióiban lévő elemnek ugyanazzal az eredménnyel kell rendelkeznie, mint az azonos pozíció bemeneti sorában lévő skaláris függvény kiértékelésének.

A bemeneti tábla streamelése várhatóan megtörténik, így vectorFunction várhatóan streameli a kimenetét a bemenet érkeztével, és egyszerre csak egy adattömbnyi bemenettel dolgozik. Különösen a vectorFunction nem szabad többször feldolgoznia a bemeneti tábláját.

1. példa

Szorozza meg a bemeneti tábla két oszlopát a bemenetek 100-ból álló kötegekben való feldolgozásával.

Usage

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

Kimenet


Table.FromRecords({
    [a = 1, b = 2, Result = 2],
    [a = 3, b = 4, Result = 12]
})

2. példa

Számítási teszteredmények két kötegben, és töltse ki a kötegazonosító mezőt, amellyel ellenőrizheti, hogy a kötegelés a várt módon működik-e.

Usage

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

Kimenet

#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}
    }
)