统一的命名规范对后续维护与交接至关重要。当发生模型迁移或业务变更时,往往需要批量重命名对象。此时若手动逐一修改,不仅效率低下,还易出错。因此本篇文章将介绍在PowerBI中批量重命名各类对象的实用方法与技巧。
使用PowerQuery进行重命名
PowerQuery可以在数据导入到PowerBI前对数据进行处理,因此也可以在PowerQuery中进行重命名,但只有列名可以批量重命名,表名需要手工修改,并且无法重命名度量值。
需要注意的是,使用PowerQuery进行重命名,并不会自动将度量值或计算列等对象中引用的旧名称修改成最新名称,并且有可能会导致模型关系断开,因此适合度量值不多的新项目使用。
下面给出两种场景下使用PowerQuery批量重命名列名的方法。
列名有规律时的重命名
当重命名的列名有规律时,则可以使用Table.TransformColumnNames函数来处理,此时会迭代每个列名,然后执行指定的表达式。如下图所示:

使用到的表达式如下:
= Table.TransformColumnNames(#"Changed Type",each Text.AfterDelimiter(_,"-"))
其中的_就代表了每个列名,因此针对不同的规律使用不同的处理函数即可,比如本案例中使用的是Text.AfterDelimiter函数,用于提取分隔符后的文本。
列名无规律时的重命名
当列名无规律时,可以使用Excel或输入数据功能,先快速填写并导入一个重命名的字典对照表,如下图所示:

该字典对照表记录了每个表中需要进行重命名的列与对应的新列名。
然后对涉及到的每个表添加一个新步骤,具体如下图所示:

使用到的表达式如下:
= Table.RenameColumns(#"Changed Type",Table.ToRows(Table.SelectRows(#"rename dict",each [Table]="产品")[[Old Name],[New Name]]))
需要注意的是,如果需要重命名多个表的列,那么涉及到的表都需要添加上面的新步骤,并且要把代码中的表名修改成字典对照表中的对应表名,以获取对应的重命名数据。
使用TMDL视图进行重命名
使用TMDL视图进行重命名的方法,只适合重命名对象有规律的场景,如果是无规律的则不适用。具体方法如下:
首先,从数据窗格中将对应的对象拖入到左侧的窗格,如下图所示:

然后,使用Ctrl+H快捷键,或在顶部菜单栏中选择替换选项,根据重命名的名称规律进行替换即可,如下图所示:

上面使用的是自带的替换工具,某些情况下可能并不够强大,面对复杂规则场景下,可以将代码复制出来,然后使用其他工具进行替换处理后再粘贴回去,比如使用正则表达式工具进行处理等等。
最后,点击应用按钮进行应用即可,如下图所示:

使用Tabular Editor进行重命名
Tabular Editor是PowerBI的一个外部工具,可以借助其中的C#脚本来进行批量重命名,并且不限制对象,可以对度量值、表名、列名等模型对象进行重命名。
使用Tabular Editor进行重命名是最推荐的一个方法,因为它还会自动将度量值或计算列等对象中引用的旧名称修改成最新名称,比较方便。
下面给出两种场景下的批量重命名的方法。
对象名称有规律时的重命名
将下面给出的各对象的重命名脚本粘贴到C# Script窗格并进行运行即可,将会迭代每个对象并修改其名称,可根据名称规律修改相应的处理代码,如下图所示:

下面是各对象的重命名代码,这里以文本替换为例,实际应用时的具体处理方式可根据规律或需求进行修改:
1、列名
foreach ( var obj in Model.Tables["订单"].Columns ){
obj.Name = obj.Name.Replace("订单-","");
}
2、表名
foreach ( var obj in Model.Tables ){
obj.Name = obj.Name.Replace("Tbl-","");
}
3、度量值
foreach ( var obj in Model.AllMeasures ){
obj.Name = obj.Name.Replace("M-","");
}
对象名称无规律时的重命名
当对象名称无规律时,可以使用Excel先快速填写一个重命名的字典对照表,并另存为csv文件,如下图所示:

这里以列名的重命名为例,该字典对照表记录了每个表中需要进行重命名的列与对应的新列名,如果是其他对象可以以此类推。
然后将下面的脚本代码粘贴到C# Script窗格,修改csv文件的路径并运行即可,如下图所示:

脚本代码如下:
var measureMetadata = ReadFile("C:/Users/xifeng/Desktop/rename dict.csv");
var tsvRows = measureMetadata.Split(new[] {'\r','\n'},StringSplitOptions.RemoveEmptyEntries);
foreach(var row in tsvRows.Skip(1))
{
var tsvColumns = row.Split(',');
var tblName = tsvColumns[0];
var oldName = tsvColumns[1];
var newName = tsvColumns[2];
Model.Tables[tblName].Columns[oldName].Name = newName; // 重命名列名
/*
Model.Tables[tblName].Name = newName; // 重命名表名
Model.Tables[tblName].Measures[oldName].Name = newName; // 重命名度量值
*/
}
总结
可根据实际情况与场景,选用不同的重命名方法。另外,在进行重命名操作前,最好进行备份。

















