MD Software
MillenniumBrokerMacros do Broker

Tabulação

Tabulação de dados é o processo de transformar dados normalizados em uma grade que os apresenta como se fossem o mesmo registro. Um exemplo comum é a exibição de estoque em grades de tamanhos e cores.

Para essa finalidade, utilizamos o #CROSSDATA em conjunto com o #PIVOT. Os retornos dessas funções são cadeias de caracteres que formam outras cadeias separadas por aspas e vírgulas. Componentes de relatórios e algumas funções de tela interpretam essa formatação para montar a grade final para o usuário.

#CROSSDATA

Definição: Com o auxílio de funções de agregação e do #PIVOT, cria uma grade de valores tabulados.

Utilidade: Montar relatórios com grades, como tamanhos no cabeçalho.

Especificação:

#CROSSDATA(colunas, (agrupamentos), omit_empty)
  • colunas: Nome(s) das colunas que receberão os dados agrupados.
  • agrupamentos: Campos que definem o agrupamento, entre parênteses.
  • omit_empty: true para omitir valores não encontrados no cabeçalho; false caso contrário.

Exemplo:

#CROSSDATA(quantidade, (cod_produto), true);
SELECT:data p.cod_produto, p.grade, e.tamanho, #CROSS_COUNT(e.cor AS numero_cores)
FROM produtos p
INNER JOIN estoques e ON p.produto = e.produto;
 
#PIVOT(tamanhos, tamanho, tamanho, grade);
SELECT tamanho AS tamanhos, tamanho
FROM tamanhos
WHERE grade = :data.grade;

#CROSS_AVG

Definição: Auxiliar do #CROSSDATA; calcula a média simples de valores em uma coluna, respeitando o agrupamento definido.

Utilidade: Obter médias em dados tabulados.

Especificação:

#CROSS_AVG(campo AS alias)

Exemplo:

#CROSSDATA(quantidade, (cod_produto), true);
SELECT:data p.cod_produto, p.grade, e.tamanho, #CROSS_AVG(e.saldo AS saldo_medio)
FROM produtos p
INNER JOIN estoques e ON p.produto = e.produto;
 
#PIVOT(tamanhos, tamanho, tamanho, grade);
SELECT tamanho AS tamanhos, tamanho
FROM tamanhos
WHERE grade = :data.grade;

#CROSS_COUNT

Definição: Auxiliar do #CROSSDATA; conta a quantidade de ocorrências de valores em uma coluna, respeitando o agrupamento.

Utilidade: Contar itens em dados tabulados.

Especificação:

#CROSS_COUNT(campo AS alias)

Exemplo:

#CROSSDATA(quantidade, (cod_produto), true);
SELECT:data p.cod_produto, p.grade, e.tamanho, #CROSS_COUNT(e.cor AS numero_cores)
FROM produtos p
INNER JOIN estoques e ON p.produto = e.produto;
 
#PIVOT(tamanhos, tamanho, tamanho, grade);
SELECT tamanho AS tamanhos, tamanho
FROM tamanhos
WHERE grade = :data.grade;

#CROSS_FIRST

Definição: Auxiliar do #CROSSDATA; retorna a primeira ocorrência de valor em uma coluna, respeitando o agrupamento.

Utilidade: Obter o primeiro valor em dados tabulados.

Especificação:

#CROSS_FIRST(campo)

Exemplo:

#CROSSDATA(quantidade, (cod_produto), true);
SELECT:data p.cod_produto, p.grade, e.tamanho, #CROSS_FIRST(e.obs)
FROM produtos p
INNER JOIN estoques e ON p.produto = e.produto;
 
#PIVOT(tamanhos, tamanho, tamanho, grade);
SELECT tamanho AS tamanhos, tamanho
FROM tamanhos
WHERE grade = :data.grade;

#CROSS_SUM

Definição: Auxiliar do #CROSSDATA; soma os valores de uma coluna, respeitando o agrupamento.

Utilidade: Obter somatórios em dados tabulados.

Especificação:

#CROSS_SUM(campo)

Exemplo:

#CROSSDATA(quantidade, (cod_produto), true);
SELECT:data p.cod_produto, p.grade, e.tamanho, #CROSS_SUM(e.saldo)
FROM produtos p
INNER JOIN estoques e ON p.produto = e.produto;
 
#PIVOT(tamanhos, tamanho, tamanho, grade);
SELECT tamanho AS tamanhos, tamanho
FROM tamanhos
WHERE grade = :data.grade;

Macros Auxiliares

  • #CROSS_SUM_FLD
  • #CROSS_COUNT_FLD
  • #CROSS_AVG_FLD
  • #CROSS_FIRST_FLD

Definição: Funcionam de forma semelhante aos macros auxiliares correspondentes, mas são utilizados em contextos específicos.

#PIVOT

Definição: Auxiliar mandatório do #CROSSDATA; define o cabeçalho da tabulação desejada.

Utilidade: Estabelecer as colunas que serão utilizadas como cabeçalho na tabulação.

Especificação:

#PIVOT(coluna_cabecalho, campo_chave_principal, campo_chave_secundaria, coluna_quebra_opcional)

Exemplo:

#PIVOT(tamanhos, tamanho, tamanho, grade);
SELECT tamanho AS tamanhos, tamanho
FROM tamanhos
WHERE grade = :data.grade;

On this page