Power BI加载Python脚本触发Formula.Firewall错误如何修复
问题产生原因
这个报错是Power BI 公式防火墙(Formula Firewall) 的合规校验拦截,核心触发逻辑如下:
- 防火墙默认规则:如果一个步骤被判定为可访问外部资源,那么该步骤不能直接引用其他指向独立数据源的查询,避免不同隐私级别的数据被意外传输到非信任位置。
- 你的场景里,
Python.Execute属于可执行外部脚本、具备外部访问能力的步骤,你在这个步骤里直接传入了dataframe1、dataframe2两个独立查询——这两个查询各自指向本地不同的Excel数据源,防火墙判定该操作存在跨源数据泄露风险,因此直接拦截。 - 你测试的“忽略隐私级别设置”本质是直接关闭了防火墙校验,虽然能跑通,但会完全失去隐私隔离保护,存在数据安全隐患。
正确修复方案
以下方案都不需要关闭全局隐私级别检查,可根据实际场景选择:
- 拆分步骤+缓冲表,隔离数据源访问和Python执行逻辑
把对上游查询的引用、Python脚本执行拆成独立步骤,用Table.Buffer把上游表先加载到本地内存,让Python步骤仅访问内存中的缓冲数据,不再直接触达原始数据源,即可通过校验。修改后的查询代码如下:
let // 先单独缓冲两个上游表,完成数据源到本地内存的加载 BufferedDf1 = Table.Buffer(dataframe1), BufferedDf2 = Table.Buffer(dataframe2), // Python步骤仅引用内存中的缓冲表,无直接数据源访问权限 Source = Python.Execute("# Python:#(lf)",[df1=BufferedDf2, df2=BufferedDf1]) in Source
- 统一配置同源文件的隐私级别
操作路径:依次点击「文件」->「选项和设置」->「数据源设置」,找到用到的table1.xlsx、table2.xlsx两个本地文件,将二者的隐私级别统一设置为公用(或同级别其他选项)。防火墙会判定同隐私级别、同存储位置的数据源之间不存在跨级泄露风险,就不会触发拦截。 - 整合原始数据加载逻辑(适合不需要单独维护两个上游表的场景)
如果业务上不需要保留dataframe1、dataframe2两个独立查询,可以把两个Excel文件的读取、表头提升、类型转换步骤都整合到同一个查询内部,后续调用Python脚本时所有数据都来自当前查询的内部步骤,不存在跨查询引用独立数据源的问题,自然不会触发防火墙拦截。
注意:公式防火墙的设计目的是防止高敏感级别的数据(比如内部客户信息、业务核心数据)在合并计算时被意外发送到低信任度的外部服务,非必要不建议直接关闭全局隐私校验。
内容的提问来源于stack exchange,提问作者Jsam27
相关产品推荐
相关产品推荐

