操控PBIX文件

通常一张报表中包含了数据、图片、配置、架构等信息,Power BI将这些内容打包在了一个文件中,.pbix是Power BI报表文件的扩展名。

既然能打包那么就能解包,将报表文件的扩展名由.pbix修改为.zip或.rar,再用解压缩软件解压,就能够得到包含报表中所有内容的文件夹,这个技巧几乎适用于所有微软系的产品。

下图为测试文件解压出来的目录:

其中Report文件夹里包含了报表中所有的图片、主题、视觉对象等有关于显示样式方面的文件。剩下的一些文件基本上都是和元数据、配置信息有关的,包含数据源、连接字符串、版本号、数据模型等等。所以理论上在不打开pbix文件的前提下,只需要修改对应文件中的内容并再次打包压缩,就能够修改报表中的任何设定。

基于这个假设,我们尝试通过直接修改pbix文件的方式来将报表页的名称由原来默认的"第 1 页"修改为"Sheet1"。

通过搜索不难找到包含报表页名的文件在Report文件夹下的Layout,用文本编辑工具打开并修改,把其中的"第 1 页"替换为"Sheet1"。注意,不要用记事本修改,因为记事本会改变文件的编码方式,我用的编辑器是Sublime Text。

如果之前在Power BI Desktop中已经手动修改过页名,比如我们先将页名修改为"abc",那么很有可能页名不止出现在Layout一个文件中,还会多出一个LinguisticSchema的文件,所以如果要修改什么最好先用编辑器工具搜索包含待替换内容的所有文件。

尽管我们已经如此谨慎,但是在修改完文件重新打包压缩并修改扩展名为.pbix后,打开还是会出现报错如下图:

如果说修改Layout文件能起到在Power BI Desktop中修改页名的效果,那么两种方法得到的pbix文件应该一样才对。为此,我准备了直接通过修改Layout来修改页名的pbix解压文件夹A,以及通过Power BI Desktop中修改页名的pbix解压文件夹B,并用哈希校验工具来对比两个文件夹中所有文件的差异。结果表明:

所有文件的哈希值都是一样的,除了SecurityBindings。

这个文件其实是Power BI Desktop的封装校验文件,内容是一些加密的数字,每次保存pbix的时候自动生成。报表中任意改动都会使这个文件发生变化,所以只改了Layout没改SecurityBindings,导致校验失败,就打不开了。但是显然我们并不知道要怎么改,不知道怎么改那就删掉它好了。

删掉SecurityBindings后将文件夹压缩为zip并修改扩展名为.pbix,文件依然打不开,很有可能是因为微软的打包方式我们用压缩软件压缩的方式不一样。通过测试发现,一个pbix文件解压缩后再压缩,哈希值确实会发生变化。

所以总结一下,直接修改pbix文件来修改报表是行得通的,但是要注意以下细节:

  • 扩展名改为.zip后,复制一个副本并解压,所有的修改操作都先在副本文件夹中进行。
  • 修改文件内容不能用记事本,要用Sublime Text,Notepad++之类的编辑器。
  • 将修改好的文件替换原zip中的文件,再将扩展名改回.pbix。避免直接对原文件解压和压缩。
  • 确保所有包含待替换内容的文件都已经同步修改。
  • 删除SecurityBindings文件。
  • 当还是打不开时,用哈希校验工具对比哪个文件有变化,以此来排查问题。

本文介绍了通过直接修改pbix文件的方式来修改报表中的页名,当然真实的应用场景绝不仅仅于此。

笔者遇到过的场景是直连SSAS的报表的模型名称变了,导致报表打开就报错,提示找不到模型,无法通过Power BI Desktop修改,那么就只能通过这种方式来修改连接字符串。

2 Replies to “操控PBIX文件”

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注