【问题标题】:How to implement a do while loop in Power Query and read the last row of a table which is updated dynamically如何在 Power Query 中实现 do while 循环并读取动态更新的表的最后一行
【发布时间】:2020-08-01 08:58:09
【问题描述】:

我正在尝试使用所有文档的文档 ID 从 sharepoint rest API 导入数据。我的目标是从最小的文档 id 开始,直到没有更多文档为止。 我设计了一个自定义函数,我通过传递从 0 开始的文档 ID 来调用它。这个函数返回一个包含 500 个文档的表,这些文档的文档 ID 大于我传递的文档 ID。

#"Output" =Table.AddColumn(Termset,"c", each GetList( try List.Max(Output[c.DocId]) otherwise LastDocID))

所以我的数据在输出表中更新。我的问题是它一次又一次地返回相同的 500 条记录。这可能是因为 List.Max(Output[c.DocId] 的值没有改变(我希望这个值是从 GetList 函数返回的最后一个文档 id)。我在这里尝试做一些类似于 do while循环。

do{
Output=GetList(LastDocID)
LastDocId=List.Max(Output[DocId])
}while(there_are_no_more_docs)

Power Query 中有什么方法可以动态更改我传递给 GetList 函数的 LastDocId 的值。我在下面尝试的方法似乎不起作用,因为它无法在每次函数调用后读取输出表的内容。 注意:我使用术语集作为页面来检查正在阅读的文档总数。它是一个列表,其值从 0 开始,递增 500,直到小于 Sharepoint 中的文档总数。

如果有人可以在这里帮助我,我将不胜感激。

【问题讨论】:

  • Power Query 是一种函数式语言,没有循环。只需阅读所有 id 或者在您的情况下创建它们,对它们进行排序,然后使用 Table.AddColumn(#"Changed Type", "GetList", each GetList([DocId]))等函数添加一列

标签: powerbi powerquery powerbi-desktop m powerbi-datasource


【解决方案1】:

您需要查看 List.Generate 以生成所有页面请求,然后从结果列表中计算最后一个文档 ID。

使用如下循环从 REST API 获取所有页面:

listOfPages = List.Generate(
  () => FetchPage(null),
  (page) => page <> null,
  (page) => FetchPage(page)
)

【讨论】:

    猜你喜欢
    • 2010-12-03
    • 2017-07-04
    • 1970-01-01
    • 2020-08-28
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多