Trabalhando com Dados Geográficos e relatórios de Drill through no SQL Server 2012 – Parte 2

No post anterior falei um pouco sobre como criar relatórios de Drill through com dados geográficos no SQL Server 2012.

Hoje vou falar sobre como utilizar um mesmo relatório para demonstrar diferentes visões dos dados além de algumas dicas para alguns problemas que encontrei durante os testes que fiz.

Imagine que tenho um mapa da minha cidade, informando o nome dos bairros e as respectivas regiões administrativas da qual cada um faz parte (Norte, Sul, Leste, Oeste). Desejo criar um relatório onde, inicialmente o mesmo mostre os dados de todos os bairros da cidade e, ao clicar em um bairro de uma determinada região, ele altere o relatório (filtre!) para demonstrar apenas os dados relativos aquela região.

Crie um novo relatório e adicione ao mesmo um objeto Mapa, baseado em uma “spatial query” e forneça todas as informações para acesso aos dados (Dataset, Datasource, etc).

Ao chegar na janela onde devemos informar a query para selecionar os dados espaciais, digitamos a consulta SQL com um filtro para a região:

SELECT ID, Bairro, Regiao, geom
FROM Tabela_dos_Dados_Geograficos
WHERE (@REGIAO IS NULL) OR (Regiao = @REGIAO)

Veja que nesse caso adicionei um parâmetro na consulta para filtrar a região. Ao clicar no botão “!” (exclamação) para executar e validar a consulta, uma janela aparece solicitando um valor para o parâmetro @REGIAO:

Ao utilizarmos uma consulta com parâmetro o SQL Server apresenta uma mensagem de informação, dizendo que não consegue determinar os dados espaciais. Acredito que seja devido ao fato dele não saber qual valor deve/pode ser utilizado para o parâmetro, mas eu pessoalmente acho isso uma falha, ele poderia executar a consulta com NULL por padrão, ou já permitir configurar um valor desejado por nós nesse momento, mas bem, com isso ele não irá demonstrar um preview do mapa em seguida:

Clique no botão OK e continue com o Wizard.

O SQL Server em sequência solicita a fonte de dados para os dados analíticos. Esses dados, que são opcionais, são dados que você pode adicionar ao seu relatório, para relacionar com seus dados espaciais. Vale lembrar que você pode selecionar todos os dados necessários na consulta utilizada para os dados espaciais, mais ai é uma questão de como você deseja organizar seu relatório e como seus dados estão dispostos.

No meu caso vou criar um novo dataset com alguns dados que desejo relacionar a meus dados geográficos e nesta vou adicionar um filtro também para a região. Ao clicar no botão da “!” para executar, novamente veremos a tela questionando o valor do parâmetro.

SELECT BAIRRO, 1 AS QTDE, REGIAO
FROM TABELA
WHERE (@REGIAO2 IS NULL) OR (REGIAO = @REGIAO2)
GROUP BY REGIAO, BAIRRO

Em seguida teremos então a tela onde devemos definir como os dados dos nossos dois datasets se relacionam, como se fosse um JOIN. No caso das consultas que utilizei, devemos relacionar os dados pelo BAIRRO e também pela REGIÃO.

Veja que novamente o SQL Server não consegue exibir os dados no painel devido aos parâmetros (painéis na parte inferior da figura acima).

Ao avançar para a próxima tela vemos mais um sinal dos “problemas” causados pela utilização dos parâmetros. Na exibição do preview do mapa, o SQL Server questiona que devemos declarar o parâmetro utilizado e mostra um mapa “padrão” para essas situações. Podemos ignorar a mensagem que ele exibe por enquanto e continuar com o relatório.

De qualquer forma nessa tela devemos informar os dados a serem exibidos, legendas, etc.

Com isso a primeira parte do nosso relatório está completa, mas ainda devemos configurar os parâmetros e as ações no relatório para que ele possa ser utilizado tanto para a cidade como também para as regiões.

Vamos agora para a janela de “Report Data” onde devemos clicar com o botão direito no parâmetro “@REGIAO”. No meu caso o parâmetro é do tipo “TEXT”, e vou configurar o mesmo para permitir valores NULL (situação onde quero exibir TODOS os bairros) e que seja hidden, pois não quero que o usuário tenha que digitar nada. Ainda nessa janela, vou até a aba “default values” e defino que quero especificar o valor padrão do parâmetro (“specify values”) e configuro o valor padrão desse parâmetro para NULL, para que ele exiba o relatório com todos os bairros por padrão.

Devemos repetir o mesmo procedimento para o outro parâmetro.

Agora devemos configurar o relatório para que, ao clicar em um bairro qualquer, o relatório seja filtrado para exibir apenas os dados/bairros daquela região.

Para isso, na janela de “Map Layers” (lado direito do mapa), clico com o botão direito do mouse sobre o mapa que inseri e clico em “Polygon properties”:

Vamos então na guia “Action” onde configuramos a ação de “Go to Report” e definimos o PRÓPRIO relatório como destino “Specify a report”. Então clicamos em “Add” para adicionar os parâmetros do nosso relatório (REGIAO) e definimos como valor para o mesmo o campo [REGIAO] do nosso dataset. Assim, ao clicar no mapa, ele chamará esse mesmo relatório, mas passando como parâmetro a região do bairro clicado, exibindo então esse mapa filtrado para aquela região.

Clicando em preview podemos ver então o resultado do relatório.

No meu caso, tive vários problemas ao tentar visualizar o relatório, pois os dados geográficos não eram exibidos, mesmo com a escala e legendas aparecendo aparentemente com valores corretos.

Depois de muitos testes observei o seguinte:

  • A) Ao fazer uma consulta para trazer os dados geográficos junto com os analíticos o relatório funcionava
  • B) Ao fazer todos os passos iniciais dos datasets e DEPOIS alterando os mesmos para adicionar os parâmetros, eu tanto podia visualizar o mapa durante o projeto como também conseguia executar o mapa com os filtros normalmente, apesar de que ao fechar o projeto e abrir de novo, a visualização do mapa em seu formato “real” não estará mais disponível, teremos o mesmo mapa “padrão”da Figura 4.

Obs: lembro que isso não é REGRA, mas foi o que aconteceu comigo.

Sendo assim, resolvi alterar a forma de elaborar o relatório, utilizando a opção “B”. Configurei os datasets, relacionei os dados de ambos e pude então visualizar o mapa durante o projeto, inclusive sem a mensagem relativa aos parâmetros no mapa.

APÓS isso, alterei os datasets, adicionando os filtros com os parâmetros na cláusula WHERE das consultas, e em seguida configurando os parâmetros da mesma forma que fiz antes (tipo TEXT, hidden, etc).

Agora, ao executar o preview do relatório, vemos o mapa com todos os bairros, com um comparativo de cada bairro com todos os demais:

Todos os bairros

e ao clicarmos sobre um dos bairros, vemos o mesmo relatório só que agora filtrado por região, comparando os bairros apenas com os bairros da sua mesma região:

Apenas bairros da região NORTE

Veja que as escalas de cores aqui serão diferentes do mapa da cidade, pois como havia mencionado, aqui estamos comparando os mapas do bairro apenas entre eles, desconsiderando os demais bairros das outras regiões.

Vale lembrar que esse mesmo relatório poderia ser configurado para exibir mais níveis de dados CIDADE -> REGIÃO -> BAIRRO, por exemplo, depende do que você deseja fazer e dos dados/mapas disponíveis.

Alguns podem ter achado esse processo um pouco trabalhoso, preferindo criar um relatório para a cidade e um específico para cada bairro, o que não estaria errado, mas dependendo da situação, você terminaria com muitos relatórios, o que poderia tornar a manutenção complicada (imagine uma alteração em todos eles?!).

Obs: como devem ter percebido, tive que omitir algumas informações, nomes de tabelas, etc., nesse post.

Esse post foi publicado em Artigos, Spatial, Virtual PASS BR. Bookmark o link permanente.

Uma resposta para Trabalhando com Dados Geográficos e relatórios de Drill through no SQL Server 2012 – Parte 2

  1. Pingback: Dados Geométricos e Geográficos – SQL Server 2008 / 2012 « Alex Souza

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s