Vindo do Power BI Embedded
Se você já incorporou relatórios do Power BI com powerbi-client, a API de incorporação do Icon Map vai parecer familiar de propósito: um iframe, um handle, métodos que retornam promises, eventos aos quais você se inscreve, filtros que você define a partir da sua página, indicadores que você captura e aplica. Esta página faz a correspondência entre um e outro.
Os mesmos dois modelos de incorporação
| Power BI | Icon Map |
|---|---|
| Inserir para seus clientes (o aplicativo possui os dados) | Um mapa publicado: embed(element, { publishId }) |
| Inserir para sua organização (o usuário possui os dados) | embedForOrganization(element, { mapItem }) |
| Token de inserção gerado pelo seu servidor | Token de incorporação gerado pelo seu servidor, para publicações protegidas por token (getToken) |
| Token do Entra para o usuário conectado | O mesmo (getToken(scopes)), ou entrada dentro do frame |
Inicialização
// 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() e depois embed(): inicia o download antes de você ter um token |
embed(el, { deferRender: true }) e depois map.render({ getToken }) |
report.setAccessToken(token) |
map.setToken({ token }) |
Tratamento de tokenExpiration |
Evento tokenExpiring |
report.reload() / refresh() |
map.reload() / map.refreshData() |
report.fullscreen() |
map.fullscreen() |
report.print() |
map.print() |
report.iframe |
map.iframe |
Uma diferença que vale a pena conhecer: você não precisa esperar um evento loaded antes de chamar a API. Os comandos emitidos cedo ficam retidos até que o mapa possa respondê-los.
Filtros
| Power BI | Icon Map |
|---|---|
getFilters() / setFilters() / removeFilters() |
getFilters() / setFilters() / clearFilters() |
updateFilters(operation, filters) com Add, Replace, ReplaceAll, RemoveAll |
updateFilters({ operation, filters }) com add, replace, replaceAll, removeAll |
Filtro básico (In) |
Um valor de lista: { region: ["EMEA", "APAC"] } |
| Filtro avançado (intervalo) | { revenue: { low: 1000, high: 5000 } } |
| Filtro de data relativa | { period: { operator: "inLast", count: 30, unit: "days" } } |
filter.displaySettings (isLockedInViewMode, isHiddenInViewMode, displayName) |
display: { region: { locked, hidden, displayName } } |
| Qualquer tabela e coluna do modelo | Somente os filtros que o autor declarou: descubra-os com getFilterSchema() |
A última linha é a diferença real. No Power BI, sua página indica qualquer coluna; no Icon Map, ela indica um filtro que o autor escolheu oferecer, e qualquer outro é rejeitado com undeclared_filter. Veja Filtros.
Segmentações, seleção e indicadores
| Power BI | Icon Map |
|---|---|
visual.getSlicerState() / setSlicerState() |
getSlicers() / setSlicerState({ slicerId, state }) |
Evento dataSelected |
featureClick e selectionChanged |
| Seleção de ponto de dados a partir da sua página | selectByKey({ layerId, field, keys }), setSelection() |
| - | highlight(): destaque sem seleção, para o hover em listas |
bookmarksManager.getBookmarks() / apply(name) |
getBookmarks() / applyBookmark({ bookmarkId }) |
bookmarksManager.capture() / applyState(state) |
captureScene() / applyScene({ scene }) |
Evento bookmarkApplied |
Evento bookmarkApplied |
URL do relatório com ?bookmarkGuid= ou ?filter= |
Links diretos: ?bookmark=, ?f.<name>=, #s= |
Uma cena capturada é um objeto simples e documentado, e não uma string opaca, e sobrevive a uma nova publicação: as partes que não existem mais são ignoradas e informadas, em vez de causar uma falha.
Apresentação e navegação
| Power BI | Icon Map |
|---|---|
settings.panes, filterPaneEnabled, navContentPaneEnabled |
setChrome({ legend, layerControl, bookmarksBar, search ... }) |
settings.background: Transparent |
setBackground({ background: "transparent" }) |
report.applyTheme() |
setTheme({ mode }): claro, escuro ou automático. Temas personalizados não são suportados |
settings.localeSettings |
Opção language, setLanguage() |
settings.hyperlinkClickBehavior: RaiseEvent + dataHyperlinkClicked |
hyperlinkBehavior: "raiseEvent" + linkClicked |
getPages() / setPage() |
Não há páginas. O mais próximo são os indicadores e getLayers() / setVisibility() |
setZoom de página e de visual |
O grupo da câmera: setView, flyTo, fitBounds, fitLayer |
visual.exportData() |
Não há equivalente, por design (veja abaixo) |
report.saveAs(), modo de edição, switchMode() |
Não há equivalente. Um mapa incorporado é somente leitura |
Comandos personalizados
| Power BI | Icon Map |
|---|---|
Comando settings.extensions no menu de contexto de um visual |
addMenuCommand({ id, title, layerIds? }) no pop-up da feição |
Evento commandTriggered |
Evento menuCommandTriggered |
Eventos
| Power BI | Icon Map |
|---|---|
loaded |
Promise ready, evento loaded |
rendered |
rendered (com durationMs) |
error |
Opção onError, evento error, promises rejeitadas com um code |
pageChanged |
bookmarkApplied, visibilityChanged |
filtersApplied |
filtersChanged |
visualClicked, dataSelected |
featureClick, selectionChanged |
| - | viewChanged: a câmera |
Todo evento de estado do Icon Map traz um reason (user, command, bookmark ...), o que os do Power BI não trazem. Ele existe para que uma página que espelha o mapa possa ignorar o eco dos próprios comandos. Veja Eventos.
O que funciona de forma diferente
- Detecção de recursos. Em vez de verificar versões do SDK ou do serviço, leia
(await map.ready).commands. A lista mostra o que este mapa específico responde, considerando a versão do mapa, o tipo de incorporação e as chaves do autor. - O autor está no controle. Cada grupo de comandos pode ser desativado por publicação, e só os sites que o autor listou podem controlar o mapa. Prepare-se para
denied_capabilityedenied_origin. - Sem dados em massa. Não existe
exportData().featureClickretorna os campos que a camada mostra na dica de ferramenta, e nada retorna linhas em massa. Se a sua página precisar dos dados, leia-os da sua própria fonte e useselectByKeypara ligar os dois. - Erros tipados. As falhas são
EmbedErrors com umcodeestável, e não objetos de erro cujamessagevocê precisa interpretar. - Tamanho. O SDK tem cerca de 17 KB, sem dependências, e há uma versão para tag de script para páginas que não usam bundler.