如何从Power BI中的API获取分页数据

Dav*_*vid 3 m powerquery powerbi

假设我们有这个端点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"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

这是PowerBI的结果

在此输入图像描述

所以我的问题是:

  • 我怎样才能使用内容data,而不是"[List]"只显示字符串?
  • PowerBI可以处理分页吗?它可以改变page参数吗??page=X

Fox*_* Ng 11

如何播放数据内容,而不是仅显示字符串"[List]"?

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"
Run Code Online (Sandbox Code Playgroud)

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

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

首先,您可以total_pages从上面的查询中获取:

右键单击total_pages,Add as New query: 添加为新查询

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

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

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

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

将其转换为表格: 转换为表格

现在对于原始查询,您可以() =>在查询之前添加以将其转换为函数,并将参数传递给它(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"
Run Code Online (Sandbox Code Playgroud)

功能

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

GETPAGE

现在回到total_pages桌面.更改Column1为文本,以便以后可以传递给它getPage: 文本

然后Invoke Custom Function并调用getPageColumn1:

调用

调用

你会看到一张桌子旁边的列表:

表

展开它,您将在一个表中看到所有数据页面:

所有数据

希望能帮助到你.

  • 如果您不知道总页数,但分页请求返回了一个“偏移量”值以在后续请求中使用,有谁知道您将如何更改此流程?(直到没有更多的页面剩余)。 (4认同)