Power Query列名称作为参数

时间:2017-06-01 04:52:22

标签: function powerquery

亲爱的巫师们

我正在尝试创建一个可以使用输入的搜索功能: 1.搜索表 2.此表的列,其中将运行搜索 3.要在2

中指定的列中搜索的值

该函数如下所示:

( mTbl as table, mColName as text, mColValue as text) =>

let
    Source = mTbl,
    FilteredTable = Table.SelectRows(Source, each ([ mColName ] =  mColValue )),
    Result = List.Count(FilteredTable[ mColName ])
in
    Result

但它会导致错误:

  

Expression.Error:找不到表的列'mColName'。   细节:       mColName

有什么建议吗? 非常感谢提前

3 个答案:

答案 0 :(得分:4)

[mColName]之类的字段引用从不是动态的,因此代码将尝试使用名称为" mColName&#34 ;;的字段。它不会被参数mColName中的字符串替换。

相反,您可以使用:Table.Column(Source,mColName)

答案 1 :(得分:2)

我也有同样的需求,但是Table.Columns(Source,mColName)无法正常工作,因为这将返回一个列表。在我的问题中,我需要过滤作为表返回的列。

我解决了以下问题:

( mTbl as table, mColName as text, mColValue as text) =>

    let
    Source = mTbl,
    Result = Table.SelectRows(Source, each (Record.Field(_, mColName) =  mColValue ))
in
    Result

答案 2 :(得分:0)

另一种可能的解决方案是将您的列重命名为函数内部已知的名称。因此,在SelectRows函数中将不需要动态列名称:

( mTbl as table, mColName as text, mColValue as text) =>
let
    Source = mTbl,
    SortColumnName = "XXXXX",
    Renamed = Table.RenameColumns(Source, {{mColName , SortColumnName}}),
    FilteredTable = Table.SelectRows(Renamed, each ([XXXXX] =  mColValue)),
    Result = List.Count(FilteredTable[SortColumnName])
in
    Result