Jaa kautta


Function.ScalarVector

Syntaksi

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

Noin

Palauttaa tyyppiä olevan skalaarifunktion scalarFunctionType joka käynnistää vectorFunction yhdellä argumenttirivillä ja palauttaa sen yksittäisen tulosteen. Lisäksi, kun skalaarifunktiota käytetään toistuvasti jokaiselle syötetaulukon riville, kuten Table.AddColumn, sen sijaan vectorFunction käytetään kerran kaikille syötteille.

vectorFunction välitetään taulukko, jonka sarakkeet vastaavat scalarFunctionTypeparametrien nimeä ja sijaintia. Tämän taulukon kukin rivi sisältää skalaarifunktion yhden kutsun argumentit niin, että sarakkeet vastaavat scalarFunctionTypeparametreja.

vectorFunction on palautettava luettelo, joka on saman pituinen kuin syötetaulukko, jonka kohteen kussakin sijainnissa on oltava sama tulos kuin skalaarifunktion arvioinnin saman sijainnin syöterivillä.

Syötetaulukon odotetaan virtautettavan sisään, joten vectorFunction odotetaan virtauttavan tulosteensa syötteen tullessa sisään käyttäen vain yhtä syötelohkoa kerrallaan. vectorFunction ei saa luetteloida syötetaulukkoaan useammin kuin kerran.

Esimerkki 1

Kerro syöttötaulukon kaksi saraketta käsittelemällä syötteet 100 kappaleen erissä.

käyttö

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

Esimerkki 2

Laske testitulokset kahden erissä ja täytä erätunnuskenttä, jonka avulla voit varmistaa, että erät toimivat odotetulla tavalla.

käyttö

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