Pridanie podpory záložiek do vizuálov v zostavách Power BI

Pomocou záložiek zostáv v službe Power BI môžete zaznamenať a uložiť nakonfigurované zobrazenie strany zostavy. Potom sa môžete kedykoľvek a jednoducho vrátiť k uloženému zobrazeniu. Záložka uloží celú konfiguráciu vrátane výberov a filtrov.

Ďalšie informácie o záložkách nájdete v téme Používanie záložiek na zdieľanie prehľadov a vytváranie príbehov v službe Power BI.

Vizuály podporujúceho záložky

Vizuál služby Power BI, ktorý podporuje záložky, musí byť v prípade potreby schopný uložiť a poskytnúť správne informácie. Ak váš vizuál interaguje s inými vizuálmi, vyberá údajové body alebo filtruje iné vizuály, musíte uložiť stav záložiek vo vlastnostiach filtraŠtát vo vizuáli.

Poznámka

Vytvorenie vizuálu, ktorý podporuje záložky, vyžaduje:

  • Powerbi-visuals-utils-interactivityutils verzie 3.0.0 alebo novšej pre filtrované vizuály a všetky vizuály, ktoré používajú InteractivityService.
  • Rozhranie API vizuálu verzie 1.11.0 alebo novšej pre nefiltrové vizuály, ktoré používajú SelectionManager namiesto funkcie InteractivityService.
  • Ak chcete zistiť, ktorú verziu používate, pozrite si apiVersionsúbor pbiviz.json .

Spôsob interakcie vizuálov služby Power BI so službou Power BI v záložkách zostáv

Povedzme, že chcete vytvoriť niekoľko záložiek na strane zostavy, pričom každá záložka bude mať vybraté rôzne údajové body.

Najskôr vyberte jeden alebo viac údajových bodov vo vizuáli. Vizuál odovzdá vaše výbery hostiteľovi. Potom na table Záložka vyberte položku Pridať. Power BI uloží aktuálne výbery pre novú záložku.

Urobte to niekoľkokrát, ak chcete vytvoriť nové záložky. Po vytvorení záložiek môžete medzi nimi prepínať.

Vždy, keď vyberiete záložku, služba Power BI obnoví uložený filter alebo stav výberu a odovzdá ho do vizuálov. Vizuály v zostave sa zvýraznia alebo filtrujú podľa stavu, ktorý je uložený v záložke. Ak to chcete urobiť, váš vizuál musí hostiteľovi odovzdať správny stav výberu (napríklad farby vykreslených údajových bodov).

Nový stav výberu (alebo filter) sa oznámi prostredníctvom options.jsonFilters vlastnosti v metóde update . Hodnota jsonFilters môže byť buď Advanced Filter , alebo Tuple Filter.

  • Ak váš vizuál obsahuje vybraté údajové body, obnovte výber na výber vybratej záložky pomocou funkcie registerOnSelectCallbackspätného volania v parametri ISelectionManager.
  • Ak váš vizuál používa na výber údajov filtre, obnovte hodnoty filtra na zodpovedajúce hodnoty vybratej záložky.

Vizuály s výberom

Ak váš vizuál interaguje s inými vizuálmi pomocou funkcie Výber, môžete pridať podporu záložiek jedným z dvoch spôsobov:

  • Pomocou modulu InteractivityService môžete spravovať výbery pomocou funkcie applySelectionFromFilter. Ide o jednoduchšiu a preferovanú metódu.
  • Ak váš vizuál nepoužíva modul InteractivityService, môžete ho použiť prostredníctvom funkcie SelectionManager.

Obnovenie výberov záložiek pomocou služby InteractivityService

Ak váš vizuál používa interaktivituService, na podporu záložiek vo vizuáli nepotrebujete vykonať žiadne iné akcie.

Keď vyberiete záložku, nástroj automaticky spracuje stav výberu vizuálu.

Obnovenie výberov záložiek pomocou funkcie SelectionManager

Ak nepoužívate InteractivityService, môžete výbery záložiek uložiť a odvolať takto pomocou ISelectionManager.registerOnSelectCallback metódy:

Keď vyberiete záložku, služba Power BI zavolá metódu vizuálu callback s príslušnými výbermi.

this.selectionManager.registerOnSelectCallback(
    (ids: ISelectionId[]) => {
        //called when a selection was set by Power BI
    });
);

Predpokladajme, že ste vytvorili údajový bod v metóde visualTransform svojho vizuálu.

Vzhľad datapoints vyzerá takto:

visualDataPoints.push({
    category: categorical.categories[0].values[i],
    color: getCategoricalObjectValue<Fill>(categorical.categories[0], i, 'colorSelector', 'fill', defaultColor).solid.color,
    selectionId: host.createSelectionIdBuilder()
        .withCategory(categorical.categories[0], i)
        .createSelectionId(),
    selected: false
});

Teraz máte visualDataPoints údajové body a ids pole je presunuté do callback funkcie .

V tomto momente by mal vizuál porovnať ISelectionId[] pole s výbermi vo vašom visualDataPoints poli a potom označiť zodpovedajúce údajové body tak, ako sú vybraté.

this.selectionManager.registerOnSelectCallback(
    (ids: ISelectionId[]) => {
        visualDataPoints.forEach(dataPoint => {
            ids.forEach(bookmarkSelection => {
                if (bookmarkSelection.equals(dataPoint.selectionId)) {
                    dataPoint.selected = true;
                }
            });
        });
    });
);

Po aktualizácii budú údajové body odrážať aktuálny stav výberu uložený v objekte filter . Následne, keď sa vykreslia údajové body, stav výberu vlastného vizuálu sa bude zhodovať so stavom záložky.

Vizuály s filtrom

Ak chcete podporovať záložky vo vizuáloch, ktoré majú filter, použite .InteractivityService

Predpokladajme, že vizuál vytvorí filter údajov podľa rozsahu dátumov. startDate Hodnoty a endDate sú počiatočným a koncovým dátumom rozsahu.

Vizuál vytvorí rozšírený filter a zavolá metódu applyJsonFilter hostiteľa na filtrovanie údajov podľa príslušných podmienok.

Cieľom je tabuľka, ktorá sa používa na filtrovanie.

import { AdvancedFilter } from "powerbi-models";

const filter: IAdvancedFilter = new AdvancedFilter(
    target,
    "And",
    {
        operator: "GreaterThanOrEqual",
        value: startDate
            ? startDate.toJSON()
            : null
    },
    {
        operator: "LessThanOrEqual",
        value: endDate
            ? endDate.toJSON()
            : null
    });

this.host.applyJsonFilter(
    filter,
    "general",
    "filter",
    (startDate && endDate)
        ? FilterAction.merge
        : FilterAction.remove
);

Zakaždým, keď vyberiete záložku, vlastný vizuál update dostane volanie .

V metóde update vizuál skontroluje filter v objekte:

const filter: IAdvancedFilter = FilterManager.restoreFilter(
    && options.jsonFilters
    && options.jsonFilters[0] as any
) as IAdvancedFilter;

filter Ak objekt nemá hodnotu null, vizuál obnoví podmienky filtrovania z objektu:

const jsonFilters: AdvancedFilter = this.options.jsonFilters as AdvancedFilter[];

if (jsonFilters
    && jsonFilters[0]
    && jsonFilters[0].conditions
    && jsonFilters[0].conditions[0]
    && jsonFilters[0].conditions[1]
) {
    const startDate: Date = new Date(`${jsonFilters[0].conditions[0].value}`);
    const endDate: Date = new Date(`${jsonFilters[0].conditions[1].value}`);

    // apply restored conditions
} else {
    // apply default settings
}

Následne vizuál zmení svoj vnútorný stav tak, aby zodpovedal aktuálnym podmienkam. Vnútorný stav obsahuje údajové body a vizuálne objekty (čiary, obdĺžniky atď.).

Dôležité

V scenári záložiek zostavy vyššie by vizuál nemal volať metódu applyJsonFilter na filtrovanie ostatných vizuálov. Tie už budú filtrované službou Power BI.

Vizuál rýchleho filtra časovej osi zmení selektor rozsahu tak, aby zodpovedal rozsahom údajov.

Uloženie stavu filtra vizuálu

Okrem uloženia podmienok filtra pre záložku môžete uložiť aj ďalšie aspekty filtra.

Rýchly filter časovej osi napríklad ukladá Granularity hodnoty vlastností ako stav filtra. Umožňuje zmenu granularity časovej osi (dni, mesiace, roky atď.) pri zmene záložiek.

Vlastnosť filterState uloží aspekt filtra ako vlastnosť. Vizuál môže v záložkách ukladať rôzne filterState hodnoty.

Ak chcete uložiť hodnotu vlastnosti ako stav filtra, nastavte vlastnosť objektu v súbore capabilities.json ako "filterState": true .