设置视觉对象属性的格式
在 Power BI 中编辑报表时,可以使用 可视化效果 窗格中的“格式”选项自定义报表中的每个视觉对象。 可以自定义每个可视化效果的许多元素,例如标题、图例、背景和工具提示。 借助 Power BI 报表创作 API,你可以以编程方式检索、设置或重置视觉对象属性,而无需 Power BI 编辑 模式。
若要使用视觉对象属性 API 设置视觉对象的格式,需要获取要设置格式的视觉对象。 若要获取报表中所有视觉对象的列表,请使用 类的 Page
方法。
选择格式对象和属性
若要选择要检索、设置或重置的属性,需要定义包含 objectName
和 propertyName
的 IVisualPropertySelector
实例。
export interface IVisualPropertySelector {
objectName: string;
propertyName: string;
}
- objectName:对象的名称(例如:“title”)。
- propertyName:对象中属性的名称(例如:“titleText”)。
现用视觉对象的可用属性
现用视觉对象是默认情况下显示在 可视化效果 窗格中的 Power BI 视觉对象。
对象名称 | 属性名称 | 类型 |
---|---|---|
工具提示 | ||
可见 | 布尔 | |
valueColor | 十六进制颜色,IThemeColorProperty | |
labelColor | 十六进制颜色,IThemeColorProperty | |
textSize | 数 | |
fontFamily | 字符串 | |
backgroundColor | 十六进制颜色,IThemeColorProperty | |
透明度 | 数 | |
背景 | ||
可见 | 布尔 | |
颜色 | 十六进制颜色,IThemeColorProperty | |
透明度 | 数 | |
visualHeader | ||
可见 | 布尔 | |
backgroundColor | 十六进制颜色,IThemeColorProperty | |
边境 | 十六进制颜色,IThemeColorProperty | |
透明度 | 数 | |
iconColor | 十六进制颜色,IThemeColorProperty | |
边境 | ||
可见 | 布尔 | |
颜色 | 十六进制颜色,IThemeColorProperty | |
半径 | 数 | |
lockAspect | ||
启用 | 布尔 | |
标题 | ||
可见 | 布尔 | |
对准 | 字符串 (TextAlignment) | |
fontColor | 十六进制颜色,IThemeColorProperty | |
textSize | 数 | |
fontFamily | 字符串 | |
backgroundColor | 十六进制颜色,IThemeColorProperty | |
titleText | 字符串 | |
传说 | ||
可见 | 布尔 | |
位置 | 字符串 (LegendPosition) | |
dataLabels | ||
可见 | 布尔 | |
categoryAxis | ||
可见 | 布尔 | |
valueAxis | ||
可见 | 布尔 |
自定义视觉对象的可用属性
因此,自定义视觉对象创建者定义其属性,若要查找 objectName
和 propertyName
,应检查自定义视觉对象源代码。
自定义视觉对象代码是开源的,可以在 GitHub 上找到其存储库。
例如:查看 Mekko Chart的自定义视觉 src/visual.ts
文件中,可以看到定义的 属性。
下面列出了 Mekko 图表 自定义视觉对象的定义属性。
注意
此列表是从 2021 年 1 月 Mekko Chart 自定义视觉对象的源代码复制的。
public static Properties: MekkoChartProperties = <MekkoChartProperties>{
dataPoint: {
defaultColor: { objectName: "dataPoint", propertyName: "defaultColor" },
fill: { objectName: "dataPoint", propertyName: "fill" },
showAllDataPoints: { objectName: "dataPoint", propertyName: "showAllDataPoints" },
categoryGradient: { objectName: "dataPoint", propertyName: "categoryGradient" },
colorGradientEndColor: { objectName: "dataPoint", propertyName: "colorGradientEndColor" },
colorDistribution: { objectName: "dataPoint", propertyName: "colorDistribution" }
},
columnBorder: {
show: { objectName: "columnBorder", propertyName: "show", },
color: { objectName: "columnBorder", propertyName: "color" },
width: { objectName: "columnBorder", propertyName: "width" }
},
sortSeries: {
enabled: { objectName: "sortSeries", propertyName: "enabled", },
direction: { objectName: "sortSeries", propertyName: "direction" },
displayPercents: { objectName: "sortSeries", propertyName: "displayPercents" }
},
sortLegend: {
enabled: { objectName: "sortLegend", propertyName: "enabled", },
direction: { objectName: "sortLegend", propertyName: "direction" },
groupByCategory: { objectName: "sortLegend", propertyName: "groupByCategory" },
groupByCategoryDirection: { objectName: "sortLegend", propertyName: "groupByCategoryDirection" }
},
xAxisLabels: {
enableRotataion: { objectName: "xAxisLabels", propertyName: "enableRotataion", },
},
categoryColors: {
color: { objectName: "categoryColors", propertyName: "color" },
}
};
注意
不支持 dataPoint
对象。
定义属性值
属性值由 IVisualPropertyValue
对象表示。
export interface IVisualPropertyValue {
schema?: string;
value: any;
}
架构 - 定义值的类型。 有两种可用架构:
属性架构:用于定义属性的
"http://powerbi.com/product/schema#property"
。默认架构:
"http://powerbi.com/product/schema#default"
用于定义默认值。
值 - 要分配给属性的值。
属性值类型
本部分列出了可以配置的属性值类型。
颜色属性值
颜色属性值可以是十六进制颜色(字符串),例如,#0000FF
颜色为蓝色,也可以是设置 报表主题 颜色的 IThemeColorProperty
。
interface IThemeColorProperty {
id: number;
shade: number;
}
- id - 主题颜色的 ID
- 阴影 - 定义颜色阴影的百分比,这些值可以是从 -1 到 1。
例如,若要定义 主题颜色 2、50% 较深,如下所示,应定义 IThemeColorProperty
对象,如下所示:
let themeColorProperty = {
id: 2,
shade: -0.5
};
文本对齐属性值
定义文本对齐方式
const TextAlignment = {
Left: 'left',
Center: 'center',
Right: 'right',
};
图例位置属性值
定义视觉对象上的图例位置
const LegendPosition = {
Top: 'Top',
Bottom: 'Bottom',
Right: 'Right',
Left: 'Left',
TopCenter: 'TopCenter',
BottomCenter: 'BottomCenter',
RightCenter: 'RightCenter',
LeftCenter: 'LeftCenter',
};
默认属性值
用于定义属性默认值的值。 例如,可以将标题设置为视觉对象的自动生成的标题。
interface IDefaultProperty {
}
如果未更改属性(使用 UI 或 API),则其值定义为 IDefaultProperty
,同时在 getProperty
和 setProperty
方法上。
默认属性值应定义如下:
const defaultValue = {
schema: "http://powerbi.com/product/schema#default",
value: {}
};
属性 API
本部分列出了用于设置视觉属性格式的 API。
检索属性
根据属性选择器检索视觉对象的属性值。
getProperty(selector: IVisualPropertySelector): Promise<IVisualPropertyValue>
例如:
const selector = { ... };
let propertyValue = await visual.getProperty(selector);
设置属性
根据属性选择器将属性值设置为视觉对象。
setProperty(selector: IVisualPropertySelector, value: IVisualPropertyValue): Promise<void>
例如:
const selector = { ... };
const propertyValue = { ... };
await visual.setProperty(selector, propertyValue);
重置属性
根据属性选择器重置视觉对象的属性值,这会将属性返回到其默认值,例如,可以将标题设置为视觉对象的自动生成的标题。
resetProperty(selector: IVisualPropertySelector): Promise<void>
例如:
const selector = { ... };
await visual.resetProperty(selector);
完整示例
下面可以看到一个示例,该示例显示与视觉对象标题与名称 VisualContainer1
(唯一的缩进器)居中对齐的示例。
let pages = await report.getPages()
// Retrieve the active page.
let activePage = pages.find(function (page) {
return page.isActive
});
let visuals = await activePage.getVisuals();
// Retrieve the wanted visual. (replace "VisualContainer1" with the requested visual name)
let visual = visuals.find(function (visual) {
return visual.name === "VisualContainer1";
});
// Build a selector for title alignment
const selector = {
objectName: "title",
propertyName: "alignment"
};
// Build the property value
const propertyValue = {
schema: "http://powerbi.com/product/schema#property",
value: models.TextAlignment.Center
};
await visual.setProperty(selector, propertyValue);