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

image

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

image

Então fiz uma 2a expression em Visibilidade da Coluna

image

=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

image

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

Anúncios