引用列中给出的表作为文本

时间:2018-07-03 13:33:16

标签: powerquery

这应该是一个简单的问题。我是Power Query的新手。

我有一个报告表,有一列“查询”,这些列是我在工作簿中拥有的查询的名称。 我希望添加一列以计算查询中的行数。

我使用的公式是=Table.AddColumn(Source, "RowCount", each Table.RowCount([Query]))

我的报告表如下所示:

| Queries   | RowCount |
| Qry Apple |          |
| Qry Orang |          |

但是我遇到了错误:

  

Expression.Error:我们无法将值“ Qry Apple”转换为Table。

     

详细信息:

     
    

Value = Qry Apple

         

Type = Type

  

有人知道如何解决吗?

谢谢!

3 个答案:

答案 0 :(得分:0)

= Table.AddColumn(Source, "Row Count", each Table.RowCount(Expression.Evaluate([Query],#sections[Section1])))

似乎这是需要对PQ的结构进行随机模糊了解的事情之一。 Expression.Evaluate需要知道用于解析字符串的“环境”,并且看起来PQ中的表位于名为#sections的全局查询中的[Section1]记录中。

答案 1 :(得分:0)

我从 Chris Webb的BI博客中找到了解决方案: Expression.Evaluate() In Power Query/M

基本上,我们需要使用Expression.Evaluate才能将[Query]列中的文本读取为表格。还要注意,您需要包括#shared参数,以便它可以访问必要的环境。 (有关更多详细信息,请参阅链接的博客及其提供的参考。)

= Table.AddColumn(Source, "RowCount", each Table.RowCount(Expression.Evaluate([Query], #shared)))

答案 2 :(得分:0)

最后,经过一年的练习,找到了答案

我尝试按照建议使用Expression.Evaluate,但无济于事,因此我认为该功能无法将文本正确转换为#table。我会得到纠正。

该解决方案确实使用了#sections,非常感谢@Alexis Olson和@Wedge的出色创意!

我使用了Record.Field函数将表作为表对象“获取”到列中,然后使用Table.RowCount函数将其完成。为了清楚起见,我将它们分为两个步骤。

所以这里是

let
    Source    = Excel.CurrentWorkbook(),
    MyTables  = Source{[Name="MyTables"]}[Content],
    GetTblObj = Table.AddColumn(MyTables, "MyTables", each Record.Field(#sections[Section1],[Query])),
    RowCount  = Table.AddColumn(GetTblObj, "RowCount", each Table.RowCount([MyTables]))
in
    RowCount

enter image description here