Power BI 视觉对象的对象和属性

  • 版本 :2023.1(当前版本)

Power BI 视觉对象的对象和属性

对象描述与视觉对象关联的可自定义属性。 对象可以具有多个属性,并且每个属性都具有描述属性的关联类型。 本文提供有关对象和属性类型的信息。

myCustomObject 是用于引用 dataView 中的对象的内部名称。

JSON复制

"objects": {    "myCustomObject": {        "properties": { ... }
}
}

显示名称和说明

备注

显示名称和说明从 API 版本 5.1 开始已弃用。 现在,在格式设置模型而非 capabilities.json 文件中添加显示名称和说明。

displayName 是将显示在属性窗格中的名称。 description 是格式设置属性的说明,该属性将以工具提示的形式向用户显示。

属性

properties 是开发者定义的属性的映射。

JSON复制

"properties": {    "myFirstProperty": {        "type": ValueTypeDescriptor | StructuralTypeDescriptor
}
}

备注

show 是一个特殊属性,允许通过开关来切换对象。

示例:

JSON复制

"properties": {    "show": {        "type": {"bool": true}
}
}

属性类型

具有两种属性类型:ValueTypeDescriptorStructuralTypeDescriptor

值类型描述符

ValueTypeDescriptor 类型大多为基元类型,通常用作静态对象。

下面是一些常见 ValueTypeDescriptor 元素:

TypeScript复制

export interface ValueTypeDescriptor {
text?: boolean;
numeric?: boolean;
integer?: boolean;
bool?: boolean;
}

结构类型描述符

StructuralTypeDescriptor 类型主要用于数据绑定对象。 最常见的 StructuralTypeDescriptor 类型为填充

TypeScript复制

export interface StructuralTypeDescriptor {
fill?: FillTypeDescriptor;
}

渐变属性

渐变属性不能设置为标准属性。 相反,需要设置一个规则,以替代颜色选取器属性(填充类型)

以下代码中显示了一个示例:

JSON复制

"properties": {    "showAllDataPoints": {        "type": {            "bool": true
}
}, "fill": { "type": { "fill": { "solid": { "color": true
}
}
}
}, "fillRule": { "type": { "fillRule": {}
}, "rule": { "inputRole": "Gradient", "output": { "property": "fill", "selector": [ "Category"
]
}
}
}
}

请注意填充和 fillRule 属性。 第一个属性是颜色选取器,第二个属性是在满足规则条件时将替代“填充”属性 visually 的渐变替代规则。

填充属性和替代规则之间的此链接在 fillRule 属性的 "rule">"output" 部分中设置 。

"Rule">"InputRole" 属性设置触发规则(条件)的数据角色。 在此示例中,如果数据角色 "Gradient" 包含数据,将为 "fill" 属性应用该规则。

下面的代码显示了触发填充规则 (the last item) 的数据角色的示例:

JSON复制

{    "dataRoles": [
{ "name": "Category", "kind": "Grouping", "displayName": "Details", "displayNameKey": "Role_DisplayName_Details"
},
{ "name": "Series", "kind": "Grouping", "displayName": "Legend", "displayNameKey": "Role_DisplayName_Legend"
},
{ "name": "Gradient", "kind": "Measure", "displayName": "Color saturation", "displayNameKey": "Role_DisplayName_Gradient"
}
]
}

“格式设置”窗格

若要自定义格式设置窗格中的属性,请使用以下方法之一,具体取决于所使用的 API 版本。

  • getFormattingModel API 方法

  • enumerateObjectInstances API 方法 - 已弃用

备注

从 API 版本 5.1 开始支持 getFormattingModelAPI 方法

若要在 API 版本 5.1 及更高版本中有效使用对象,需要实现 getFormattingModel 方法。
此方法生成并返回格式设置模型,该模型包含格式设置卡片、格式设置组的完整属性窗格层次结构,还包含格式设置属性及其值。

格式设置模型中反映的功能对象

格式设置模型中的每个格式设置属性都需要 capabilities.json 文件中的对应对象。 格式设置属性应包含一个描述符,该描述符具有与相应功能对象完全匹配的对象名称和属性名称(对象和属性名称区分大小写)。
例如:

有关格式设置模型中的以下格式设置属性(请参阅描述符对象内容):

TypeScript复制

 const myCustomCard: powerbi.visuals.FormattingCard = {
displayName: "My Custom Object Card",
uid: "myCustomObjectCard_uid",
groups: [{
displayName: undefined,
uid: "myCustomObjectGroup_uid",
slices: [
{
uid: "myCustomProperty_uid",
displayName: "My Custom Property",
control: { type: powerbi.visuals.FormattingComponent.ColorPicker,
properties: {
descriptor: {
objectName: "myCustomObject",
propertyName: "myCustomProperty",
selector: null // selector is optional
},
value: { value: "#000000" }
}
}
}
],
}],
};

功能 objects 部分中的相应对象应为:

JSON复制

    "objects": {        "myCustomObject": {            "properties": {                "myCustomProperty": {                    "type": {                         "fill": {                            "solid": {                                "color": true
}
}
}
}
}
}
}

格式设置属性选择器

格式设置属性描述符中的可选选择器确定每个属性在 dataView 中绑定的位置。 有四种不同选项。

示例

上面的 myCustomCard 示例显示了格式设置模型中的格式设置属性对具有一个属性 myCustomProperty 的对象的外观。 此属性对象以静态方式绑定到 dataViews[index].metadata.objects。 描述符中的选择器可以相应地更改为所选的选择器类型。

对象选择器类型

enumerateObjectInstances 中的选择器决定每个对象在 dataView 中的绑定位置。 有四种不同选项:

  • static

  • 选择器

  • 作用域标识

static

此对象绑定到元数据 dataviews[index].metadata.objects,如下所示。

TypeScript复制

selector: null

此对象绑定到具有匹配 QueryName 的列。

TypeScript复制

selector: {
metadata: 'QueryName'}

选择器

此对象将绑定到你为其创建了 selectionID 的元素。 在此示例中,假设已为某些数据点创建 selectionID,并且正在循环遍历它们。

TypeScript复制

for (let dataPoint in dataPoints) {
...
selector: dataPoint.selectionID.getSelector()
}

作用域标识

此对象绑定到组交集处的特定值。 例如,如果具有类别 ["Jan", "Feb", "March", ...] 和系列 ["Small", "Medium", "Large"],可能会需要在匹配 FebLarge 的值的交集上有一个对象。 为实现此目的,可以获取这两个列的 DataViewScopeIdentity,将它们推送到变量 identities,然后再结合使用此语法与选择器。

TypeScript复制

selector: {
data: identities
}