【问题标题】:How to get paginated data from API in Power BI如何从 Power BI 中的 API 获取分页数据
【发布时间】:2018-04-04 21:41:17
【问题描述】:

假设我们有这个端点https://reqres.in/api/users

回复是

{
    "page": 1,
    "per_page": 3,
    "total": 12,
    "total_pages": 4,
    "data": [
        {
            "id": 1,
            "first_name": "George",
            "last_name": "Bluth",
            "avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/calebogden/128.jpg"
        },
        {
            "id": 2,
            "first_name": "Janet",
            "last_name": "Weaver",
            "avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/josephstein/128.jpg"
        },
        {
            "id": 3,
            "first_name": "Emma",
            "last_name": "Wong",
            "avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/olegpogodaev/128.jpg"
        }
    ]
}

这是 PowerBI 中的结果

所以我的问题是:

  • 如何使用data 的内容而不是只显示字符串"[List]"
  • PowerBI 可以处理分页吗?它可以更改page 参数吗? ?page=X

【问题讨论】:

    标签: powerbi powerquery m


    【解决方案1】:

    我怎样才能玩数据的内容,而不是显示字符串 仅“[列表]”?

    Power BI 实际上提供了一个用户友好的 UI 来导航和构建查询,因此您只需单击链接/按钮即可展开和深入查询并获取所需的数据:

    点击List:

    转换为表格:

    展开列:

    结果:

    相当于下面的 M / Power Query (Query -> Advanced Editor):

    let
        Source = Json.Document(Web.Contents("https://reqres.in/api/users")),
        data = Source[data],
        #"Converted to Table" = Table.FromList(data, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
        #"Expanded Column1" = Table.ExpandRecordColumn(#"Converted to Table", "Column1", {"id", "first_name", "last_name", "avatar"}, {"id", "first_name", "last_name", "avatar"})
    in
        #"Expanded Column1"
    

    PowerBI 可以处理分页吗?它可以更改页面参数吗? ?page=X

    是的。您实际上可以将上述查询转换为一个函数,并将页码传递给它以获取每个页面的数据。

    首先你可以从上面的查询中得到total_pages

    右击total_pagesAdd as New query

    您将在Query Editor 中看到以下查询:

    let
        Source = Json.Document(Web.Contents("https://reqres.in/api/users")),
        total_pages1 = Source[total_pages]
    in
        total_pages1
    

    更改最后一行以生成数字列表:

    let
        Source = Json.Document(Web.Contents("https://reqres.in/api/users")),
        List = {1..Source[total_pages]}
    in
        List
    

    将其转换为表格:

    现在对于原始查询,您可以在查询前添加() =>以将其转换为函数,并将参数传递给它(API端点也需要更改以进行分页):

    (page as text) =>
    let
        Source = Json.Document(Web.Contents("https://reqres.in/api/users?page=" & page)),
        data = Source[data],
        #"Converted to Table" = Table.FromList(data, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
        #"Expanded Column1" = Table.ExpandRecordColumn(#"Converted to Table", "Column1", {"id", "first_name", "last_name", "avatar"}, {"id", "first_name", "last_name", "avatar"})
    in
        #"Expanded Column1"
    

    将函数重命名为 getPage 以便更好地理解:

    现在回到total_pages 表。将Column1 更改为文本,以便稍后可以将其传递给getPage

    然后Invoke Custom Function 并使用Column1 调用getPage

    您会在旁边看到一个表格列表:

    展开它,你会在一个表格中看到所有页面的数据:

    希望对你有帮助。

    【讨论】:

    • 哇,谢谢!多么完整的答案。我看看它,让你知道
    • @David 很高兴它有帮助!
    • @FoxanNg,您不知道如何通过 Azure API 执行此操作吗? stackoverflow.com/questions/48771173/…
    • @Beefcake 有时间看一下,但我发现您已经有了一个很好的解决方案 :)
    • 如果您不知道总页数,但分页请求返回“偏移”值以在后续请求中使用,是否有人知道如何更改此流程? (直到没有剩下的页面)。
    猜你喜欢
    • 1970-01-01
    • 2022-11-10
    • 2021-09-22
    • 2023-01-13
    • 2019-05-11
    • 1970-01-01
    • 2018-11-23
    • 2016-06-06
    • 1970-01-01
    相关资源
    最近更新 更多