Selos usados:
GA-candidato·Preview·NÃO MEDIDO·Roadmap. Legenda e template (selo + 9 campos) em README.
Achado central: todo filtro/slicer é client-side sobre o snapshot — nunca vira SQL. Isso tem três consequências boas: custo zero por interação, nenhuma superfície de injeção via slicer, e o limite passa a ser o que está no snapshot. Exemplos usam o workspace sintético Comércio Aurora Ltda.
Slicers (8 tipos) e escopos#
Selo: GA-candidato
- O que é — 8 tipos de segmentador:
select,daterange,buttons,range,hier(encadeado),number("e se"),field(campo-parâmetro) emeasure. - Quando usar — recortar o painel por categoria, período, faixa; ou trocar campo/medida (field/measure) e simular número (number/what-if).
- Como funciona — cada slicer tem escopo: dashboard, página ou por
visual (destino); busca no filtro (≥20 opções), multi-seleção (OR/AND),
selecionar tudo/limpar. Sincronização entre páginas (
syncPages): um controle numa página vale no painel inteiro. - Pré-requisitos — snapshot com as colunas usadas pelo slicer.
- Como validar — adicione um
selectdeprodutos.categoriano escopo do dashboard, selecione "Bebidas" e confirme todos os visuais recortando; mude o escopo para um visual só e confirme o aviso quando ele "não alcança nada". - Limites e ressalvas — filtro pessoal por usuário (slicer pessoal) é
Roadmap; o que existe por usuário é RLS (ver Segurança). Slicers operam sobre o snapshot, não sobre a base viva. - Dados de exemplo (sintéticos) — categorias {Bebidas, Limpeza, Higiene}; selecionar "Bebidas" deixa só receita=250.
- Evidência (código/teste) —
DASH_FILTER_TYPESemdashboard-widgets.ts; renders emdashboard-filters.tsx; testes de slicers. - Estado & maturidade — GA-candidato.
Datas relativas#
Selo: GA-candidato
- O que é — presets de período: hoje, 7d, 30d, mês, ano, e genérico
-Nd/-Nw/-Nm/-Ny(estilo Power BI), no fuso do painel. - Quando usar — "últimos 30 dias" que anda sozinho a cada dia.
- Como funciona —
presetRangecalcula a janela no fuso configurado do painel. - Pré-requisitos — uma coluna de data no snapshot.
- Como validar — configure "últimos 30 dias" e confirme o intervalo se deslocando ao mudar a data de referência.
- Limites e ressalvas — depende do fuso do painel (America/Sao_Paulo por padrão).
- Dados de exemplo (sintéticos) — hoje=2026-07-31 → janela 2026-07-02..07-31.
- Evidência (código/teste) —
presetRange(dashboard-widgets.ts) + teste. - Estado & maturidade — GA-candidato.
Cross-filter / cross-highlight e editor de interações#
Selo: GA-candidato
- O que é — clicar num visual realça a seleção e recorta os demais; e um editor de interações origem→destino para definir, por par de visuais, se a ação é Filtrar / Realçar / Ignorar.
- Quando usar — o gesto que "parece Power BI": clicar numa barra e ver o resto do painel reagir.
- Como funciona — clique aplica cross-filter (Ctrl acumula; re-clique limpa); o editor de pares define o modo por destino, com herança do modo global ("padrão") e preview em memória antes de salvar; saneamento com allowlist (modos válidos, ids existentes, sem auto-referência, teto de pares). A mesma semântica vale no viewer autenticado, no público e no embed.
- Pré-requisitos — dois ou mais visuais na página.
- Como validar — no editor de interações, defina "Barras de categoria → Tabela = Filtrar"; clique numa barra e confirme a tabela recortando; troque para "Ignorar" e confirme que a tabela não reage.
- Limites e ressalvas — a persistência da seleção entre sessões é parcial (ver abaixo).
- Dados de exemplo (sintéticos) — clicar "Bebidas" nas barras filtra a tabela para os itens de Bebidas.
- Evidência (código/teste) —
interactions-editor.tsx,interactions-sanitize.ts+ teste;applyCrossFilter(dashboard-widgets.ts);dashboard-view.tsx. - Estado & maturidade — GA-candidato; fecha a lacuna "cross-filter por par sem editor / não passado à view autenticada" da auditoria inicial.
Drill-down / drill-up#
Selo: GA-candidato
- O que é — descer/subir níveis por hierarquia de colunas e por datas (ano → mês → dia).
- Quando usar — explorar de "Região" até "Cidade", ou de ano até dia.
- Como funciona —
config.drillsobre a hierarquia; chips de contexto + botão de drill-up; datas usamdateBucket. - Pré-requisitos — hierarquia definida no modelo (ver Modelo semântico).
- Como validar — num visual com a hierarquia
Região > UF > Cidade, clique para descer de Sudeste até São Paulo e use drill-up para voltar. - Limites e ressalvas — drill opera sobre o snapshot do visual.
- Dados de exemplo (sintéticos) — Sudeste → SP → São Paulo.
- Evidência (código/teste) —
config.drill(dashboard-widgets.ts),dashboard-filters.tsx. - Estado & maturidade — GA-candidato.
Drill-through entre páginas#
Selo: GA-candidato
- O que é — saltar para outra página levando o contexto (por coluna), automático no clique ou por botão, com chip "voltar".
- Quando usar — clicar num produto e ir para a página de detalhe daquele produto.
- Como funciona —
DashPageTab.drillthroughdefine a coluna-chave; o destino nasce filtrado pelo valor clicado. - Pré-requisitos — página de destino configurada como alvo de drill-through.
- Como validar — configure "Detalhe do produto" como destino por
produtos.id; clique num produto na visão geral e confirme a página de detalhe já filtrada. - Limites e ressalvas — o contexto passado é por coluna configurada.
- Dados de exemplo (sintéticos) — clicar produto id=10 abre "Detalhe" com
produto_id=10. - Evidência (código/teste) —
DashPageTab.drillthrough,dashboard-filters.tsx. - Estado & maturidade — GA-candidato.
Tooltips e páginas de dica (tooltip pages)#
Selo: GA-candidato
- O que é — tooltips com campos extras, tooltip rico (conteúdo além do número) e páginas de dica (uma página inteira do painel como tooltip, estilo Power BI).
- Quando usar — mostrar detalhes ao passar o mouse sem poluir o visual.
- Como funciona —
config.tooltipFields/tooltipPage; a página de dica fica oculta da barra e aparece ao passar o mouse sobre o ponto. - Pré-requisitos — campos extras e/ou uma página marcada como dica.
- Como validar — adicione
produtos.marcacomo campo de tooltip e confirme que aparece ao passar o mouse; crie uma tooltip page e confirme a prévia. - Limites e ressalvas — tooltip rico é conteúdo estruturado; o motor de dados é o mesmo do visual de origem.
- Dados de exemplo (sintéticos) — tooltip de "Receita por categoria" mostrando marca e nº de pedidos.
- Evidência (código/teste) —
dashboard-tooltip.ts(+15 testes),tooltip-rich.ts+ teste. - Estado & maturidade — GA-candidato.
Bookmarks#
Selo: GA-candidato
- O que é — até 10 marcadores que guardam o estado completo do painel, aplicáveis por botão.
- Quando usar — salvar "visão executiva" e "visão detalhada" e alternar com um clique.
- Como funciona — o bookmark guarda seleções/filtros/estado; um botão pode aplicá-lo.
- Pré-requisitos — estado configurado para salvar.
- Como validar — configure filtros, salve como bookmark "Julho", mude tudo e aplique o bookmark para restaurar.
- Limites e ressalvas — bookmarks são do dashboard, não por usuário.
- Dados de exemplo (sintéticos) — bookmark "Bebidas · Julho".
- Evidência (código/teste) —
saveBookmarksAction,dashboard-filters.tsx. - Estado & maturidade — GA-candidato.
Persistência e compartilhamento de seleções por URL#
Selo: Preview
- O que é — a seleção viaja na URL (
?f=, base64url) para compartilhar uma visão filtrada. - Quando usar — mandar um link já filtrado para um colega.
- Como funciona — a URL grava seleção + data; parâmetros (field/measure/what-if) também viajam pelo codec de estado.
- Pré-requisitos — filtros/parâmetros aplicados.
- Como validar — filtre "Bebidas", copie a URL, abra em outra aba e confirme o filtro restaurado.
- Limites e ressalvas — faixa/hierarquia não sobrevivem apenas pela URL
(dependem de bookmark); não há autosave por usuário. Por isso
Preview. - Dados de exemplo (sintéticos) —
?f=…com categoria=Bebidas, período=Julho. - Evidência (código/teste) —
dashboard-filters.tsx(?f=),url-state.ts. - Estado & maturidade — Preview; persistência completa em evolução.
Estado & evidência: filtros/slicers/drill/tooltips/bookmarks cobertos por testes puros; todo filtro é client-side sobre o snapshot (custo zero, sem injeção). Estados derivados de matriz de estados do produto (teto Preview). Nenhum recurso é GA de produto.