Aracılığıyla paylaş


Function.ScalarVector

Sözdizimi

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

Hakkında

Tek bir bağımsız değişken satırıyla scalarFunctionType çağıran ve tek çıkışını döndüren vectorFunction türünde bir skaler işlev döndürür. Buna ek olarak, skaler işlev Table.AddColumngibi bir giriş tablosunun her satırı için tekrar tekrar uygulandığında, vectorFunction tüm girişler için bir kez uygulanır.

vectorFunction'a, sütunları ad ve konum bakımından scalarFunctionTypeparametrelerine uygun bir tablo aktarılacaktır. Bu tablonun her satırı, scalarFunctionTypeparametrelerine karşılık gelen sütunlarla beraber skaler işleve yapılan bir çağrının argümanlarını içerir.

vectorFunction giriş tablosuyla aynı uzunlukta bir liste döndürmelidir ve her konumdaki öğe aynı konumdaki giriş satırındaki skaler işlevin değerlendirilmesi ile aynı sonuç olmalıdır.

Giriş tablosunun akış hâlinde olması beklenir, bu nedenle vectorFunction, giriş geldikçe çıktısını akış hâlinde sağlaması ve aynı anda yalnızca bir giriş öbeğiyle çalışması beklenir. Özellikle, vectorFunction giriş tablosunu birden çok kez listelememelidir.

Örnek 1

Girdi tablosunun iki sütununu, girişleri 100'lük gruplar halinde işleyerek çarpın.

Kullanım

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

Çıkış


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

Örnek 2

Test puanlarını ikişerli gruplar halinde hesaplayın ve toplulaştırmanın beklendiği gibi çalıştığını doğrulamak için kullanılabilecek bir toplu kimlik alanını doldurun.

Kullanım

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

Çıkış

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