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örInteractivityService
. - 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 ,
registerOnSelectCallback
iISelectionManager
. - 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:
- Med InteractivityService för att hantera val använder du
applySelectionFromFilter
. Det här är den enklare och föredragna metoden. - Om ditt visuella objekt inte använder InteractivityService via SelectionManager.
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 InteractivityService
kan 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 .