No 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. Nesse segundo artigo, veremos como tornar esse relatório mais interativo, com a implementação de filtros e da funcionalidade de drill-down.

Adicionando Interatividade

No nosso relatório de exemplo, estamos usando membros de apenas um nível de cada dimensão. Normalmente, quando trabalhamos com dados multidimensionais, desejamos relatórios mais interativos, ou seja, que permitam fazer o drill-down (visualizar os dados num nível detalhado) e o drill-up (visualizar os dados num nível agregado). Por exemplo, o relatório pode começar mostrando o total de vendas por categoria de produto, por marca, e então para cada produto. Como já vimos, durante a execução da consulta MDX pelo Reporting Services, o recordset é gerado com todos os membros de todos os níveis da dimensão, e que são listados também na janela Fields. Portanto, apenas precisamos adicionar as caixas de texto para cada novo campo do relatório.

Começaremos adicionando as informações de categoria e marca do produto. Para isto, clique em qualquer lugar dentro do controle matrix para poder visualizar o cabeçalho das linhas e colunas. Clique com o botão direito sobre a área cinza próxima a linha que contém o campo de produto para exibir o menu, então escolha a opção Add Row Group, como mostra a Figura 12. Esta opção abre a janela Grouping and Sorting Properties. Na área Group On, selecione a expressão =Fields!Product_Brand_Name.Value a partir do drop-down list e clique em OK. Agora, siga os mesmos passos para adicionar um novo grupo para categoria, onde a expressão do Group On seja =Fields!Product_Product_Category.Value. Organize as caixas de texto para que a ordem de exibição seja categoria de produto, marca e nome, bastando selecionar e arrastar as caixas para a direita ou esquerda.

19-04-2007pic01.JPG

Figura 12. Adicionando agrupamento de dados em linha.

Você também pode adicionar as informações de ano e mês, criando novos agrupamentos em coluna. Abra a janela Grouping and Sorting Properties clicando sobre o cabeçalho cinza acima da coluna que contém o campo trimestre (Quarter) e escolha a opção Add Column Group. Coloque as caixas de texto em ordem de ano (Year), trimestre (Quarter) e mês (Month). A Figura 13 mostra como ficou o layout do relatório.

19-04-2007pic02.JPG

Figura 13. Relatório com as hierarquias de produto e tempo.

Execute o relatório para poder visualizar o resultado final, que é mostrado na Figura 14. Veja que todas as informações estão visíveis, tornando o relatório muito grande e pouco prático. Por exemplo, o relatório está detalhado por ano, trimestre e mês, não permitindo agrupar as informações a fim de consultar o total de vendas no ano. Portanto, o próximo passo é alterar o relatório para que mostre as informações de forma agregada, deixando para o usuário a tarefa de detalhar (drill-down) as informações conforme a necessidade.

19-04-2007pic03.JPG

Figura 14. Resultado da execução do relatório.

Para adicionar esta interatividade ao relatório, precisamos definir que determinado agrupamento, como o que apresenta o nome do produto, esteja oculto por padrão e seja exibido por um agrupamento de nível mais alto, como a marca do produto. Antes de tudo, é recomendável que alteremos a propriedade Name de cada uma das caixas de texto que representam um campo do relatório. Portanto, no nosso exemplo, definimos o nome das caixas de texto: ProductCategory, ProductBrand, ProductName, TimeYear, TimeQuarter e TimeMonth. Em seguida, dê um clique com o botão direito sobre a caixa de texto que apresenta o nome do produto, e no menu apresentado clique na opção Edit Group para abrir a janela de diálogo Grouping and Sorting Properties. Na aba Visibility, altere a opção Initial visibility para Hidden e marque a opção Visibility can be toggled by anotger report item para habilitar a caixa de seleção. Essa última opção determina que item do relatório será responsável para exibir o nome do produto, que por sua vez, é o item colocado em um nível acima: a marca do produto. Entretanto, pode-se perceber que a caixa de texto ProductBrand não é mostrada na caixa de seleção Report item. Desconsidere este pequeno “bug” e digite o nome da caixa de texto: ProductBrand. Depois de terminado, a caixa de diálogo deve ser parecida com a da Figura 15.

19-04-2007pic04.JPG

Figura 15. Configurando a visibilidade do campo nome do produto.

Agora podemos repetir esse processo para a marca do produto, permitindo que o usuário possa visualizar a marca quando expandir a categoria do produto. Da mesma forma, definimos a visualização do mês através da expansão de trimestre, e a visualização do trimestre com a expansão de ano. Quando concluído, o relatório mostrará o total do ano para cada categoria de produto, onde cada categoria de produto poderá ser detalhada por marca, e cada marca poderá ser detalhada por produto. De uma maneira semelhante, um ano poderá ser detalhado em trimestres e cada trimestre em meses. A Figura 16 mostra o resultado dessa funcionalidade.

19-04-2007pic05.JPG

Figura 16. Relatório com as funcionalidades de drill-down e drill-up.

Adicionando Parâmetros

Outro recurso bastante utilizado em relatórios é o uso de parâmetros, que dão ao usuário a possibilidade de selecionar itens em uma lista, a fim de filtrar os dados retornados no relatório. Voltando ao nosso exemplo, podemos permitir que o usuário selecione o mês do relatório ou determinado trimestre ou ano, fazendo com que o relatório reflita os parâmetros de filtro na consulta. Existem diferentes maneiras para adicionar parâmetros ao relatório, entretanto, é importante saber que o Reporting Services 2000 não suporta parâmetros em uma consulta MDX. Esse recurso está disponível no Analysis Services 2005 e é suportado pelo Reporting Services 2005.

Para criar um parâmetro no relatório baseado em dados do Analysis Services, crie um novo dataset e defina a consulta MDX que será usada para retornar os valores do parâmetro. No nosso relatório, criamos um parâmetro que retorna uma lista de anos, conforme a Listagem 2, e outro que retorna uma lista das categorias de produto, conforme a Listagem 3. Note que as consultas usam uma medida calculada que simplesmente retorna o valor Null. É necessário usar este artifício, porque uma consulta MDX é sempre definida com expressões em linhas e colunas.

Listagem 2. Consulta MDX que retorna uma lista de anos.

WITH MEMBER Measures.NullColumn AS ‘NULL’
 SELECT
 {  [Measures].[NullColumn]  } ON COLUMNS,
 {  [Time].[Year].Members  } ON ROWS
 FROM [Sales]

Listagem 3. Consulta MDX que retorna uma lista de categorias.

WITH MEMBER Measures.NullColumn AS ‘NULL’
 SELECT
 {  [Measures].[NullColumn]  } ON COLUMNS,
 {  [Product].[Product Category].Members  } ON ROWS
 FROM [Sales]

Depois de ter criado os dois novos datasets, devemos criar os parâmetros que usarão os datasets para mostrar a lista de valores. Adicione um parâmetro clicando no menu Report e depois na opção Report Parameters, como mostra a Figura 17. Na caixa de diálogo Report Parameters você pode adicionar um novo parâmetro e associar este parâmetro a um dataset. Para cada parâmetro, definimos o Value field (valor que será usado internamente) e o Label field (valor que será visualizado pelo usuário). Supondo que um dos datasets tenha o nome de ListaCategorias, você pode configurar os campos Value e Label para Product_Product_Category, como mostra a Figura 18.

19-04-2007pic06.JPG

Figura 17. Adicionando parâmetros ao relatório.

19-04-2007pic07.JPG

Figura 18. Criando parâmetros a partir de datasets.

O próximo passo é criar os filtros no controle matrix para cada um dos parâmetros definidos. Para isso, selecione o controle matrix, clique com o botão direito sobre a borda do controle e, no menu que é exibido, escolha Properties. Na janela Matrix Properties, clique na aba Filters e adicione as expressões de filtro conforme mostra a Tabela 1.

Expression

Operator

Value Field

=Fields!Time_Time_Year.Value

=

Parameters!TimeYear.Value

=Fields!Product_Product_Category.Value

=

Parameters!ProductCategory.Value

Tabela 1. Definição dos filtros.

Para testar o relatório com os parâmetros de filtro, clique em Preview. O relatório deverá mostrar os dados conforme o ano e categoria de produtos selecionados. A Figura 19 mostra como ficou o relatório.

19-04-2007pic08.JPG

Figura 19. Filtrando dados no relatório.

Conclusões

Nesse artigo e no anterior, discutimos como o Analysis Services e o Reporting Services 2000 podem ser integrados como parte de uma solução de business intelligence. Vimos como criar relatórios que acessam dados do data warehouse, permitindo ao usuário final fazer suas análises para tomada de decisão, mesmo não tendo nenhum conhecimento sobre o Analysis Services. Podemos dizer que as duas ferramentas atendem às expectativas de qualquer solução de BI. O Reporting Services mostra-se como uma boa solução para relatórios, possibilitando a exportação dos dados para diferentes formatos. Já o Analysis Services tem a capacidade de responder rapidamente às consultas aos cubos OLAP através de uma rica linguagem de consulta multidimensional, o MDX.