Problemillas en algunos reports de TFS con la plantilla de SCRUM II

Sólo quería ampliar la info que detallé para el Report Builds que escribí en la entrada Problemilllas… , referida esta vez al report Build Unit Tests .

El problema es exactamente el mismo que en el report Build; los estados (failed, passed, inconclusive, etc…) de la compilación en inglés Hardcoded en las condiciones de las consultas dentro del report.

La tabla implicada esta vez es TfsWarehouse].[dbo].[Outcome] de la base de datos TfsWarehouse, siendo sus valores en la instalación en castellano los siguientes:

 

__ID    Outcome
1    Error
2    Tiempo de espera
3    Anulado
4    No concluyente
5    Pasada (ejecución anulada)
6    No se puede ejecutar
7    No ejecutado
8    Desconectado
9    Advertencia
10    Pasada
11    Completado
12    En curso
13    Pendiente

 

 

Saludos

Problemillas en algunos reports de TFS con la plantilla de SCRUM

 

Hace unos días uno de los equipos de desarrollo de la empresa detectó que no se mostraban algunos reports de la plantilla de Scrum (ScrumforTeamSystem.2.2.14165.003). Concretamente se trataba de los reports Builds y Build Unit Test.
El error venía dado porque aun habiendo compilaciones lanzadas, el servidor no mostraba datos disponibles. Al no tratarse de un problema del refresco del DataWarehouse damos por sentado que el error se estaba produciendo en el report.

Nos bajamos el rdl del servidor de reporting para dar un vistazo a la Select principal que utiliza el report en cuestión, la cual es:

SELECT CONVERT(DATETIME,CONVERT(VARCHAR,b.[Build Start Time],112),112) AS BuildDay 
        , bs.[Build Status] AS BuildStatus 
        , COUNT(b.[__ID]) AS  BuildCounter 
    FROM dbo.Build b 
        INNER JOIN dbo.[Build Details] bd 
            ON b.[__ID] = bd.Build 
        INNER JOIN dbo.[Team Project] tp 
            ON bd.[Team Project] = tp.[__ID] 
        INNER JOIN dbo.[Build Status] bs 
            ON bd.[Build Status] = bs.[__ID] 
            AND bs.[Build Status] IN ('Succeeded', 'Partially Succeeded', 
 
'Failed', 'Stopped') 
    WHERE CONVERT(DATETIME,CONVERT(VARCHAR,b.[Build Start Time],112),112) BETWEEN 
 
@vStartDate AND @vEndDate 
    AND b.[Build Type] = @vBuildType 
    AND tp.[Team Project] = @vProject 
    GROUP BY CONVERT(DATETIME,CONVERT(VARCHAR,b.[Build Start Time],112),112) , 
 
bs.[Build Status] 
 

 

 

Tras ver el código, comprobamos que en la tabla  build status de la base de datos TfsWarehouse, los valores que se usan para guardar el estado de una compilación son los siguientes:

__ID    Build Status    __LastUpdatedTime    __DimensionMemberActive 
1    En curso    2009-03-16 10:31:58.003    1 
2    Correcto    2009-03-16 10:31:58.020    1 
3    Completado parcialmente    2009-03-16 10:31:58.020    1 
4    Incorrecto    2009-03-16 10:31:58.020    1 
5    Detenido    2009-03-16 10:31:58.020    1 
6    Sin iniciar    2009-03-16 10:31:58.020    1 

Por lo tanto, la select anterior no mostrará nunca ningún valor en el report Builds  citado anteriormente al filtrar por los valores del estado en inglés(Suceeded, Failed, etc. ) mientras que los valores reales que TFS asocia a la compilación están en español en la base de datos(Correcto, Incorrecto, etc.)

Por tanto hemos decidido editar el report cambiando los estados de inglés a castellano, quedando la consulta principal  del report de la siguiente manera:

SELECT BuildDay 
    , ISNULL([Correcto],0) [Correcto] 
    , ISNULL([Completado parcialmente],0) [Completado parcialmente] 
    , ISNULL([Incorrecto],0) [Incorrecto] 
    , ISNULL([Detenido],0) [Detenido] 
FROM 
( 
    SELECT CONVERT(DATETIME,CONVERT(VARCHAR,b.[Build Start Time],112),112) AS BuildDay 
        , bs.[Build Status] AS BuildStatus 
        , COUNT(b.[__ID]) AS  BuildCounter 
    FROM dbo.Build b 
        INNER JOIN dbo.[Build Details] bd 
            ON b.[__ID] = bd.Build 
        INNER JOIN dbo.[Team Project] tp 
            ON bd.[Team Project] = tp.[__ID] 
        INNER JOIN dbo.[Build Status] bs 
            ON bd.[Build Status] = bs.[__ID] 
            AND bs.[Build Status] IN ('Correcto', 'Completado', 
 
'parcialmente', 'Incorrecto', 'Detenido') 
    WHERE CONVERT(DATETIME,CONVERT(VARCHAR,b.[Build Start Time],112),112) BETWEEN 
 
@vStartDate AND @vEndDate 
    AND b.[Build Type] = @vBuildType 
    AND tp.[Team Project] = @vProject 
    GROUP BY CONVERT(DATETIME,CONVERT(VARCHAR,b.[Build Start Time],112),112) , 
 
bs.[Build Status] 
    ) p PIVOT 
( 
    SUM(BuildCounter) FOR BuildStatus IN ([Correcto], [Completado 
 
parcialmente], [Incorrecto], [Detenido) 
) AS pvt 
 

Hay que pensar que se hace referencia a estos valores en diversas partes del rdl, por lo que habrá que tenerlo en cuenta a la hora de modificar el report.

Después de esto, sólo hace falta subirlo de nuevo (en nuestro caso, hemos dejado el original y el modificado se ha subido con otro nombre), volver a configurar el origen de datos, de reports y de olap y el report comienza a proporcionarnos los datos que necesitamos.

Entiendo que es un problema que sólo se da en instalaciones de la plantilla de Scrum en un TFS instalado en castellano (con el language pack correspondiente en WSS). Si alguno tiene algún problema similar, estaría encantado de comentarlo.

Una última cosa, también hemos tenido que modificar los parámetros de inicio (start date) y final (end date) del report y quitarles los valores por defecto. Sin este último paso, no había manera de que cogiese los valores introducidos por el usuario y usaba siempre de los de la configuración.

 

Saludos