﻿<?xml version="1.0" encoding="utf-8"?>
<ReportsExport>
  <Reports>
    <Report id="43c96a9b-61c4-495d-86a8-a8b1d1002ea8" codekey="Elect_MonthlyLearningProgramStatistics" name="Monthly report for learning programs" description="Lists for specified target groups (zz_loc_MUC, zz_loc_PCT, zz_user_IO or all of them) monthly statistics of learning program usage:&#xD;&#xA;- learning programs assigned to users via those 'main' target groups plus learning programs that members of those target gr">
      <MetaData created="2012-08-16T07:52:41" createdBy="unbekannt unbekannt" createdBy_user_id="20922" modified="2013-11-26T12:59:52" modifiedBy="Administrator ELECT" />
      <ExecutionDetails format="TableResult" commandType="SqlCommandOrQuery" exportHandler="" adminControl="" exportMultipleTablesToSheets="False" datesWithTime="False" extraParams="" />
      <Mandators mandatorMode="OnlyOwner" mandator_id="d5a90a49-e697-4aeb-8a5b-298782815490" isStandard="False" isUsedByMenu="False" />
      <Parameters>
        <Parameter id="997b94e6-72af-420c-92ac-1aaebb0ce458" isRequired="True" name="Target groups for e..lect monthly report" contextName="Target groups for e..lect monthly report" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
      </Parameters>
      <Roles>
        <Role id="30" />
        <Role id="40" />
        <Role id="50" />
        <Role id="90" />
      </Roles>
      <command>
        -- START DEBUG
        --DECLARE @current_mandator_id UNIQUEIDENTIFIER
        --DECLARE @targetGroup_id INT

        --SET @current_mandator_id = (SELECT tblMandators.id FROM tblMandators WHERE tblMandators.name='elect')
        --SET @targetGroup_id = (SELECT tblTargetGroups.id FROM tblTargetGroups WHERE tblTargetGroups.title = 'zz_loc_MUC')
        --SET @targetGroup_id = -2 --1026 ---3
        -- END DEBUG

        -- LEARNING(PROGRAM)-STATUS PER TARGET GROUP TODAY VS. ACTUAL BACK IN TIME

        -- This report is going to be for one (location target group such as zz_loc_PCT) or all target groups, but not in a strict sense.
        -- Additionally evaluated are "ordered learning programs"; that means that the assigned learning programs are extended by those
        -- that users of such an location-targetgroup are assigned by being member of an order-targetgroup.

        -- The proper working of that report HIGHLY depends on clear and strict usage of that local-/order-targetgroup policy
        -- That is because we don't have data for how was a learning program assinged to a user in the past; we rely on that
        -- mentioned usage that way that we assume: If a user has a learning status for a learning program in the past then
        --                                          for the reason that he was assigned to the related target groups.

        -- What do we need:
        -- * tblTargetGroups:			 Get the local- and order-targetgroups
        -- * tblStatsUsersTargetGroups:	 Table contains all user-targetgroup assignments where a learning status exists;
        --                               especially we have here actual learners from past months that are no longer assigned
        --                               to a targetgroup.
        -- * tblStatusUserCourseHistory: History table of learning program status of a user
        -- * tblStatusUserCourse:        Learning program status of actual learners
        -- * tblStatsThemeSessions:      Detail timestamps for each themeSession; needed to determine if an assigned user was
        --                               an actual user at a given time. We are going to take the history.complete value with
        --                               the nearest themeSessionStartTime &lt; tblStatsThemeSessions.startTime and/or lastPingTime
        --                               that matches to the timestamp to be evaluated for each user.
        -- * tblThemes:                  For the name of a learning program
        -- * ... and of course our usual tblModuleItems / tblEduOfferSeminars / tblEduOfferTargetGroup chain for the usual reason ;)

        -- The sugar piece of that report is grouping the learning programs by their modules and then in some logical (alphabetical i bet)
        -- order. Hope that the modules are organized that way as in the example sheet. Otherwise this will not turn out as desired.

        -- The filed internalExternal in #tempUsers is coded like this: 0: internal, 1:external, NULL: doesn't matter
        -- It is used for listing separatedly internal and external users in case options -2 or -3 are selected for @targetGroup_id

        CREATE TABLE #targetGroupIDsToOrder( targetGroupID int )
        CREATE TABLE #tempUsers(user_id INT, internalExternal int)
        CREATE TABLE #currentAssignments(learningProgramTitle NVARCHAR(255), moduleTitle NVARCHAR(255), learningProgram_id UNIQUEIDENTIFIER, moduleOrder INT, learningProgramOrder INT, usersInTargetGroup INT, internalExternal INT)
        CREATE TABLE #statusBefore(learningProgram_id UNIQUEIDENTIFIER, userCount INT, complete FLOAT, internalExternal INT)

        CREATE TABLE #results(  learningProgram_id UNIQUEIDENTIFIER, module_id UNIQUEIDENTIFIER, learningProgramOrder INT, moduleOrder INT,
        themeTitle NVARCHAR(255), moduleTitle NVARCHAR(255), actualLearners INT, usersInTargetGroup INT,
        averageLearningStatusActual DECIMAL(5,2), actualLearnersBefore INT, actualLearnersDiff INT, internalExternal int)

        DECLARE @keyDate DATETIME
        SELECT @keyDate = CURRENT_TIMESTAMP
        DECLARE @compareDate DATETIME
        SET @compareDate = DATEADD( MONTH, -1, @keyDate)

        INSERT INTO #targetGroupIDsToOrder
        SELECT tblTargetGroups.id FROM tblTargetGroups
        WHERE tblTargetGroups.mandator_id = @current_mandator_id AND
        tblTargetGroups.title like '%zz_BP_TCM_%'

        -- Get all users that are currently assigned to the selected 'main' target group(s)
        IF @targetGroup_id IS NULL OR @targetGroup_id = -1
        BEGIN
        INSERT INTO #tempUsers
        SELECT DISTINCT tblUsersTargetGroups.userCn, NULL
        FROM tblUsersTargetGroups INNER JOIN tblTargetGroups ON tblUsersTargetGroups.targetGroup_id = tblTargetGroups.id
        WHERE tblTargetGroups.title IN('zz_loc_MUC','zz_user_IO', 'zz_user_external') --'zz_loc_MUC_external', 'zz_loc_PCT_external')
        END
        ELSE
        BEGIN
        IF @targetGroup_id = -2
        BEGIN
        INSERT INTO #tempUsers
        SELECT DISTINCT tblUsersTargetGroups.userCn, 0 --internal
        FROM tblUsersTargetGroups INNER JOIN tblTargetGroups ON tblUsersTargetGroups.targetGroup_id = tblTargetGroups.id
        WHERE tblTargetGroups.title IN('zz_loc_MUC')
        --select count(*) as 'Internal' from #tempUsers
        INSERT INTO #tempUsers
        SELECT DISTINCT tblUsersTargetGroups.userCn, 1 --external
        FROM tblUsersTargetGroups INNER JOIN tblTargetGroups ON tblUsersTargetGroups.targetGroup_id = tblTargetGroups.id
        WHERE tblTargetGroups.title IN('zz_loc_MUC_external')
        --select count(*) as 'External' from #tempUsers where internalExternal = 1
        END
        ELSE
        BEGIN
        IF @targetGroup_id = -3
        BEGIN
        INSERT INTO #tempUsers
        SELECT DISTINCT tblUsersTargetGroups.userCn, 0 --internal
        FROM tblUsersTargetGroups INNER JOIN tblTargetGroups ON tblUsersTargetGroups.targetGroup_id = tblTargetGroups.id
        WHERE tblTargetGroups.title IN('zz_loc_PCT')

        INSERT INTO #tempUsers
        SELECT DISTINCT tblUsersTargetGroups.userCn, 1 --external
        FROM tblUsersTargetGroups INNER JOIN tblTargetGroups ON tblUsersTargetGroups.targetGroup_id = tblTargetGroups.id
        WHERE tblTargetGroups.title IN('zz_loc_PCT_external')
        END
        ELSE
        BEGIN
        INSERT INTO #tempUsers
        SELECT tblUsersTargetGroups.UserCn, NULL
        FROM tblUsersTargetGroups WHERE tblUsersTargetGroups.targetGroup_id = @targetGroup_id
        END
        END
        END

        -- select count(*) from #tempUsers
        -- create 2 separated lists for internal and external groups if option -2 or -3 for @targetGroup_id selected
        IF @targetGroup_id in (-2, -3)
        BEGIN
        --SELECT N'Internal groups' AS ' '
        INSERT INTO
        #currentAssignments( learningProgramTitle, moduleTitle,learningProgram_id, moduleOrder, learningProgramOrder, usersInTargetGroup, internalExternal)
        SELECT
        tblItems_Themes.title, tblItems_Modules.title, tblThemes.id, tblModules.sortOrder, tblModuleItems.sortOrder,
        (select count(DISTINCT #tempUsers.user_id) from #tempUsers where #tempUsers.internalExternal = 0), 0--COUNT( DISTINCT #tempUsers.user_id), 0 --internalExternal == internal
        FROM
        #tempUsers
        INNER JOIN tblUsersTargetGroups ON #tempUsers.user_id = tblUsersTargetGroups.UserCn and #tempUsers.internalExternal = 0
        AND (tblUsersTargetGroups.targetGroup_id IN (SELECT targetGroupID FROM #targetGroupIDsToOrder)
        OR tblUsersTargetGroups.targetGroup_id IN (SELECT id FROM tblTargetGroups WHERE title IN (select 'zz_loc_MUC' where @targetGroup_id = -2 union select 'zz_loc_PCT' where @targetGroup_id = -3))) --('zz_loc_MUC','zz_user_IO','zz_loc_PCT')))
        INNER JOIN
        tblEduOffersTargetGroups ON tblUsersTargetGroups.targetGroup_id= tblEduOffersTargetGroups.targetGroup_id
        INNER JOIN
        tblEduOffersModules ON tblEduOffersTargetGroups.eduOffer_id = tblEduOffersModules.eduOffer_id
        INNER JOIN
        tblModules ON tblEduOffersModules.module_id = tblModules.id
        INNER JOIN tblItems AS tblItems_Modules ON tblItems_Modules.id = tblModules.id
        INNER JOIN
        tblModuleItems ON tblEduOffersModules.module_id = tblModuleITems.module_id
        INNER JOIN tblThemes ON tblModuleItems.item_id = tblThemes.id
        INNER JOIN tblItems AS tblItems_Themes ON tblItems_Themes.id = tblThemes.id
        where #tempUsers.internalExternal = 0
        AND tblItems_Modules.deleted IS NULL
        GROUP BY tblItems_Themes.title, tblThemes.id, tblItems_Modules.title, tblModules.sortOrder, tblModuleItems.sortOrder

        --SELECT N'External groups' AS ' '
        INSERT INTO
        #currentAssignments( learningProgramTitle, moduleTitle,learningProgram_id, moduleOrder, learningProgramOrder, usersInTargetGroup, internalExternal)
        SELECT
        tblItems_Themes.title, tblItems_Modules.title, tblThemes.id, tblModules.sortOrder, tblModuleItems.sortOrder,
        (select count(DISTINCT #tempUsers.user_id) from #tempUsers where #tempUsers.internalExternal = 1), 1 --COUNT( DISTINCT #tempUsers.user_id), 1 --internalExternal == external
        FROM
        #tempUsers
        INNER JOIN tblUsersTargetGroups ON #tempUsers.user_id = tblUsersTargetGroups.UserCn and #tempUsers.internalExternal = 1
        --AND (tblUsersTargetGroups.targetGroup_id IN (SELECT targetGroupID FROM #targetGroupIDsToOrder) OR -- no order groups here
        AND tblUsersTargetGroups.targetGroup_id IN (SELECT id FROM tblTargetGroups WHERE title IN (select 'zz_loc_MUC_external' where @targetGroup_id = -2 union select 'zz_loc_PCT_external' where @targetGroup_id = -3))
        INNER JOIN
        tblEduOffersTargetGroups ON tblUsersTargetGroups.targetGroup_id= tblEduOffersTargetGroups.targetGroup_id
        INNER JOIN
        tblEduOffersModules ON tblEduOffersTargetGroups.eduOffer_id = tblEduOffersModules.eduOffer_id
        INNER JOIN
        tblModules ON tblEduOffersModules.module_id = tblModules.id
        INNER JOIN tblItems AS tblItems_Modules ON tblItems_Modules.id = tblModules.id
        INNER JOIN
        tblModuleItems ON tblEduOffersModules.module_id = tblModuleITems.module_id
        INNER JOIN tblThemes ON tblModuleItems.item_id = tblThemes.id
        INNER JOIN tblItems AS tblItems_Themes ON tblItems_Themes.id = tblThemes.id
        where tblItems_Modules.deleted IS NULL AND #tempUsers.internalExternal = 1
        GROUP BY tblItems_Themes.title, tblThemes.id, tblItems_Modules.title, tblModules.sortOrder, tblModuleItems.sortOrder

        END
        ELSE -- it doesn't matter if internal or external groups
        BEGIN
        -- Get the items that are currently assigned to those users
        -- - via 'main' target group(s)
        -- - via 'order' target group(s)
        -- Get also the number of users that are assigned to each item via one or more of these target groups (distinct of course)
        -- Remark: For 'order' items only the number of users from 'main' target groups who ordered the theme are listed
        --         not the overall number of users (including those from other 'main' target groups).
        INSERT INTO
        #currentAssignments( learningProgramTitle, moduleTitle,learningProgram_id, moduleOrder, learningProgramOrder, usersInTargetGroup, internalExternal)
        SELECT
        tblItems_Themes.title, tblItems_Modules.title, tblThemes.id, tblModules.sortOrder, tblModuleItems.sortOrder, COUNT( DISTINCT #tempUsers.user_id), NULL --internalExternal doesn't matter here
        FROM
        #tempUsers
        INNER JOIN tblUsersTargetGroups ON #tempUsers.user_id = tblUsersTargetGroups.UserCn
        AND (tblUsersTargetGroups.targetGroup_id IN (SELECT targetGroupID FROM #targetGroupIDsToOrder)
        OR tblUsersTargetGroups.targetGroup_id IN (SELECT id FROM tblTargetGroups WHERE title IN (select 'zz_loc_MUC'  where @targetGroup_id = -1
        union select 'zz_user_IO'  where @targetGroup_id = -1
        union select 'zz_loc_PCT'  where @targetGroup_id = -1
        union select 'zz_user_external' where @targetGroup_id = -1
        union select 'zz_user_IO' where @targetGroup_id &lt;&gt; -1)))
        INNER JOIN
        tblEduOffersTargetGroups ON tblUsersTargetGroups.targetGroup_id= tblEduOffersTargetGroups.targetGroup_id
        INNER JOIN
        tblEduOffersModules ON tblEduOffersTargetGroups.eduOffer_id = tblEduOffersModules.eduOffer_id
        INNER JOIN
        tblModules ON tblEduOffersModules.module_id = tblModules.id
        INNER JOIN tblItems AS tblItems_Modules ON tblItems_Modules.id = tblModules.id
        INNER JOIN
        tblModuleItems ON tblEduOffersModules.module_id = tblModuleITems.module_id
        INNER JOIN tblThemes ON tblModuleItems.item_id = tblThemes.id
        INNER JOIN tblItems AS tblItems_Themes ON tblItems_Themes.id = tblThemes.id
        WHERE tblItems_Modules.deleted IS NULL
        GROUP BY tblItems_Themes.title, tblThemes.id, tblItems_Modules.title, tblModules.sortOrder, tblModuleItems.sortOrder
        END

        -- Extract the proper status values for 'before=month-1' status from history (there might be many entries per user...)
        IF @targetGroup_id IN (-2, -3)
        BEGIN
        INSERT INTO #statusBefore(learningProgram_id, userCount, complete, internalExternal) -- first the internal ones
        SELECT t.theme_id, COUNT(t.user_id), AVG(t.complete), 0 FROM
        (SELECT h.theme_id, h.user_id,  MAX(h.themeSessionStartTime) latest,
        (SELECT b.complete FROM tblStatusUserCourseHistory b where b.user_id = h.user_id and
        b.themeSessionStartTime = MAX(h.themeSessionStartTime)) as complete
        FROM
        #tempUsers
        INNER JOIN
        tblStatusUserCourseHistory h ON #tempUsers.user_id = h.user_id
        AND h.theme_id IN (SELECT #currentAssignments.learningProgram_id FROM #currentAssignments where #currentAssignments.internalExternal = 0)
        INNER JOIN tblItems ON tblItems.id = h.theme_id
        WHERE tblItems.deleted IS NULL AND h.themeSessionStartTime &lt;= @compareDate and #tempUsers.internalExternal = 0
        GROUP BY h.user_id, h.theme_id ) t
        GROUP BY t.theme_id

        INSERT INTO #statusBefore(learningProgram_id, userCount, complete, internalExternal) -- now the external the internal ones
        SELECT t.theme_id, COUNT(t.user_id), AVG(t.complete), 1 FROM
        (SELECT h.theme_id, h.user_id,  MAX(h.themeSessionStartTime) latest,
        (SELECT b.complete FROM tblStatusUserCourseHistory b where b.user_id = h.user_id and
        b.themeSessionStartTime = MAX(h.themeSessionStartTime)) as complete
        FROM
        #tempUsers
        INNER JOIN
        tblStatusUserCourseHistory h ON #tempUsers.user_id = h.user_id
        AND h.theme_id IN (SELECT #currentAssignments.learningProgram_id FROM #currentAssignments where #currentAssignments.internalExternal = 1)
        INNER JOIN tblItems on tblItems.id = h.theme_id
        WHERE tblItems.deleted IS NULL AND h.themeSessionStartTime &lt;= @compareDate and #tempUsers.internalExternal = 1
        GROUP BY h.user_id, h.theme_id ) t
        GROUP BY t.theme_id
        END
        ELSE -- normal case no matter if internal or external
        BEGIN
        INSERT INTO #statusBefore(learningProgram_id, userCount, complete, internalExternal)
        SELECT t.theme_id, COUNT(t.user_id), AVG(t.complete), NULL FROM
        (SELECT h.theme_id, h.user_id,  MAX(h.themeSessionStartTime) latest,
        (SELECT b.complete FROM tblStatusUserCourseHistory b where b.user_id = h.user_id and
        b.themeSessionStartTime = MAX(h.themeSessionStartTime)) as complete
        FROM
        #tempUsers
        INNER JOIN
        tblStatusUserCourseHistory h ON #tempUsers.user_id = h.user_id
        AND h.theme_id IN (SELECT #currentAssignments.learningProgram_id FROM #currentAssignments)
        INNER JOIN
        tblItems ON tblItems.id = h.theme_id
        WHERE tblItems.deleted IS NULL AND h.themeSessionStartTime &lt;= @compareDate
        GROUP BY h.user_id, h.theme_id ) t
        GROUP BY t.theme_id
        END

        DECLARE @usersInTargetGroup INT
        SELECT @usersInTargetGroup = COUNT(#tempUsers.user_id) FROM #tempUsers

        IF @targetGroup_id IN (-2, -3)
        BEGIN
        INSERT INTO #results( learningProgram_id, learningProgramOrder, moduleOrder, themeTitle, moduleTitle, usersInTargetGroup,
        actualLearners, averageLearningStatusActual, actualLearnersBefore, internalExternal)
        (
        SELECT
        #currentAssignments.learningProgram_id, #currentAssignments.learningProgramOrder, #currentAssignments.moduleOrder,
        #currentAssignments.learningProgramTitle, #currentAssignments.moduleTitle, #currentAssignments.usersInTargetGroup,
        COUNT(distinct tblStatusUserCourse.UserId), AVG(tblStatusUserCourse.complete),
        #statusBefore.userCount, 0 --#currentAssignments.internalExternal
        FROM #currentAssignments
        LEFT JOIN tblStatusUserCourse ON #currentAssignments.learningProgram_id = tblStatusUserCourse.theme_id and #currentAssignments.internalExternal = 0
        INNER JOIN #tempUsers ON tblStatusUserCourse.UserId = #tempUsers.user_id and #tempUsers.internalExternal = 0 -- count internal groups
        LEFT JOIN #statusBefore ON #currentAssignments.learningProgram_id = #statusBefore.learningProgram_id and #statusBefore.internalExternal = 0
        where #currentAssignments.internalExternal = 0
        GROUP BY #currentAssignments.learningProgram_id,
        #currentAssignments.moduleOrder, #currentAssignments.learningProgramOrder,
        #currentAssignments.learningProgramTitle, #currentAssignments.moduleTitle,
        #statusBefore.userCount, #currentAssignments.usersInTargetGroup, #currentAssignments.internalExternal
        )

        INSERT INTO #results( learningProgram_id, learningProgramOrder, moduleOrder, themeTitle, moduleTitle, usersInTargetGroup,
        actualLearners, averageLearningStatusActual, actualLearnersBefore, internalExternal)
        (
        SELECT
        #currentAssignments.learningProgram_id, #currentAssignments.learningProgramOrder, #currentAssignments.moduleOrder,
        #currentAssignments.learningProgramTitle, #currentAssignments.moduleTitle, #currentAssignments.usersInTargetGroup,
        COUNT(distinct tblStatusUserCourse.UserId), AVG(tblStatusUserCourse.complete),
        #statusBefore.userCount, 1 --#currentAssignments.internalExternal
        FROM #currentAssignments
        LEFT JOIN tblStatusUserCourse ON #currentAssignments.learningProgram_id = tblStatusUserCourse.theme_id and #currentAssignments.internalExternal = 1
        INNER JOIN #tempUsers ON tblStatusUserCourse.UserId = #tempUsers.user_id and #tempUsers.internalExternal = 1 -- count internal groups
        LEFT JOIN #statusBefore ON #currentAssignments.learningProgram_id = #statusBefore.learningProgram_id and #statusBefore.internalExternal = 1
        where #currentAssignments.internalExternal = 1
        GROUP BY #currentAssignments.learningProgram_id,
        #currentAssignments.moduleOrder, #currentAssignments.learningProgramOrder,
        #currentAssignments.learningProgramTitle, #currentAssignments.moduleTitle,
        #statusBefore.userCount, #currentAssignments.usersInTargetGroup, #currentAssignments.internalExternal
        )
        END
        ELSE -- only one calculation no matter if internla or external
        BEGIN
        INSERT INTO #results( learningProgram_id, learningProgramOrder, moduleOrder, themeTitle, moduleTitle, usersInTargetGroup,
        actualLearners, averageLearningStatusActual, actualLearnersBefore, internalExternal)
        (
        SELECT
        #currentAssignments.learningProgram_id, #currentAssignments.learningProgramOrder, #currentAssignments.moduleOrder,
        #currentAssignments.learningProgramTitle, #currentAssignments.moduleTitle, #currentAssignments.usersInTargetGroup,
        COUNT(distinct tblStatusUserCourse.UserId), AVG(tblStatusUserCourse.complete),
        #statusBefore.userCount, #currentAssignments.internalExternal
        FROM #currentAssignments
        LEFT JOIN tblStatusUserCourse ON #currentAssignments.learningProgram_id = tblStatusUserCourse.theme_id
        INNER JOIN #tempUsers ON tblStatusUserCourse.UserId = #tempUsers.user_id
        LEFT JOIN #statusBefore ON #currentAssignments.learningProgram_id = #statusBefore.learningProgram_id
        GROUP BY #currentAssignments.learningProgram_id,
        #currentAssignments.moduleOrder, #currentAssignments.learningProgramOrder,
        #currentAssignments.learningProgramTitle, #currentAssignments.moduleTitle,
        #statusBefore.userCount, #currentAssignments.usersInTargetGroup, #currentAssignments.internalExternal
        )
        END

        UPDATE #results SET actualLearners = 0 WHERE actualLearners IS NULL
        UPDATE #results SET averageLearningStatusActual = 0 WHERE averageLearningStatusActual IS NULL
        UPDATE #results SET actualLearnersBefore = 0 WHERE actualLearnersBefore IS NULL
        UPDATE #results SET actualLearnersDiff = actualLearners - actualLearnersBefore

        ---------------------------------
        -- Output -----------------------
        ---------------------------------

        SELECT 'Report: ' +  'Display learning status' AS ' '
        SELECT 'Report from:' +  CONVERT(varchar, @keyDate, 21) AS ' '

        SELECT 'Target group: ' +
        CASE WHEN @targetGroup_id IS NULL  THEN 'All target groups'
        WHEN @targetGroup_id  = -1 THEN 'ALL (zz_loc_MUC, zz_user_IO, zz_user_external)'
        WHEN @targetGroup_id = -2 THEN 'zz_loc_MUC + zz_loc_MUC_external'
        WHEN @targetGroup_id = -3 THEN 'zz_loc_PCT + zz_loc_PCT_external'
        ELSE
        (SELECT tblTargetGroups.title FROM tblTargetGroups WHERE tblTargetGroups.id = @targetGroup_id) END AS ' '

        if @targetGroup_id in (-2, -3)
        BEGIN
        SELECT N'Internal groups' AS ' '
        SELECT themeTitle AS 'Module / learning programs',
        moduleTitle AS 'Module title',
        actualLearners AS 'Actual learners',
        usersInTargetGroup AS 'Users in target group',
        CAST(averageLearningStatusActual AS NVARCHAR(10)) + '%' AS 'Average learning status of actual learners',
        actualLearnersBefore AS 'Actual learners previous month',
        actualLearnersDiff AS 'Difference actual learners compared to previous month'
        FROM #results where internalExternal = 0
        ORDER BY moduleOrder, learningProgramOrder

        SELECT N'External groups' AS ' '
        SELECT themeTitle AS 'Module / learning programs',
        moduleTitle AS 'Module title',
        actualLearners AS 'Actual learners',
        usersInTargetGroup AS 'Users in target group',
        CAST(averageLearningStatusActual AS NVARCHAR(10)) + '%' AS 'Average learning status of actual learners',
        actualLearnersBefore AS 'Actual learners previous month',
        actualLearnersDiff AS 'Difference actual learners compared to previous month'
        FROM #results where internalExternal = 1
        ORDER BY moduleOrder, learningProgramOrder
        END
        ELSE --normal case, no separation in internal or external assignments
        BEGIN
        SELECT themeTitle AS 'Module / learning programs',
        moduleTitle AS 'Module title',
        actualLearners AS 'Actual learners',
        usersInTargetGroup AS 'Users in target group',
        CAST(averageLearningStatusActual AS NVARCHAR(10)) + '%' AS 'Average learning status of actual learners',
        actualLearnersBefore AS 'Actual learners previous month',
        actualLearnersDiff AS 'Difference actual learners compared to previous month'
        FROM #results
        ORDER BY moduleOrder, learningProgramOrder
        END

        DROP TABLE #results

        DROP TABLE #statusBefore
        DROP TABLE #currentAssignments
        DROP TABLE #tempUsers
        DROP TABLE #targetGroupIDsToOrder
      </command>
    </Report>
  </Reports>
  <Parameters>
    <Parameter id="997b94e6-72af-420c-92ac-1aaebb0ce458" mandator_id="d5a90a49-e697-4aeb-8a5b-298782815490" isSystem="False" name="Target groups for e..lect monthly report" reportParameterType_id="554807c1-8633-4566-b311-bcb136a77c50" queryParameterName="@targetGroup_id" />
  </Parameters>
  <ParameterTypes>
    <ParameterType id="554807c1-8633-4566-b311-bcb136a77c50" mandator_id="d5a90a49-e697-4aeb-8a5b-298782815490" isSystem="False" name="Auswahlliste ELECT Target groups" datatype="IntegerDDL" dataValueField="targetGroup_id" dataTextField="targetGroup_name">
      <query>
        select -1 as targetGroup_id, 'All (zz_loc_MUC, zz_user_IO, zz_user_external)' as targetGroup_name
        union
        select -2 as targetGroup_id, 'zz_loc_MUC + zz_loc_MUC_external' as  targetGroup_name
        union
        select -3 as targetGroup_id, 'zz_loc_PCT + zz_loc_PCT_external' as  targetGroup_name
union
        select tblTargetGroups.id as targetGroup_id, tblTargetGroups.title as targetGroup_name from tblTargetGroups where title in ('zz_user_IO')
        order by targetGroup_name
      </query>
    </ParameterType>
  </ParameterTypes>
</ReportsExport>
