Řízení filtrů sestavy
Při vkládání sestavy Power BI můžete použít filtry automaticky během fáze načítání nebo můžete po načtení sestavy dynamicky měnit filtry. Můžete například vytvořit vlastní podokno filtru a automaticky tyto filtry použít u sestav, aby se zobrazily přehledy specifické pro uživatele. Můžete také vytvořit tlačítko, které uživateli umožní použít filtry na vloženou sestavu.
Podporují se následující typy filtrů:
-
Basic -
IBasicFilter
- rozšířené
-
N -
ITopNFilter
-
relativního data -
IRelativeDateFilter
-
relativního času -
IRelativeTimeFilter
Atributy objektu filtru
Všechny typy filtrů dědí rozhraní IFilter
. Atributy uvedené níže jsou relevantní pro všechny typy filtrů.
interface IFilter {
$schema: string;
target: IFilterGeneralTarget;
filterType: FilterType;
displaySettings?: IFilterDisplaySettings;
}
Schéma
Atribut $schema
definuje typ filtru. K dispozici je pět schémat, jedno pro každý typ filtru:
-
Basic -
https://powerbi.com/product/schema#basic
- rozšířené
-
relativního data -
https://powerbi.com/product/schema#relativeDate
-
relativního času -
https://powerbi.com/product/schema#relativeTime
-
N -
https://powerbi.com/product/schema#topN
Nastavení zobrazení
Atribut displaySettings
definuje způsob zobrazení filtru v podokně filtrů.
interface IFilterDisplaySettings {
isLockedInViewMode?: boolean;
isHiddenInViewMode?: boolean;
displayName?: string;
}
isLockedInViewMode
– Použije se uzamčený filtr a zobrazí se v podokně filtru. Hodnotu filtru nelze změnit v režimu zobrazení . Pokud chcete filtr uzamknout, nastavte ho na true.isHiddenInViewMode
– V sestavě se použije skrytý filtr, ale nezobrazuje se v podokně filtru v režimu zobrazení . Pokud chcete filtr skrýt, nastavte ho na true.displayName
– Filtr se dá zobrazit v podokně filtru s přizpůsobeným názvem. Tento atribut použijte k nastavení přizpůsobeného názvu filtru. Pokud je hodnota nedefinovaná nebo null, zobrazí se výchozí název filtru (obvykle název filtrovaného datového pole).
Typ filtru
Atribut filterType
definuje typ filtru. Použijte následující výčet definovaný v knihovně modelů:
enum FilterType {
Advanced = 0,
Basic = 1,
Unknown = 2,
IncludeExclude = 3,
RelativeDate = 4,
TopN = 5,
Tuple = 6,
RelativeTime = 7,
}
Cíl
Atribut target
definuje cíl filtru. Další informace naleznete v tématu Použití cílů k výběru datového pole, které se má chovat.
Další atributy podle typu filtru
Každý typ filtru má vlastní rozhraní s jinou sadou atributů. Rozhraní filtrů jsou součástí knihovny powerbi-models.
Základní filtr
základní filtr má jeden operátor s jednou nebo více hodnotami.
interface IBasicFilter extends IFilter {
operator: BasicFilterOperators;
values: (string | number | boolean)[];
requireSingleSelection?: boolean;
}
operator
– Pro základní filtr může být operátor jedním z následujících způsobů:type BasicFilterOperators = "In" | "NotIn" | "All"
values
– matice hodnot filtru musí být všechny hodnoty stejného typu.requireSingleSelection
– Definuje, jestli je možné vybrat více hodnot ve filtru. Pokud je nastavena na hodnotu true, lze vybrat pouze jednu hodnotu.
Například:
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
}
Rozšířený filtr
rozšířeného filtru má jeden logický operátor a jednu nebo dvě podmínky, které mají vlastní operátor a hodnotu.
interface IAdvancedFilter extends IFilter {
logicalOperator: AdvancedFilterLogicalOperators;
conditions: IAdvancedFilterCondition[];
}
logicalOperator
– logický operátor může být jeden z následujících:type AdvancedFilterLogicalOperators = "And" | "Or";
conditions
– pole podmínek rozšířeného filtru má každá podmínkaoperator
avalue
.interface IAdvancedFilterCondition { value?: (string | number | boolean | Date); operator: AdvancedFilterConditionOperators; }
Dostupné operátory pro podmínku jsou:
type AdvancedFilterConditionOperators = "None" | "LessThan" | "LessThanOrEqual" | "GreaterThan" | "GreaterThanOrEqual" | "Contains" | "DoesNotContain" | "StartsWith" | "DoesNotStartWith" | "Is" | "IsNot" | "IsBlank" | "IsNotBlank";
Například:
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
}
Poznámka
Pokud vytváříte AdvancedFilter
pouze s jednou podmínkou, nastavte logicalOperator
na "And"
. Logický operátor je při analýze Power BI ignorován, protože existuje pouze jedna podmínka a když je filtr serializován, výchozí logický operátor je "And"
. Tím se zajistí, že filtry vrácené při volání getFilters
odpovídají těm, které jsou nastaveny pomocí setFilters
.
Filtr horních N
filtr prvních N má jeden operátor, čítač položek pro množství položek, které se mají zobrazit, a pořadí podle cíle.
interface ITopNFilter extends IFilter {
operator: TopNFilterOperators;
itemCount: number;
orderBy: ITarget;
}
operator
– operátor filtru Top N může být jeden z následujících:type TopNFilterOperators = "Top" | "Bottom";
itemCount
– množství položek, které se mají zobrazit.orderBy
– cílové datové pole, podle které chcete řadit. Další informace naleznete v tématu Použití cílů k výběru datového pole, které se má chovat.
Například:
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
};
Filtry relativního data a relativního času
Filtr relativního data a filtr relativního času dědí z rozhraní IRelativeDateTimeFilter
:
interface IRelativeDateTimeFilter extends IFilter {
operator: RelativeDateOperators;
timeUnitsCount: number;
timeUnitType: RelativeDateFilterTimeUnit;
}
operator
– operátor pro filtry relativního data a času může být jeden z následujících:enum RelativeDateOperators { InLast = 0, InThis = 1, InNext = 2, }
timeUnitsCount
– množství časových jednotek.timeUnitType
– definuje jednotku času, po který filtr používá.enum RelativeDateFilterTimeUnit { Days = 0, Weeks = 1, CalendarWeeks = 2, Months = 3, CalendarMonths = 4, Years = 5, CalendarYears = 6, Minutes = 7, Hours = 8 }
Následující tabulka uvádí časy jednotek podporované filtry relativního data a relativního času.
Časová jednotka Relativní datum Relativní čas Dny ✔ ✖ Týdny ✔ ✖ KalendářWeeks ✔ ✖ Měsíce ✔ ✖ CalendarMonths ✔ ✖ Roky ✔ ✖ Kalendáře ✔ ✖ Minuty ✖ ✔ Hodiny ✖ ✔ includeToday
– přijímá logickou hodnotu, která určuje, jestli se má do filtru zahrnout aktuální den.interface IRelativeDateFilter extends IRelativeDateTimeFilter { includeToday: boolean; }
Příklad filtru relativního data:
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
};
Příklad filtru relativního času:
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
};
Rozhraní API filtrů
Pomocí následujících metod získejte a aktualizujte filtry použité v sestavě:
-
Získání filtrů -
getFilters
-
filtry aktualizací-
updateFilters
.
Získání filtrů
Pomocí getFilters
získejte všechny filtry pro jeden z následujících objektů:
- Zpráva
- Stránka
- Vizuální
getFilters(): Promise<IFilter[]>
Aktualizace filtrů
Pomocí updateFilters
můžete přidat, nahradit nebo odebrat filtry objektu (sestava, stránka nebo vizuál). Přijme operaci a volitelné pole filtrů.
updateFilters(operation: models.FiltersOperations, filters?: models.IFilter[]): Promise<IHttpPostMessageResponse<void>>
Operace filtrů
Při volání updateFilters
musíte předat operaci filtru chcete předem vytvořit. Dostupné operace jsou:
-
RemoveAll
– Odebere všechny filtry na úrovni filtru. -
ReplaceAll
– Nahradí všechny existující filtry na úrovni filtru danými filtry. -
Add
– přidá dané filtry na úrovni filtru (kromě existujících filtrů). -
Replace
– Nahradí existující filtr daným filtrem pouze v případě, že oba filtry platí pro stejné datové pole. Pokud existuje daný filtr, který nenahrazuje existující filtr, přidá se.
Poznámka
Při volání rozhraní API s RemoveAll
musí být argument filtrů undefined
. Pro všechny ostatní operace musí být definovány.
Úrovně filtrů
Aktualizace a získání filtrů je možné provést na třech úrovních. Filtry na různých úrovních jsou nezávislé a aktualizace filtrů na jedné úrovni se nezmění. Pokud například odeberete filtr stránky, neodeberete ho z jiných stránek v sestavě.
Podporované úrovně pro filtry jsou:
- sestavy – filtry se použijí na všechny stránky sestavy.
- stránka – filtry se použijí na aktuální stránku sestavy.
- visual – filtry se použijí na konkrétní vizuál.
Poznámka
Typ filtru ITopNFilter
podporují pouze filtry na úrovni vizuálů.
Filtry na úrovni sestavy
Pokud chcete získat nebo aktualizovat filtry, které se vztahují na všechny stránky sestavy, zavolejte příslušné rozhraní API na objektu sestavy. Například:
Získání filtrů sestavy
Získání filtrů použitých na všechny stránky
let reportFilters = await report.getFilters();
Přidání nových filtrů do filtrů sestavy
Přidání nových filtrů společně s existujícími filtry pro všechny stránky
await report.updateFilters(models.FiltersOperations.Add, filtersArray);
Odebrání filtrů sestavy
Odeberte filtry použité na všechny stránky.
await report.updateFilters(models.FiltersOperations.RemoveAll);
Filtry na úrovni stránky
Pokud chcete získat nebo aktualizovat filtry na úrovni stránky, postupujte takto:
- Získejte objekt stránky pro cílovou stránku. Další informace najdete v tématu Získání stránek a vizuálů.
- Na objektu stránky zavolejte příslušné rozhraní API.
Získání filtrů stránky
Získání filtrů použitých na konkrétní stránku
let reportFilters = await page.getFilters();
Nahrazení všech filtrů stránky
Nahrazení všech existujících filtrů použitých na konkrétní stránku novou sadou filtrů
await page.updateFilters(models.FiltersOperations.ReplaceAll, filtersArray);
Odebrání filtrů stránky
Odebrání filtrů použitých na konkrétní stránku
await page.updateFilters(models.FiltersOperations.RemoveAll);
Filtry na úrovni vizuálů
Pokud chcete získat nebo aktualizovat filtry na úrovni vizuálů, postupujte takto:
- Získejte objekt vizuálu pro cílový vizuál. Další informace najdete v tématu Získání stránek a vizuálů.
- Na objektu vizuálu zavolejte příslušné rozhraní API.
Získání filtrů vizuálů
Získání filtrů použitých u konkrétního vizuálu
let reportFilters = await visual.getFilters();
Nahrazení filtrů vizuálů stejným cílem
Nahrazení filtrů konkrétního vizuálu Pokud filtr existuje se stejným cílovým datovým polem jako daný filtr, nahradí se daným filtrem. Přidají se filtry, které neodpovídají žádnému existujícímu filtru.
await visual.updateFilters(models.FiltersOperations.Replace, filtersArray);
Odebrání filtrů vizuálů
Odebrání filtrů použitých u konkrétního vizuálu
await visual.updateFilters(models.FiltersOperations.RemoveAll);
Důležité informace a omezení
Při vytváření rozšířeného filtru může dojít k nedefinovanýmu chování s více než dvěma podmínkami.
IncludeExclude
a typy filtrůTuple
se nepodporují.Cíle filtru řazené kolekce členů a hierarchie nejsou podporovány.