首页 > 解决方案 > Power Query 和 Kobo Toolbox API:使用 Web.Contents() 过滤返回到 Excel 的数据

问题描述

亲爱的堆栈溢出者!

我工作的非政府组织需要直接通过 Excel 将他们的项目经理连接到 Kobo 需求评估调查数据。这很容易。但是,此调查包含数千个提交/数据行,并且刷新连接所花费的时间太长,因为在过滤之前必须将每行下载到 Excel。

KOBO Rest API 允许查询过滤请求(https://kc.humanitarianresponse.info/api/v1/data),我在 POSTMAN 中取得了预期的结果。

我知道可以将 Power Query 中的高级编辑器与 Web.Contents() 函数一起使用来过滤并达到预期的效果,但是到目前为止我未能编写正确的语法。有人可以看看并告诉我我做错了什么吗?

在 POSTMAN 中正常工作的查询(使用 Header/Authorization 令牌时):

https://kc.humanitarianresponse.info/api/v1/data/814220?query={"$and": [{"assessor_details/date_of_assessment": {"$gte": "2021-08-01"}},{"assessor_details/date_of_assessment": {"$lt": "2021-09-01"}}] }

不会导致错误但实际上不过滤任何内容的 Power Query 高级编辑器语法!:

let
Source = Json.Document(Web.Contents("https://kc.humanitarianresponse.info/api/v1/data/814220",[Query="{“”$and“”: [{“”assessor_details/date_of_assessment“”: {“”$gte“”: “”2021-08-01“”}},{“”assessor_details/date_of_assessment“”: {“”$lt“”: “”2021-09-01“”}}] }",Headers=[Authorization="token XXXXXXX"]])),
    #"Converted to Table" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error)
in
    #"Converted to Table"

标签: jsonexcelmongodbpowerquerykobotoolbox

解决方案


正如预期的那样,Power Query 语法Web.Contents()不正确。

正确的语法应该是:

let
 Source = Json.Document(Web.Contents("https://kc.humanitarianresponse.info/api/v1/data/814220",[Query=[query="{""$and"": [{""assessor_details/date_of_assessment"": {""$gte"": ""2021-09-01""}},{""assessor_details/date_of_assessment"": {""$lte"": ""2021-09-03""}}] }"],Headers=[Authorization="token XXXXXX"]])),
     #"Converted to Table" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error)
    
in
    #"Converted to Table"

推荐阅读