Freigeben über


Lesezeichenunterstützung zu Visualisierungen in Power BI-Berichten hinzufügen

Mit Lesezeichen in Power BI-Berichten können Sie eine konfigurierte Ansicht einer Berichtsseite erfassen und speichern. Anschließend können Sie dann jederzeit schnell und einfach zu dieser Ansicht zurück wechseln. Das Lesezeichen speichert die gesamte Konfiguration, einschließlich ausgewählter Optionen und Filter.

Weitere Informationen zu Lesezeichen finden Sie unter Verwenden von Lesezeichen zum Teilen von Erkenntnissen und Erstellen von Präsentationen in Power BI.

Visuals zur Unterstützung von Lesezeichen

Power BI-Visuals, die Lesezeichen unterstützen, müssen die richtigen Informationen speichern und bei Bedarf bereitstellen können. Wenn Ihr Visual mit anderen Visuals interagiert, Datenpunkte auswählt oder Filter auf andere Visuals anwendet, müssen Sie den mit einem Lesezeichen gespeicherten Zustand in den filterState-Eigenschaften des Visuals speichern.

Hinweis

Für das Erstellen eines Visuals, das Lesezeichen unterstützt, ist Folgendes erforderlich:

  • Visual API Version 1.11.0 oder höher für nicht filterbasierte Visuals, die SelectionManager verwenden.
  • Visual API-Version 2.6.0 oder höher für Filtervisuals
  • Um herauszufinden, welche Version Sie verwenden, überprüfen Sie die apiVersion in der Datei pbiviz.json.

Interaktion von Power BI-Visuals mit Power BI im Berichtslesezeichen

Nehmen wir an, Sie möchten mehrere Textmarken auf einer Berichtsseite erstellen, und für jede Textmarke sind verschiedene Datenpunkte ausgewählt.

Wählen Sie zunächst einen oder mehrere Datenpunkte in Ihrem Visual aus. Das Visual übergibt Ihre Auswahl an den Host. Wählen Sie dann die Option Hinzufügen im Bereich „Lesezeichen“ aus. Power BI speichert die aktuelle Auswahl für das neue Lesezeichen.

Wiederholen Sie diesen Vorgang mehrmals, um neue Lesezeichen zu erstellen. Nachdem Sie die Lesezeichen erstellt haben, können Sie zwischen diesen wechseln.

Immer wenn Sie eine Textmarke auswählen, stellt Power BI den gespeicherten Filter- oder Auswahlzustand wieder her und übergibt ihn an die visuellen Elemente. Die Visuals im Bericht werden basierend auf dem im Lesezeichen gespeicherten Zustand hervorgehoben oder gefiltert. Zum Wiederherstellen des richtigen Zustands muss Ihr Visual den richtigen Auswahlzustand an den Host übergeben (z. B. die Farben der gerenderten Datenpunkte).

Der neue Auswahlzustand (oder Filter) wird über die Eigenschaft options.jsonFilters in der update-Methode mitgeteilt. jsonFilters kann entweder Advanced Filter oder Tuple Filter sein.

  • Wenn Ihr Visual ausgewählte Datenpunkte enthält, setzen Sie die Auswahl mithilfe der Rückruffunktion registerOnSelectCallback in ISelectionManager auf das ausgewählte Lesezeichen zurück.
  • Wenn Ihr Visual Filter zum Auswählen von Daten verwendet, setzen Sie die Filterwerte auf die entsprechenden Werte für das ausgewählte Lesezeichen zurück.

Visuals mit Auswahl

Hinweis

InteractivityService ist veraltet.

Wenn das Visual durch eine Auswahl mit anderen Visuals interagiert, gibt es zwei Möglichkeiten, Lesezeichen hinzuzufügen:

Verwenden Sie InteractivityService, um Lesezeichenauswahlen wiederherzustellen – veraltet

Wenn Ihr Visual InteractivityService verwendet, sind keine weiteren Aktionen Ihrerseits erforderlich, damit die Lesezeichen in Ihrem Visual unterstützt werden.

Wenn Sie ein Lesezeichen auswählen, verarbeitet das Hilfsprogramm automatisch den Auswahlzustand des Visuals.

Verwenden von SelectionManager zum Wiederherstellen der Lesezeichenauswahl

Sie können Lesezeichenauswahlen mithilfe der ISelectionManager.registerOnSelectCallback folgenden Methode speichern und zurückrufen:

Wenn Sie ein Lesezeichen auswählen, ruft Power BI die Methode callback des Visuals mit der entsprechenden Auswahl auf.

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

Angenommen, Sie haben in der visualTransform-Methode Ihres Visuals einen Datenpunkt erstellt.

datapoints sieht wie folgt aus:

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

Sie verfügen jetzt über visualDataPoints als Datenpunkte, und das Array ids wurde an die Funktion callback übergeben.

An diesem Punkt sollte das Visual das Array ISelectionId[] mit der Auswahl im Array visualDataPoints vergleichen und die entsprechenden Datenpunkte dann als ausgewählt markieren.

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

Nach dem Aktualisieren der Datenpunkte wird der aktuelle Auswahlzustand angezeigt, der im Objekt filter gespeichert ist. Wenn die Datenpunkte anschließend gerendert werden, entspricht der Auswahlzustand des benutzerdefinierten Visuals dem Zustand des Lesezeichens.

Visuals mit einem Filter

Nehmen wir an, dass vom Visual ein Datenfilter nach Datumsbereich erstellt wird. Sie haben startDate und endDate als Start- und Enddaten des Bereichs.

Durch das Visual wird ein erweiterter Filter erstellt, und die Hostmethode applyJsonFilter wird aufgerufen, um Daten nach relevanten Bedingungen zu filtern.

Das Ziel ist die Tabelle, die zum Filtern verwendet wird.

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

Sobald ein Benutzer auf ein Lesezeichen klickt, empfängt das benutzerdefinierte Visual einen update-Aufruf.

In der update-Methode überprüft das Visual den Filter im Objekt:

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

Wenn das filter-Objekt nicht NULL ist, stellt das Visual die Filterbedingungen aus dem Objekt wieder her:

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
}

Anschließend passt das Visual seinen internen Zustand an die aktuellen Bedingungen an. Der interne Zustand umfasst die Datenpunkte und Visualisierungsobjekte (Linien, Rechtecke usw.).

Das Visual Zeitachsen-Slicer ändert die Bereichsauswahl in die entsprechenden Datenbereiche.

Speichern des Filterzustands des Visuals

Neben den Filterbedingungen können Sie für das Lesezeichen auch andere Filteraspekte speichern.

So speichert beispielsweise der Zeitachsen-Slicer die Werte für die Eigenschaft Granularity als Filterzustand. Dadurch kann sich die Granularität der Zeitachse (Tage, Monate, Jahre usw.) ändern, wenn Sie zwischen Lesezeichen wechseln.

Die Eigenschaft filterState speichert einen Filteraspekt als Eigenschaft. Das Visual kann mehrere filterState-Werte in Lesezeichen speichern.

Wenn Sie einen Eigenschaftswert als Filterzustand speichern möchten, legen Sie die Objekteigenschaft in der Datei "filterState": true als fest.