Si vous venez de Power BI Embedded
Si vous avez incorporé des rapports Power BI avec powerbi-client, l'API Embed d'Icon Map vous semblera familière, et c'est voulu : un iframe, un handle, des méthodes qui renvoient des promesses, des événements auxquels vous vous abonnez, des filtres que vous définissez depuis votre page, des signets que vous capturez et appliquez. Cette page établit la correspondance entre les deux.
Les deux mêmes modèles d'incorporation
| Power BI | Icon Map |
|---|---|
| Incorporer pour vos clients (l'application détient les données) | Une carte publiée : embed(element, { publishId }) |
| Incorporer pour votre organisation (l'utilisateur détient les données) | embedForOrganization(element, { mapItem }) |
| Jeton d'incorporation fourni par votre serveur | Jeton d'intégration fourni par votre serveur, pour les publications protégées par jeton (getToken) |
| Jeton Entra pour l'utilisateur connecté | La même chose (getToken(scopes)), ou connexion à l'intérieur du cadre |
Initialisation
// 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() puis embed() : lancer le téléchargement avant d'avoir un jeton |
embed(el, { deferRender: true }) puis map.render({ getToken }) |
report.setAccessToken(token) |
map.setToken({ token }) |
Gestion de tokenExpiration |
Événement tokenExpiring |
report.reload() / refresh() |
map.reload() / map.refreshData() |
report.fullscreen() |
map.fullscreen() |
report.print() |
map.print() |
report.iframe |
map.iframe |
Une différence à connaître : vous n'avez pas besoin d'attendre un événement loaded avant d'appeler l'API. Les commandes émises tôt sont mises en attente jusqu'à ce que la carte puisse y répondre.
Filtres
| Power BI | Icon Map |
|---|---|
getFilters() / setFilters() / removeFilters() |
getFilters() / setFilters() / clearFilters() |
updateFilters(operation, filters) avec Add, Replace, ReplaceAll, RemoveAll |
updateFilters({ operation, filters }) avec add, replace, replaceAll, removeAll |
Filtre de base (In) |
Une valeur de liste : { region: ["EMEA", "APAC"] } |
| Filtre avancé (plage) | { revenue: { low: 1000, high: 5000 } } |
| Filtre de date relative | { period: { operator: "inLast", count: 30, unit: "days" } } |
filter.displaySettings (isLockedInViewMode, isHiddenInViewMode, displayName) |
display: { region: { locked, hidden, displayName } } |
| N'importe quelle table et colonne du modèle | Uniquement les filtres déclarés par l'auteur, à découvrir avec getFilterSchema() |
La dernière ligne est la vraie différence. Dans Power BI, votre page nomme n'importe quelle colonne ; dans Icon Map, elle nomme un filtre que l'auteur a choisi de proposer, et tout le reste est rejeté avec undeclared_filter. Voir Filtres.
Segments, sélection et signets
| Power BI | Icon Map |
|---|---|
visual.getSlicerState() / setSlicerState() |
getSlicers() / setSlicerState({ slicerId, state }) |
Événement dataSelected |
featureClick et selectionChanged |
| Sélection de points de données depuis votre page | selectByKey({ layerId, field, keys }), setSelection() |
| - | highlight() : mise en évidence sans sélection, pour le survol d'une liste |
bookmarksManager.getBookmarks() / apply(name) |
getBookmarks() / applyBookmark({ bookmarkId }) |
bookmarksManager.capture() / applyState(state) |
captureScene() / applyScene({ scene }) |
Événement bookmarkApplied |
Événement bookmarkApplied |
URL de rapport avec ?bookmarkGuid= ou ?filter= |
Liens profonds : ?bookmark=, ?f.<name>=, #s= |
Une scène capturée est un objet simple et documenté plutôt qu'une chaîne opaque, et elle survit à une republication : les parties qui n'existent plus sont ignorées et signalées au lieu de provoquer un échec.
Présentation et navigation
| Power BI | Icon Map |
|---|---|
settings.panes, filterPaneEnabled, navContentPaneEnabled |
setChrome({ legend, layerControl, bookmarksBar, search ... }) |
settings.background: Transparent |
setBackground({ background: "transparent" }) |
report.applyTheme() |
setTheme({ mode }) : clair, sombre ou automatique. Les thèmes personnalisés ne sont pas pris en charge |
settings.localeSettings |
Option language, setLanguage() |
settings.hyperlinkClickBehavior: RaiseEvent + dataHyperlinkClicked |
hyperlinkBehavior: "raiseEvent" + linkClicked |
getPages() / setPage() |
Pas de pages. Les équivalents les plus proches sont les signets et getLayers() / setVisibility() |
setZoom de page et de visuel |
Le groupe caméra : setView, flyTo, fitBounds, fitLayer |
visual.exportData() |
Aucun équivalent, à dessein : voir ci-dessous |
report.saveAs(), mode édition, switchMode() |
Aucun équivalent. Une carte incorporée est en lecture seule |
Commandes personnalisées
| Power BI | Icon Map |
|---|---|
Commande settings.extensions dans le menu contextuel d'un visuel |
addMenuCommand({ id, title, layerIds? }) dans la fenêtre contextuelle d'entité |
Événement commandTriggered |
Événement menuCommandTriggered |
Événements
| Power BI | Icon Map |
|---|---|
loaded |
Promesse ready, événement loaded |
rendered |
rendered (avec durationMs) |
error |
Option onError, événement error, promesses rejetées avec un code |
pageChanged |
bookmarkApplied, visibilityChanged |
filtersApplied |
filtersChanged |
visualClicked, dataSelected |
featureClick, selectionChanged |
| - | viewChanged : la caméra |
Chaque événement d'état d'Icon Map porte une reason (user, command, bookmark ...), ce que ne font pas ceux de Power BI. Elle existe pour qu'une page qui reflète la carte puisse ignorer l'écho de ses propres commandes : voir Événements.
Ce qui fonctionne différemment
- Détection des fonctionnalités. Au lieu de vérifier les versions du SDK ou du service, lisez
(await map.ready).commands. Cette liste indique ce à quoi répond cette carte précise, en tenant compte de la version de la carte, du type d'incorporation et des réglages de l'auteur. - L'auteur garde le contrôle. Chaque groupe de commandes peut être désactivé pour chaque publication, et seuls les sites listés par l'auteur peuvent piloter la carte. Prévoyez
denied_capabilityetdenied_origin. - Pas de données en masse. Il n'existe pas de
exportData().featureClickrenvoie les champs que la couche affiche dans son info-bulle, et rien ne renvoie de lignes en masse. Si votre page a besoin des données, lisez-les depuis votre propre source et utilisezselectByKeypour relier les deux. - Erreurs typées. Les échecs sont des
EmbedErroravec uncodestable, plutôt que des objets d'erreur dont vous devez analyser lemessage. - Taille. Le SDK pèse environ 17 KB sans aucune dépendance, et il existe une version pour balise script destinée aux pages qui ne peuvent pas utiliser de bundler.