FITOMN of AM v3
3/28/2017 - 6:07 PM

Adecuación de rendimiento para mostrar porcentaje de inasistencia en gráfica en panel de Profesor

Adecuación de rendimiento para mostrar porcentaje de inasistencia en gráfica en panel de Profesor

----------------------------INICIO PROCEDIMIENTO ------------------------
IF OBJECT_ID('spObtenerAsistenciaGruposProfesor', 'P') IS NOT NULL
      DROP PROC spObtenerAsistenciaGruposProfesor
GO

CREATE PROCEDURE spObtenerAsistenciaGruposProfesor
    @idProfesor INT ,
    @iFolioPeriodo BIGINT
/* --------------------------------------------------------------------------------------------------------------
FECHA		   |    AUTOR		|DESCRIPCION
28/Mar/2017    | Luis Bernal	|
--------------------------------------------------------------------------------------------------------------*/
AS
    BEGIN
        SET NOCOUNT ON;
        SET LANGUAGE spanish;
        SET DATEFORMAT MDY;
        SET DATEFIRST 7;
  --hugo
        SELECT  T.idAsignatura ,
                T.sAsignatura ,
                CONVERT(DOUBLE PRECISION, SUM(T.totalAsistentes))
                / CONVERT(DOUBLE PRECISION, SUM(T.totalInscritos)) * 100 AS dPorcentaje
        FROM    ( SELECT    COUNT(cta.iFolioInscripcion) AS totalAsistentes ,
                            ci.dFecha ,
                            cta.idAsignatura ,
                            ca.sAsignatura ,
                            dbo.fnTotalAlumnosGrupo(cta.idGrupo,
                                                    cgct.iFolioPeriodo) totalInscritos
                  FROM      dbo.Ctrl_Inasistencias ci
                            INNER JOIN dbo.Ctrl_TrayectoriaAcademica cta ON cta.iFolio = ci.iFolioTrayectoria
                            INNER JOIN dbo.Ctrl_GrupoClaseTentativo cgct ON cgct.idAsignatura = cta.idAsignatura
                                                              AND cgct.idGrupo = cta.idGrupo
                            INNER JOIN dbo.Cat_Asignaturas ca ON ca.idAsignatura = cta.idAsignatura
                            LEFT JOIN dbo.Ctrl_GrupoClaseTentativoCotitulares cgctc ON cgctc.iFolioGrupoClaseTentativo = cgct.iFolio
                  WHERE     cgct.iFolioPeriodo = @iFolioPeriodo
                            AND ( cgct.idProfesor = @idProfesor
                                  OR cgctc.idProfesor = @idProfesor
                                )
                            --AND dbo.fnTotalAlumnosGrupo(cta.idGrupo, cgct.iFolioPeriodo) > 0  ** Se comenta esta condición y se considera en la clausula HAVING para mejorar considerablemente el rendimiento 28/Mar/2017 LBV
                  GROUP BY  ci.dFecha ,
                            cta.idAsignatura ,
                            ca.sAsignatura ,
                            dbo.fnTotalAlumnosGrupo(cta.idGrupo, cgct.iFolioPeriodo)
				  HAVING  dbo.fnTotalAlumnosGrupo(cta.idGrupo, cgct.iFolioPeriodo) > 0
                ) AS T
        GROUP BY T.sAsignatura,T.idAsignatura
        ORDER BY T.sAsignatura

    END