次の方法で共有


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

スライサー 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;
    }
    
    • または keyValuesvalue設定する必要があります
    • 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] });
    

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

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

  • 演算子から始めて、特定の 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] });
    

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

スライサー API

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

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 はありません。

次の手順