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端)
- 发布数据集到Service后,进入数据集设置
- 在数据源凭据中,找到
https://donnees.montreal.ca的数据源,配置正确的凭据(公开CKAN数据通常选“匿名”即可) - 开启计划刷新,设置合适的刷新频率
特殊情况处理
如果部分CSV资源的URL根域名与BaseUrl不一致,可添加额外逻辑提取每个URL的根域名,将根域名作为参数传入Web.Contents,同时在Service中配置所有涉及的根域名凭据。
内容的提问来源于stack exchange,提问作者Adil Blanco
相关产品推荐
相关产品推荐

