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

Power BI Service无法刷新来自CKAN的动态数据源数据集

解决Power BI Service中动态数据源刷新失败问题

你的核心问题是:直接使用表格列中的完整URL调用Web.Contents时,Power BI Service无法识别固定数据源根域名,判定为动态数据源导致刷新失败。以下是无需提前知晓所有URL、基于CKAN API返回结果实现Service定时刷新的重构方案:

重构思路

通过拆分CSV资源的URL为固定根域名和动态相对路径,使用Web.Contents的RelativePath参数发起请求,让Power BI Service识别到根域名是固定可信的数据源,从而允许刷新。

重构后的完整M代码

// Base parameters
    BaseUrl = "https://donnees.montreal.ca",
    Endpoint = "/api/3/action/package_show",
    PackageId = "postes-electifs",

    // Initial request to retrieve package information
    Source = Json.Document(
        Web.Contents(BaseUrl, [RelativePath=Endpoint, Query=[id=PackageId]])
    ),

    // Extract the list of resources from the result.resources field
    Resources = Source[result][resources],

    // Convert the list of resources into a table
    ResourcesTable = Table.FromList(Resources, Splitter.SplitByNothing(), null, null, ExtraValues.Error),

    // Expand the columns of each resource (id, name, format, url, etc.)
    ExpandedResources = Table.ExpandRecordColumn(
        ResourcesTable, 
        "Column1", 
        {"id", "name", "format", "url"}, 
        {"id", "name", "format", "url"}
    ),

    // 新增步骤:拆分CSV的URL为根域名和相对路径
    // 假设所有CSV资源的URL根域名与BaseUrl一致,提取相对路径部分
    AddRelativePath = Table.AddColumn(ExpandedResources, "RelativePath", each 
        let
            FullUrl = [url],
            // 移除BaseUrl前缀得到相对路径
            Path = Text.Replace(FullUrl, BaseUrl, "")
        in
            Path
    ),

    // 修改CSV加载逻辑:使用BaseUrl+RelativePath调用Web.Contents
    CSVData = Table.AddColumn(
        AddRelativePath, 
        "CSV", 
        each Csv.Document(
            Web.Contents(BaseUrl, [RelativePath=[RelativePath]]), 
            [Delimiter=",", Encoding=65001, QuoteStyle=QuoteStyle.None]
        )
    ),

    // Promote headers for each table
    CSVWithHeaders = Table.TransformColumns(
        CSVData, 
        {"CSV", each Table.PromoteHeaders(_)}
    ),

    // Combine all CSV tables into a single final table
    AllData = Table.Combine(CSVWithHeaders[CSV])

in
    AllData

关键修改说明

  • 新增AddRelativePath步骤:从CSV的完整URL中剥离固定的BaseUrl,得到相对路径。这一步确保Web.Contents的调用基于固定根域名,而非动态完整URL。
  • 修改CSVData步骤:用Web.Contents(BaseUrl, [RelativePath=[RelativePath]])替代原有的Web.Contents([url]),让Power BI Service能识别到根域名是固定的可信数据源。

后续配置(Power BI Service端)

  1. 发布数据集到Service后,进入数据集设置
  2. 在数据源凭据中,找到https://donnees.montreal.ca的数据源,配置正确的凭据(公开CKAN数据通常选“匿名”即可)
  3. 开启计划刷新,设置合适的刷新频率

特殊情况处理

如果部分CSV资源的URL根域名与BaseUrl不一致,可添加额外逻辑提取每个URL的根域名,将根域名作为参数传入Web.Contents,同时在Service中配置所有涉及的根域名凭据。

内容的提问来源于stack exchange,提问作者Adil Blanco

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 17:03:19