Ří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ů:

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í getFiltersodpoví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ů

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 RemoveAllargumentem 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:

  1. Získejte objekt stránky cílové stránky. Další informace najdete v tématu Získání stránek a vizuálů.
  2. 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:

  1. Získejte objekt vizuálu pro cílový vizuál. Další informace najdete v tématu Získání stránek a vizuálů.
  2. 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 a Tuple typy filtrů nejsou podporovány.

  • Cíle filtru řazené kolekce členů a hierarchie se nepodporují.

Další kroky