【问题标题】:Power Query column name as parameterPower Query 列名称作为参数
【发布时间】:2020-03-12 19:28:28
【问题描述】:

亲爱的巫师)

我正在尝试创建一个可以使用输入的搜索功能: 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

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

【问题讨论】:

    标签: function powerquery


    【解决方案1】:

    我有同样的需求,但 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】:

      像 [mColName] 这样的字段引用永远不会是动态的,因此代码将尝试使用名称为“mColName”的字段;它不会被参数 mColName 中的字符串替换。

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

      【讨论】:

        【解决方案3】:

        另一种可能的解决方案是将列重命名为函数内部已知的某个名称。因此,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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-06-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-05-31
          • 2022-07-01
          • 1970-01-01
          相关资源
          最近更新 更多