如何在 Excel Power Query 中设置分页?
How can I setup Pagination in Excel Power Query?
我正在使用 JSON 从网络将财务数据导入 excel,但由于来源使用分页(每页提供 50 个结果,我需要实施分页才能导入所有结果.
数据来源为JSON:
https://localbitcoins.com//sell-bitcoins-online/VES/.json?page=1
or https://localbitcoins.com//sell-bitcoins-online/VES/.json?page=2
?page=1, ?page=2, ?page=3
我用下面的代码实现分页,但是报错:
= (page as number) as table =>
let
Source = Json.Document(Web.Contents("https://localbitcoins.com//sell-bitcoins-online/VES/.json?page=" & Number.ToText(page) )),
Data1 = Source{1}[Data],
RemoveBottom = Table.RemoveLastN(Data1,3)
in
RemoveBottom
当我调用参数(第 1 页为 1)对其进行测试时,出现以下错误,我似乎无法找出原因?
An error occurred in the ‘GetData’ query. Expression.
Error: We cannot convert a value of type Record to type List.
Details:
Value=Record
Type=Type
郑重声明,我尝试使用 ListGenerate 包括页面处理:
= List.Generate( ()=>
[Result= try GetData(1) otherwise null, page = 1],
each [Result] <> null,
each [Result = try GetData([page]+1) otherwise null, Page = [Page]+1],
each [Result])
在 MS 中使用 Power Query 实现分页的默认方式是什么 Excel?
我知道你大约一个月前问过这个问题,可能已经找到了答案,但无论如何都会回复,以防对其他人有帮助。
这一行 Data1 = Source{1}[Data]
对我来说没有意义,因为我认为 Source
将是一条记录,您不能对记录使用 {1}
位置查找语法。
下面的代码 returns 7 页。您可能想检查它是否获取了您 need/expect.
的所有页面
let
getPageOfData = (pageNumber as number) =>
let
options = [
Query = [page = Number.ToText(pageNumber)]
],
url = "https://localbitcoins.com/sell-bitcoins-online/VES/.json",
response = Web.Contents(url, options),
deserialised = Json.Document(response)
in deserialised,
responses = List.Generate(
() => [page = 1, response = getPageOfData(page), lastPage = null],
each [lastPage] = null or [page] <= [lastPage],
each [
page = [page] + 1,
response = getPageOfData(page),
lastPage = if [lastPage] = null then if Record.HasFields(response[pagination], "next") then null else page else [lastPage]
],
each [response]
)
in
responses
在 List.Generate
中,我的 selector
只选择 [response]
字段以保持简单。您可以在 selector
本身(例如 each [response][data][ad_list]
)中更深入地研究数据,或者创建一个新的 step/expression 并使用 List.Transform
来这样做。
经过一定程度的向下钻取和转换后,您可能会看到如下数据:
但这取决于您需要什么样的数据(以及您感兴趣的列)。
顺便说一句,我在上面的查询中使用了 getPageOfData
,但是这个特定的 API 在其响应中包含了下一页的 URL。因此第 2 页及之后的页面可能只是在响应中请求了 URL(而不是调用 getPageOfData
)。
我正在使用 JSON 从网络将财务数据导入 excel,但由于来源使用分页(每页提供 50 个结果,我需要实施分页才能导入所有结果.
数据来源为JSON:
https://localbitcoins.com//sell-bitcoins-online/VES/.json?page=1
or https://localbitcoins.com//sell-bitcoins-online/VES/.json?page=2
?page=1, ?page=2, ?page=3
我用下面的代码实现分页,但是报错:
= (page as number) as table =>
let
Source = Json.Document(Web.Contents("https://localbitcoins.com//sell-bitcoins-online/VES/.json?page=" & Number.ToText(page) )),
Data1 = Source{1}[Data],
RemoveBottom = Table.RemoveLastN(Data1,3)
in
RemoveBottom
当我调用参数(第 1 页为 1)对其进行测试时,出现以下错误,我似乎无法找出原因?
An error occurred in the ‘GetData’ query. Expression.
Error: We cannot convert a value of type Record to type List.
Details:
Value=Record
Type=Type
郑重声明,我尝试使用 ListGenerate 包括页面处理:
= List.Generate( ()=>
[Result= try GetData(1) otherwise null, page = 1],
each [Result] <> null,
each [Result = try GetData([page]+1) otherwise null, Page = [Page]+1],
each [Result])
在 MS 中使用 Power Query 实现分页的默认方式是什么 Excel?
我知道你大约一个月前问过这个问题,可能已经找到了答案,但无论如何都会回复,以防对其他人有帮助。
这一行 Data1 = Source{1}[Data]
对我来说没有意义,因为我认为 Source
将是一条记录,您不能对记录使用 {1}
位置查找语法。
下面的代码 returns 7 页。您可能想检查它是否获取了您 need/expect.
的所有页面let
getPageOfData = (pageNumber as number) =>
let
options = [
Query = [page = Number.ToText(pageNumber)]
],
url = "https://localbitcoins.com/sell-bitcoins-online/VES/.json",
response = Web.Contents(url, options),
deserialised = Json.Document(response)
in deserialised,
responses = List.Generate(
() => [page = 1, response = getPageOfData(page), lastPage = null],
each [lastPage] = null or [page] <= [lastPage],
each [
page = [page] + 1,
response = getPageOfData(page),
lastPage = if [lastPage] = null then if Record.HasFields(response[pagination], "next") then null else page else [lastPage]
],
each [response]
)
in
responses
在 List.Generate
中,我的 selector
只选择 [response]
字段以保持简单。您可以在 selector
本身(例如 each [response][data][ad_list]
)中更深入地研究数据,或者创建一个新的 step/expression 并使用 List.Transform
来这样做。
经过一定程度的向下钻取和转换后,您可能会看到如下数据:
但这取决于您需要什么样的数据(以及您感兴趣的列)。
顺便说一句,我在上面的查询中使用了 getPageOfData
,但是这个特定的 API 在其响应中包含了下一页的 URL。因此第 2 页及之后的页面可能只是在响应中请求了 URL(而不是调用 getPageOfData
)。