Banco de Dados - SQL Server
ROLLUP e Cube: Turbine suas Aplicações
Quando vamos trazer um conjunto de registros do Banco de Dados resultantes de uma pesquisa (Recordset), para exibir ao solicitante, costuma-se ter a necessidade de uma espécie de totalizador para um determinado campo ou conjunto deles. É nesse momento que muitos desenvolvedores recorrem aos mais diversos tipos de recursos...
por Active DelphiQuando vamos trazer um conjunto de
registros do Banco de Dados resultantes de uma pesquisa (Recordset), para exibir
ao solicitante, costuma-se ter a necessidade de uma espécie de
totalizador para um determinado campo ou conjunto deles. É nesse momento que
muitos desenvolvedores recorrem aos mais diversos tipos de recursos: Cursor no
Banco de Dados, ler o recordset dentro do programa linha a linha e contar
atribuindo o valor a uma variável acumulando valores até obter o total, ou até
mesmo a execução de duas queries, onde uma traz o recordset e outra para
totalizar os valores (dobrando o tempo de processamento) e assim por
diante.
Os recursos ROLLUP e Cube existem no sentido de
aperfeiçoar a pesquisa submetida ao Banco de Dados e agregar performance na
criação do recordset.
Estes recursos também são
reconhecido por agregação de valores.
Para efeito de
exemplo de outros tipos de agregação de valores existe o SUM() para somar
valores ou MAX() e MIN() para obter o maior valor e o menor valor,
respectivamente, sempre seguidos da cláusula GROUP BY.
A
título de ilustração para maior absorção do conteúdo aqui transmitido,
utilizaremos uma tabela chamada TB_LIVRO
Idioma |
Ano_Edicao |
O conteúdo da Tabela após Select é:
Select Nome,
Idioma, Ano_Edicao from TB_LIVRO
Português | Database Turbo | Inglês | Matematica Financeira | Espanhol | Database Turbo | Inglês | Matematica Financeira | Inglês | PMI | Inglês | Database Turbo | Português | Matematica Financeira | Português | Matematica Financeira | Inglês | Database Turbo | Espanhol | PMI | Espanhol | PMI | Espanhol | Database Turbo | Português | Matematica Financeira | Inglês | Database Turbo | Matematica Financeira | PMI | PMI | Português | PMI | Inglês | PMI | Espanhol | PMI | Espanhol | Database Turbo | Matematica Financeira | PMI | Null | Null | 14 |
Database Turbo | 2002 | 2 |
Database Turbo | 2003 | 1 |
Database Turbo | 2004 | 2 |
Database Turbo | Null | 5 |
Matematica Financeira |
2001 | 3 |
Matematica Financeira | 2003 | 2 |
Matematica Financeira | Null | 5 |
PMI | 2001 | 2 |
PMI | 2004 | 2 |
PMI | Null | 4 |
Para entender melhor o
resultado cada grupo de registro dentro do recordset foi destacado com cores
distintas.
Tomando-se como exemplo o livro Database Turbo
pode-se constatar que no ano de 2002 foram registradas duas ocorrências, em 2003
foi registrada uma ocorrência e em 2004 foram registradas mais duas ocorrências.
A soma deste grupo de registros é igual a cinco
ocorrências.
A soma dos totais de cada livro resulta em
quatorze ocorrências no Total Geral.
Ao término deste
exemplo é possível constatar que a confecção de relatórios passa a ser muito
mais rápida e que para este resultado caso não existisse o recurso do ROLLUP
seriam necessárias no mínimo três queries distintas.
Com
isso conclui-se a apresentação desta poderosa funcionalidade do SQL Server
chamada ROLLUP.
Cube
A função do Cube é similar ao do
ROLLUP.
Este operador cria e sumariza todas as combinações
possíveis de grupos baseados no Group By.
Select Nome, Ano_Edição,
Count(Nome) As Qtd_Produzida
from TB_LIVRO
Group by Nome,
Ano_Edição
With Cube
Order by Nome
O resultado anterior, após
substituir ROLLUP por Cube passa a ser representado da seguinte forma.
Null | 14 | |
Null | 2001 | 5 |
Null | 2002 | 2 |
Null | 2003 | 3 |
Null | 2004 | 4 |
Database Turbo | 2002 | 2 |
Database Turbo | 2003 | 1 |
Database Turbo | 2004 | 2 |
Database Turbo | Null | 5 |
Matematica Financeira |
2001 | 3 |
Matematica Financeira | 2003 | 2 |
Matematica Financeira | Null | 5 |
PMI | 2001 | 2 |
PMI | 2004 | 2 |
PMI | Null | 4 |
Além de produzir um recordset
similar ao do ROLLUP, foi realizada a sumarização por Ano_Edicao que faz parte
da relação de campos pesquisados da tabela..
Com isso abre
a possibilidade para analisar os dados armazenados na Base de Dados sobre as
mais diferentes formas, o que pode trazer a quem utiliza estes dados uma
diferença preciosa na competitividade no mundo dos
negócios.
Os recursos apresentados neste artigo são
recursos fundamentais para construção de OLAP e altamente procurados por
empresas junto aos consultores de solução na área de TI.
Este assunto porém ficará para um próximo artigo, pois trata-se de um assunto
muito longo e de uma complexidade que merece um capítulo a
parte.
E para pensar enquanto
programa...
"Inicialmente o candidato à liberdade deve
procurar eliminar todos os seus vícios".
Buda (Sidarta
Gautama), sábio, líder religioso, IND, 563-483 AC
- Representando dados em XML no SQL ServerSQL Server
- Diferenças entre SEQUENCES x IDENTITY no Microsoft SQL Server 2012SQL
- Utilizando FILETABLE no SQL Server 2012SQL Server
- NHibernate com o Delphi Prism: Acessando um Banco de Dados SQL ServerVisual Studio
- Novidades no SQL Server Codinome DenaliSQL Server