Řízení filtrů sestavy
Když vložíte sestavu Power BI, můžete filtry použít automaticky během fáze načítání nebo můžete filtry dynamicky měnit po načtení sestavy. Můžete například vytvořit vlastní podokno filtru a automaticky použít tyto filtry na sestavy a zobrazit tak 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ů:
- Základní -
IBasicFilter
- Pokročilé -
IAdvancedFilter
- Horní N -
ITopNFilter
- Relativní datum -
IRelativeDateFilter
- Relativní čas -
IRelativeTimeFilter
Atributy objektu filtru
Všechny typy filtrů dědí IFilter
rozhraní. 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:
- Základní -
http://powerbi.com/product/schema#basic
- Pokročilé -
http://powerbi.com/product/schema#advanced
- Relativní datum -
http://powerbi.com/product/schema#relativeDate
- Relativní čas -
http://powerbi.com/product/schema#relativeTime
- Horní N -
http://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
– Skrytý filtr se použije pro sestavu, ale nezobrazí 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 najdete v tématu Použití cílů k výběru datového pole, na které se má pracovat.
Další atributy podle typu filtru
Každý typ filtru má vlastní rozhraní s jinou sadou atributů. Rozhraní filtru 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:type BasicFilterOperators = "In" | "NotIn" | "All"
values
- Pole hodnot filtru musí být všechny hodnoty stejného typu.requireSingleSelection
- Definuje, zda je možné vybrat více hodnot ve filtru. Pokud je nastavena na hodnotu true, lze vybrat pouze jednu hodnotu.
Příklad:
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,
requireSingleSelection: true
}
Rozšířený filtr
Rozšířený filtr 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 pro rozšířený filtr, každá podmínka máoperator
a .value
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";
Příklad:
const advancedFilter = {
$schema: "http://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 pouze jednu podmínku AdvancedFilter
, nastavte na logicalOperator
"And"
hodnotu . Logický operátor se při analýze Power BI ignoruje, protože existuje jenom jedna podmínka a když je filtr serializován, je výchozí logický operátor "And"
. Tím se zajistí, že filtry vrácené při volání getFilters
odpovídají filtrům nastaveným pomocí setFilters
.
Filtr N nejlepších
Filtr top 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é se má řadit. Další informace najdete v tématu Použití cílů k výběru datového pole, na které se má pracovat.
Příklad:
const topNFilter = {
$schema: "http://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 relativního času oba dědí z IRelativeDateTimeFilter
rozhraní:
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 ✔ ✖ CalendarWeeks ✔ ✖ Měsíce ✔ ✖ CalendarMonths ✔ ✖ Roky ✔ ✖ Kalendáře ✔ ✖ V řádu minut ✖ ✔ 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; }
Poznámka
includeToday
je podporován pouze filtrem relativního data.
Příklad filtru relativního data:
const relativeDateFilter = {
$schema: "http://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: "http://powerbi.com/product/schema#relativeTime",
target: {
table: "Sales",
column: "OrderDate"
},
operator: models.RelativeDateOperators.InLast,
timeUnitsCount: 12,
timeUnitType: models.RelativeDateFilterTimeUnit.Hours,
filterType: models.FilterType.RelativeTime
};
Filtry rozhraní API
Pomocí následujících metod získejte a aktualizujte filtry použité v sestavě:
- Získání filtrů -
getFilters
- Aktualizujte filtry-
updateFilters
.
Získání filtrů
Slouží getFilters
k získání všech filtrů pro jeden z následujících objektů:
- Sestava
- Stránka
- Vizuál
getFilters(): Promise<IFilter[]>
Aktualizace filtrů
Slouží updateFilters
k přidání, nahrazení nebo odebrání filtrů na objektu (sestava, stránka nebo vizuál). Přijímá operaci a volitelné pole filtrů.
updateFilters(operation: models.FiltersOperations, filters?: models.IFilter[]): Promise<IHttpPostMessageResponse<void>>
Operace filtrů
Při volání updateFilters
potřebujete předat operaci filtru , kterou chcete předformulovat. 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
argumentem filtry musí být undefined
. Pro jakékoli jiné operace musí být definován.
Úrovně filtrů
Aktualizace a získání filtrů je možné provést na třech úrovních. Filtry na jiné úrovni jsou nezávislé a aktualizace filtrů na jedné úrovni nezmění jinou. Odebrání filtru stránky například neodebere z jiných stránek v sestavě.
Podporované úrovně filtrů jsou:
- Sestava – Filtry se použijí na všechny stránky v sestavě.
- Stránka – Filtry se použijí na aktuální stránku sestavy.
- Vizuál – Filtry se použijí na konkrétní vizuál.
Poznámka
Typ filtru podporují pouze filtry na úrovni vizuálů ITopNFilter
.
Filtry na úrovni sestav
Pokud chcete získat nebo aktualizovat filtry, které platí pro všechny stránky sestavy, zavolejte příslušné rozhraní API objektu sestavy. Pří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ů spolu 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ánek
Pokud chcete získat nebo aktualizovat filtry na úrovni stránky, postupujte takto:
- Získejte objekt stránky cílové stránky. 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ánek
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);
Omezení
Při vytváření rozšířeného filtru může způsobit nedefinované chování více než dvě podmínky.
IncludeExclude
aTuple
typy filtrů nejsou podporovány.Cíle filtru řazené kolekce členů a hierarchie se nepodporují.