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

时间:2016-02-01 07:45:27

标签: powerbi powerquery m

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 个答案:

答案 0 :(得分:4)

表可以被认为是记录列表,其中每个记录都是一行。在Table.AddColumn和Table.SelectRows的函数中,[col]是一种较短的编写Record.Field(_, "col")的方法,它可以访问&#34; col&#34;记录领域。

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

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 :(得分: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