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.

13-04-2007pic01.JPG
Figura 1. Criando um novo projeto de relatório no Visual Studio 2003
13-04-2007pic02.JPG
Figura 2. Selecionando o provider na janela Data Link Properties
13-04-2007pic03.JPG
Figura 3. Configurando a conexão com o servidor OLAP
13-04-2007pic04.JPG
Figura 4. Adicionando um novo relatório
13-04-2007pic05.JPG
Figura 5. Adicionando um novo relatório
13-04-2007pic06.JPG
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.

13-04-2007pic07.JPG
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.

13-04-2007pic08.JPG
Figura 8. Adicionando um controle matrix
13-04-2007pic09.JPG
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.

13-04-2007pic10.JPG
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.

13-04-2007pic11.JPG
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á.