Hoje tive de ajudar um amigo aqui da empresa e surgiu uma idéia legal de como demonstrar gráficamente dados como o exemplo abaixo, usando o Reporting Services
TASK DAT_INI DAT_END
TASK1 2011-01-01 2011-01-03
TASK2 2011-01-04 2011-01-07
TASK3 2011-01-08 2011-01-09
TASK4 2011-01-09 2011-01-15
Porém para criar uma matriz eu precisaria ter uma unica data para usar como fonte de dado para COLUNA e Task ficaria como Linha
A solução que encontrei foi criar uma tabela de datas
DATA
2011-01-01
2011-01-02
2011-01-03
2011-01-04
2011-01-05
2011-01-06
2011-01-07
…
E fazer um cross join dessas tabelas , ficando assim
SELECT * FROM TASKS T
INNER JOIN DATAS D
ON D.DAT BETWEEN T.DAT_INI AND T.DAT_END
TASK DAT_INI DAT_END DATA
TASK1 2011-01-01 2011-01-03 2011-01-01
TASK1 2011-01-01 2011-01-03 2011-01-02
TASK1 2011-01-01 2011-01-03 2011-01-03
TASK2 2011-01-04 2011-01-07 2011-01-04
TASK2 2011-01-04 2011-01-07 2011-01-05
TASK2 2011-01-04 2011-01-07 2011-01-06
…
No reporting Services usei o SELECT acima como Source e criei um relatório como o abaixo
No campo onde iriam os dados “Data” (Vermelho) usei uma expression na propriedade da Background Color
=IIF(CStr(Fields!DAT.Value) = “”,”White”,”Blue”)
Porém ao gerar o relatório verifiquei que ficou grande, pois exibe todas datas entre inicio e fim
Então fiz uma 2a expression em Visibilidade da Coluna
=IIF( Fields!DAT.Value = Fields!DAT_INI.Value OR Fields!DAT.Value = Fields!DAT_END.Value,False,True)
Usando esta expression faz com que ele só exiba as datas principais (Inicio e Fim), se a data que esta exibindo for igual inicio ou fim exibe senão oculta
No final o relatório fica como o seguinte
Talvez não seja a solução melhor ou mais elegante, mas funciona bem para exibir dados de tarefas ou dados como do Project Server