使用 XMLA endpoint 将 Power BI Dataset 下载为 .pbix 文件
一旦通过 XMLA endpoint 对 Power BI 语义模型进行了更改,就无法再从 Power BI 服务将该模型下载为 .pbix 文件。
不过,借助 Power BI Project 文件,你可以按下述三个步骤,从远程模型创建一个 .pbix 文件。

Note
本文所述的变通方法并非 Microsoft 官方支持。 无法保证它对每个模型都有效。 特别是,如果你添加了自定义分区或其他 此处列出的 对象,Power BI Desktop 可能无法按此方式正确打开该文件。 下方提供了一个脚本,用于处理增量刷新分区。
步骤 1:创建并保存一个空的 Power BI Project(.pbip)文件
第一步是新建一个 Power BI Report,并将其保存为空的 Power BI Project(.pbip)文件,如下图所示。

这会创建一个文件夹结构,其中包含一个空的 model 文件。 该 model 文件包含模型元数据。 在下一步中,你将用要保存为 .pbix 的已发布模型的元数据覆盖这些元数据。

关闭 Power BI Desktop,然后在 Tabular Editor 中继续下一步操作。
步骤 2:使用 Tabular Editor 打开 XMLA 模型
打开 Tabular Editor 后,通过 XMLA endpoint 连接到 Fabric Workspace。 加载要转换为 .pbix 的 Power BI 语义模型。
步骤 3:将 XMLA 模型保存为 .pbip
在 Tabular Editor 中使用 文件 > 另存为...,导航到 Power BI Project 文件夹。 覆盖上一张图中显示的 model.bim 文件。
这样会把远程模型保存到 Power BI Project 中,现在这个项目会包含模型元数据。
如果 .pbip 文件夹配置为将模型存储为 TMDL 文件,你就需要改用 Tabular Editor 里的“保存到文件夹”选项。 然后转到该语义模型的 Power BI Project 文件夹(ModelName.SemanticModel),打开“definition”文件夹,并把模型保存在那里。
Note
若要启用 TMDL,请转到 Tools > 偏好 > File Formats > Save-to-folder,并在 Serialization mode 下拉列表中选择 "TMDL"。 有关详细信息,请参阅 TMDL 文档
步骤 3.1:移除增量刷新的分区并创建新的分区(可选)
使用下面的 Convert Incremental Refresh 脚本删除增量刷新分区,并为每个表创建一个包含增量刷新中使用的表达式的单一分区。
步骤 4:保存为 .pbix 并在 Power BI Desktop 中打开该文件

打开 .pbip 后,Power BI Report 现在会包含 XMLA endpoint 语义模型。
在 Power BI Desktop 中使用 文件 > 另存为... 将其保存为 .pbix。
重新水合 .pbix
这个 .pbix 现在包含已发布到 Fabric Workspace 的模型。 打开 .pbix 后,可以对该文件进行 重新水合,也就是根据模型中指定的连接来加载数据。
转换增量刷新分区
如果语义模型启用了增量刷新,上述步骤 4 将失败,因为 Power BI Desktop 模型不能包含多个分区。 在这种情况下,应针对该模型运行以下脚本,将增量刷新分区转换为单一分区
foreach (var t in Model.Tables)
{
if(t.EnableRefreshPolicy)
{
//我们将从表的增量刷新源表达式中收集 SourceExpression
string m_expression = t.SourceExpression.ToString();
//我们将生成一个新的分区名称
string partition_name = t.Name + "-" + Guid.NewGuid();
//现在我们将创建一个新的分区
var partition = t.AddMPartition(partition_name, m_expression);
partition.Mode = ModeType.Import;
//接下来我们将删除该表的所有增量刷新分区
foreach (var p in t.Partitions.OfType<PolicyRangePartition>().ToList())
{
p.Delete();
}
}
};
感谢 Micah Dail 编写该脚本,并建议将其纳入本文档。