Voltar para Blog

Global Search para Power BI — Detalhamento Técnico

|Diego Dias

Global Search para Power BI — Detalhamento Técnico

Artigo para blog técnico, público: desenvolvedores, analistas e arquitetos de dados que trabalham com Power BI.

Documentation

O problema real: busca transversal em modelos dimensionais

Relatórios Power BI crescem em complexidade proporcional ao amadurecimento do modelo de dados. Um modelo estrela bem projetado pode facilmente ter 15, 20 ou mais dimensões relevantes para o usuário final: clientes, produtos, regiões, categorias, status, representantes, centros de custo, referências internas e SKUs.

O problema não é o modelo. O problema é que o Power BI não oferece, nativamente, um mecanismo de busca transversal entre colunas de tabelas distintas. O usuário precisa conhecer a estrutura do modelo para saber onde procurar um dado específico.

O que existe nativamente

O Power BI oferece o campo de busca interno do painel de filtros, mas ele opera dentro de um único campo por vez e não é exposto como elemento de UI no canvas do relatório. O slicer nativo tem busca textual, mas é igualmente restrito a uma única coluna.

As gambiarras mais comuns, e seus custos reais

Quando um desenvolvedor precisa simular busca multi-campo no Power BI sem um visual dedicado, os caminhos mais utilizados são:

1. Pilha de slicers com busca individual A abordagem mais simples: um slicer por coluna relevante, todos com o campo de busca habilitado. Funciona para dois ou três campos. A partir daí, passa a ocupar espaço excessivo no canvas, obriga o usuário a saber em qual slicer procurar e não oferece uma experiência unificada.

2. Field Parameters + DAX + Bookmarks A abordagem considerada mais “correta” para quem busca dinamismo. O fluxo típico é:

  • Criar um Field Parameter que agrupa as colunas pesquisáveis
  • Escrever medidas DAX de filtragem dinâmica baseadas na seleção do parâmetro
  • Criar um slicer sobre o parâmetro para o usuário escolher qual campo deseja pesquisar
  • Adicionar um segundo slicer (ou campo de texto via Q&A) para o valor
  • Amarrar tudo com bookmarks e botões de navegação para criar a ilusão de uma experiência unificada

O resultado costuma ser frágil. Qualquer renomeação de tabela ou coluna pode quebrar as medidas DAX. A manutenção se torna cara. A experiência ainda não é de busca livre, pois o usuário continua precisando escolher o campo antes de digitar o valor.

3. Unpivot no Power Query Outra abordagem que aparece com frequência é usar o Power Query para fazer o unpivot das colunas pesquisáveis em uma tabela atributo-valor, consolidando tudo em uma única coluna “Valor”, acompanhada por uma coluna “Campo”.

O problema é estrutural: o unpivot desnormaliza o modelo. O volume de linhas pode explodir (N colunas × M linhas originais). Relacionamentos com outras tabelas precisam ser refeitos ou duplicados. Medidas que dependem da granularidade original deixam de funcionar corretamente. É uma solução de busca que compromete a integridade do modelo.

4. Q&A Visual O visual de Perguntas e Respostas do Power BI utiliza linguagem natural, mas depende de sinônimos configurados manualmente, tem comportamento imprevisível em português e não oferece controle sobre quais campos serão pesquisados. Não é adequado para ambientes corporativos que exigem previsibilidade.


O que o Global Search faz de diferente

O Global Search é um visual que resolve o problema de busca transversal de forma direta, sem alterar o modelo de dados e sem exigir DAX adicional.

Arquitetura de filtros

O visual recebe até 25 colunas por meio de um único data role (searchFields, do tipo Grouping). Em cada ciclo de update(), ele lê as linhas da tabela achatada (dataView.table.rows) e indexa os valores únicos por coluna.

A aplicação de filtros é feita por meio da API IVisualHost.applyJsonFilter, utilizando BasicFilter com operador In, ou seja, um filtro por coluna ativa. Isso significa que os filtros se propagam pelo modelo como qualquer outro filtro do Power BI, respeitando relacionamentos, segurança em nível de linha (RLS) e todos os visuais da página.

Desacoplamento de nome de tabela

Um detalhe crítico de implementação é que o Power BI congela o queryName de cada coluna no momento do binding. Se o usuário renomear a tabela no modelo após conectar os campos, o queryName fica desatualizado e os filtros deixam de funcionar silenciosamente.

O Global Search resolve isso utilizando col.expr como fonte de verdade:

const expr = (col as any).expr;

const tableName = expr?.source?.entity || col.queryName?.split('.')[0];

const columnName = expr?.ref || col.queryName?.split('.')[1];

A cada update(), o visual compara os campos ativos com os filtros aplicados, detecta renomeações automaticamente e reaplica os filtros com os nomes corretos, sem intervenção do usuário.

Modos de busca

Configuráveis no Format Pane:

ModoComportamento
ContainsCorresponde a qualquer posição do valor (padrão)
Starts WithCorresponde apenas ao início do valor
EqualsCorrespondência exata

Além do modo, o desenvolvedor pode configurar independentemente:

  • Ignore Accents — normaliza caracteres Unicode antes da comparação (é = e)
  • Case Sensitive — diferencia maiúsculas e minúsculas (desativado por padrão)

Sugestões agrupadas por campo

O dropdown exibe os resultados organizados por coluna de origem, com um cabeçalho de grupo mostrando o nome do campo e um contador X de Y (traduzido conforme o idioma configurado). Cada grupo possui um botão “Selecionar todos”, que aplica todos os valores visíveis daquele campo com um único clique, equivalente a realizar Ctrl+Click em cada item individualmente.

Filtros ativos como tags

Os filtros aplicados aparecem como tags removíveis abaixo do campo de busca. Cada tag pode exibir opcionalmente o nome do campo de origem (showFieldName), permitindo que o usuário entenda de onde veio cada filtro e os remova individualmente ou todos de uma vez.

Performance

O visual opera inteiramente no lado cliente, sem chamadas externas. A indexação dos valores é feita na chegada dos dados (update()), e a filtragem das sugestões é síncrona, garantindo resposta imediata ao digitar.

O Format Pane expõe uma opção de Show Metrics (diagnóstico), que exibe o tempo de processamento e o volume de dados indexados, algo útil durante o desenvolvimento do relatório.

O dataReductionAlgorithm está configurado para até 50.000 linhas por query, suficiente para a maioria dos cenários de lookup, com carregamento de + 50.000 por demanda.

Acessibilidade

  • Navegação completa por teclado: Tab para mover entre elementos, Enter para selecionar e Escape para fechar o dropdown
  • Atributos ARIA em todos os elementos interativos: role, aria-label, aria-expanded, aria-selected e aria-live para anúncios dinâmicos
  • Labels traduzidos conforme o idioma configurado
  • Contraste configurável via Format Pane

Internacionalização

Três idiomas são suportados: Português (BR), Inglês e Espanhol. A detecção é automática via navigator.language, com possibilidade de override manual no Format Pane. Todas as strings de UI são externalizadas, sem textos hardcoded no código de renderização.

Personalização via Format Pane

O visual expõe um conjunto amplo de propriedades nativas do Power BI, sem necessidade de configurações externas.

Search Box: cor de fundo, cor do texto, cor da borda (padrão e foco), tamanho e família de fonte, border radius, altura, ícone de busca (cor, tamanho e visibilidade) e botão de limpar (tamanho).

Suggestions Dropdown: cor e tamanho de fonte dos itens, cor de fundo do cabeçalho, cor do texto do cabeçalho, cor de hover, cor de highlight do match, altura máxima do dropdown, máximo de resultados por campo e tamanho de fonte dos labels de grupo.

Filter Tags: cor de fundo, cor do texto, tamanho de fonte e exibição do nome do campo.

Temas pré-definidos: Black & White, Red, Blue, Mustard e Green. Cada tema aplica um conjunto coerente de tokens de cor com um único clique, podendo ser refinado posteriormente propriedade por propriedade.


Comparativo com outros visuais do mercado

A tabela abaixo compara o Global Search com alternativas disponíveis no AppSource que abordam busca ou filtragem textual.

RecursoGlobal SearchSlicer NativoSmart Filter Pro (OKViz)Advanced Slicer (xViz)Q&A Visual
Busca em múltiplos campos simultâneosSim (até 25)NãoNão (1 por instância)Não (1 por instância)Parcial
Sugestões agrupadas por campoSimNãoNãoNãoNão
Selecionar todos por grupoSimNãoNãoNãoNão
Filtros ativos visíveis como tagsSimNãoSimSimNão
Modos de busca configuráveisSim (3 modos)NãoParcialParcialNão
Normalização de acentosSimNãoNãoNãoNão
Acessibilidade ARIA + tecladoCompletaParcialParcialParcialParcial
Internacionalização (PT/EN/ES)SimNãoNãoNãoNão
Personalização granular via Format PaneAltaBaixaMédiaMédiaBaixa
Temas pré-definidosSim (5)NãoNãoNãoNão
Métricas de performance (diagnóstico)SimNãoNãoNãoNão
Sem coleta de dadosSimN/ANão confirmadoNão confirmadoN/A
Gratuito sem restriçõesSimSimNão (pago)Não (pago)N/A

Informações sobre visuais de terceiros baseadas em documentação pública disponível no AppSource e nos sites dos fornecedores. Sujeitas a mudanças com atualizações dos produtos.


O que vem pela frente

Funcionalidades documentadas e em avaliação para próximas versões.

Busca multi-token com ; Permitir que o usuário digite produto;2026 e aplique os dois termos como filtros em cascata. Cada token restringe o contexto do próximo. A lógica de cascata já existe na arquitetura atual e esta funcionalidade é uma extensão do pipeline de filtragem.

Dropdown ao focar sem digitar Ao clicar no campo sem digitar, exibir todos os valores únicos agrupados por campo, como um select nativo. Trata-se de uma extensão direta do renderSuggestions(), tratando query vazia como “mostrar tudo”, com um limite configurável separado do maxResults de busca.

Ícones de tipo de campo O fieldType já é detectado e armazenado em cada FieldData e Suggestion. A implementação é apenas de renderização: adicionar o ícone (Aa, 123, calendário) no HTML de cada sugestão. A pendência está na detecção confiável de datas, pois o campo col.type.dateTime da API do Power BI nem sempre é preenchido corretamente dependendo da fonte de dados.

Ordenação por frequência Em vez de ordenação alfabética, exibir primeiro os valores que aparecem com mais frequência nas linhas indexadas. Isso requer mudança na lógica de renderSuggestions() e avaliação do impacto de performance em datasets grandes. Será configurável via Format Pane como alternativa à ordenação alfabética.


Conclusão

O Global Search não substitui um modelo de dados bem projetado. Ele resolve um problema específico que o Power BI não cobre nativamente: oferecer ao usuário final um ponto de entrada único para localizar qualquer valor em qualquer campo do modelo, sem exigir conhecimento da estrutura do relatório.

É gratuito, sem coleta de dados e sem dependências externas. O código é completamente isolado no ambiente do visual, sem chamadas de rede, sem SDKs de terceiros e sem telemetria.

Disponível no AppSource para uso imediato em qualquer relatório Power BI.

Caso seja para você útil, por gentileza, avalie positivamente 😁


Comentários

Seja o primeiro a comentar

0/1000