【问题标题】:Power Query M Language Dynamically Increase Offset ValuePower Query M语言动态增加偏移值
【发布时间】:2021-07-15 08:49:27
【问题描述】:

我在函数中创建了一个 Web 内容对象,以在电源查询中查询 API 端点。我使用列表生成来动态增加该列表中的记录,但是,我似乎无法弄清楚如何将偏移量增加 100。

目前,我获得前 200 条记录,之后的每个 API 调用记录 100 - 200 条。但是,我希望偏移值增加 100。目前设置为100。所以它应该是第一个API调用偏移量0,下一个偏移量100,下一个偏移量200等等。

有人有胶水吗?

let
    getJournals = (page as number) =>

            let
                
                // Get Tenant ID from table

                Source = Excel.CurrentWorkbook(),
                #"Expanded Content" = Table.ExpandTableColumn(Source, "Content", {"TenantID", 
                "Client_Name", "ID"}, {"Content.TenantID", "Content.Client_Name", "Content.ID"}),
                #"Content ID" = #"Expanded Content"{2}[Content.ID],
                TenantID = #"Content ID",
                
                // Query database for access token

                tokenQuery = Sql.Database("XXX", "XXX", [Query="Select accessToken, 
                refreshToken from XXX WHERE systemName = 'XXX'"]),
                accessTokenValue = tokenQuery{0}[accessToken],
            
                          
                // initialise request data
                //authorization = "Bearer " & accessTokenValue,
                accept = "application/json",
                contentType = "application/json",
                endPoint = "https://api.xero.com/api.xro/2.0/Journals?offset="& Number.ToText(page),
                
                //Create web element

                data = Json.Document 
                        (
                        Web.Contents(
                            endPoint, 
                        [
                Headers = 
                        [
                    #"Authorization" = authorization,
                    #"Accept" = accept,
                    #"Content-Type" = contentType,
                    #"xero-tenant-id" = TenantID
                        ]
                        ]
                        )
                        )

             in
             
             data,
             increase = 100,
             allJournals = List.Generate(() => getJournals(0),
             each not List.IsEmpty([Journals]),
             each getJournals(increase)),
             #"Converted to Table" = Table.FromList(allJournals, Splitter.SplitByNothing(), null, null, 
             ExtraValues.Error)
in
#"Converted to Table"

【问题讨论】:

  • 我不懂您的语言,您在哪里更改increase 的值,使其变为100 以外的任何值?我看到您得到偏移量为 0 的期刊,然后是偏移量 increase(设置为值 100),但是您在哪里将 increase 更改为 200、300、400 等等?如果任何了解您使用的语言的人都明白这一点,请原谅我。
  • 在您的List Generate 中,将您的初始函数设为带有计数器的记录。然后,您可以增加计数器并分别更改getJournals,最后使用List.Generate 的第四个参数提取您需要的内容。请参阅Chris Webb' Blog 了解在不同上下文中使用此技术的示例。
  • @droopsnoot 是的,你是对的,我没有改变增加 atm 的值。实际上,我的问题是使该值动态化或以某种方式更改列表生成逻辑。
  • @Ron Rosenfeld。谢谢你的提示。我将探索该解决方案!

标签: excel powerbi offset m xero-api


【解决方案1】:

所以 Xero 中的期刊是按顺序编号的。

偏移量 |按指定的期刊编号偏移。

例如JournalNumber 大于偏移量的期刊将被返回。

文档https://developer.xero.com/documentation/api/journals

要成功分页以获取每一个日志(它们以 100 个为一组返回),您需要传入最后一个数组元素的日志编号,直到 API 以 99 个或更少的日志响应。

例如,我认为演示公司的期刊编号为 344。 因此,要获得您所做的所有期刊:

> GET https://api.xero.com/api.xro/2.0/Journals
=> {"Journals": [
    {
      ...
      "JournalNumber": 344
      ...98 more
      "JournalNumber": 443
    }
  ]}

> GET https://api.xero.com/api.xro/2.0/Journals?offset=443
=> {"Journals": [
    {
      ...
      "JournalNumber": 444
      ...98 more
      "JournalNumber": 543
    }
  ]}

> GET https://api.xero.com/api.xro/2.0/Journals?offset=543
=> { "Journals": [
    {
      ...
      "JournalNumber": 544
      ...52 more
      "JournalNumber": 596
    }
  ]}

最后一次调用有

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多