(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

Como criar uma junk dimension num Data Warehouse

João Barros 05 de July de 2026 4 min de leitura

Uma junk dimension (ou dimensão lixo) é uma técnica de modelação que agrupa vários indicadores de baixa cardinalidade — estados, sinalizadores e opções — numa única dimensão do Data Warehouse. Em vez de encher a tabela de factos com colunas soltas ou criar uma mini-dimensão para cada flag, junta tudo numa tabela pequena e fácil de consultar. Vamos ver, passo a passo e com exemplos em SQL, como criar uma junk dimension e ligá-la à tabela de factos.

Pré-requisitos

  • Acesso a um Data Warehouse com SQL (SQL Server, Microsoft Fabric ou Azure Synapse).
  • Permissões para criar tabelas e inserir dados.
  • Noções básicas de esquema em estrela: dimensões e tabelas de factos.

Passo 1: Identificar os atributos candidatos

O primeiro passo é encontrar colunas com poucos valores distintos e sem atributos descritivos próprios. Imagina uma tabela de vendas com três sinalizadores: estado do pagamento (Pago ou Pendente), canal (Online ou Loja) e oferta (Sim ou Não). Cada um tem apenas dois valores. Sozinhos, não justificam uma dimensão própria e, se ficarem na tabela de factos, enchem-na de colunas de texto repetido. Juntá-los numa única dimensão evita, ao mesmo tempo, uma tabela de factos larga e um enxame de dimensões minúsculas difíceis de manter.

Dica: um bom candidato a junk dimension tem baixa cardinalidade e muda com pouca frequência. Datas ou clientes, por exemplo, não entram aqui.

Passo 2: Criar a tabela da junk dimension

Criamos uma tabela com uma chave substituta (surrogate key) e uma coluna para cada sinalizador. A chave será a única coluna que a tabela de factos vai guardar.

CREATE TABLE DimTransacao (
    TransacaoKey    INT         NOT NULL,
    EstadoPagamento VARCHAR(20) NOT NULL,
    Canal           VARCHAR(20) NOT NULL,
    Oferta          VARCHAR(3)  NOT NULL
);

Repara que aqui não guardamos nenhuma métrica nem datas: a junk dimension contém apenas os sinalizadores e a sua chave.

Passo 3: Gerar todas as combinações possíveis

A ideia central é preencher a dimensão com o produto cartesiano de todos os valores. Com CROSS JOIN combinamos as listas e, com ROW_NUMBER(), geramos a chave substituta automaticamente.

INSERT INTO DimTransacao (TransacaoKey, EstadoPagamento, Canal, Oferta)
SELECT
    ROW_NUMBER() OVER (ORDER BY p.EstadoPagamento, c.Canal, o.Oferta),
    p.EstadoPagamento,
    c.Canal,
    o.Oferta
FROM       (VALUES ('Pago'), ('Pendente')) AS p(EstadoPagamento)
CROSS JOIN (VALUES ('Online'), ('Loja'))   AS c(Canal)
CROSS JOIN (VALUES ('Sim'), ('Nao'))       AS o(Oferta);

Como temos 2 × 2 × 2 valores, a tabela fica com 8 linhas — todas as combinações possíveis. É também boa prática acrescentar um membro «desconhecido» para linhas de facto sem correspondência:

INSERT INTO DimTransacao (TransacaoKey, EstadoPagamento, Canal, Oferta)
VALUES (-1, 'Desconhecido', 'Desconhecido', 'N/D');

Passo 4: Ligar a dimensão à tabela de factos

Ao carregar a tabela de factos, procuramos a TransacaoKey correspondente aos três sinalizadores e guardamos apenas essa chave. Assim, a tabela de factos deixa de ter as colunas de texto e passa a fazer uma única junção pequena e rápida.

SELECT
    v.VendaID,
    dt.TransacaoKey,
    v.Valor
FROM   Staging_Vendas AS v
JOIN   DimTransacao   AS dt
       ON dt.EstadoPagamento = v.EstadoPagamento
      AND dt.Canal           = v.Canal
      AND dt.Oferta          = v.Oferta;

Verificar o resultado

Confirma que a dimensão tem as combinações esperadas e experimenta uma consulta analítica agrupando pelos atributos da junk dimension.

SELECT COUNT(*) AS TotalLinhas FROM DimTransacao;

SELECT dt.Canal, dt.EstadoPagamento, SUM(f.Valor) AS Total
FROM   FactVendas   AS f
JOIN   DimTransacao AS dt ON dt.TransacaoKey = f.TransacaoKey
GROUP BY dt.Canal, dt.EstadoPagamento;

Se a primeira consulta devolver 9 linhas (8 combinações mais o membro desconhecido) e a segunda mostrar totais por canal e estado, está tudo a funcionar.

Conclusão

Com uma junk dimension, a tabela de factos fica mais leve, os filtros ficam mais simples e o modelo continua limpo, mesmo quando há muitos sinalizadores pequenos. O próximo passo é olhar para as tuas tabelas de factos e identificar flags dispersas que possam ser reunidas numa só dimensão. Já sabes quantos sinalizadores andam soltos no teu modelo?