レポート スライサーを制御する

スライサー 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]
});

範囲スライサー

Range スライサー 次のようなサポート条件があります。

  • 以前は

範囲スライサーの選択を変更するには、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 が単一の値の選択を表す階層ツリー内で選択された項目と選択されていない項目。

    interface IHierarchyFilterNode {
        value?: PrimitiveValueType;
        keyValues?: PrimitiveValueType[];
        children?: IHierarchyFilterNode[];
        operator?: HierarchyFilterNodeOperators;
    }
    
    • value または keyValues を設定する必要があります
    • children – 現在の選択に関連するノードの子の一覧
    • operator – ツリー内の単一オブジェクトの演算子。 演算子には、次のいずれかを指定できます。

    type HierarchyFilterNodeOperators = "Selected" | "NotSelected" | "Inherited";

    • Selected – 値が明示的に選択されています。
    • NotSelected – 値が明示的に選択されていません。
    • Inherited – 値の選択は階層内の親値に従います。ルート値の場合は既定値です。

    operator は省略可能です。 演算子が設定されていない場合、既定値は Inheritedです。

階層スライサーの例

次の例では、階層スライサーで setSlicerState API を使用するさまざまなシナリオについて説明します。

  • 異なるレベルの値を選択します。 たとえば、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] });
    

    2013 年と 2014 年に四半期 1 と 2 が選択された階層スライサーの例を示すスクリーンショット。

  • 例外があるさまざまなレベルの値を選択します。 たとえば、'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] });
    

    例外があるさまざまなレベルの値を選択する階層スライサーの例を示すスクリーンショット。2014 年は、第 1 四半期を除いて選択されています。

  • 演算子から始めて、特定の値の を除くすべての を選択します。 たとえば、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] });
    

    指定した値以外のすべてを選択する階層スライサーの例を示すスクリーンショット。2010 年から 2014 年が選択されます。2008年はQ1と2009が全く選択されていない状態で選択されている。

スライサー API

slicer 型のビジュアルには、次のメソッドを使用できます。

手記

レポートに保存された同期スライサー構成は、スライサー API によって認識されます。 つまり、API を使用してスライサーを設定すると、同じ同期グループ内のすべてのスライサーが影響を受けるということです。

スライサーの状態を取得する

スライサーの状態を取得するには、スライサービジュアル インスタンスを見つけて を呼び出 必要があります。 結果は ISlicerState型です。

既定では、スライサーにはフィルターは適用されません。 このような場合、getSlicerState はフィルターの空の配列を持つ ISlicerState を返します。

は、すぐに使用 と、AppSource またはファイルからスライサー ビジュアルの両方に対して機能します。

let state = await visual.getSlicerState();

スライサーの状態を設定する

スライサーの状態を設定するには、スライサービジュアル インスタンス 検索し、スライサーの状態を作成し、作成したスライサー状態で を呼び出す必要があります。

await visual.setSlicerState(state);

スライサーの状態は、ISlicerState オブジェクトです。

interface ISlicerState {
    filters: ISlicerFilter[];
    targets?: SlicerTarget[];
}

スライサーをリセットするには、フィルターの空の配列で setSlicerState を呼び出します。

AppSource またはファイルからのビジュアルのスライサーの設定

AppSource またはスライサーの選択 ファイルから ビジュアルを設定するには、次の種類の オブジェクトを作成する必要があります。

  • IBasicFilter
  • IAdvancedFilter
  • IRelativeDateFilter
  • IRelativeTimeFilter

AppSource やファイル スライサーとは異なる ビジュアルでは、さまざまな種類のフィルターがサポートされます。 スライサーを変更するために必要なフィルターの種類を確認するには、visual.getSlicerState()を呼び出します。

フィルターの種類の詳細については、「レポート フィルター制御する」を参照してください。

レポート読み込み時のスライサーの設定

レポートの読み込み構成 では、スライサーの状態の変更がサポートされます。 これにより、レポートの読み込み中にレポート スライサーの状態を変更できます。 これを行うには、ISlicer 配列を渡します。

interface IReportLoadConfiguration {
    ...
    slicers?: ISlicer[];
}

ISlicer オブジェクトには、セレクターとスライサーの状態が含まれています。

interface ISlicer {
    selector: SlicerSelector;
    state: ISlicerState;
}

ビジュアル名 またはスライサー ターゲット セレクター 使用して、変更するスライサーを選択します。 詳細については、「セレクターを使用して、に影響を与えるビジュアルを制御する」を参照してください。

手記

同じ同期グループ内にある異なる 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 つのフィルターのみがサポートされます。

  • スライサーではないビジュアルで を呼び出すと、スライサーでのみ操作が機能 エラーで拒否された約束が返されます。

  • スライサーの同期構成を変更する API はありません。