Power BI 语义模型的世系标记
可以在语义模型对象中使用 世系标记,以实现跨不同语义模型的此类对象的稳定标识。 使用世系标记,Power BI 功能(如 复合模型) 以保持对引用表或列的绑定(通过使用 SourceLineageTag),即使源语义模型对象重命名也是如此。
世系标记在其范围内必须是唯一的;例如,同一语义模型中的两个表不能具有相同的世系标记。 Power BI Desktop 通常为每个需要世系的语义模型对象分配 GUID,但此类分配不是必需的,世系标记可以更改为任何其他字符串格式。
重要
如果语义模型对象没有世系标记,则 Power BI 默认使用对象名称,这可能会导致对象重命名时自定义项丢失。
跟踪语义模型的用户自定义
语义模型可以包括派生自其他模型或数据源的对象和属性。 例如,在 Power BI 语义模型中创建 复合模型时,、表名和列名、数据类型、格式字符串和其他属性源自源模型。
自定义已从数据源同步的模型中的属性或删除对象时,Power BI 需要将 changedProperties 属性 和 PBI_RemovedChildren 批注设置为指示用户自定义,以便在下次与数据源的架构同步期间维护自定义。
以下对象/属性与数据源同步,并要求声明任何修改的属性和对象删除:
场景 | 对象 | 属性自定义 | 删除自定义 |
---|---|---|---|
Import /DirectQuery | 表、列、关系 | Name、DataType | 关系 1 |
复合 | 表、列、关系、度量值、层次结构、级别 | Name、DataType、IsHidden、FormatString、Description、SummarizeBy、DataCategory、SortByColumn、GroupByColumns、DisplayFolder、IsNullable | 远程模型中未包含在本地模型中的所有表 |
DirectLake | 表、列 | Name、DataType | 模型中不包含 Lakehouse 中的所有表 |
[1] Power BI 根据数据源中的主键和外键信息自动创建关系。 如果用户删除这些关系,Power BI 会跟踪更改,以防止在将来的架构同步期间重新添加这些更改。
ChangedProperties 集合
通过 ChangedProperties 集合,可以指定修改了哪些对象属性值,指示这些值可能不再与源同步。
例如,在 Power BI 语义模型中创建复合模型时,列名源自源模型。 如果在本地模型中重命名列,则需要将 Name 属性指定为已更改的属性。
在以下示例中,源模型中的 ProductID 列已重命名为 ProductKey:
table Products
column ProductKey
dataType: int64
lineageTag: 9636345e-0328-43fb-acd3-e7894734d08a
sourceLineageTag: 6890686b-4899-4916-9ec2-2e8ff5a05eb7
sourceColumn: ProductID
changedProperty = Name
PBI_RemovedChildren批注
PBI_RemovedChildren 批注是在已删除项的父对象上声明的模型批注,该批注声明了用户从本地对象中排除对象的意图。 例如,在构造复合模型时,可以选择加载的表,并且所有未选择的表都包含在数据源的 NamedExpression 中存储的 PBI_RemovedChildren 批注中。 在 Import 和 DirectQuery 模型中,批注存储在模型中以跟踪关系删除。
不声明此批注会导致在与源的架构同步期间检索语义模型对象。
在下面的示例中,从复合模型中删除了一个表。 源模型表的世系标记用于代替其名称,以确保稳定的标识:
expression 'DirectQuery to AS - AdventureWorks' =
let
Source = AnalysisServices.Database("[XMLA Endpoint]"),
Cubes = Table.Combine(Source[Data]),
Cube = Cubes{[Id="Model", Kind="Cube"]}[Data]
in
Cube
annotation PBI_RemovedChildren = [{"remoteItemId":{"analysisServicesObject":{"sourceName":null,"sourceLineageTag":"8e47b52e-1c1a-4029-b6cc-25200d213fcf"}},"objectType":"Table"}]
注意事项和限制
- 对于 Import/DirectQuery 模型,只有在无法将更改折叠到表的 M 查询(例如使用本机查询的 DirectQuery 表中)时,才需要 changedProperty。
- 对于 DirectLake 模型,sourceLineageTag 必须是 Lakehouse/数据仓库中表/列的名称。
下一步
以下文章包含有用的其他信息: