レポート フィルターを制御する
Power BI レポートを埋め込む場合は、読み込みフェーズ中
次のフィルターの種類がサポートされています。
-
Basic -
IBasicFilter
-
Advanced -
IAdvancedFilter
-
トップ N -
ITopNFilter
-
相対日付 -
IRelativeDateFilter
-
相対時間 -
IRelativeTimeFilter
フィルター オブジェクトの属性
すべてのフィルターの種類は、IFilter
インターフェイスを継承します。 以下に示す属性は、すべてのフィルターの種類に関連します。
interface IFilter {
$schema: string;
target: IFilterGeneralTarget;
filterType: FilterType;
displaySettings?: IFilterDisplaySettings;
}
スキーマ
$schema
属性は、フィルターの種類を定義します。 フィルターの種類ごとに 1 つずつ、5 つのスキーマを使用できます。
-
Basic -
https://powerbi.com/product/schema#basic
-
Advanced -
https://powerbi.com/product/schema#advanced
-
相対日付 -
https://powerbi.com/product/schema#relativeDate
-
相対時間 -
https://powerbi.com/product/schema#relativeTime
-
トップ N -
https://powerbi.com/product/schema#topN
表示設定
displaySettings
属性は、フィルター ペインにフィルターを表示する方法を定義します。
interface IFilterDisplaySettings {
isLockedInViewMode?: boolean;
isHiddenInViewMode?: boolean;
displayName?: string;
}
isLockedInViewMode
- ロックされたフィルターが適用され、フィルター ウィンドウに表示されます。 ビュー モードのでは、フィルター値変更できません。 フィルターをロックするには、true をに設定します。 isHiddenInViewMode
- 非表示のフィルターはレポートに適用されますが、表示モードのフィルター ウィンドウには表示されません。 フィルターを非表示にするには、true設定します。 displayName
- フィルターは、カスタマイズされた名前でフィルター ウィンドウに表示できます。 この属性を使用して、フィルターの個人用に設定された名前を設定します。 値が未定義または null の場合、フィルターの既定の名前 (通常はフィルター処理されたデータ フィールドの名前) が表示されます。
フィルターの種類
filterType
属性は、フィルターの型を定義します。 モデル ライブラリで定義されている次の列挙型を使用します。
enum FilterType {
Advanced = 0,
Basic = 1,
Unknown = 2,
IncludeExclude = 3,
RelativeDate = 4,
TopN = 5,
Tuple = 6,
RelativeTime = 7,
}
ターゲット
target
属性は、フィルターのターゲットを定義します。 詳細については、「ターゲットを使用して、で動作するデータ フィールドを選択する」を参照してください。
フィルターの種類別の追加属性
各フィルターの種類には、異なる属性セットを持つ独自のインターフェイスがあります。 フィルター インターフェイスは、powerbi-models ライブラリの一部です。
基本フィルター
基本フィルター には、1 つ以上の値を持つ 1 つの演算子があります。
interface IBasicFilter extends IFilter {
operator: BasicFilterOperators;
values: (string | number | boolean)[];
requireSingleSelection?: boolean;
}
operator
- 基本フィルターの場合、演算子は次のいずれかになります。type BasicFilterOperators = "In" | "NotIn" | "All"
values
- フィルターの値の配列。すべての値が同じ型である必要があります。requireSingleSelection
- フィルターで複数の値を選択できるかどうかを定義します。 true設定されている場合は、1 つの値のみを選択できます。
例えば:
const basicFilter = {
$schema: "https://powerbi.com/product/schema#basic",
target: {
table: "Store",
column: "Count"
},
operator: "In",
values: [1, 2, 3, 4],
filterType: models.FilterType.BasicFilter,
requireSingleSelection: true
}
高度なフィルター
高度なフィルター には、1 つの論理演算子と、独自の演算子と値を持つ 1 つまたは 2 つの条件があります。
interface IAdvancedFilter extends IFilter {
logicalOperator: AdvancedFilterLogicalOperators;
conditions: IAdvancedFilterCondition[];
}
logicalOperator
- 論理演算子には、次のいずれかを指定できます。type AdvancedFilterLogicalOperators = "And" | "Or";
conditions
- 高度なフィルターの条件の配列であり、各条件にはoperator
とvalue
があります。interface IAdvancedFilterCondition { value?: (string | number | boolean | Date); operator: AdvancedFilterConditionOperators; }
条件に使用できる演算子は次のとおりです。
type AdvancedFilterConditionOperators = "None" | "LessThan" | "LessThanOrEqual" | "GreaterThan" | "GreaterThanOrEqual" | "Contains" | "DoesNotContain" | "StartsWith" | "DoesNotStartWith" | "Is" | "IsNot" | "IsBlank" | "IsNotBlank";
例えば:
const advancedFilter = {
$schema: "https://powerbi.com/product/schema#advanced",
target: {
table: "Store",
column: "Name"
},
logicalOperator: "Or",
conditions: [
{
operator: "Contains",
value: "Wash"
},
{
operator: "Contains",
value: "Park"
}
],
filterType: models.FilterType.AdvancedFilter
}
手記
条件が 1 つだけの AdvancedFilter
を作成する場合は、logicalOperator
を "And"
に設定します。 論理演算子は、条件が 1 つしかないため Power BI によって解析される場合は無視され、フィルターをシリアル化すると、既定の論理演算子が "And"
されます。 これにより、getFilters
を呼び出すときに返されるフィルターが、setFilters
を使用して設定されたものと一致します。
上位 N 個のフィルター
top N フィルター
interface ITopNFilter extends IFilter {
operator: TopNFilterOperators;
itemCount: number;
orderBy: ITarget;
}
operator
- Top N フィルターの演算子は、次のいずれかになります。type TopNFilterOperators = "Top" | "Bottom";
itemCount
- 表示する項目の量。orderBy
- 並べ替えの基準となるターゲット データ フィールド。 詳細については、「ターゲットを使用して、で動作するデータ フィールドを選択する」を参照してください。
例えば:
const topNFilter = {
$schema: "https://powerbi.com/product/schema#topN",
target: {
table: "Store",
column: "name"
},
operator: "Top",
itemCount: 5,
orderBy: {
table: "Product",
measure: "Count of Product"
},
filterType: models.FilterType.TopN
};
相対日付フィルターと相対時間フィルター
相対日付フィルター と 相対時間フィルターの両方、IRelativeDateTimeFilter
インターフェイスから継承されます。
interface IRelativeDateTimeFilter extends IFilter {
operator: RelativeDateOperators;
timeUnitsCount: number;
timeUnitType: RelativeDateFilterTimeUnit;
}
operator
- 相対日時フィルターの演算子は、次のいずれかになります。enum RelativeDateOperators { InLast = 0, InThis = 1, InNext = 2, }
timeUnitsCount
- 時間単位の量。timeUnitType
- フィルターが使用する時間の単位を定義します。enum RelativeDateFilterTimeUnit { Days = 0, Weeks = 1, CalendarWeeks = 2, Months = 3, CalendarMonths = 4, Years = 5, CalendarYears = 6, Minutes = 7, Hours = 8 }
次の表に、相対日付フィルターと相対時間フィルターでサポートされる単位時間を示します。
時間単位 相対日付 相対時間 日 ✔ ✖ 週間 ✔ ✖ CalendarWeeks ✔ ✖ 月 ✔ ✖ CalendarMonths ✔ ✖ 月日 ✔ ✖ CalendarYears ✔ ✖ 議事録 ✖ ✔ 時間 ✖ ✔ includeToday
- フィルターに現在の日付を含めるかどうかを指定するブール値を受け入れます。interface IRelativeDateFilter extends IRelativeDateTimeFilter { includeToday: boolean; }
手記
includeToday
は、相対日付フィルターでのみサポートされます。
相対日付フィルターの例:
const relativeDateFilter = {
$schema: "https://powerbi.com/product/schema#relativeDate",
target: {
table: "Sales",
column: "OrderDate"
},
operator: models.RelativeDateOperators.InLast,
timeUnitsCount: 30,
timeUnitType: RelativeDateFilterTimeUnit.Days,
includeToday: true,
filterType: models.FilterType.RelativeDate
};
相対時間フィルターの例:
const relativeTimeFilter = {
$schema: "https://powerbi.com/product/schema#relativeTime",
target: {
table: "Sales",
column: "OrderDate"
},
operator: models.RelativeDateOperators.InLast,
timeUnitsCount: 12,
timeUnitType: models.RelativeDateFilterTimeUnit.Hours,
filterType: models.FilterType.RelativeTime
};
フィルター API
レポートに適用されるフィルターを取得および更新するには、次のメソッドを使用します。
フィルターを取得する
getFilters
を使用して、次のいずれかのオブジェクトのすべてのフィルターを取得します。
- 報告
- ページ
- ビジュアル
getFilters(): Promise<IFilter[]>
フィルターの更新
updateFilters
を使用して、オブジェクト (レポート、ページ、ビジュアル) のフィルターを追加、置換、または削除します。 操作と省略可能なフィルター配列を受け取ります。
updateFilters(operation: models.FiltersOperations, filters?: models.IFilter[]): Promise<IHttpPostMessageResponse<void>>
フィルター操作
-
RemoveAll
- フィルター レベルのすべてのフィルターを削除します。 -
ReplaceAll
- フィルター レベルのすべての既存のフィルターを特定のフィルターに置き換えます。 -
Add
- (既存のフィルターに加えて) 特定のフィルターをフィルター レベルに追加します。 -
Replace
- 両方のフィルターが同じデータ フィールドに適用される場合にのみ、既存のフィルターを特定のフィルターに置き換えます。 既存のフィルターを置き換えない特定のフィルターがある場合は、追加されます。
手記
RemoveAll
を使用して API を呼び出す場合は、フィルター引数を undefined
する必要があります。 その他の操作の場合は、定義する必要があります。
フィルター レベル
フィルターの更新と取得は、3 つのレベルで実行できます。 異なるレベルのフィルターは独立しており、あるレベルでフィルターを更新すると、別のレベルは変更されません。 たとえば、ページ フィルターを削除しても、レポート内の他のページからは削除されません。
フィルターでサポートされているレベルは次のとおりです。
手記
ITopNFilter
フィルターの種類をサポートするのは、ビジュアル レベルのフィルターのみです。
レポート レベル フィルター
レポート内のすべてのページに適用されるフィルターを取得または更新するには、レポート オブジェクトで関連する API を呼び出します。 例えば:
レポート フィルターを取得する
すべてのページに適用されるフィルターを取得します。
let reportFilters = await report.getFilters();
レポート フィルターに新しいフィルターを追加する
すべてのページに対して、既存のフィルターと共に新しいフィルターを追加します。
await report.updateFilters(models.FiltersOperations.Add, filtersArray);
レポート フィルターを削除する
すべてのページに適用されているフィルターを削除します。
await report.updateFilters(models.FiltersOperations.RemoveAll);
ページ レベル フィルター
ページ レベル フィルターを取得または更新するには、次の操作を行います。
- ターゲット ページのページ オブジェクトを取得します。 詳細については、「ページとビジュアルを取得する」を参照してください。
- ページ オブジェクトで、関連する API を呼び出します。
ページ フィルターを取得する
特定のページに適用されたフィルターを取得します。
let reportFilters = await page.getFilters();
すべてのページ フィルターを置き換える
特定のページに適用されているすべての既存のフィルターを新しいフィルター セットに置き換えます。
await page.updateFilters(models.FiltersOperations.ReplaceAll, filtersArray);
ページ フィルターを削除する
特定のページに適用されたフィルターを削除します。
await page.updateFilters(models.FiltersOperations.RemoveAll);
ビジュアル レベル フィルター
ビジュアル レベル フィルターを取得または更新するには、次の操作を行います。
- ターゲット ビジュアルのビジュアル オブジェクトを取得します。 詳細については、「ページとビジュアルを取得する」を参照してください。
- ビジュアル オブジェクトで、関連する API を呼び出します。
ビジュアル フィルターを取得する
特定のビジュアルに適用されたフィルターを取得します。
let reportFilters = await visual.getFilters();
ビジュアル フィルターを同じターゲットに置き換える
特定のビジュアルのフィルターを置き換えます。 特定のフィルターと同じターゲット データ フィールドを持つフィルターが存在する場合は、指定されたフィルターに置き換えられます。 既存のフィルターと一致しないフィルターが追加されます。
await visual.updateFilters(models.FiltersOperations.Replace, filtersArray);
ビジュアル フィルターを削除する
特定のビジュアルに適用されたフィルターを削除する。
await visual.updateFilters(models.FiltersOperations.RemoveAll);
考慮事項と制限事項
高度なフィルター を構築するときに 2 つ以上の条件があると、未定義の動作が発生する可能性があります。
IncludeExclude
フィルターとTuple
フィルターの種類はサポートされていません。タプルと階層のフィルター ターゲットはサポートされていません。