簡體   English   中英

如何在 Excel Power Query 中設置分頁?

[英]How can I setup Pagination in Excel Power Query?

我正在使用 JSON 從 web 將財務數據導入 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 Excel 中使用 Power Query 實現分頁的默認方法是什么?

我知道你在將近一個月前問過這個問題,並且可能已經找到了答案,但無論如何都會回復,以防它幫助其他人。

這行Data1 = Source{1}[Data]對我來說沒有意義,因為我認為Source將是一條記錄,您不能對記錄使用{1}位置查找語法。

下面的代碼為我返回 7 頁。 您可能想檢查它是否獲得了您需要/期望的所有頁面。

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] )中更深入地研究數據,或者創建一個新的步驟/表達式並使用List.Transform來執行此操作。

經過一定程度的鑽取和轉換后,您可能會看到一些數據,例如:

輸出

但這取決於您需要數據的外觀(以及您感興趣的列)。


順便說一句,我在上面的查詢中使用了getPageOfData ,但是這個特殊的 API 在其響應中包含下一頁的 URL。 因此,第 2 頁及之后的頁面可能只是在響應中請求了 URL (而不是調用getPageOfData )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM