Think Think .Net
Diego Nogare [MVP | MCT | MCITP | MCTS | MCP | INETA BR]

Reporting Services no SQL Server 2008 R2 – Adicionar Mapas ao Map Gallery

quarta-feira, 8 setembro 2010 09:14 by Nogare

Fala galera, quando utilizamos o Reporting Services do SQL Server 2008 R2 temos a possibilidade de trabalhar nativamente com mapas. Para tal realização, é possivel utilizar os mapas de três formas diferentes: Map Gallery (utiliza os mapas pré-instalados no computador local) / ESRI Shapefiles (são os mapas baseados em arquivos que possuem todos os pontos geográficos compilados em um arquivo com extensão .shp) / Spatial Query (possibilita a realização de consultas no SQL Server 2008 R2 e retornamos os dados do tipo Geometry). Bom, depois de passar uma breve idéia de quais são as possibilidades de se trabalhar com mapas, e a idéia deste post é apresentar como se adicionar novos mapas ao Map Gallery, vamos começar.

imageimageQuando se criam relatórios, um dos ítens da ToolBox é o item “Map” (figura da esquerda). Arrastando este ítem para o relatório um wizard será chamado, é neste wizard que as três opções de mapas são apresentadas. Por padrão, a primeira opção selecionada é a Map Gallery e somente os mapas dos EUA estão disponíveis para utilizar (figura da direita), porém, é possível adicionar novos mapas, mas temos que fazer essa atividade manualmente.

Estes mapas disponíveis são relatórios individuais que estão organizados em uma estrutura de diretórios. Eles ficam armazenados no caminho “Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies\MapGallery”. Pronto, agora que você já sabe o que são esses mapas e como estão armazenados, chegou a hora de montar os relatórios de acordo com suas necessidades e colocar nesta estrutura. Simples assim :)

Eu montei dois relatórios do Brasil, um só com o contorno do país e outro separado pelos estados. Ainda vou montar todos os 27 estados separados por relatório, como no exemplo dos EUA que vem junto ao BIDS (Business Intelligence Developement Studio). Assim que montar estes mapas, disponibilizo todos para baixar em algum lugar. Provavelmente no meu SkyDrive.

image

Com os novos relatórios de mapas dentro da estrutura de diretórios, é possível utilizá-los nos próximos relatórios que forem utilizar o Map Gallery. Veja na figura acima a estrutura de diretórios com os mapas do Brasil (reparem na extensão .rld, que é a extensão dos relatórios que criamos normalmente no BIDS) e na figura abaixo a sessão Map Gallery do Reporting Services já constando os mapas do Brasil.

image

É isso ai pessoal, mais uma informação para ajudá-los com o Reporting Services dentro do SQL Server 2008 R2. Estou com vários tópicos no Task list, mas se quiser ver algum assunto em específico, pode sugerir. Veja meus contatos.

Reporting Services no SQL Server 2008 R2 – Montando relatórios específicos

quinta-feira, 2 setembro 2010 08:50 by Nogare

Fala galera, uma das coisas que foi necessário fazer internamente na NGR Solutions, era imprimir Notas Fiscais baseadas nos projetos que entregávamos. Em São Paulo (e algumas outras cidades) a emissão de Notas Fiscais é eletrônica, porém a NGR está sediada em Poá e a prefeitura da cidade não aceita notas eletrônicas, só são aceitas notas através do talão. Nossa sorte é que foi possível destacar as notas do talão e imprimir as informações. Com base nesse contexto de exemplo, pode ser facilmente adaptado à qualquer outra necessidade.

Para imprimir as informações da Nota Fiscal, vou me basear em uma procedure chamada “sps_NotaFiscal” que retorna todas as informações necessárias para o preenchimento da Nota. Estas informações vocês podem retornar de sua estrutura de dados normalizada.

Para entender esse modelo de nota fiscal de talão, veja a imagem abaixo. Nela as linhas em preto são as delimitações padrões de uma Nota Fiscal de serviços, os números que estão em verde é a distância da lateral esquerda até o campo que será impresso e os números em vermelho representam a distância entre o topo da página e o texto.

NF Modelo

Agora que já sabemos como é o modelo que será trabalhado, vamos abrir o SQL Server Reporting Services e o SQL Server 2008 R2 para coletar os dados e montar o layout que será impresso.

imageDepois de criar um projeto no BIDS (Business Intelligence Development Studio) e montar a estrutura simples conectando no nosso Banco de Dados e apontando para a procedure criada que retorna os dados necessários.

Se precisar de ajuda para criar seu Shared Data Source e seu Shared Datasets, leia Criando seu primeiro relatório. Vou entender que estamos com esta estrutura criada, ok?!

Neste exemplo, o Data Source aponta para o Banco de Dados e o Data Set aponta para a procedure “sps_NotaFiscal” que faz a busca na base de dados e retorna as informações necessárias para a montagem da Nota.

imageVamos adicionar um relatório chamado “NF_Talao” e especificar que os dados que serão consultados está no NotaFiscal.rsd (DataSet). Para isso é necessário selecionar os campos que retornam do DataSet, encontrando estes campos no Report Data. Caso não esteja visualizando a sessão Report Data, clique em qualquer parte do corpo do relatório, vá até o menu View e procure o ítem Report Data. Ou utilize o atalho Ctrl+Alt+D.

imageimageAgora que a sessão está aberta (figura da esquerda), será adicionado o DataSet que retorna os dados. Para isso, vá até o ítem Datasets do Report Data, clique com o botão direito e vá para Add Dataset. Quando a tela de selecionar o DataSet abrir, selecione o DataSet já criado anteriormente e mude o campo Name para NotaFiscal. Este nome será mostrado dentro da pasta DataSet do Report Data (figura da direita).

Repare que os campos da sua nota fiscal estão apresentados dentro do DataSet criado. Estes campos serão arrastados para dentro do relatório, em seus devidos lugares. image

O layout que será utilizado é o apresentado no início, reparem que no modelo temos números em verde e vermelho escritos à mão. Estes números são as distâncias entre a borda e topo do campo. Vamos arrastar o campo DataEmissao do Dataset para dentro do relatório, e em seguida, ajustar a posição correta. Lembrando que o número em vermelho é a distância do topo (Top) e a verde é a distância da esquerda (Left). Esta configuração deve ser feita em todos os campos do Dataset.

Após colocar todos campos no relatório, e organizar a localização (distâncias da lateral e topo), seu relatório terá uma aparëncia como esta abaixo.

image

Para testar o relatório, execute apertando F5. Se tudo estiver correto, seu relatório será semelhante a este abaixo:

image

Se imprimir este relatório em uma Nota Fiscal do talão, o relatório será como este abaixo:

NF Final

Ocasionalmente, um ajuste ou outro poderá ocorrer em cima da impressão realizada, este período de desenvolvimento e testes é exatamente para encontrar esses detalhes e consertar.

Montar relatórios com o SQL Server Reporting Services é extremamente simples, alguém discorda?! rss

TechEd Brasil 2010 – Minha Agenda

sexta-feira, 27 agosto 2010 04:22 by Nogare

Fala galera, de 13 a 15 de setembro de 2010 acontecerá em São Paulo o TechEd Brasil. É o maior evento de tecnologias Microsoft da América Latina, englobando mais de 150 palestras e 1500 pessoas presentes nestes 3 dias de evento.

Veja a programação destes 3 dias:

dia1 dia2 dia3

Nestes 3 dias, foi dificil montar minha agenda para assistir as palestras, em vários horários conflitavam mais de uma que eu gostaria de assistir! Porém, depois de uma escolha dificil, montei a agenda. Uma atividade que acontece a algum tempo aqui, é no final do segundo dia de evento, é o Ask the Experts. Quem quiser saber mais detalhes sobre o Ask the Experts, pode ler aqui.

O foco das minhas palestras este ano é em cima de SQL Server (é claro!), Azure Platform e ALM. Veja as minhas escolhas.

Dia 13/09: Segunda-Feira

13-09

Dia 14/09: Terça-Feira

 14-09

Dia 15/09: Quarta-Feira

15-09

Quem quiser saber mais sobre o TechEd Brasil 2010, pode acessar aqui.

Tipos de conexões do SSIS no SQL Server 2008 R2

segunda-feira, 24 maio 2010 08:03 by Nogare

Fala galera, estou escrevendo este post sobre a diferença dos tipos de conexões que temos no SQL Server Integration Services (ou SSIS para os intimos, rs) porque nas ultimas 3 semanas me perguntaram sobre isso 2 vezes. Então para poder tirar a duvida de quem precisar, agora fica mais facil.

Quando iniciamos um novo projeto de SSIS no BIDS (BI Development Studio) podemos identificar algumas pastas lógicas na Solution Explorer do projeto. As duas pastas que mais são utilizadas é a Data Sources e a SSIS Packages. A pasta SSIS Packages é onde os pacotes contendo o Workflow de atividades que trabalharão no processo de ETL são organizados logicamente, e a pasta Data Sources é onde as conexões globais ficam armzenadas.

Neste exemplo, vou utilizar o pacote chamado Package.dtsx que já vem criado na pasta SSIS Packages e criar os dois tipos de conexões, uma local exclusiva para o pacote e outra global para todos os pacotes do projeto. Veja as pastas e o pacote default:

clip_image001

Para ver as conexões, é preciso adicionar um controle DataFlow dentro do ControlFlow no pacote, isso pode ser feito arrastando o controle da toolbox para a área de design do ControlFlow. Depois de adicionado o DataFlow, clicando 2 vezes nele, a aba superior muda e permite editar as configurações do DataFlow selecionado. Veja a imagem com o controle DataFlow dentro do Controlflow. E do lado a imagem do DataFlow ainda vazio depois de receber o duplo clique.

clip_image002clip_image003

O controle DataFlow possui uma área de Connection Manager na região inferior da área de design. Nesta área ficam todas as conexões locais do pacote, vamos adicionar uma nova conexão clicando com o botão direito e indo até o item específico da conexão que deseja realizar.

clip_image004

Neste exemplo, vamos adicionar uma “New ADO.NET Connection…”. Depois de selecionar este ítem no menu, uma tela com todas as conexões que estão em cache na máquina de desenvolvimento são apresentadas. Do lado esquerdo são as conexões e do lado direito são os detalhes do que foi selecionado.

clip_image005

Será criada uma “New…” conexão, para apontar para o SQL Server 2008 R2 em uma conexão local e vamos ver como ela fica apresentada no Connection Managers do pacote.

clip_image006

Após a configuração, mais um item aparece na lista das conexões em cache, é nesta lista que selecionaremos a conexão que será utilizada para trabalhar no Workflow sendo uma origem ou um destino no processo que será executado.

Após a seleção, a conexão ficará exposta na Connection Managers do pacote, veja que o nome não é muito amigavel, é possível renomear clicando com o botão direito na conexão e apontando para “Rename” ou através do atalho F2. A mudança do nome não impacta o cache de conexões, somente o item que está na sessão de Connection String. Vou renomear esta conexão para “SQL 2008 R2 – Local”.

clip_image007

Agora que já criamos uma conexão local, vamos criar uma conexão global para o projeto. Para isso, vá até a Solution Explorer, encontre a pasta Data Sources, clique com o botão direito na pasta e aponte para New Data Source…

clip_image008

Quando a tela é aberta, reparamos que é uma tela que já conhecida, é a tela de cache de conexões. Como é só pra exemplo, vou selecionar qualquer uma delas diferente da selecionada anteriormente. A unica diferença é que no final escolhemos um nome para a conexão. Neste caso, como estou me conectando a uma conexão do SQL Azure Database,  vou chamar de “SQL Azure – Global”.

clip_image009

Veja que agora temos dois lugares que podem existir conexões. As conexões locais e as globais. As locais foram aquelas criadas diretamente no pacote e as globais são essas criadas na pasta Data Sources do projeto. Agora é chegada a hora de adicionar a conexão global ao pacote e utilizá-la como e quando for necessário. Para isso, clique com o botão direito na área de Connection Managers e aponte para “New Connection From Data Source…” isso permitirá selecionar qualquer conexão que esteja na pasta lógica Data Sources da Solution Explorer. Após adicionado, repare que o ícone das conexões são diferentes, isso serve justamente para identificar visualmente qual conexão é de cada escopo. O cilindo com uma conexão em baixo significa que é uma conexão local enquanto o cilindo com quatro setas apontando para todos os lados significa uma conexão global.

clip_image010clip_image011

As duas principais diferenças entre os dois tipos de conexões, é que quando utilizamos conexões locais elas ficam somente nos pacotes e se for necessário utilizar a mesma conexão em outro pacote, ela terá que ser configurada novamente nele, já na conexão global é só utilizar a referência do Data Sources em todos os pacotes. A outra diferença é que se for preciso alterar alguma conexão, alterar a que está no Data Sources lhe dá o trabalho de realizar isso somente em um lugar e todas as referências são automaticamente atualizadas. Já quando se tem uma conexão em cada pacote, se você possuir 20 pacotes em seu projeto, terá que alterar 20 vezes a mesma coisa!

Plataforma de BI dentro do SQL Server 2008 – prt 7

quarta-feira, 14 abril 2010 06:27 by Nogare

Fala galera, como prometido na palestra sobre SQL Azure Database, dia 10/04/2010 no Marília Tech Day 2010, vou escrever o artigo! A idéia será utilizar aquele mesmo arquivo TXT de nomes para importar dados através do SSIS (SQL Server Integration Services) escrevendo no SQL Azure Database.

Para começar, vamos abrir o BIDS (Business Intelligence Development Studio), que está dentro da pasta do SQL Server 2008:

image

Após a abertura do BIDS, inicie um novo projeto de “Business Intelligence Projects” utilizando o tipo “Integration Services Project”. O nome que vou salvar meu projeto é “txtParaAzure”. Veja estas opções na imagem abaixo:

image

Ao iniciar o projeto, quatro abas superiores são apresentadas na área de desenvolvimento do processo: Control Flow, Data Flow, Event Handlers e Package Explorer. Não vou falar sobre as abas que não utilizaremos, vou falar apenas da Control Flow e Data Flow. A aba Control Flow é responsavel por criar as execuções do pacote, é dentro desta área que são colocados os objetos “macro”, neste exemplo, vamos inserir um Data Flow Task. Pode possuir um ou mais destes objetos (Data Flows Task), que são os responsaveis reais por realizar o ETL (Extration, Transformation and Loading – Extração, Transformação e Carregamento). É no Data Flow que informamos qual é a origem e o destino dos dados que serão processados. Veja as abas superiores e o item do Data Flow na toolBox (à esquerda). Ele será arrastado para dentro do Control Flow e irá controlar o processo.

image

Após arrastar o item Data Flow Task para o Control Flow, dê dois cliques no item e vamos analisar o toolbox desta área. Repare que os ítens do toolbox foram modificados para se adequar à área Data Flow. As sessões da toolbox são “Data Flow Sources” (objetos referentes à origem dos dados), “Data Flow Transformation” (objetos referentes à transformação dos dados) e “Data Flow Destinations” (objetos referentes à destino dos dados). Os dois grupos que sempre serão usados em um projeto de SSIS serão os de Origem (Data Flow Sources) e de Destino (Data Flow Destinations). O grupo de transformação (Data Flow Transformations) pode ser usado ou não, vai depender da sua necessidade.

image

Bom, sabendo que os ítens mínimos para se criar um fluxo no SSIS são Origem e Destino, vamos adicionar esses itens e fazer as conexões. A origem será um arquivo TXT, para isso, vou adicionar o “Flat File Source”. Encontre esse objeto na toolbox à esquerda e arraste para a área de design.

image

Depois, como o destino será um banco de dados na nuvem, vou adicionar um “ADO NET Destination”. Mesmo processo, encontre o objeto na toolbox e arraste para a área de design. Repare que os ítens estão um na sessão de Origem e outro no Destino.

image

Para se criar o fluxo do processo, visto que podem existir diversas atividades de origens e destinos acontecendo em um mesmo fluxo, é necessário criar uma ordem lógica dos acontecimentos. Para isso, vamos selecionar o item que será processado primeiro (Origem) e arrastar a setinha verde para o item seguinte (Destino). Neste caso, selecionamos o item “Flat File Source”, arrastamos sua setinha verde e ligamos no “ADO NET Destination”. Reparem que existem duas setas na origem, a seta verde segue o fluxo quando não ocorrer problema no processamento, já e a seta vermelha é utilizada como caminho quando o fluxo do processamento der algum problema. Geralmente a seta vermelha segue para um ítem que permite enviar um e-mail ou salvar a mensagem do erro em um arquivo de texto para análise posterior. Neste exemplo, vou apenas mostrar a seta verde.

image

Agora que já foram criados os fluxos do trabalho, vamos criar as conexões que servirão para orientar a origem e o destino dos dados. Para isso, clique com o botão direito na Origem e depois selecione Edit…

image Uma tela com as opções para se carregar um arquivo são apresentadas. Vamos configurar para ler o arquivo nomes.txt que criamos no post: Plataforma de BI dentro do SQL Server 2008 – prt 6 

Após clicar no Edit, uma tela se abrirá para selecionar qual será a conexão, como ainda não criamos a que será utilizada, clique no botão New… e configure as opções do arquivo que será lido.

A configuração inicial será somente colocar o Nome e a Descrição, e selecionar o arquivo de origem. A primeira caixa de texto é referente ao Nome, a segunda à Descrição e o botão Browse… para localizar o arquivo.

image

Agora que o arquivo foi carregado, vá até o item Advanced na lista da esquerda, selecione a Column 1 e clique no botão Delete. Na mesma tela, selecione a Column 0 e modifique a propriedade OutputColumnWidth para 100. Clique em Ok até voltar para a tela inicial.

image image

Após fazer a configuração dos dados de origem, repare que o objeto não está mais com um x dentro. Isso representa que ele está configurado com uma determinada fonte de dados. Comparando com o destino, que ainda não foi configurado, fica facil de ver o x. Agora é a hora de configurar o destino dos dados, vamos então fazer o mesmo processo com o destino, clique com o botão direito e selecione Edit…

Uma tela para selecionar a conexão é apresentada, vamos clicar em New… e ir para uma segunda tela. Nesta segunda tela, uma lista com as conexões existentes é apresentada, novamente clique em New… e agora sim, configure a conexão. Neste caso, vou configurar meu servidor do SQL Azure Database, mas poderia ser qualquer outro SGBD que você utilize.

image

Após configurar, volte até a primeira tela da configuração e informe qual será a tabela que vai escrever a informação.

image 

Após selecionar a tabela na combo de tabelas, clique no item Mappings à esquerda e faça a ligação entre a Column0 (Origem) e o nome (Destino). Essa configuração irá representar qual informação se liga na outra. Após ligar as colunas, é só dar OK.

image

O processo está quase concluído, só precisa executar (apertando F5) e aguardar o final do processamento. Se tudo estiver configurado corretamente, as caixinhas ficarão todas verdes, isso significa que foram executadas com sucesso. Caso alguma fique vermelha, ela não chegou a concluir todo o processamento.

image

Para confirmar a inclusão de todos os dados do arquivo TXT para o SQL Azure Database, vou fazer uma consulta simples para me retornar a quantidade de registros na tabela.

image

Com esse processo do SSIS funcionando, foi possível migrar dados de um arquivo TXT para o SQL Azure Database. O arquivo TXT foi só uma das possiveis origem de dados, podendo ser qualquer uma que estivesse dentro do grupo Data Flow Sources na toolbox da aba Data Flow.