Filtros e atualização de dados

Sua página pode filtrar os dados que um mapa publicado mostra: um cliente, uma região, os últimos 30 dias. Isso é feito por meio de filtros declarados: um conjunto fixo de entradas nomeadas e tipadas que o autor do mapa escolheu no momento da publicação.

Os filtros declarados existem em mapas publicados. Uma incorporação organizacional lê os dados como o leitor conectado, então são as próprias permissões do Fabric e a segurança em nível de linha que filtram nesse caso; use segmentações para qualquer filtragem adicional.

Por que os filtros são declarados

Um filtro é o único lugar em que um valor vindo da sua página chega aos dados do mapa. Por isso a regra é rígida, e é a mesma para mapas de instantâneo e ao vivo:

  • Você só pode indicar um filtro que o autor declarou. Qualquer outro é rejeitado antes de ser aplicado.
  • Os valores são verificados em relação ao tipo declarado e, em mapas ao vivo, são vinculados como parâmetros de consulta no servidor, nunca colados em uma consulta.
  • Um filtro restringe o que o mapa mostra. Ele nunca consegue alcançar dados que a publicação ainda não inclua.

É isso que torna seguro usar valores de filtro vindos de uma URL ou da sessão de um usuário. Isso não é uma barreira de segurança entre usuários: qualquer pessoa que consiga abrir o mapa pode alterar o filtro. Para restringir o que um usuário específico pode ver, use um mapa protegido por token com segurança em nível de linha, ou uma incorporação organizacional.

Descubra os filtros

const schema = await map.getFilterSchema();
[
  { name: "region",   type: "stringList", operators: ["in"],                 label: "Region", column: "Region", values: ["EMEA", "AMER", "APAC"] },
  { name: "revenue",  type: "number",     operators: ["in", "between"],      label: "Revenue" },
  { name: "period",   type: "dateRange",  operators: ["between", "relative"], label: "Order date" }
]

Construa sua interface de filtros a partir disso, em vez de fixar nomes no código: assim ela continua funcionando quando o autor adiciona um filtro, e você sabe quais operadores cada um aceita.

Autores: quando um mapa é publicado, o Icon Map declara automaticamente um filtro para cada coluna que uma das segmentações do mapa consegue alcançar. Portanto, para dar a uma página host um filtro em uma coluna, adicione uma segmentação nessa coluna e publique de novo. Sua página pode então ocultar essa segmentação dos leitores. Veja Bloquear ou ocultar a segmentação correspondente.

Defina filtros

await map.setFilters({ region: ["EMEA", "APAC"] });          // replaces all your filter values
await map.clearFilters();
const current = await map.getFilters();

Defina-os na montagem para evitar carregar primeiro os dados sem filtro:

embed(el, { publishId, filters: { region: ["EMEA"] } });

Formatos de valor

Tipo de filtro Valor Significado
string, number, boolean, date "EMEA" igual a
stringList, numberList ["EMEA", "APAC"] qualquer um de
number, numberList { low: 1000, high: 5000 } entre (qualquer extremo é opcional)
date, dateRange { from: "2026-01-01", to: "2026-03-31" } entre, em dias ISO (qualquer extremo é opcional)
dateRange { operator: "inLast", count: 30, unit: "days" } relativo a hoje

Datas relativas recebem operator "inLast", "inThis" ou "inNext"; unit "days", "weeks", "months" ou "years"; e um includeToday opcional. A janela é calculada em relação à data de hoje sempre que o filtro é aplicado.

await map.setFilters({ period: { operator: "inLast", count: 30, unit: "days", includeToday: true } });

Altere um filtro de cada vez

updateFilters altera alguns filtros sem repetir os demais, no mesmo modelo do updateFilters do Power BI.

await map.updateFilters({ operation: "add",        filters: { region: ["EMEA"] } });   // merge into what is set
await map.updateFilters({ operation: "replace",    filters: { region: ["APAC"] } });   // overwrite these names only
await map.updateFilters({ operation: "replaceAll", filters: { region: ["AMER"] } });   // same as setFilters
await map.updateFilters({ operation: "removeAll" });

Para remover um único filtro, defina os valores que você quer manter:

const { region, ...rest } = await map.getFilters();
await map.setFilters(rest);

Bloquear ou ocultar a segmentação correspondente

Quando sua página define um filtro, o leitor ainda pode ver no mapa uma segmentação para a mesma coluna e tentar alterá-la. display resolve isso:

await map.updateFilters({
  operation: "replace",
  filters: { region: ["EMEA"] },
  display: { region: { locked: true } },
});

locked e hidden removem da vista do leitor a segmentação vinculada à coluna desse filtro, para que o que a sua página fixou continue fixo. displayName a renomeia.

Isso é apresentação, não proteção. Um leitor que abra o endereço do mapa diretamente continua vendo todas as regiões que a publicação contém.

Erros

Código Quando
undeclared_filter Um nome que o autor não declarou. detail.undeclared os lista. Nada foi aplicado.
invalid_args Um valor com formato errado para o tipo do filtro.
denied_capability O autor desativou o grupo Filters.
unsupported_command Esta incorporação não tem filtros declarados (uma incorporação organizacional).

filtersChanged é disparado após cada alteração, com um reason.

Atualize dados ao vivo

Em um mapa publicado com dados ao vivo, refreshData executa as consultas novamente, ignorando o cache:

const { refreshed } = await map.refreshData();                       // every live dataset
await map.refreshData({ bindingIds: ["orders"] });                   // just one

map.on("dataStateChanged", ({ state, bindingIds }) => showSpinner(state === "loading"));

Em um mapa de instantâneo, o comando é resolvido com uma lista vazia: não há nada para executar de novo até que o autor publique outra vez. capabilities.map.dataMode informa qual dos dois você tem: "live", "snapshot" ou "mixed".

Cada atualização consome a capacidade do Fabric do proprietário do mapa, por isso tem limite de taxa e conta para o orçamento de consultas da publicação. Espere rate_limited ou budget_exceeded se a sua página atualizar em um timer curto; o autor também pode desativar o grupo Data refresh, o que o servidor impõe, além do próprio mapa.