Sdílet prostřednictvím


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

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ínka 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";
    

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í getFiltersodpoví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;
    }
    

    Poznámka

    includeToday je podporován pouze filtrem relativního data .

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ů

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 RemoveAllmusí 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:

  1. Získejte objekt stránky pro cílovou stránku. 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á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:

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

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.