You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Power BI中如何在FetchXml函数中传递Null作为文本值

解决Dynamics CRM FetchXml分页Cookie设为Null的报错问题

问题根源

你碰到的报错来自两个核心问题:

  1. 函数定义里z as text强制要求传文本类型,但Null不属于text类型,直接传Null会触发类型不匹配;
  2. 传空字符串/空格时,生成的FetchXml会带一个无效的paging-cookie属性,CRM返回的结构异常,导致Power Query无法正确解析成Table,进而抛出"Table转Function"的错误。

修复步骤

1. 放宽函数参数的类型限制

把分页Cookie参数z的类型改成nullable text,允许传入Null值:

GetResults = (z as nullable text, x as number) => 
let
    // 动态拼接FetchXml,空Cookie时不生成paging-cookie属性
    FetchXmlPart = if z <> null then "paging-cookie=""" & z & """ " else "",
    FetchXml = "<fetch distinct=""False"" page=""" & Text.From(x) & """ " & FetchXmlPart & ">" & 
        // 这里放你的FetchXml主体字段、过滤条件等内容
        "</fetch>",
    // 调用CRM接口获取数据
    Source = Crm.Fetch(FetchXml)
in
    Source

2. 首次调用函数直接传Null

第一次获取数据时,页码传1,Cookie传Null:

FirstPageData = GetResults(null, 1)

3. 自动遍历所有分页(可选)

如果要一次性拉取所有数据,可以加个递归函数自动处理后续分页:

// 递归获取所有分页数据
GetAllPages = (pageNum as number, cookie as nullable text) =>
let
    CurrentPage = GetResults(cookie, pageNum),
    // 提取下一页的分页Cookie
    NextCookie = try CurrentPage[#"@Microsoft.Dynamics.CRM.fetchxmlpagingcookie"] otherwise null,
    // 如果有下一页就继续递归,否则返回空表
    NextPages = if NextCookie <> null then GetAllPages(pageNum + 1, NextCookie) else #table({}, {})
in
    // 合并当前页和后续页数据
    CurrentPage & NextPages

// 调用获取全量数据
AllCRMData = GetAllPages(1, null)

额外注意事项

  • 每次拼接完FetchXml后,可以单独输出FetchXml变量,复制到CRM的Advanced Find里验证格式是否合法,避免因XML语法错误导致返回异常;
  • 确保Crm.Fetch返回的始终是Table类型,如果某次调用返回非Table结构,大概率是FetchXml有问题,优先排查XML格式。

内容的提问来源于stack exchange,提问作者BI DATA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 03:05:36