レポート スライサーを制御する
スライサー API を使用すると、 Power BI スライサーの状態を取得および設定できます。 さらに、読み込み構成を使用して、レポートの読み込み時にスライサーの状態を変更できます。
スライサー ビジュアルには、次の 2 種類があります。
すぐに 使える - すぐに使える Power BI ビジュアル用のスライサー。 すぐに使用できるスライサーは、Power BI (デスクトップとサービス) に付属するすべての Power BI ビジュアルをサポートします。
AppSource とファイルからの Power BI ビジュアル - サードパーティの Power BI ビジュアルのスライサー。AppSource から、または .pbiviz ファイルとして使用できます。 AppSource とファイルからの Power BI ビジュアルのスライサー、または AppSource またはファイルからの短いビジュアルのスライサーは、開発者によって構築された Power BI ビジュアルのスライサーです。
Slicer オブジェクト
スライサーの種類は 4 つあります。
カテゴリ スライサー
カテゴリ スライサーでは 、次の表示がサポートされます。
- リスト
- ドロップダウン メニュー
- バリュー カード
これらのリストから 1 つまたは複数のアイテムを選択して、それに応じてレポートをフィルター処理できます。
これらの種類のスライサーの選択を変更するには、オブジェクトを IBasicFilter
作成する必要があります。 基本フィルターの作成の詳細については、「 基本フィルター」を参照してください。
const basicFilter = {
$schema: "http://powerbi.com/product/schema#basic",
target: {
table: "Store",
column: "Count"
},
operator: "In",
values: [1, 2, 3, 4],
filterType: models.FilterType.BasicFilter
};
await visual.setSlicerState({
filters: [basicFilter]
});
スライサー ターゲットが階層の場合は、ターゲットを IFilterHierarchyTarget
指定します。 詳細については、「 ターゲットを使用して操作するデータ フィールドを選択する」を参照してください。
const basicFilter = {
$schema: "http://powerbi.com/product/schema#basic",
target: {
table: "Store",
hierarchy: "Country",
hierarchyLevel: "Code"
},
operator: "In",
values: [456, 943],
filterType: models.FilterType.BasicFilter
};
await visual.setSlicerState({
filters: [basicFilter]
});
範囲スライサー
範囲スライサーは 、次のような条件をサポートします。
- 。
- 変更前
- クリック後
範囲スライサーの選択を変更するには、オブジェクトを IAdvancedFilter
作成します。 詳細については、「 高度なフィルター」を参照してください。
const advancedFilter = {
$schema: "http://powerbi.com/product/schema#advanced",
target: {
table: "Store",
column: "Number"
},
logicalOperator: "And",
conditions: [
{
operator: "GreaterThanOrEqual",
value: 30
},
{
operator: "LessThan",
value: 40
}
],
filterType: models.FilterType.AdvancedFilter
};
await visual.setSlicerState({
filters: [advancedFilter]
});
相対日付スライサー
相対日付スライサーでは 、次のような条件がサポートされます。
- 前週
- 過去 5 年間
相対日付スライサーの選択を変更するには、オブジェクトを IRelativeDateFilter
作成します。 詳細については、「 相対日付および相対時間フィルター オブジェクト」を参照してください。
const relativeDateFilter = {
$schema: "http://powerbi.com/product/schema#relativeDate",
target: {
table: "Sales",
column: "OrderDate"
},
operator: models.RelativeDateOperators.InLast,
timeUnitsCount: 30,
timeUnitType: models.RelativeDateFilterTimeUnit.Days,
includeToday: true,
filterType: models.FilterType.RelativeDate
};
await visual.setSlicerState({
filters: [relativeDateFilter]
});
相対時間スライサー
相対タイム スライサーでは 、次のような条件がサポートされます。
- 過去 5 分間
- この時間
相対タイム スライサーの選択を変更するには、オブジェクトを IRelativeTimeFilter
作成します。 詳細については、「 相対日付フィルターと相対時間フィルター」を参照してください。
const relativeTimeFilter = {
$schema: "http://powerbi.com/product/schema#relativeTime",
target: {
table: "Sales",
column: "OrderDate"
},
operator: models.RelativeDateOperators.InLast,
timeUnitsCount: 5,
timeUnitType: models.RelativeDateFilterTimeUnit.Minutes,
filterType: models.FilterType.RelativeTime
};
await visual.setSlicerState({
filters: [relativeTimeFilter]
});
階層スライサー
階層スライサー を使用すると、複数の関連フィールドからフィルター処理できます。
階層スライサーは、SDK バージョン 2.21 からサポートされています。 setSlicerState API を使用して階層スライサーで選択を設定するか、getSlicerState API を使用して現在の階層選択を取得します。
階層スライサーへのフィールドの追加について説明します。
階層フィルター
ス IHierarchyFilter
ライサー階層について説明します。 このフィルターで getSlicerState
メソッドと setSlicerState
メソッドを使用します。
interface IHierarchyFilter extends IFilter {
target: (IFilterTarget | IFilterKeyTarget)[];
hierarchyData: IHierarchyFilterNode[];
}
hierarchyData
- 階層ツリー内で選択された項目と選択されていない項目。それぞれがIHierarchyFilterNode
1 つの値の選択を表します。interface IHierarchyFilterNode { value?: PrimitiveValueType; keyValues?: PrimitiveValueType[]; children?: IHierarchyFilterNode[]; operator?: HierarchyFilterNodeOperators; }
- または
keyValues
をvalue
設定する必要があります children
– 現在の選択に関連するノードの子の一覧operator
– ツリー内の単一オブジェクトの演算子。 演算子には、次のいずれかを指定できます。
type HierarchyFilterNodeOperators = "Selected" | "NotSelected" | "Inherited";
Selected
– 値が明示的に選択されています。NotSelected
– 値が明示的に選択されていません。Inherited
– 値の選択は階層内の親値に従います。ルート値の場合は既定値です。
operator
はオプションです。 演算子が設定されていない場合、既定値は ですInherited
。- または
階層スライサーの例
次の例では、階層スライサーで API を使用するための setSlicerState
さまざまなシナリオについて説明します。
異なるレベルの値を選択します。 たとえば、2013 年には 'Qtr 1' と 'Qtr 2' を選択し、2014 年には 'Qtr 1' と 'Qtr 2' を選択します。
const filter = { "$schema": http://powerbi.com/product/schema#hierarchy, "target": [ { "table": "Dates", "hierarchy": "Date Hierarchy", "hierarchyLevel": "Year" }, { "table": "Dates", "hierarchy": "Date Hierarchy", "hierarchyLevel": "Quarter" } ], "filterType": 9, "hierarchyData": [ { "operator": "Inherited", "value": 2013, "children": [ { "operator": "Selected", "value": "Qtr 1" }, { "operator": "Selected", "value": "Qtr 2" } ] }, { "operator": "Inherited", "value": 2014, "children": [ { "operator": "Selected", "value": "Qtr 1" }, { "operator": "Selected", "value": "Qtr 2" } ] } ] }; await slicer.setSlicerState({ filters: [filter] });
例外を含むさまざまなレベルの値を選択します。 たとえば、'Qtr 1' のない 2014 を選択します。
const filter = { "$schema": http://powerbi.com/product/schema#hierarchy, "target": [ { "table": "Dates", "hierarchy": "Date Hierarchy", "hierarchyLevel": "Year" }, { "table": "Dates", "hierarchy": "Date Hierarchy", "hierarchyLevel": "Quarter" } ], "filterType": 9, "hierarchyData": [ { "operator": "Selected", "value": 2014, "children": [ { "operator": "NotSelected", "value": "Qtr 1" } ] } ] }; await slicer.setSlicerState({ filters: [filter] });
演算子から始めて、特定の
NotSelected
値 を除く すべてを選択します。 たとえば、2008 年と 2009 年の 'Qtr 1' 以外のすべてを選択します。const filter = { "$schema": http://powerbi.com/product/schema#hierarchy, "target": [ { "table": "Dates", "column": "Year" }, { "table": "Dates", "column": "Quarter" } ], "filterType": 9, "hierarchyData": [ { "operator": "NotSelected", "value": 2009 }, { "operator": "Inherited", "value": 2008, "children": [ { "operator": "NotSelected", "value": "Q1" } ] } ] } await slicer.setSlicerState({ filters: [filter] });
スライサー API
型のビジュアルには、次のメソッドを slicer
使用できます。
- スライサーの状態を取得する -
getSlicerState
- スライサーの状態を設定する -
setSlicerState
Note
レポートに保存された同期スライサー構成は、スライサー API によって認識されます。 つまり、API を使用してスライサーを設定すると、同じ同期グループ内のすべてのスライサーが影響を受けることになります。
スライサーの状態を取得する
スライサーの状態を取得するには、 スライサービジュアルインスタンスを見つけて を 呼び出す getSlicerState
必要があります。 結果は ISlicerState
型です。
既定では、スライサーにはフィルターは適用されません。 このような場合、 getSlicerState
はフィルターの空の配列を使用して を返 ISlicerState
します。
getSlicerState
は、AppSource またはファイル スライサーからのすぐに 使用 する ビジュアルとビジュアルの 両方で機能します。
let state = await visual.getSlicerState();
スライサーの状態を設定する
スライサーの状態を設定するには、 スライサービジュアルインスタンスを見つけ、スライ サーの状態を作成し、作成したスライサー状態を使用して を呼び出す setSlicerState
必要があります。
await visual.setSlicerState(state);
スライサーの状態は ISlicerState
オブジェクトです。
interface ISlicerState {
filters: ISlicerFilter[];
targets?: SlicerTarget[];
}
スライサーをリセットするには、フィルターの空の配列を使用して を呼び出 setSlicerState
します。
AppSource またはファイルからのビジュアルのスライサーの設定
AppSource またはファイル スライサーの選択からビジュアルを設定するには、次の種類のオブジェクトをISlicerFilter
作成する必要があります。
IBasicFilter
IAdvancedFilter
IRelativeDateFilter
IRelativeTimeFilter
AppSource またはファイル スライサーとは異なるビジュアルでは、さまざまな種類のフィルターがサポートされています。 スライサーを変更するために必要なフィルターの種類を確認するには、 を呼び出します visual.getSlicerState()
。
フィルターの種類の詳細については、「 レポート フィルターの制御」を参照してください。
レポート読み込み時のスライサーの設定
レポートの読み込み構成 では、スライサーの状態の変更がサポートされています。 これにより、レポートの読み込み中にレポート スライサーの状態を変更できます。 これを行うには、配列を ISlicer
渡します。
interface IReportLoadConfiguration {
...
slicers?: ISlicer[];
}
各 ISlicer
オブジェクトには、セレクターとスライサーの状態が含まれています。
interface ISlicer {
selector: SlicerSelector;
state: ISlicerState;
}
ビジュアル名またはスライサー ターゲット セレクターを使用して、変更するスライサーを選択します。 詳細については、「 セレクターを使用して、影響を受けるビジュアルを制御する」を参照してください。
Note
同じ同期グループ内の異なる ISlicer
オブジェクトを渡すと、結果は予期しない結果になります。
読み込み例にスライサーを適用する
このセクションには、スライサーを使用した読み込み構成の 2 つの例が含まれています。
名前で特定のスライサーを設定する
let slicers = [ { selector: { $schema: "http://powerbi.com/product/schema#visualSelector", visualName: "d1feb8891635af3b335a" }, state: { filters: [advancedFilter] } } ]; let embedConfig = { ... slicers: slicers, };
スライサーターゲットでスライサーを設定する
let target = { table: "Store", column: "StoreNumber" }; let slicers = [ { selector: { $schema: "http://powerbi.com/product/schema#slicerTargetSelector", target: target }, state: { filters: [advancedFilter] } } ]; let embedConfig = { ... slicers: slicers, };
考慮事項と制限事項
タプル スライサーはサポートされていません。
階層スライサーは、SDK バージョン 2.21 からサポートされています。
すぐに使用するスライサーでは、1 つのフィルターのみがサポートされます。
スライサーではないビジュアルで を呼び出
setSlicerState
すと、拒否された Promise が返され、 エラー Operation はスライサーでのみ機能します。スライサーの同期構成を変更する API はありません。