segunda-feira, 9 de julho de 2012

UNPIVOT - Integration Services

Aqui vai uma breve dica de como utilizar o objeto "UNPIVOT" no SSIS (integration services). Mas o principal objetivo deste post é mostrar a solução de um problema que aconteceu comigo, e que a mensagem de erro gerada pelo Visual Studio, não nos remete ao real problema.

Percebam que o pacote é muito simples e vou demonstrar a origem e resultado com imagens para ficar mais didático.



O objeto "ADO NET Source" do pacote, está usando a tabela acima como fonte de dados. Notem que a tabela está no modelo relacional.
Obs.: o UNPIVOT realiza a ação inversa do último post.



Pela relação das cores entre as imagens das duas planilhas, observem que após executar o pacote, as colunas "Indexa", "Juros" e "Calc" agora estão sendo apresentadas em linhas para cada "Customer ID".

Agora: vamos às configurações do pacote...

Insira um objeto ADO NET Source e configure-o alterando a instrução SQL Command ou optando pela seleção de uma tabela ou view.


Dica: prestem atenção no código SQL Command. Reparem que todas as colunas selecionadas estão sendo convertidas, pois, ao fazer o unpivot todos os dados que estão em diferentes colunas e possivelmente diferentes tipos de dados, ficarão na mesma coluna e, obviamente não podemos ter diferentes tipos de dados na mesma coluna.

Caso você não tenha feito a conversão dos dados e esses dados sejam de tipos diferentes, o Visual Studio exibirá a seguinte mensagem: "Incorrect UnPivot metadata. In an UnPivot transform, all input columns with a PivotKeyValue that is set, and are pointing to the same DestinationColumn, must have metadata that exactly matches the DestinationColumn."

Agora o próximo passo é configurar o objeto unpivot. Preferi ilustrar essas configurações, acho que ficará mais fáci de entenderem. Mas qualquer dúvida, podem entrar em contato.

terça-feira, 18 de outubro de 2011

Consulta CrossTab

Pessoal,


Resolvi postar aqui uma solução para "virar" uma tabela.

Vejo poucas pessoas perguntando a respeito, mas tenho a impressão, por experiência própria, de que as pessoas não imaginam que seja possível resolver esse problema via SQL.


Para os que tiveram alguma experiência com MS Access, saberão exatamente do que estou falando: Consulta de Referência Cruzada. Para os que ainda não entenderam é quando você precisa pegar linhas (dados) de uma tabela e exibí-las em colunas.

O exemplo abaixo faz isso utilizando uma procedure. É bem simples e funciona bem. Obviamente dependendo da quantidade de registros essa leitura pode ficar um tanto lenta.



CREATE PROC [dbo].[sp_CrossTab]
@Table VARCHAR(255),
@RowFld VARCHAR(255),
@ColFld VARCHAR(255),
@ValFld VARCHAR(255),
@Filter VARCHAR(255),
@AggFunct VARCHAR(255)
AS
BEGIN
DECLARE @SQL AS VARCHAR(8000)
DECLARE @CursorSQL AS VARCHAR(8000)
DECLARE @ColVal AS VARCHAR(1024)
DECLARE @NewCol AS VARCHAR(2048)

/* get col hdrs */
SET @CursorSQL = 'DECLARE FldCursor CURSOR FAST_FORWARD FOR '
+ 'SELECT ' + @ColFld + ' FROM ' + @Table + ' GROUP BY '
+ @ColFld + ' ORDER BY ' + @ColFld
EXEC( @CursorSQL )
OPEN FldCursor

/* traverse col hdrs, generating SQL for table */
SET @SQL = 'SELECT ' + @RowFld
FETCH NEXT FROM FldCursor INTO @ColVal
WHILE 0 = @@FETCH_STATUS
BEGIN
SET @NewCol = ', ' + @AggFunct + '(CASE ' + @ColFld + ' WHEN '''
+ @ColVal + ''' THEN ' + @ValFld + ' ELSE NULL END) AS [' + @ColVal + ']'
SET @SQL = @SQL + @NewCol
FETCH NEXT FROM FldCursor INTO @ColVal
END
CLOSE FldCursor
DEALLOCATE FldCursor

/* finish SQL */
SET @SQL = @SQL + ' FROM ' + @Table
IF 0 < LEN( @Filter) SET @SQL = @SQL + ' WHERE ' + @Filter SET @SQL = @SQL + ' GROUP BY ' + @RowFld + ' ORDER BY ' + @RowFld /* run it! */ /* PRINT @SQL */ EXEC( @SQL) END





quarta-feira, 28 de setembro de 2011

Paginação no SQL Server







Hoje me perguntaram uma forma de fazer paginação no MS SQL Server, encontrei uma forma de fazer e achei legal compartilhar. Apesar de ser fácil não é muito trivial.





SELECT IdUsuario
, Nome
FROM (SELECT ROW_NUMBER() OVER (ORDER BY IdUsuario ASC) AS Row
,IdUsuario
,Nome
FROM tbUsuarios) AS Usuarios
WHERE Row BETWEEN 1 AND 5




Importante: o campo referenciado no ROW_NUMBER() deve sempre ser uma chave primária para que não haja alteração na paginação.

terça-feira, 12 de abril de 2011

Busca da Sabedoria

"Só os ignorantes procuram imitar o comportamento dos outros. Os homens inteligentes não perdem seu tempo com isto, e desenvolvem suas habilidades pessoais; sabem que não existem duas folhas iguais numa floresta de cem mil árvores. Não existem duas viagens iguais no mesmo Caminho".

sexta-feira, 8 de abril de 2011

O que é, o que é? (by Lucas Lujan)

Tem gente que acredita que a vida é uma prova e que Deus é o professor. Ele está sentando na cadeira, esperando o sinal tocar para recebê-la. Com a prova em mãos, Ele pode avaliá-la e decidir se você está aprovado ou reprovado, por toda a eternidade.

 

Tem gente que acredita que a vida é uma prova já realizada por Deus, antes mesmo de você chegar à escola. Para alguns poucos, Ele tirou 10. Para os outros, tirou 0. Na verdade, tudo o que você estudou, ou não, para ir bem no teste, é indiferente. O resultado já estava dado de antemão por Deus, o professor, que se disfarçou de você para escolher as respostas.

 

Tem gente que acredita que a vida é uma prova, e que você chegou atrasado para realizá-la. Agora precisa ser pago um alto preço para fazer a prova substitutiva. Mas esse preço só o filho do diretor pode pagar, porque é caro demais. Então o diretor autoriza o filho a pagar o preço da prova substitutiva para você poder realizá-la. Você não acredita na bondade do diretor, que lhe diz que basta que você creia nela, e levante a mão para confessar e ser aprovado automaticamente.

 

Tem gente que acredita que a vida é uma prova e que Deus é do PSDB, partidário da política educacional de aprovação automática. Assim, tanto faz quanto você tirou na prova, pois desde que vá à escola, será aprovado de qualquer forma.

 

Tem gente que acredita que a vida é uma prova eterna e cíclica, e que as respostas erradas deverão ser pagas, bem como as certas serão recompensadas, na próxima vida. Para esses, Deus é a lei da física que enuncia: "Para toda ação existe uma reação de força equivalente em sentido contrário".

 

Tem gente que tira a vida da categoria de prova e Deus da categoria de professor e examinador. Acreditam que a vida é um presente dado por Deus, que é um pai amoroso, justo e bom. Ela não está sob julgamento ou avaliação porque é gratuita, afinal, é um presente. Que por sua vez não está aguardando recompensa, afinal foi dado por alguém amoroso, e todo amor é voluntário. Assim, concluem que ela nada mais é que uma conspiração gratuita e voluntária do Doador para o desfruto do amor, da justiça e da bondade, que preludiam a experiência da eternidade.

 

Eu? Ah! Eu fico com a pureza da resposta das crianças: é a vida, é bonita e é bonita.  

 

Lucas Lujan

terça-feira, 29 de março de 2011

O mundo está em perigo - by Lucas Lujan

O processo de secularização do mundo está cada vez mais agudo. Um projeto que começou no advento da modernidade, ainda hoje se encontra vivo, a plenos pulmões. O discurso religioso sobre um deus está cada vez menos necessário e cada vez mais rejeitado, e a cada dia milhares de pessoas abandonam a religião no mundo todo. Vivemos uma etapa nova na história, que chamo, copiando o Paulo Brabo, de humanitarismo. Ele consiste em abandonar o discurso religioso, extra-mundano e a-histórico, procurando transformar a história humana por meio de uma práxis solidária, que afirma o respeito mútuo e a boa convivência (comunhão), e tem na compaixão seu sentido mais pleno: seres humanos cuidando de seres humanos, tornando o planeta um lugar bom para se viver. É aqui que reside o grande desafio para nós, viventes do século XXI. Esse processo de secularização humanitária é uma faca de dois gumes. Explico. Alguns, entre eles eu, vêem nesse processo uma segunda kenosis de Deus: a não necessidade do discurso sobre Deus seria um segundo esvaziamento. Em outras palavras, quanto menos se precisa falar sobre Deus, conquanto Ele tenha se tornado parte integrante da nossa convivência cotidiana, melhor. Se o humanitarismo consiste em solidariedade, respeito, comunhão e compaixão, Deus está se tornando prático, não mais uma especulação religiosa. E isso é motivo de celebração e alegria. Porém, alguns vêem nesse processo a demonização de um mundo sem Deus, que precisa ser urgentemente resgatado. Esse é o movimento religioso fundamentalista, presente no mundo todo. Em outras palavras, enquanto o processo de secularização gera libertação em alguns, ele também aprofunda a raiva dos religiosos, e o mundo fica cada vez mais exposto ao fundamentalismo mais radical. Diante do esvaziamento do discurso sobre deus, religiosos do mundo inteiro se articulam para defender seu deus e sua doutrina a todo custo, mesmo que seja tirando a própria vida ou a roubando do outro. Para eles, o discurso religioso sobre deus ainda é muito necessário, afinal, o verdadeiro crente não pode descansar enquanto o mundo inteiro não se ajoelhar. Não é óbvio para todos, dizem os fundamentalistas, que a autoridade religiosa está acima de todas e que aqueles que se recusam a reconhecer isso abrem mão do direito de existir? (palavras de Christopher Hitchens em “Deus não é grande: como a religião envenena tudo”. Rio de Janeiro: Ediouro,2007). O discurso sobre deus é a mais importante ferramenta para os fundamentalistas, porque com ele é possível gerar opressão sem igual. Falar em nome de deus intimida, coloca medo. Falar em nome de deus legitima qualquer atitude, porque é deus que a requer. Logo se vê que falar em nome deus é o melhor negócio para quem quer controlar, cercear a liberdade, manipular, intimidar e legitimar seu próprio poder. É por isso que o discurso religioso é cada vez mais abandonado em nossos dias: porque só faz sentido para os próprios religiosos, e não para o resto da humanidade. Afinal, um deus que está disposto a matar para ser servido só é objeto de adoração dos que tem interesse na matança. E o mundo, liberto do dogmatismo religioso, aprendeu a rejeitar esse deus. A grande ironia é que as religiões, pretensas salvadoras do mundo, estão colocando o mundo em perigo real. Como se não bastassem os genocídios e as guerras históricas legitimadas em nome de deus - entre elas a do Afeganistão e Iraque no governo norte-americano protestante de George W. Bush - desde o último século lidamos com o perigo emergente da guerra nuclear, o que geraria um extermínio em massa. Ou seja, estamos diante de um mundo onde fundamentalistas, em nome de deus, podem acabar com a nossa espécie. Enganam-se os que pensam que há vários tipos de fundamentalismos devido às várias religiões. O fundamentalismo é um novo tipo de religião, atuante nos mais diversos países, que agrega adeptos do culto ao deus da morte, da vingança e do extermínio. O mundo está em perigo. Sonho com um mundo onde falar de Deus seja uma redundância diante da prática do amor solidário e da compaixão, e não com um mundo onde mortes são legitimadas em nome da defesa da fé e de deus. Lucas Lujan

quarta-feira, 26 de janeiro de 2011

Ajuda ao RJ



Pessoal, eu já fiz minha parte... quem achar que também deve/pode ajudar, acesse o link clicando na mensagem acima. Essa é apenas uma das formas de colaborar com centenas de vítimas do desastre que estamos assistindo diariamente e que estão precisando MUITO de nossa ajuda. Lembrem-se: um pouco de cada um pode fazer uma enorme diferença.

Preferi não colocar aqui o número da conta, pois, muitas pessoas podem achar que é algum tipo de golpe. Mas podem conferir também no site do Banco Bradesco