Lägga till stöd för bokmärken i visuella objekt i Power BI-rapporter

Med Power BI-rapportbokmärken kan du samla in och spara en konfigurerad vy av en rapportsida. Sedan kan du gå tillbaka till den sparade vyn snabbt och enkelt när du vill. Bokmärket sparar hela konfigurationen, inklusive val och filter.

Mer information om bokmärken finns i Använda bokmärken för att dela insikter och skapa berättelser i Power BI.

Visuella objekt som stöder bokmärken

Ett visuellt Power BI-objekt som stöder bokmärken måste kunna spara och ange rätt information när det behövs. Om ditt visuella objekt interagerar med andra visuella objekt, väljer datapunkter eller filtrerar andra visuella objekt måste du spara det bokmärkta tillståndet i det visuella objektets filterState-egenskaper .

Kommentar

För att skapa ett visuellt objekt som stöder bokmärken krävs följande:

  • Powerbi-visuals-utils-interactivityutils version 3.0.0 eller senare för visuella filterobjekt och alla visuella objekt som använder InteractivityService.
  • Visual API version 1.11.0 eller senare för visuella objekt som inte filtreras som använder SelectionManager i stället för InteractivityService.
  • Om du vill ta reda på vilken version du använder kontrollerar apiVersion du i filen pbiviz.json .

Hur visuella Power BI-objekt interagerar med Power BI i rapportbokmärken

Anta att du vill skapa flera bokmärken på en rapportsida där varje bokmärke har olika datapunkter valda.

Välj först en eller flera datapunkter i det visuella objektet. Det visuella objektet skickar dina val till värden. Välj sedan Lägg till i bokmärkesfönstret. Power BI sparar de aktuella valen för det nya bokmärket.

Gör detta flera gånger för att skapa nya bokmärken. När du har skapat bokmärkena kan du växla mellan dem.

Varje gång du väljer ett bokmärke återställer Power BI det sparade filtret eller markeringstillståndet och skickar det till de visuella objekten. De visuella objekten i rapporten är markerade eller filtrerade enligt det tillstånd som lagras i bokmärket. Om du vill återställa rätt tillstånd måste det visuella objektet skicka rätt markeringstillstånd till värden (till exempel färgerna på renderade datapunkter).

Det nya markeringstillståndet (eller filtret) kommuniceras via options.jsonFilters egenskapen i update metoden. jsonFilters Kan vara antingen Advanced Filter eller Tuple Filter.

  • Om det visuella objektet innehåller valda datapunkter återställer du markeringen till det valda bokmärket med hjälp av återanropsfunktionen , registerOnSelectCallbacki ISelectionManager.
  • Om det visuella objektet använder filter för att välja data återställer du filtervärdena till motsvarande värden för det valda bokmärket.

Visuella objekt med markering

Om ditt visuella objekt interagerar med andra visuella objekt med val kan du lägga till stöd för bokmärken på något av två sätt:

Använda InteractivityService för att återställa val av bokmärken

Om ditt visuella objekt använder InteractivityService behöver du inga andra åtgärder för att stödja bokmärkena i ditt visuella objekt.

När du väljer ett bokmärke hanterar verktyget automatiskt det visuella objektets urvalstillstånd.

Använd SelectionManager för att återställa val av bokmärken

Om du inte använder InteractivityServicekan du spara och återkalla val av bokmärken med hjälp av ISelectionManager.registerOnSelectCallback metoden på följande sätt:

När du väljer ett bokmärke anropar callback Power BI metoden för det visuella objektet med motsvarande val.

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

Anta att du har skapat en datapunkt i visualTransform-metoden för ditt visuella objekt.

Ser datapoints ut så här:

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

Nu har visualDataPoints du som datapunkter och matrisen ids som skickats callback till funktionen.

Nu ska det visuella objektet jämföra matrisen ISelectionId[] med valen i matrisen visualDataPoints och sedan markera motsvarande datapunkter som valda.

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

När du har uppdaterat datapunkterna återspeglar de det aktuella markeringstillståndet filter som lagras i objektet. När datapunkterna återges matchar sedan det anpassade visuella objektets urvalstillstånd bokmärkets tillstånd.

Visuella objekt med ett filter

Om du vill ha stöd för bokmärken i visuella objekt som har ett filter använder du InteractivityService.

Anta att det visuella objektet skapar ett datafilter efter datumintervall. Du har startDate och endDate som start- och slutdatum för intervallet.

Det visuella objektet skapar ett avancerat filter och anropar värdmetoden applyJsonFilter för att filtrera data efter relevanta villkor.

Målet är den tabell som används för filtrering.

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

Varje gång du väljer ett bokmärke får det anpassade visuella objektet ett update anrop.

update I metoden kontrollerar det visuella objektet filtret i objektet:

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

Om objektet filter inte är null återställer det visuella objektet filtervillkoren från objektet:

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
}

Därefter ändrar det visuella objektet sitt interna tillstånd så att det matchar de aktuella villkoren. Det interna tillståndet omfattar datapunkter och visualiseringsobjekt (linjer, rektanglar och så vidare).

Viktigt!

I scenariot med rapportbokmärken ovan bör det visuella objektet inte anropa applyJsonFilter för att filtrera de andra visuella objekten. De filtreras redan av Power BI.

Det visuella objektet Tidslinjeutsnitt ändrar intervallväljaren till motsvarande dataintervall.

Spara filtertillståndet för det visuella objektet

Förutom att spara filtrets villkor för bokmärket kan du även spara andra filteraspekter.

Tidslinje utsnittet lagrar till exempel egenskapsvärdena Granularity som ett filtertillstånd. Det gör att tidslinjens kornighet (dagar, månader, år osv.) kan ändras när du ändrar bokmärken.

Egenskapen filterState sparar en filteraspekt som en egenskap. Det visuella objektet kan lagra olika filterState värden i bokmärken.

Om du vill spara ett egenskapsvärde som ett filtertillstånd anger du objektegenskapen som "filterState": true i filen capabilities.json .