21 Fevereiro 2017

Parametrização Dinâmica em SSRS

Com Recurso ao Master Data Services

Em projetos de Business Intelligence, por vezes é necessário desenvolver quantidades consideráveis de relatórios em SSRS com a mesma estrutura, alterando-se as dimensões e/ou métricas a utilizar. Para estas situações, e tendo em consideração o esforço de manutenção e performance dos relatórios, desenvolveu-se uma solução para este problema.

Criação do Modelo e Respetivas Entidades no MDS

De forma a garantir o dinamismo das queries produzidas em MDX no SSRS através da parametrização dos relatórios é necessário criar um modelo e as respetivas entidades. Para este exemplo foi criado o modelo “Artigo” com as seguintes entidades:

  • Dimension”: possui dois atributos (nome e código), sendo compostos pelas diversas dimensões utilizadas nas tabelas e gráficos dos relatórios;
  • ”Measure”: possui dois atributos (nome e código), sendo compostos pelas diversas métricas utilizadas nas tabelas e gráficos dos relatórios;
  • “Report”: esta entidade garantirá a interatividade com as duas anteriores, sendo composta pelos seguintes atributos:
  • Nome: do relatório/dimensões/métricas;
  • Código: gerado automaticamente;
  • ReportOperationalCode: número do relatório (ex: “A 1, A 1.1, A 1.1.1,…”);
  • ParentReport: este atributo é dependente do atributo “código”, para que seja possível identificar qual o relatório–pai do relatório em questão, podendo ter múltiplas funcionalidades;
  • Filter_Dimension: atributo dependente da entidade “Dimension”, que permite selecionar a dimensão de determinado relatório;
  • Filter_Measure: atributo dependente da entidade “Measure”, que permite selecionar a métrica de determinado relatório;
  • Filter_Dimension_Rows: atributo muito semelhante ao atributo “Filter_Dimension”, não limitado no entanto pela dependência da entidade “Dimension” uma vez que poderá ter múltiplas funcionalidades (ex: inserir um filtro para a métrica MDX do relatório; necessidade de ter uma segunda dimensão dinâmica no relatório).

 

Preenchimento das Entidades Do MDS

Para que a entidade “Report” esteja devidamente preenchida é necessário que as entidades “Dimension” e “Measure” tenham os atributos preenchidos. Para este artigo obtém-se a seguinte informação necessária para a conclusão do relatório:

Desenvolvimento do Relatório Em SSRS

Como para qualquer outro relatório é necessário configurar as fontes de dados (data sources), tanto para o cubo SSAS como para o MDS.

Criação de um Dataset e Parâmetros

Criação do Dataset do MDS

Independentemente do relatório a gerar, sabemos que é necessário extrair informação da entidade “Report” do MDS. Para tal, faz sentido criar um dataset com a seguinte query:

Assim é gerado automaticamente o parâmetro “@ReportID”, que corresponde ao atributo código da entidade que vai alimentar o parâmetro, permitindo por sua vez a leitura da dimensão e métrica de um determinado relatório. Posteriormente, através do separador Report Data, é possível configurar o parâmetro sendo-lhe atribuido a designação “Relatório”, sem ter um valor pré-definido.

Criação de um Dataset e Parâmetros

Sendo o objetivo final permitir ao utilizador visualizar o relatório que pretende sem ter conhecimento técnico da dimensão e métrica do mesmo, é necessário criar uma query MDX dinâmica com parâmetros criados no SSRS.

Para este exemplo foi criado o dataset “DsTabela”, com ligação ao cubo SSAS e composto pela seguinte query:

Como é possível verificar, serão precisos os seguintes parâmetros:

MétricaRelatório: este parâmetro obtém informação diretamente do MDS, sendo o atributo fonte o “Filter_Measure”, tendo como valor pré-definido o campo “Filter_Measure_Code”;

 

 

DimensãoRelatório: este parâmetro obtém informação diretamente do MDS, sendo o atributo fonte o “Filter_Dimension”, tendo como valor pré-definido o campo “Filter_Dimension_Code”;

 

 

Data: sendo relevante para este exemplo realizar uma análise anual, este parâmetro é composto por um valor em concreto.

 

 

Apesar de existir a necessidade de criar os parâmetros, apenas o parâmetro Relatório estará visível para o utilizador, uma vez que ao inserir o código, é feita automaticamente uma leitura da dimensão e métrica referente ao relatório através da query MDX.

Relativamente aos campos da query, estes devem ser adicionados no separador Fields uma vez que a fonte dos campos é codificada. Como tal, de forma a ser possível fazer uma leitura dos mesmos na visualização dos relatórios, são inseridas todas as dimensões e métricas necessárias com um código, como por exemplo:

<?xmlversion=”1.0″ encoding=”utf-8″?><Field xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:xsd=”http://www.w3.org/2001/XMLSchema” xsi:type=”Level” UniqueName=”[Customer].[Customer Geography].[Country]” />

Criação do Relatório

Como referido anteriormente, a estrutura para os múltiplos relatórios é a mesma, no entanto as dimensões e métricas alteram-se. Assim, para este exemplo foi desenvolvido um modelo que apresenta resultados consoante o relatório escolhido. Vejamos alguns exemplos:

Como é possível verificar, consoante a escolha do relatório ocorre o seguinte:

  • O subtítulo altera para que o utilizador perceba que dimensão e métrica estão a ser utilizadas;
  • A primeira coluna da Tablix altera o título e o campo consoante o relatório selecionado;
  • Os gráficos alteram a análise e respetiva legenda.

Esta possibilidade de desenvolvimento de relatórios em SSRS revela uma maior eficiência assim como uma maior facilidade na manutenção destes. Tal deve-se ao facto de ser executada apenas uma query e, caso seja necessário acrescentar novas dimensões ou métricas, é um processo relativamente fácil e rápido uma vez que apenas é necessário adicionar mais uma dimensão e/ou métrica nas entidades do MDS, assim como um campo no dataset do SSRS.

   
.
.
.
.
.
.
      Sofia Margalha
         Consultant