﻿<?xml version="1.0" encoding="utf-8"?>
<ReportsExport>
  <Reports>
    <Report id="e4bf9af3-2cf1-4610-b5b0-ae78ab3fe9a8" codekey="Kosmos_TestStatisticsGeneral" categoryCodekey="TestsAndQuestions" name="Teststatistik Allgemein" description="">
      <MetaData created="2015-02-12T13:26:09" createdBy="Administrator Zentrale (Administrator)" createdBy_user_id="1" modified="2016-01-26T09:10:15" modifiedBy="Administrator Zentrale" />
      <ExecutionDetails format="TableResult" commandType="SqlCommandOrQuery" exportHandler="" adminControl="" exportMultipleTablesToSheets="False" datesWithTime="False" extraParams="" />
      <Mandators mandatorMode="OnlyOwner" mandator_id="0ab3e804-57cb-42a7-82a3-a6fd412d317d" mandatorName="Kosmos" isStandard="False" isUsedByMenu="False" />
      <Parameters>
        <Parameter id="a785aecc-668a-4609-9613-394bd4d708c2" isRequired="True" allowMultiSelect="False" name="Mandant" contextName="Mandant" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
        <Parameter id="35ceb0d3-29e6-4108-910a-89e858dda847" isRequired="False" allowMultiSelect="True" name="Auswahl Target Group" contextName="Zielgruppe" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
        <Parameter id="70e399d0-0959-4e19-8547-9b21c4cf2a95" isRequired="False" allowMultiSelect="True" name="Tests" contextName="Tests" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
      </Parameters>
      <Roles>
        <Role id="90" />
      </Roles>
      <command>
        DECLARE @currentAssignments TABLE(test_id UNIQUEIDENTIFIER, 
                                  user_id INT, 
                                  targetGroup_id INT)

        DECLARE @orgUnitIds dbo.typeGuidList
        DECLARE @targetGroupList dbo.typeIntList
        INSERT INTO @targetGroupList
        SELECT value
        FROM @targetGroupId

        --select @targetGroupList

DECLARE @testSessions TABLE(testsession_id UNIQUEIDENTIFIER, 
                            test_id UNIQUEIDENTIFIER, 
                            user_id INT, 
                            passed INT, 
                            endDate DATETIME, 
                            pctQuestions FLOAT, 
                            visible BIT, 
                            resetDate DATETIME, 
                            title NVARCHAR(256), 
                            mode INT, 
                            deleted DATETIME, 
                            module_id UNIQUEIDENTIFIER, 
                            resultCalculationMode INT, 
                            testSessiontype INT, 
                            testExecutionCount INT)

INSERT INTO @testSessions
        EXEC sp_GetTasStatsTestSessionsAssignedToTargetGroup @current_user_id, @mandator_id, NULL, NULL, @orgUnitIds, @targetGroupList, 1, 1, NULL, NULL

--select count(*) as allsessions from @testSessions
-- get all tests and users currently assigned
INSERT INTO @currentAssignments
SELECT tblTasTests.id, 
       tblUsersTargetGroups.UserCn, 
       tblEduOffersTargetGroups.targetGroup_id
  FROM tblEduOffersTargetGroups
       INNER JOIN tblEduOffersModules ON tblEduOffersModules.eduOffer_id = tblEduOffersTargetGroups.eduOffer_id
       INNER JOIN tblModuleItems ON tblModuleItems.module_id = tblEduOffersModules.module_id
       INNER JOIN tblTasTests ON tblTasTests.id = tblModuleItems.item_id
       INNER JOIN tblItems ON tblItems.id = tblTasTests.id
       INNER JOIN tblUsersTargetGroups ON tblUsersTargetGroups.targetGroup_id = tblEduOffersTargetGroups.targetGroup_id
        WHERE((NOT EXISTS(SELECT 1 FROM @targetGroupId) OR tblEduOffersTargetGroups.targetGroup_id IN(SELECT * FROM @targetGroupId))
  AND (NOT EXISTS (select * from @tests) OR tblTasTests.id in (select * from @tests))
  AND tblItems.deleted IS NULL)

--select count(*) as allassignments from @currentAssignments
--declare @lastResults table(test_id uniqueidentifier, user_id int ,lastDate datetime, passed int, targetGroup_id int, TargetGroup VARCHAR(256))
-- take only the last result 
;WITH lastResults(test_id, 
                 user_id, 
                 lastDate, everPassed)
    AS (SELECT test_id, 
               user_id, 
               MAX(endDate) AS lastDate ,
               ISNULL(MAX(passed), 0) AS everPassed
          FROM @testSessions AS testSessions
          WHERE (NOT EXISTS (SELECT * FROM @tests) OR test_id in (SELECT * FROM @tests))
         GROUP BY test_id, 
                  user_id)

    -- take only current assignments
    --INSERT INTO @lastResults
    SELECT DISTINCT currentAssignments.test_id, 
                    currentAssignments.user_id, 
                    lastDate, 
                   -- (SELECT passed FROM @testSessions WHERE user_id = lastResults.user_id AND test_id = lastResults.test_id AND endDate = lastDate) AS passed, --testSessions.passed, 
                    everPassed as passed --,
                    --targetGroup_id ,                    
                    --tblTargetGroups.title AS TargetGroup 
                    INTO  #lastResults
      FROM @currentAssignments AS currentAssignments
           LEFT JOIN lastResults ON currentAssignments.user_id = lastResults.user_id
                                AND currentAssignments.test_id = lastResults.test_id
           JOIN tblTargetGroups ON tblTargetGroups.id = currentAssignments.targetGroup_id AND tblTargetGroups.mandator_id = @mandator_id


-- count users 
DECLARE @selectedTargetGroups TABLE(id INT)

SELECT #lastResults.test_id, --tblItems.title, 
       SUM(CASE
               WHEN passed = 1 THEN 1
               ELSE 0
           END) AS passedCount,
       SUM(CASE WHEN lastDate IS NULL THEN 0 ELSE 1 END) AS totalStatus,
       COUNT(*) AS totalTargetGroup      
  INTO #orderedResult
  FROM  #lastResults 
  GROUP BY  #lastResults.test_id 
 
-- table with all target groups from all users considered in the statistic underneath
SELECT DISTINCT title AS Zielgruppen --,tblTargetGroups.id
FROM (SELECT DISTINCT user_id FROM #lastResults) AS selectdUsers
INNER JOIN tblUsersTargetGroups ON tblUsersTargetGroups.UserCn = selectdUsers.user_id
INNER JOIN tblTargetGroups ON tblTargetGroups.id = tblUsersTargetGroups.targetGroup_id  AND defaultforlibrary &lt;&gt; 1 and mandator_id = @mandator_id
INNER JOIN @currentAssignments AS currentAssignments ON currentAssignments.targetGroup_id = tblTargetGroups.id
LEFT JOIN @targetGroupId AS selectedGroups ON (selectedGroups.value = tblTargetGroups.id)
WHERE value is not null or not exists (select * from @targetGroupId)
ORDER BY title


SELECT title AS 'Tests', 
        totalTargetGroup AS 'Anzahl aller Benutzer der Zielgruppen',
        --(SELECT COUNT(DISTINCT UserCn) FROM tblUsersTargetGroups WHERE targetGroup_id IN(SELECT * FROM @targetGroupId)) AS 'Anzahl aller Benutzer der Zielgruppen',
        totalStatus AS 'Anteil der Benutzer - Anzahl der Benutzer Test bearbeitet', 
        passedCount AS 'Anteil der Benutzer - Anzahl der Benutzer Test bestanden', 
        totalStatus - passedCount AS 'Anteil der Benutzer - Anzahl Test nicht bestanden', 
        CASE WHEN totalTargetGroup &gt; 0 
            THEN CAST(ROUND(CAST(passedCount AS FLOAT) / totalTargetGroup * 100, 0) AS VARCHAR) + ' %' 
            ELSE ' 0 %'
        END AS 'Quote der bestandenen Tests'
    FROM #orderedResult
    INNER JOIN tblItems ON tblItems.id = #orderedResult.test_id
    ORDER BY title


DROP TABLE #lastResults
DROP TABLE #orderedResult

</command>
    </Report>
  </Reports>
  <Parameters>
    <Parameter id="a785aecc-668a-4609-9613-394bd4d708c2" isSystem="True" name="Mandant" reportParameterType_id="6b8fa242-5449-45b3-a81a-65a7e5e3b51d" queryParameterName="@mandator_id" />
    <Parameter id="35ceb0d3-29e6-4108-910a-89e858dda847" isSystem="False" name="Auswahl Target Group" reportParameterType_id="dbbd7bc6-a373-4ddc-b6a5-f8cbe242217d" queryParameterName="@targetGroupId" />
    <Parameter id="70e399d0-0959-4e19-8547-9b21c4cf2a95" isSystem="False" name="Tests" reportParameterType_id="dd051205-6716-422d-a51e-25dfd484c083" queryParameterName="@tests" />
  </Parameters>
  <ParameterTypes>
    <ParameterType id="6b8fa242-5449-45b3-a81a-65a7e5e3b51d" isSystem="True" name="Mandator" datatype="Mandator" dataValueField="" dataTextField="" />
    <ParameterType id="dbbd7bc6-a373-4ddc-b6a5-f8cbe242217d" isSystem="False" name="Auswahlliste Target Groups" datatype="IntegerDDL" dataValueField="id" dataTextField="title">
      <query>
SELECT id, 
       title
        FROM tblTargetGroups
 WHERE(mandator_id = @mandator_id)
  AND (EXISTS(
              SELECT *
                FROM v_Users
               WHERE intUserCn = @current_user_id AND securityId = 100)
    OR EXISTS(
              SELECT *
                FROM tblTargetGroupManagers
               WHERE tblTargetGroupManagers.user_id = @current_user_id
                 AND tblTargetGroupManagers.targetGroup_id = tblTargetGroups.id)
     OR EXISTS(SELECT *
                FROM tblRolesFunctions
                    JOIN tblRoles ON tblRoles.id = tblRolesFunctions.role_id 
                    JOIN tblFunctions ON tblFunctions.id = tblRolesFunctions.function_id
                    JOIN v_Users ON v_Users.intUserCn = @current_user_id
                WHERE tblFunctions.shortcut = 'FcnIsAuthorizedForAllTGs' AND tblRoles.id = v_Users.SecurityID))
        AND defaultforlibrary = 0
        ORDER BY title

      </query>
      <Parameters>
        <Parameter id="a785aecc-668a-4609-9613-394bd4d708c2" isRequired="False" allowMultiSelect="False" name="Mandant" contextName="Mandant" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
      </Parameters>
    </ParameterType>
    <ParameterType id="dd051205-6716-422d-a51e-25dfd484c083" isSystem="False" name="Auswahllist Tests" datatype="GuidDDL" dataValueField="id" dataTextField="title">
      <query>
        SELECT distinct tblTasTests.id, tblItems.title
  FROM tblEduOffersTargetGroups
       INNER JOIN tblEduOffersModules ON tblEduOffersModules.eduOffer_id = tblEduOffersTargetGroups.eduOffer_id
       INNER JOIN tblModuleItems ON tblModuleItems.module_id = tblEduOffersModules.module_id
       INNER JOIN tblTasTests ON tblTasTests.id = tblModuleItems.item_id
       INNER JOIN tblItems ON tblItems.id = tblTasTests.id
 WHERE tblTasTests.mandator_id = @mandator_id
    AND (NOT EXISTS (SELECT * FROM @targetGroupId) 
    OR tblEduOffersTargetGroups.targetGroup_id IN (SELECT * FROM @targetGroupId))
    AND tblItems.deleted IS NULL
        ORDER BY title
      </query>
      <Parameters>
        <Parameter id="35ceb0d3-29e6-4108-910a-89e858dda847" isRequired="False" allowMultiSelect="True" name="Auswahl Target Group" contextName="Auswahl Target Group" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
        <Parameter id="a785aecc-668a-4609-9613-394bd4d708c2" isRequired="False" allowMultiSelect="False" name="Mandant" contextName="Mandant" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
      </Parameters>
    </ParameterType>
  </ParameterTypes>
</ReportsExport>