﻿<?xml version="1.0" encoding="utf-8"?>
<ReportsExport>
  <Reports>
    <Report id="7d99f793-fa3c-422b-9a70-afcb134622bf" codekey="LernzeitLocation" categoryCodekey="SpecialPurpose" name="Lernzeit Location" description="Der Report ermittelt für eine oder mehrere ausgewählte(n) Zielgruppe(n) für einen zu bestimmenden Zeitraum alle Programme/Contents, für die mindestens ein Lerner der Zielgruppe eine erfolgreiche Bearbeitung durchgeführt hat. Die Lernzeiten für die einzelnen Contents werden &lt;b&gt;für jedes Modul/Lernprogramm separat dargestellt.&lt;/b&gt;">
      <MetaData created="2017-12-21T10:50:11" createdBy="Rolle Administrator (Administrator)" createdBy_user_id="37276" modified="2019-12-13T14:14:19" 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" mandatorName="ELECT" isStandard="False" isUsedByMenu="False" />
      <Parameters>
        <Parameter id="d8e4595f-8bdd-4a54-9298-8f378450e6a0" isRequired="True" allowMultiSelect="False" name="Zeitraum" contextName="Zeitraum" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
        <Parameter id="3c128e78-ecb2-4256-accb-07ced081bc03" isRequired="True" allowMultiSelect="True" name="AllSelectedTargetGroups" contextName="AllSelectedTargetGroups" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
      </Parameters>
      <Roles>
        <Role id="90" />
      </Roles>
      <command>
        ---- Global supplied variables
        --DECLARE @current_mandator_id UNIQUEIDENTIFIER;
        --SELECT @current_mandator_id = id FROM tblMandators WHERE name='TestAllFeatures';

        ---- -----------------------------------------------------------------------------
        ---- Parameters
        --DECLARE @AllSelectedTargetGroups  [dbo].[typeIntList];
        --INSERT INTO @AllSelectedTargetGroups ([value]) VALUES (12), (13); -- TargetGroupAllContent, TargetGroupAllUsers
        --DECLARE @dateRange_start DATETIME = '2015-06-01';
        --DECLARE @dateRange_end DATETIME = '2017-12-31';

        ---- End parameters
        ---- ------------------------------------------------------------------------------

        DECLARE @results TABLE
        (
        module_title NVARCHAR(255),
        theme_title NVARCHAR(255),
        totalSuccess BIGINT,
        duration DECIMAL(10,2),
        totalDuration DECIMAL(10,2)
        )

        -- CR: 28751!
        -- we have a given set of targetgroups
        -- for those we have to detect the users assigned to
        -- as for those assigned users we need all user assigned targetgroups for detecting the themes
        DECLARE @hlpTargetGroups dbo.[typeIntList]
        ;WITH hlpTargetGroups(targetGroup_id)
        AS
        (
        SELECT DISTINCT mergedTargetGroups.targetGroup_id
        FROM tblUsersTargetGroups AS originalUsers
        INNER JOIN @AllSelectedTargetGroups AS requestedTargetGroups ON requestedTargetGroups.value = originalUsers.targetGroup_id
        INNER JOIN tblUsersTargetGroups AS mergedTargetGroups ON mergedTargetGroups.UserCn = originalUsers.UserCn
        )
        INSERT INTO @hlpTargetGroups
        SELECT targetGroup_id FROM hlpTargetGroups


        -- Themes for target group
        ;WITH ThemesForTargetGroup(module_title, theme_title, theme_id, duration)
        AS
        (
        SELECT DISTINCT
        m.title as module_title, tblItems.title as theme_title, tblItems.id as theme_id, tblThemes.learningDuration as duration
        FROM
        tblThemes
        JOIN tblItems
        ON	tblItems.id = tblThemes.id
        JOIN tblModuleItems
        ON	tblItems.id = tblModuleItems.item_id
        JOIN tblEduOffersModules
        ON	tblModuleItems.module_id = tblEduOffersModules.module_id
        JOIN tblEduOffersTargetGroups
        ON  tblEduOffersModules.eduOffer_id = tblEduOffersTargetGroups.eduOffer_id
        JOIN @hlpTargetGroups stg
        ON	stg.value = tblEduOffersTargetGroups.targetGroup_id
        JOIN tblItems m
        ON	m.id = tblModuleItems.module_id
        WHERE
        tblItems.mandator_id = @current_mandator_id
        AND tblThemes.learningDuration IS NOT NULL
        ),
        CompletedResults(theme_id, successCount)
        AS
        (
        SELECT
        tftg.theme_id,
        COUNT(suc.UserId)
        FROM
        (
        -- Avoid counting themes multiple times when they are available via multiple modules / edu offers
        SELECT DISTINCT
        theme_id
        FROM
        ThemesForTargetGroup
        ) AS tftg
        JOIN [dbo].[tblStatusUserCourse] suc
        ON suc.theme_id = tftg.theme_id
        INNER JOIN tblUsersTargetGroups ON tblUsersTargetGroups.UserCn = suc.UserId
        INNER JOIN @AllSelectedTargetGroups AS requestedTargetGroups ON requestedTargetGroups.value = tblUsersTargetGroups.targetGroup_id
        WHERE
        suc.BestCompleteDate &gt; @dateRange_start
        AND suc.BestCompleteDate &lt; @dateRange_end
        AND suc.BestComplete &gt; 80
        GROUP BY
        tftg.theme_id
        )
        INSERT INTO @results
        SELECT
        (
        CASE WHEN GROUPING(tftg.theme_title) = 1
        THEN 'Summe : ' + tftg.module_title
        ELSE tftg.module_title
        END
        ) as module_title,
        tftg.theme_title,
        SUM(cr.successCount) as totalSuccess,
        duration as duration,
        SUM(duration * cr.successCount) as totalDuration
        FROM
        ThemesForTargetGroup tftg
        JOIN CompletedResults cr
        ON	cr.theme_id = tftg.theme_id
        GROUP BY
        GROUPING SETS((tftg.module_title, tftg.theme_title, duration), (tftg.module_title))
        ORDER BY
        -- Order by module_title, theme_title then total row
        CASE
        WHEN GROUPING(tftg.theme_title) = 1
        -- Just concatenate '1' so it will be sorted after the entries for this module
        THEN tftg.module_title + '1'
        ELSE tftg.module_title
        END,
        tftg.theme_title

        -- Add the "grand total" row as separate insert and not a union so we are guaranteed it goes at the end
        INSERT INTO
        @results
        SELECT
        'Gesamt',
        NULL,
        SUM(totalSuccess),
        NULL,
        SUM(totalDuration)
        FROM
        @results
        WHERE
        theme_title IS NOT NULL

        -- Select our results with aliases, the rows should already be in the correct order
        SELECT
        module_title as 'Modul',
        theme_title  as 'Lernprogramm',
        totalSuccess as 'Anzahl erfolgr. Bearbeitung',
        duration  as 'Dauer Lernprogramm (min)',
        totalDuration  as 'Gesamte Lerndauer (min)'
        FROM
        @results
      </command>
    </Report>
  </Reports>
  <Parameters>
    <Parameter id="d8e4595f-8bdd-4a54-9298-8f378450e6a0" isSystem="True" name="Zeitraum" reportParameterType_id="abff13be-91c3-4ee1-93a3-7292f8e013ba" queryParameterName="@dateRange" />
    <Parameter id="3c128e78-ecb2-4256-accb-07ced081bc03" isSystem="False" name="AllSelectedTargetGroups" reportParameterType_id="04238627-5da0-47cd-bbfa-db313a02b5b2" queryParameterName="@AllSelectedTargetGroups" />
  </Parameters>
  <ParameterTypes>
    <ParameterType id="abff13be-91c3-4ee1-93a3-7292f8e013ba" isSystem="True" name="DateRange" datatype="DateRange" dataValueField="" dataTextField="" />
    <ParameterType id="04238627-5da0-47cd-bbfa-db313a02b5b2" isSystem="False" name="AllTargetGroupsForCurrentMandator" datatype="IntegerDDL" dataValueField="id" dataTextField="title">
      <query>
        select
        id, title
        from
        tblTargetGroups
        where
        mandator_id = @current_mandator_id
        order by
        title
      </query>
    </ParameterType>
  </ParameterTypes>
</ReportsExport>