Power Query空列表无法识别为空

时间:2017-11-09 00:19:51

标签: powerquery m

我目前正在开发PowerBi连接器。我从公司的REST-webservice获取数据。 现在关于分页了。 问题是,如果pageSize是100并且数据库中有101条记录(第一次调用我得到100,第二次得到1条记录),我就不能停止调用因为List.Count给了我一个不为零的记录空列表。

示例数据:

{"records":[{"firstname":"...","lastname":"..",}]}

代码:

json = Json.Document(Web.Contents(url, [
    Content = Text.ToBinary(body)])),

    records = Table.FromRecords({json}),

    recordsExpaned = Table.ExpandTableColumn(records, "records", {"firstname", "lastname"}), 
    recordsTable = Table.ToList(recordsExpaned), 
    result = 
        if(List.Count(recordsTable) < 1) then
            Data.Contacts(json) meta [NextPage = null]
        else
            SData.Contacts(json) meta [NextPage = page + 1]

如果记录是

,我希望List.Count(recordsTable)为0或null
{"records":[]}

但事实并非如此。

{"records":[]}
{"records":[{"firstname":"...","lastname":"..",}]}

给出相同的Count值。

这让我发疯了。我如何检查列表是否真的是空的,如

{"records":[]}

如果我这样检查

if(List.Count(acd) < 2) then

然后它停在空列表上,但也停在只有一个参数的列表上(正确)。这对我来说意味着空列表并不是空的?!

编辑: 感谢@MarcelBeug,这是有效的

json = Json.Document(Web.Contents(url, [
Content = Text.ToBinary(body)])),

data = Table.FromRecords({json}),

recordsExpaned = Table.ExpandTableColumn(data, "records", {"firstname", "lastname"}), 
recordsTable = Table.ToList(recordsExpaned), 
result = 
    if(List.IsEmpty(json[records]) = true) then
        Data.Contacts(json) meta [NextPage = null]
    else
        Data.Contacts(json) meta [NextPage = page + 1]

以下一行是游戏规则改变者

if(List.IsEmpty(json[records]) = true) then
似乎IsEmpty-Function正在寻找元素&#34;记录&#34;在json虽然我从未宣布&#34;记录&#34;。似乎该函数正在解析元素以搜索它,但我不是Power Query M中的专家。

1 个答案:

答案 0 :(得分:1)

首先需要将字符串解析为JSON值,从而产生记录。 然后,您可以检查该记录的“记录”字段是否包含空列表。

示例(返回true):

let
    Source = "{""records"":[]}",
    #"Parsed JSON" = Json.Document(Source),
    Custom1 = List.IsEmpty(#"Parsed JSON"[records])
in
    Custom1