首页 文章

电源查询 - 如果自定义功能计数

提问于
浏览
1

Following on from this question .

我想创建一个自定义函数,我传入一个表,一列和一个值,它会计算满足这些条件的所有行 .

到目前为止我有

let 
    fCountif = (tbl as table, col as text, value as any) as number =>
    let
        select_rows = Table.SelectRows(tbl, each [col] = value),
        count_rows = Table.RowCount(select_rows)
    in
        count_rows
in
    fCountif

但我遇到了各种各样的问题 . 第一个是调用函数来测试它,当我传入一个表名的字符串时,它会向函数发送一个文字字符串,而不是将它转换为表 . 这可能只是通过查询编辑器按钮调用它时的一个问题,并且在我的其余M代码中使用该函数时应自行解决 .

第二个是如何将 col 值传递给函数的 [col] 部分 . 我已经看到other examples中使用的胖火箭,即 [column name] <= col ,但是无法让它发挥作用 .

我正在努力让我的头脑能够正常运转,并且很乐意在vba中这样做,所以如果你有任何提示请大声喊出来 . 关于此的文档很难得到 . 干杯 .

2 回答

  • 4

    表可以被认为是记录列表,其中每个记录都是一行 . 在Table.AddColumn和Table.SelectRows的函数中, [col] 是写入 Record.Field(_, "col") 的较短方式,它访问记录的"col"字段 .

    这是编写函数的一种方法:

    let 
        fCountif = (tbl as table, col as text, value as any) as number =>
        let
            select_rows = Table.SelectRows(tbl, each Record.Field(_, col) = value),
            count_rows  = Table.RowCount(select_rows)
        in
            count_rows
    in
        fCountif
    
  • 1

    这应该工作:

    let 
      fCountif = (tbl as table, col, value) => 
      let 
       select_rows = Table.SelectRows(tbl, Expression.Evaluate("each "&Text.Replace("["&col&"] = *"&value&"*","*",""""))),
       count_rows = Table.RowCount(select_rows) 
      in count_rows 
    in fCountif
    

相关问题