设置视觉对象属性的格式

在 Power BI 中编辑报表时,可以使用 可视化效果 窗格中的“格式”选项自定义报表中的每个视觉对象。 可以自定义每个可视化效果的许多元素,例如标题、图例、背景和工具提示。 借助 Power BI 报表创作 API,你可以以编程方式检索、设置或重置视觉对象属性,而无需 Power BI 编辑 模式。

若要使用视觉对象属性 API 设置视觉对象的格式,需要获取要设置格式的视觉对象。 若要获取报表中所有视觉对象的列表,请使用 类的 Page 方法。

选择格式对象和属性

若要选择要检索、设置或重置的属性,需要定义包含 objectNamepropertyNameIVisualPropertySelector 实例。

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
可见 布尔

自定义视觉对象的可用属性

因此,自定义视觉对象创建者定义其属性,若要查找 objectNamepropertyName,应检查自定义视觉对象源代码。 自定义视觉对象代码是开源的,可以在 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
};

显示 Power B I 主题颜色窗口的屏幕截图。

文本对齐属性值

定义文本对齐方式

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,同时在 getPropertysetProperty 方法上。

默认属性值应定义如下:

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);