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/数据仓库中表/列的名称。

下一步

以下文章包含有用的其他信息: