Umstieg von Power BI Embedded
Wenn Sie Power BI-Berichte mit powerbi-client eingebettet haben, wird Ihnen die Icon Map Embed API bewusst vertraut vorkommen: ein iframe, ein Handle, Methoden, die Promises zurückgeben, Ereignisse, die Sie abonnieren, Filter, die Sie von Ihrer Seite aus setzen, Lesezeichen, die Sie erfassen und anwenden. Diese Seite ordnet das eine dem anderen zu.
Dieselben zwei Einbettungsmodelle
| Power BI | Icon Map |
|---|---|
| Einbetten für Ihre Kunden (App besitzt die Daten) | Eine veröffentlichte Karte: embed(element, { publishId }) |
| Einbetten für Ihre Organisation (Benutzer besitzt die Daten) | embedForOrganization(element, { mapItem }) |
| Einbettungstoken von Ihrem Server | Einbettungstoken von Ihrem Server, für Veröffentlichungen mit Token-Schutz (getToken) |
| Entra-Token für den angemeldeten Benutzer | Dasselbe (getToken(scopes)) oder Anmeldung im Frame |
Bootstrapping
// Power BI
const report = powerbi.embed(element, { type: "report", id, embedUrl, accessToken, settings });
report.on("loaded", () => { /* now it is safe to call things */ });
// Icon Map
const map = embed(element, { publishId, getToken });
await map.ready; // optional - commands sent early are held, not lost
| Power BI | Icon Map |
|---|---|
powerbi.embed(el, config) |
embed(el, options) |
powerbi.get(el) |
getEmbed(el) |
powerbi.reset(el) |
reset(el) |
powerbi.bootstrap(), dann embed(): den Download starten, bevor Sie ein Token haben |
embed(el, { deferRender: true }), dann map.render({ getToken }) |
report.setAccessToken(token) |
map.setToken({ token }) |
Behandlung von tokenExpiration |
Ereignis tokenExpiring |
report.reload() / refresh() |
map.reload() / map.refreshData() |
report.fullscreen() |
map.fullscreen() |
report.print() |
map.print() |
report.iframe |
map.iframe |
Ein Unterschied, den Sie kennen sollten: Sie müssen nicht auf ein loaded-Ereignis warten, bevor Sie die API aufrufen. Früh gesendete Befehle werden zurückgehalten, bis die Karte sie beantworten kann.
Filter
| Power BI | Icon Map |
|---|---|
getFilters() / setFilters() / removeFilters() |
getFilters() / setFilters() / clearFilters() |
updateFilters(operation, filters) mit Add, Replace, ReplaceAll, RemoveAll |
updateFilters({ operation, filters }) mit add, replace, replaceAll, removeAll |
Einfacher Filter (In) |
Ein Listenwert: { region: ["EMEA", "APAC"] } |
| Erweiterter Filter (Bereich) | { revenue: { low: 1000, high: 5000 } } |
| Filter für relative Datumsangaben | { period: { operator: "inLast", count: 30, unit: "days" } } |
filter.displaySettings (isLockedInViewMode, isHiddenInViewMode, displayName) |
display: { region: { locked, hidden, displayName } } |
| Jede Tabelle und Spalte im Modell | Nur vom Autor deklarierte Filter, ermittelbar mit getFilterSchema() |
Die letzte Zeile ist der eigentliche Unterschied. In Power BI benennt Ihre Seite eine beliebige Spalte; in Icon Map benennt sie einen Filter, den der Autor anbieten wollte, und alles andere wird mit undeclared_filter abgelehnt. Siehe Filter.
Datenschnitte, Auswahl und Lesezeichen
| Power BI | Icon Map |
|---|---|
visual.getSlicerState() / setSlicerState() |
getSlicers() / setSlicerState({ slicerId, state }) |
Ereignis dataSelected |
featureClick und selectionChanged |
| Auswahl von Datenpunkten von Ihrer Seite aus | selectByKey({ layerId, field, keys }), setSelection() |
| - | highlight(): Hervorhebung ohne Auswahl, für das Überfahren von Listeneinträgen |
bookmarksManager.getBookmarks() / apply(name) |
getBookmarks() / applyBookmark({ bookmarkId }) |
bookmarksManager.capture() / applyState(state) |
captureScene() / applyScene({ scene }) |
Ereignis bookmarkApplied |
Ereignis bookmarkApplied |
Berichts-URL mit ?bookmarkGuid= oder ?filter= |
Deep Links: ?bookmark=, ?f.<name>=, #s= |
Eine erfasste Szene ist ein einfaches, dokumentiertes Objekt statt einer undurchsichtigen Zeichenfolge, und sie übersteht eine erneute Veröffentlichung: Teile, die nicht mehr existieren, werden übersprungen und gemeldet, statt einen Fehler auszulösen.
Darstellung und Navigation
| Power BI | Icon Map |
|---|---|
settings.panes, filterPaneEnabled, navContentPaneEnabled |
setChrome({ legend, layerControl, bookmarksBar, search ... }) |
settings.background: Transparent |
setBackground({ background: "transparent" }) |
report.applyTheme() |
setTheme({ mode }): hell, dunkel oder automatisch. Benutzerdefinierte Designs werden nicht unterstützt |
settings.localeSettings |
Option language, setLanguage() |
settings.hyperlinkClickBehavior: RaiseEvent + dataHyperlinkClicked |
hyperlinkBehavior: "raiseEvent" + linkClicked |
getPages() / setPage() |
Keine Seiten. Am ehesten entsprechen dem Lesezeichen und getLayers() / setVisibility() |
setZoom für Seite und Visual |
Die Kameragruppe: setView, flyTo, fitBounds, fitLayer |
visual.exportData() |
Keine Entsprechung, mit Absicht (siehe unten) |
report.saveAs(), Bearbeitungsmodus, switchMode() |
Keine Entsprechung. Eine eingebettete Karte ist schreibgeschützt |
Benutzerdefinierte Befehle
| Power BI | Icon Map |
|---|---|
Befehl über settings.extensions im Kontextmenü eines Visuals |
addMenuCommand({ id, title, layerIds? }) im Feature-Popup |
Ereignis commandTriggered |
Ereignis menuCommandTriggered |
Ereignisse
| Power BI | Icon Map |
|---|---|
loaded |
Promise ready, Ereignis loaded |
rendered |
rendered (mit durationMs) |
error |
Option onError, Ereignis error, abgelehnte Promises mit einem code |
pageChanged |
bookmarkApplied, visibilityChanged |
filtersApplied |
filtersChanged |
visualClicked, dataSelected |
featureClick, selectionChanged |
| - | viewChanged: die Kamera |
Jedes Zustandsereignis von Icon Map enthält einen reason (user, command, bookmark ...), was bei Power BI nicht der Fall ist. So kann eine Seite, die die Karte spiegelt, das Echo ihrer eigenen Befehle ignorieren, siehe Ereignisse.
Was anders funktioniert
- Funktionserkennung. Statt SDK- oder Dienstversionen zu prüfen, lesen Sie
(await map.ready).commands. Die Liste enthält, was genau diese Karte beantwortet, unter Berücksichtigung der Kartenversion, der Art der Einbettung und der Schalter des Autors. - Der Autor hat die Kontrolle. Jede Befehlsgruppe kann pro Veröffentlichung deaktiviert werden, und nur Websites, die der Autor aufgeführt hat, können die Karte überhaupt steuern. Planen Sie
denied_capabilityunddenied_originein. - Keine Massendaten. Es gibt kein
exportData().featureClickliefert die Felder, die die Ebene in ihrer QuickInfo zeigt, und nichts liefert Zeilen in großer Menge. Wenn Ihre Seite die Daten benötigt, lesen Sie sie aus Ihrer eigenen Quelle und verknüpfen beides mitselectByKey. - Typisierte Fehler. Fehler sind
EmbedErrors mit einem stabilencodestatt Fehlerobjekten, derenmessageSie auswerten müssen. - Größe. Das SDK ist etwa 17 KB groß, hat keine Abhängigkeiten und bietet einen Build für Script-Tags für Seiten, die nicht bündeln können.