Consultando Cubos OLAP com Reporting Services – Parte 1

Veja neste artigo como consultar cubos OLAP com Reporting Services.

O Analysis Services é um servidor OLAP que faz parte do SQL Server 2000, e que tem permitido às organizações construírem poderosos data marts e data warehouses. Como qualquer outro servidor OLAP, o Analysis Services fornece ao usuário uma visão multidimensional dos dados, permitindo que este “navegue” pelos dados que lhe interessam, facilitando a análise e auxiliando na tomada de decisões. Contudo, a disponibilização desses dados para a organização é muitas vezes problemática.

O Reporting Services 2000 tem muitos recursos que o tornam uma ferramenta bastante poderosa para acesso ao data warehouse pelos usuários. Entre os recursos disponíveis, está a possibilidade de gerenciar e armazenar os relatórios de forma centralizada, controlar como os relatórios são processados e a possibilidade de exportar para diferentes formatos, tais como HTML, Excel, PDF, etc. Embora o Reporting Services não possa substituir plenamente uma ferramenta de análise OLAP, ele é uma aplicação cliente que merece ser avaliada em qualquer processo de business intelligence (BI).

Neste artigo, veremos um exemplo prático que mostra o que o Reporting Services pode fazer para disponibilizar dados de um data warehouse para toda a organização. O Reporting Services permite que os usuários de negócio acessem os dados através de relatórios estáticos ou mesmo relatórios que usem filtros e tenham funcionalidades limitadas de drill-down.

Para criar um relatório de consulta a dados do Analysis Services, o desenvolvedor do relatório precisa usar MDX. MDX, ou Multidimensional Expression, é uma linguagem de consulta para cubos OLAP, assim como o SQL é a linguagem de consulta para banco de dados relacionais. Um cubo é multidimensional por natureza, sendo formado por medidas e dimensões. A dimensão é uma hierarquia organizada de categorias (níveis) que descrevem os dados em uma tabela fato. Os elementos de dados armazenados na intersecção das dimensões do cubo são chamados de medidas, e pode existir mais de uma medida armazenada em cada intersecção. O Reporting Services 2000 não tem um utilitário gráfico para construção de consultas MDX, o que requer que o desenvolvedor tenha algum conhecimento da linguagem a fim de escrever as consultas.

Construindo um Relatório

Para a criação do nosso relatório no Reporting Services 2000, utilizaremos o Visual Studio .Net 2003. É importante lembrar que quando você cria um relatório no Report Designer, este relatório é salvo como um arquivo XML com extensão RDL (Report Definition Language). Isso quer dizer que você também pode criar um relatório usando apenas um editor de texto/XML. Aqui estamos utilizando o Report Designer por uma questão muito simples: produtividade.

Comece criando um novo projeto no Visual Studio. Selecione Business Intelligence como o tipo de projeto e use Report Project como template, de acordo com a Figura 1. O próximo passo é definir um data source para o projeto, que poderá ser usado por um ou mais relatórios. Um data source contém as informações de conexão com a fonte de dados de origem. Para criar o data source, dê um clique com o botão direito na pasta Shared Data Sources do Solution Explorer, e escolha New Data Source para abrir a janela Data Link Properties, como mostra a Figura 2. Como desejamos acessar os dados de um cubo no Analysis Services, na aba Provider selecione a opção Microsoft OLE DB Provider for OLAP Services 8.0. Após ter selecionado o provider, clique na aba Connection e informe o nome do servidor na caixa de texto Data Source, marque o método de conexão Windows NT Integrated Security e selecione o database na caixa de seleção Enter the initial catalog to use, como mostra a Figura 3. Neste artigo, eu usei o database FoodMart 2000 que é instalado juntamente com o Analysis Servcies.

A pasta Reports armazena os relatórios do projeto. Para criar um novo relatório, clique com o botão direito sobre a pasta Reports e selecione a opção Add, Add New Item, Report, como pode ser visto na Figura 4 e na Figura 5. Digite um nome para o relatório e clique no botão Open. Em seguida precisamos criar os datasets, onde armazenamos as consultas do relatório, que podem variar conforme o tipo de data source utilizado. Para criar um novo dataset, clique na aba Data e selecione a opção New Dataset. Digite um nome para o dataset e selecione o data source que foi criado anteriormente, de acordo com a Figura 6. Selecione Text em Command Type e entre com a consulta MDX na caixa de texto Query String. Para este exemplo, usaremos a consulta da Listagem 1.

Figura 1. Criando um novo projeto de relatório no Visual Studio 2003
Figura 2. Selecionando o provider na janela Data Link Properties
Figura 3. Configurando a conexão com o servidor OLAP
Figura 4. Adicionando um novo relatório
Figura 5. Adicionando um novo relatório
Figura 6. Configurando um novo dataset
SELECT { [Measures].[Store Sales] } ON COLUMNS, { Crossjoin([Time].[Month].Members, Descendants([Product].[All Products], [Product] .[Product Name], LEAVES)) } ON ROWS FROM [Sales]
Listagem 1. Consulta MDX

Esta consulta retorna os valores de Store Sales para todos os produtos da dimensão Product e para os diferentes meses da dimensão Time. Para executar a consulta, basta clicar no botão Run (o ícone do ponto de exclamação) na barra de ferramentas. Parte dos registros retornados pela consulta pode ser visualizada na Figura 7.

Figura 7. O resultado da consulta MDX

Como podemos perceber, a consulta retornou mais dados que o esperado, por causa da forma que o Reporting Services trata as consultas MDX. Quando consultamos um cubo do Analysis Services, os dados podem ser retornados em uma de duas formas possíveis: como um cellset ou como um recordset. O Reporting Services usa o formato de recordset, ou seja, os dados da consulta ao cubo passam por um processo de transformação a fim de retornar os dados num grid de duas dimensões. Assim sendo, cada nível de uma dimensão que participa em uma consulta é retornado como um campo. Isto pode ser percebido na dimensão tempo (Time), onde especificamos listar os meses (Month), mas os membros para os níveis de ano (Year) e trimestre (Quarter) também foram listados no grid de dados. Isto não causa nenhuma implicação, já que podemos usar somente os campos necessários para o relatório. Este formato de retorno dos dados é útil para implementarmos as funcionalidades de drill-down e drill-up, como veremos daqui a pouco.

Após a análise dos dados retornados, você pode criar o layout do relatório. Clique na aba Layout e arraste um controle Matrix para dentro da área do Report Designer (Figura 8). O controle matrix é adequado para a apresentação de dados multidimensionais, especialmente quando desejamos ter as funcionalidades de drill-down e drill-up. Depois, arraste os campos do recordset a partir da janela Fields para as células do componente matrix, conforme a Figura 9. Caso a janela Fields não esteja visível, clique na opção Fields do menu View.

Figura 8. Adicionando um controle matrix
Figura 9. Adicionando os campos do dataset no controle matrix

A lista de campos apresentada não mostra apenas os campos especificados na consulta MDX (como Product Name, Month), mas todos os campos de níveis superiores (como Year, Quarter). Comece arrastando o campo Product_Product_Name para dentro da caixa de texto Rows da matrix. Então, arraste o campo Time_Quarter para dentro da caixa de texto Columns e por último o campo Measures_Store_Sales para dentro da caixa de texto Data. Note que aparece a seguinte fórmula na caixa de texto Data: =First(Fields!Measures_Store_Sales.Value), e que devemos alterar para =Sum:>(Fields!Measures_Store_Sales.Value). Agora você pode formatar o relatório alterando as propriedades de BackgroundColor, Font, TextAlign, etc. A Figura 10 mostra como ficou o Layout do relatório que acabamos de criar.

Figura 10. Layout do relatório com formatação

Clique na aba Preview para executar o relatório e visualizar o resultado. Como mostra a Figura 11, a consulta retornou dados em nível de produto, ou seja, no nível mais baixo da hierarquia, resultando em quase 30 páginas de relatório.

Figura 11. Relatório com dados do Analysis Services

Nesse primeiro artigo, descrevemos os principais passos para a construção de um relatório no Reporting Services acessando dados de um cubo OLAP através de consultas MDX. No próximo artigo, veremos como tornar esse relatório mais interativo, com a implementação de filtros e da funcionalidade de drill-down. Um abraço de até lá.

Artigos relacionados