Legge til støtte for bokmerker i visualobjekter i Power BI-rapporter
Med bokmerker for Power BI-rapporter kan du registrere og lagre en konfigurert visning av en rapportside. Deretter kan du gå tilbake til den lagrede visningen raskt og enkelt når du vil. Bokmerket lagrer hele konfigurasjonen, inkludert valg og filtre.
Hvis du vil ha mer informasjon om bokmerker, kan du se Bruke bokmerker til å dele innsikt og bygge historier i Power BI.
Visualobjekter som støtter bokmerker
Et Power BI-visualobjekt som støtter bokmerker, må kunne lagre og gi riktig informasjon ved behov. Hvis visualobjektet samhandler med andre visualobjekter, velger datapunkter eller filtrerer andre visualobjekter, må du lagre den bokmerkede tilstanden i visualobjektets filterState-egenskaper .
Merk
Oppretting av et visualobjekt som støtter bokmerker, krever:
- Visualobjekt-API versjon 1.11.0 eller nyere for visualobjekter som ikke er filtrert som bruker
SelectionManager
. - Visuell API versjon 2.6.0 eller nyere for filtervisualobjekter.
- Hvis du vil finne ut hvilken versjon du bruker, kan du se
apiVersion
i pbiviz.json-filen .
Slik samhandler Power BI-visualobjekter med Power BI i rapportbokmerker
La oss si at du vil opprette flere bokmerker på en rapportside der hvert bokmerke har forskjellige datapunkter valgt.
Først velger du ett eller flere datapunkter i visualobjektet. Visualobjektet sender valgene dine til verten. Velg deretter Legg til i Bokmerke-ruten. Power BI lagrer de gjeldende valgene for det nye bokmerket.
Gjør dette flere ganger for å opprette nye bokmerker. Når du har opprettet bokmerkene, kan du bytte mellom dem.
Hver gang du velger et bokmerke, gjenoppretter Power BI det lagrede filteret eller valgtilstanden og sender det til visualobjektene. Visualobjektene i rapporten er uthevet eller filtrert i henhold til tilstanden som er lagret i bokmerket. Hvis du vil gjenopprette riktig tilstand, må visualobjektet sende riktig valgtilstand til verten (for eksempel fargene på gjengitte datapunkter).
Den nye valgtilstanden (eller filteret) formidles gjennom options.jsonFilters
egenskapen i update
metoden. Kan jsonFilters
være enten Advanced Filter
eller Tuple Filter
.
- Hvis visualobjektet inneholder valgte datapunkter, tilbakestiller du det merkede området til det valgte bokmerket ved hjelp av tilbakeringingsfunksjonen,
registerOnSelectCallback
iISelectionManager
. - Hvis visualobjektet bruker filtre til å velge data, tilbakestiller du filterverdiene til de tilsvarende verdiene i det valgte bokmerket.
Visualobjekter med merket område
Merk
InteractivityService er avskrevet.
Hvis visualobjektet samhandler med andre visualobjekter ved hjelp av Utvalg, kan du legge til støtte for bokmerker på én av to måter:
- Gjennom InteractivityService for å administrere valg bruker du
applySelectionFromFilter
. Dette er avskrevet metode. - Gjennom SelectionManager.
Bruk InteractivityService til å gjenopprette bokmerkevalg – avskrevet
Hvis visualobjektet bruker InteractivityService, trenger du ingen andre handlinger for å støtte bokmerkene i visualobjektet.
Når du velger et bokmerke, håndterer verktøyet automatisk valgtilstanden for visualobjektet.
Bruke SelectionManager til å gjenopprette bokmerkevalg
Du kan lagre og tilbakekalle bokmerkevalg ved hjelp av ISelectionManager.registerOnSelectCallback
metoden som følger:
Når du velger et bokmerke, kaller Power BI metoden for visualobjektet callback
med de tilsvarende valgene.
this.selectionManager.registerOnSelectCallback(
(ids: ISelectionId[]) => {
//called when a selection was set by Power BI
});
);
La oss anta at du opprettet et datapunkt i visualObjektmetoden for visualobjektet.
Det datapoints
ser slik ut:
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
});
Du har visualDataPoints
nå som datapunkter og matrisen ids
sendt til callback
funksjonen.
På dette tidspunktet bør visualobjektet sammenligne matrisen ISelectionId[]
med valgene i visualDataPoints
matrisen, og deretter merke de tilsvarende datapunktene som valgt.
this.selectionManager.registerOnSelectCallback(
(ids: ISelectionId[]) => {
visualDataPoints.forEach(dataPoint => {
ids.forEach(bookmarkSelection => {
if (bookmarkSelection.equals(dataPoint.selectionId)) {
dataPoint.selected = true;
}
});
});
});
);
Når du har oppdatert datapunktene, gjenspeiler de gjeldende valgtilstand som er lagret i filter
objektet. Når datapunktene gjengis, samsvarer deretter valgtilstanden for det egendefinerte visualobjektet med tilstanden til bokmerket.
Visualobjekter med et filter
La oss anta at visualobjektet oppretter et filter med data etter datointervall. Du har startDate
og endDate
som start- og sluttdatoer for området.
Visualobjektet oppretter et avansert filter og kaller vertsmetoden applyJsonFilter
for å filtrere data etter de relevante betingelsene.
Målet er tabellen som brukes til 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
);
Hver gang du velger et bokmerke, får det egendefinerte visualobjektet et update
anrop.
update
I metoden kontrollerer visualobjektet filteret i objektet:
const filter: IAdvancedFilter = FilterManager.restoreFilter(
&& options.jsonFilters
&& options.jsonFilters[0] as any
) as IAdvancedFilter;
filter
Hvis objektet ikke er null, gjenoppretter visualobjektet filterbetingelsene fra 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
}
Deretter endrer visualobjektet den interne tilstanden for å samsvare med gjeldende betingelser. Den interne tilstanden inkluderer datapunkter og visualiseringsobjekter (linjer, rektangler og så videre).
Visualobjektet tidslinjeslicer endrer områdevelgeren til de tilsvarende dataområdene.
Lagre filtertilstanden for visualobjektet
I tillegg til å lagre betingelsene for filteret for bokmerket, kan du også lagre andre filteraspekter.
Tidslinjesliceren lagrer for eksempel egenskapsverdiene Granularity
som en filtertilstand. Det gjør at tidslinjens detaljnivå (dager, måneder, år osv.) kan endres etter hvert som du endrer bokmerker.
Egenskapen filterState
lagrer et filteraspekt som en egenskap. Visualobjektet kan lagre ulike filterState
verdier i bokmerker.
Hvis du vil lagre en egenskapsverdi som en filtertilstand, angir du objektegenskapen som "filterState": true
i capabilities.json-filen.