次の方法で共有


FormattingModel ユーティリティ

"書式設定モデルのユーティリティ" には、Power BI カスタム視覚エフェクトの [プロパティ] ペイン ([書式] ペインと [分析] ペイン) を設定するための、書式設定モデルを作成するために必要なクラス、インターフェイス、メソッドが含まれています。

書式設定サービス

"書式設定サービス" は、書式設定モデルを受け取り、それを [書式] ペインを設定する書式設定モデルに変換します。 書式設定モデル サービスでは、文字列のローカライズもサポートされています。

書式設定サービスの初期化:

import { FormattingSettingsService } from "powerbi-visuals-utils-formattingmodel";

export class MyVisual implements IVisual {
    // declaring formatting settings service 
    private formattingSettingsService: FormattingSettingsService;

    constructor(options: VisualConstructorOptions) {
        
        this.formattingSettingsService = new FormattingSettingsService();
        
        // ...
    }
}

書式設定サービスのインターフェイス IFormattingSettingsService には、次の 2 つの主要なメソッドがあります。

    /**
     * Build visual formatting settings model from metadata dataView
     * 
     * @param dataViews metadata dataView object
     * @returns visual formatting settings model 
     */
    populateFormattingSettingsModel<T extends Model>(typeClass: new () => T, dataViews: powerbi.DataView[]): T;

    /**
     * Build formatting model by parsing formatting settings model object 
     * 
     * @returns powerbi visual formatting model
     */
    buildFormattingModel(formattingSettingsModel: Model): visuals.FormattingModel;

書式設定モデル

"設定モデル" には、[書式] ペインと [分析] ペインのすべての書式設定カードが含まれており、ラップされています。

export class Model {
    cards: Array<Cards>;
}

この例では、新しい書式設定モデルを宣言しています。

import { formattingSettings } from "powerbi-visuals-utils-formattingmodel";

import FormattingSettingsCompositeCard = formattingSettings.CompositeCard;
import FormattingSettingsCards = formattingSettings.Cards;
import FormattingSettingsModel = formattingSettings.Model;

export class VisualSettingsModel extends FormattingSettingsModel {
    // Building my visual formatting settings card
    myVisualCard: FormattingSettingsCompositeCard = new myVisualCardSettings();

    // Add formatting settings card to cards list in model
    cards: FormattingSettingsCards[] = [this.myVisualCard];
}

書式設定カード

"書式設定カード" により、[書式] ペインまたは [分析] ペインで書式設定カードが指定されます。 書式設定カードには、複数の書式設定スライス、コンテナー、グループ、およびプロパティを含めることができます。

書式設定カードにスライスを追加すると、これらすべてのスライスが 1 つの書式設定カードに配置されます。

カード、スライス、およびグループは、visible パラメーターを false (既定では true) に設定することで動的に非表示にすることができます。

analyticsPane パラメーターを true または false に設定することで、カードによって [書式] ペインまたは [分析] ペインを設定できます。

1 つの書式設定設定グループとスライスを含む、書式設定設定カードを宣言する例:

  • カード名は capabilities.json のオブジェクト名と一致する必要があります
  • スライス名は capabilities.json のプロパティ名と一致する必要があります
import { formattingSettings } from "powerbi-visuals-utils-formattingmodel";

import FormattingSettingsCompositeCard = formattingSettings.CompositeCard;
import FormattingSettingsGroup = formattingSettings.Group;
import FormattingSettingsSlice = formattingSettings.Slice;

// Formatting settings group
class myVisualGroupSettings extends FormattingSettingsGroup {
    // Formatting settings slice
    myAnotherNumericSlice = new formattingSettings.NumUpDown({
        name: "myAnotherNumericSlice",
        displayName: "My Formatting Numeric Slice in group",
        value: 15,
        visible: true,
    });

    name: string = "myVisualCard";
    displayName: string = "My Formatting Card";
    analyticsPane: boolean = false;
    visible: boolean = true;
    slices: Array<FormattingSettingsSlice> = [this.myNumericSlice];
}

// Formatting settings card
class myVisualCardSettings extends FormattingSettingsCompositeCard {
    // Formatting settings slice
    myNumericSlice = new formattingSettings.NumUpDown({
        name: "myNumericSlice",
        displayName: "My Formatting Numeric Slice",
        value: 50,
        visible: true,
        options: {
            minValue: {
                type: powerbi.visuals.ValidatorType.Min,
                value: 0,
            },
            maxValue: {
                type: powerbi.visuals.ValidatorType.Max,
                value: 100,
            },
        }
    });

    name: string = "myVisualCard";
    displayName: string = "My Formatting Card";
    analyticsPane: boolean = false;
    visible: boolean = true;

    groupSetting = new myVisualGroupSettings(Object())
    groups: Array<FormattingSettingsGroup> = [this.groupSetting]
    slices: Array<FormattingSettingsSlice> = [this.myNumericSlice];
}

capabilities.json のプロパティ宣言は、次のようになります。

"objects": {
    "myVisualCard": {
        "properties": {
            "myNumericSlice": {
                "type": {
                    "numeric": true 
                }
            },
            "myAnotherNumericSlice": {
                "type": {
                    "numeric": true 
                }
            },
        }
    }
}

[書式設定] グループ

一部の書式設定カード内には、グループを含めることができます。 グループはスライスで構成され、展開/折りたたむことができます。

1 つのスライスで書式設定設定グループを宣言する例:

import { formattingSettings } from "powerbi-visuals-utils-formattingmodel";

import FormattingSettingsGroup = formattingSettings.Group;
import FormattingSettingsSlice = formattingSettings.Slice;

class myVisualGroupSettings extends FormattingSettingsGroup {
    myAnotherNumericSlice = new formattingSettings.NumUpDown({
        name: "myAnotherNumericSlice",
        displayName: "My Formatting Numeric Slice in group",
        value: 15,
        visible: true
    });

    name: string = "myVisualCard";
    displayName: string = "My Formatting Card";
    analyticsPane: boolean = false;
    visible: boolean = true;
    slices: Array<FormattingSettingsSlice> = [this.myNumericSlice];
}

書式設定スライス

書式設定スライスの種類は、単純と複合の 2 種類のスライスで構成されます

各スライスには書式設定プロパティが含まれています。 使用可能な書式設定プロパティの種類の長い一覧があります。

制限付き型 NumUpDown の書式設定設定スライスを宣言する例:

スライス名は capabilities.json のプロパティ名と一致する必要があります。

    import { formattingSettings } from "powerbi-visuals-utils-formattingmodel";

    myNumericSlice = new formattingSettings.NumUpDown({
        name: "myNumericSlice",
        displayName: "My Formatting Numeric Slice",
        value: 50,
        visible: true,
        options: {
            minValue: {
                type: powerbi.visuals.ValidatorType.Min,
                value: 0,
            },
            maxValue: {
                type: powerbi.visuals.ValidatorType.Max,
                value: 100,
            },
        }
    });

FormattingModel ユーティリティを使った書式ペイン モデルの作成

  1. settings.ts ファイルを開きます。
  2. すべてのコンポーネント (カード、グループ、スライス、プロパティ ...) を使用して独自の書式設定設定モデルを構築し、 VisualFormattingSettings という名前を付けます。 設定コードを次のように置き換えます。
import { formattingSettings } from "powerbi-visuals-utils-formattingmodel";

import FormattingSettingsCompositeCard = formattingSettings.CompositeCard;
import FormattingSettingsSlice = formattingSettings.Slice;
import FormattingSettingsModel = formattingSettings.Model;

export class VisualSettingsModel extends FormattingSettingsModel {
    // Building my visual formatting settings card
    myVisualCard: FormattingSettingsCard = new myVisualCardSettings();

    // Add formatting settings card to cards list in model
    cards: Array<FormattingSettingsCompositeCard> = [this.myVisualCard];
}

class myVisualCardSettings extends FormattingSettingsCompositeCard {
    myNumericSlice = new formattingSettings.NumUpDown({
        name: "myNumericSlice",
        displayName: "My Formatting Numeric Slice",
        value: 100,
    });

    name: string = "myVisualCard";
    displayName: string = "My Formatting Card";
    analyticsPane: boolean = false;
    slices: Array<FormattingSettingsSlice> = [this.myNumericSlice];
}
  1. capabilities ファイルに、書式設定オブジェクトとプロパティを追加します
"objects": {
    "myVisualCard": {
        "properties": {
            "myNumericSlice": {
                "type": {
                    "numeric": true 
                }
            }
        }
    }
}
  1. 視覚エフェクト クラスで、次のとおりにインポートします。
import { FormattingSettingsService } from "powerbi-visuals-utils-formattingmodel";
import { VisualFormattingSettingsModel } from "./settings";
  1. 書式設定と書式設定サービスを宣言します
   private formattingSettings: VisualFormattingSettingsModel;
   private formattingSettingsService: FormattingSettingsService;
  1. コンストラクターで書式設定サービスを初期化します
constructor(options: VisualConstructorOptions) {
    this.formattingSettingsService = new FormattingSettingsService();

    // ...
}
  1. 書式設定サービス populateFormattingSettingsModel を使って、更新 API で書式設定を作成します
public update(options: VisualUpdateOptions) {
    this.formattingSettings = this.formattingSettingsService.populateFormattingSettingsModel(VisualFormattingSettingsModel, options.dataViews);
    // ...
}
  1. getFormattingModel API で、書式設定モデルを作成して返します
public getFormattingModel(): powerbi.visuals.FormattingModel {
    return this.formattingSettingsService.buildFormattingModel(this.formattingSettings);
}

書式設定プロパティ セレクター

書式設定プロパティ記述子の省略可能なセレクターは、各プロパティが dataView のどこにバインドされるかを決定します。 4 つの異なるオプションがあります。

記述子オブジェクトの書式設定プロパティにセレクターを追加できます。 次の例は、SampleBarChart に含まれている、プロパティ セレクターを使ったカラー カスタム視覚エフェクトのデータ ポイントからのものです。

new formattingSettings.ColorPicker({
    name: "fill",
    displayName: dataPoint.category,
    value: { value: dataPoint.color },
    selector: dataViewWildcard.createDataViewWildcardSelector(dataViewWildcard.DataViewWildcardMatchingOption.InstancesAndTotals),
    altConstantSelector: dataPoint.selectionId.getSelector(),
    instanceKind: powerbi.VisualEnumerationInstanceKinds.ConstantOrRule
}

設定を既定値にリセットする

書式設定モデルのユーティリティを使用すると、すべての書式設定プロパティ記述子を、既定の記述子 revertToDefaultDescriptors に戻す機能の書式設定カードの一覧に自動的に追加することで、設定を既定にリセットできるようになります。

書式設定のリセットは、以下から操作できます。

  • 書式設定カードの "[既定値にリセット]" ボタン

    Screenshot of format card reset to default button.

  • [書式] ペインの上部バーの "[すべての設定を既定値にリセット]" ボタン

    Screenshot of format pane reset all settings to default button.

ローカライズ

ローカライズ機能の詳細とローカライズ環境の設定方法については、「Power BI 視覚化にローカル言語を追加する」を参照してください。

カスタム視覚エフェクトにローカライズが必要な場合、ローカライズ マネージャーで書式設定サービスを開始します。

constructor(options: VisualConstructorOptions) {

    const localizationManager = options.host.createLocalizationManager();
    this.formattingSettingsService = new FormattingSettingsService(localizationManager);
    
    // ...
}

文字列のローカライズが必要な場合は、適切な書式設定コンポーネントで、displayNamedescription ではなく displayNameKey または descriptionKey を追加します。 ローカライズされた表示名と説明を使用して書式設定スライスを作成する例

 myFormattingSlice = new formattingSettings.NumUpDown({
        name: "myFormattingSlice",
        displayNameKey: "myFormattingSlice_Key",
        descriptionKey: "myFormattingSlice_DescriptionKey",
        value: 100
    });

displayNameKeydescriptionKey の値を resources.json ファイルに追加する必要があります。