﻿<?xml version="1.0" encoding="utf-8"?>
<ReportsExport>
	<Reports>
		<Report id="4ef0b0c0-b07e-4a79-8488-2fdacdeecef2" codekey="Ressortbericht_IDD" categoryCodekey="UserStats" name="Ressortbericht IDD" description="Ein Report über alle Lerneinheiten, also Lernprogramme und Tests (mit IDD-Zeiten)">
			<MetaData created="2020-02-26T11:30:31" createdBy="VIWIS, Administrator (Administrator)" createdBy_user_id="3" modified="2020-07-30T15:48:38" modifiedBy="Administrator, Rolle (Administrator)" modifiedBy_user_id="12" />
			<ExecutionDetails format="TableResult" commandType="SqlCommandOrQuery" exportHandler="" adminControl="" exportMultipleTablesToSheets="False" datesWithTime="False" extraParams="" />
			<Mandators mandatorMode="OnlyOwner" mandator_id="96ba2868-8baf-4e69-b1fb-d2cc6d6832e8" mandatorName="ERGO_e-Campus" isStandard="False" isUsedByMenu="False" />
			<Parameters>
				<Parameter id="7958af06-3e85-4dbe-b2ea-114699e66aa5" isRequired="True" allowMultiSelect="False" name="Qualification" contextName="Qualification" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
				<Parameter id="19308b6b-d4fd-43a8-b8fc-68ac4606cd34" isRequired="True" allowMultiSelect="False" name="Einzelne Zielgruppe" contextName="Einzelne Zielgruppe" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
				<Parameter id="d8e4595f-8bdd-4a54-9298-8f378450e6a0" isRequired="True" allowMultiSelect="False" name="Zeitraum" contextName="Zeitraum" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
			</Parameters>
			<Roles />
			<command>
				--DECLARE @distinctTargetGroup_id INT
				--     DECLARE @dateRange_start DATETIME
				--     DECLARE @dateRange_end DATETIME
				--     SET @dateRange_start = '2020-01-01'
				--     SET @dateRange_end = '2020-03-01'
				--     SET @distinctTargetGroup_id = 1240
				--     DECLARE @qualification_id UNIQUEIDENTIFIER
				--     SET @qualification_id = 'B77B232B-CDEB-44E7-AA8A-65DE55AED19F'

				DECLARE @item_id UNIQUEIDENTIFIER  --= 'DA234EEA-6500-4C22-8D15-57496001CD1C'
				IF @dateRange_end IS NULL
				BEGIN
				SET @dateRange_end = '9999-12-31 23:59:59.997'
				END

				CREATE TABLE #qualificationItems (item_id UNIQUEIDENTIFIER)
				CREATE TABLE #users (user_id INT)
				CREATE TABLE #hlpResult
				(
				group_id UNIQUEIDENTIFIER,
				item_id UNIQUEIDENTIFIER,
				itemType_id INT,
				totalUsers INT,
				usersExecutedItem INT,
				avgLearningDurationItem INT,
				totalLearningDurationItem INT,
				totalExecutionsItem INT,
				greenStatuses INT,
				yellowStatuses INT,
				redStatuses INT,
				totalEducationTime INT NULL,
				sortType INT
				)

				-- getting all items for the qualification
				INSERT INTO #qualificationItems
				SELECT DISTINCT ISNULL(tblTrainings.id, tblItems.id)
				FROM tblQualificationsItems
				INNER JOIN tblItems ON tblItems.id = tblQualificationsItems.item_id
				LEFT JOIN tblModules ON tblModules.id = tblItems.id
				LEFT JOIN tblTrainings ON tblTrainings.trainingTitle_id = tblQualificationsItems.item_id
				WHERE
				(
				ISNULL(tblItems.educationTime,0) &gt; 0
				OR
				(
				tblModules.id IS NOT NULL AND
				addItemScoreToModuleScore = 0 AND scoringMode &gt; 0
				)
				)

				-- getting all users for this targetgroup
				;WITH TargetGroupUser (user_id)
				AS
				(
				SELECT DISTINCT UserCn FROM tblUsersTargetGroups
				INNER JOIN v_Users ON v_Users.intUserCn = tblUsersTargetGroups.UserCn AND tblUsersTargetGroups.targetGroup_id = @distinctTargetGroup_id
				)
				INSERT INTO #users SELECT user_id FROM TargetGroupUser
				-- getting items for the users of the targetgroup currently assigned
				;WITH PotentialItems (item_id, itemType_id)
				AS (
				SELECT DISTINCT v_UsersAssignedItems.item_id, itemType_id FROM v_UsersAssignedItems
				INNER JOIN #users ON #users.user_id = v_UsersAssignedItems.user_id
				INNER JOIN #qualificationItems ON #qualificationItems.item_id = v_UsersAssignedItems.item_id
				WHERE itemType_id IN (0,1,1001) AND ISNULL(@item_id,v_UsersAssignedItems.item_id) = v_UsersAssignedItems.item_id
				)
				INSERT INTO #hlpResult SELECT
				item_id,
				item_id,
				itemType_id,
				(SELECT COUNT(*) FROM #users),
				0,
				0,
				0,
				0,
				0,
				0,
				0,
				NULL,
				itemType_id
				FROM
				PotentialItems

				-- we will add all the items of a module if the module is only providing the education time
				-- and assigned to the qualification
				INSERT INTO #hlpResult SELECT
				tblModules.id,
				tblItems.id,
				tblItems.itemType_id,
				#hlpResult.totalUsers,
				0,
				0,
				0,
				0,
				0,
				0,
				0,
				NULL,
				#hlpResult.sortType
				FROM tblModules
				INNER JOIN #hlpResult ON #hlpResult.item_id = tblModules.id
				INNER JOIN tblModuleItems ON tblModuleItems.module_id = tblModules.id
				INNER JOIN tblItems ON tblItems.id = tblModuleItems.item_id
				WHERE
				addItemScoreToModuleScore = 0 AND scoringMode &gt; 0
				AND tblItems.itemType_id IN (0,1,2,6,8,1001)

				-- getting the green statuses for those items and users
				-- getting the yellow statuses for those items and users
				-- getting the red statuses for those items and users
				UPDATE #hlpResult
				SET greenStatuses = calc.greenStatus,
				yellowStatuses = calc.yellowStatus,
				redStatuses = calc.redStatus
				FROM #hlpResult
				INNER JOIN
				(
				-- for each user of the targetgroups we have to detect the items MAX status for calculation
				SELECT
				item_id,
				SUM(CASE WHEN itemStatus = 4 THEN 1 ELSE 0 END) AS greenStatus, --needed because the MAX logic wouldn't work else
				SUM(CASE WHEN itemStatus = 1 THEN 1 ELSE 0 END) AS yellowStatus,
				SUM(CASE WHEN itemStatus = 3 THEN 1 ELSE 0 END) AS redStatus
				FROM
				(
				-- we have to calculate the max status for the user
				SELECT MAX(CASE WHEN status = 2 THEN 4 ELSE status END) AS itemStatus, suih.item_id
				FROM tblStatusUserItemHistory AS suih
				INNER JOIN #users AS users ON users.user_id = suih.user_id
				INNER JOIN #hlpResult AS items ON items.item_id = suih.item_id
				WHERE suih.startDate BETWEEN @dateRange_start AND @dateRange_end
				GROUP BY suih.user_id, suih.item_id
				) AS innerQuery
				GROUP BY item_id) AS calc ON calc.item_id = #hlpResult.item_id

				-- getting amount of users called this item
				UPDATE #hlpResult
				SET usersExecutedItem = query.usersCount
				FROM #hlpResult INNER JOIN
				(SELECT
				COUNT(*) usersCount, item_id FROM
				(
				SELECT DISTINCT suih.item_id, suih.user_id FROM tblStatusUserItemHistory AS suih INNER JOIN #users ON #users.user_id = suih.user_id
				INNER JOIN #hlpResult ON #hlpResult.item_id = suih.item_id
				WHERE suih.startDate BETWEEN @dateRange_start AND @dateRange_end
				GROUP BY suih.item_id, suih.user_id
				) AS innerQuery
				GROUP BY item_id) AS query ON query.item_id = #hlpResult.item_id

				-- getting total calls of the WBTs
				UPDATE #hlpResult
				SET totalExecutionsItem = ISNULL((
				SELECT COUNT(*) FROM tblStatsThemeSessions
				INNER JOIN #users ON #users.user_id = tblStatsThemeSessions.user_id
				WHERE theme_id = #hlpResult.item_id
				AND tblStatsThemeSessions.startTime BETWEEN @dateRange_start AND @dateRange_end
				GROUP BY theme_id),0)
				WHERE #hlpResult.itemType_id = 1

				-- getting total learning duration for the WBTs
				UPDATE #hlpResult
				SET totalLearningDurationItem = ISNULL((
				SELECT SUM(tblStatsThemeSessions.durationSeconds) FROM tblStatsThemeSessions
				INNER JOIN #users ON #users.user_id = tblStatsThemeSessions.user_id
				WHERE theme_id = #hlpResult.item_id
				AND tblStatsThemeSessions.startTime BETWEEN @dateRange_start AND @dateRange_end
				GROUP BY theme_id),0)
				WHERE #hlpResult.itemType_id = 1

				-- getting avg learning duration for the WBT and user
				UPDATE #hlpResult
				SET avgLearningDurationItem = ISNULL((
				SELECT AVG(tblStatsThemeSessions.durationSeconds) FROM tblStatsThemeSessions
				INNER JOIN #users ON #users.user_id = tblStatsThemeSessions.user_id
				WHERE theme_id = #hlpResult.item_id
				AND tblStatsThemeSessions.startTime BETWEEN @dateRange_start AND @dateRange_end
				GROUP BY theme_id),0)
				WHERE #hlpResult.itemType_id = 1

				-- getting total calls of the Tests
				UPDATE #hlpResult
				SET totalExecutionsItem = ISNULL((
				SELECT COUNT(*) FROM tblTasTestSessions
				INNER JOIN #users ON #users.user_id = tblTasTestSessions.user_id
				WHERE test_id = #hlpResult.item_id
				AND tblTasTestSessions.endDate BETWEEN @dateRange_start AND @dateRange_end
				GROUP BY test_id),0)
				WHERE #hlpResult.itemType_id = 0

				-- getting total learning time for the test in minutes

				UPDATE #hlpResult
				SET totalLearningDurationItem = ISNULL((
				SELECT SUM(DATEDIFF(MINUTE, startdate, enddate)) FROM tblTasTestSessions

				INNER JOIN #users ON #users.user_id = tblTasTestSessions.user_id
				WHERE test_id = #hlpResult.item_id
				AND tblTasTestSessions.endDate BETWEEN @dateRange_start AND @dateRange_end
				GROUP BY test_id),0)
				WHERE #hlpResult.itemType_id = 0

				-- getting avg learning duration for the WBT and user
				UPDATE #hlpResult
				SET avgLearningDurationItem = ISNULL((
				SELECT AVG(DATEDIFF(MINUTE, startdate, endDate)) FROM tblTasTestSessions
				INNER JOIN #users ON #users.user_id = tblTasTestSessions.user_id
				WHERE test_id = #hlpResult.item_id
				AND tblTasTestSessions.endDate BETWEEN @dateRange_start AND @dateRange_end
				GROUP BY test_id),0)
				WHERE #hlpResult.itemType_id = 0

				-- getting the educationTime for the targetgroup selection and the item
				-- for the item we have to sum the educationTime of the current year
				UPDATE #hlpResult
				SET totalEducationTime = ISNULL((
				SELECT SUM(uis.educationTime) FROM
				tblUserItemScores AS uis
				INNER JOIN #users AS u ON uis.user_id = u.user_id
				WHERE uis.item_id = #hlpResult.item_id
				AND uis.endDate BETWEEN @dateRange_start AND @dateRange_end
				GROUP BY uis.item_id),0)

				DECLARE @itemMapping TABLE (id INT, title NVARCHAR(200))
				INSERT INTO @itemMapping VALUES (0,'Test')
				INSERT INTO @itemMapping VALUES (1,'Lernprogramm')
				INSERT INTO @itemMapping VALUES (2,'Seminar')
				INSERT INTO @itemMapping VALUES (6,'Dokument')
				INSERT INTO @itemMapping VALUES (8,'Seminartitel')
				INSERT INTO @itemMapping VALUES (1001,'Modul')


				-- this is the output
				SELECT
				CASE WHEN #hlpResult.group_id &lt;&gt; #hlpResult.item_id THEN
				'---&gt; ' + tblItems.title
				ELSE
				tblItems.title
				END AS 'Baustein Titel',
				types.title AS 'Baustein Typ',
				dbo.fn_GetItemEducationTime(tblItems.id, @current_user_id) AS 'Bildungszeit',
				#hlpResult.totalUsers AS 'Anzahl User in Zielgruppe',
				#hlpResult.usersExecutedItem AS 'Anzahl der tatsächlichen Nutzer',
				CASE WHEN #hlpResult.itemType_id IN (0,1) THEN
				#hlpResult.avgLearningDurationItem / 60
				ELSE 0 END AS 'Durchschnittliche Gesamtbearbeitungszeit pro Benutzer (min)',
				CASE WHEN #hlpResult.itemType_id IN (0,1) THEN
				#hlpResult.totalLearningDurationItem / 60
				ELSE 0 END AS 'Gesamtbearbeitungszeit des Bausteins (min)',
				#hlpResult.totalExecutionsItem AS 'Anzahl Aufrufe pro Nutzer',
				ISNULL(#hlpResult.greenStatuses, 0.0) AS 'Bearbeitungsstatus (grün) tatsächliche Nutzer',
				ISNULL(#hlpResult.yellowStatuses, 0.0) AS 'Bearbeitungsstatus (gelb) tatsächliche Nutzer',
				ISNULL(#hlpResult.redStatuses, 0.0) AS 'Bearbeitungsstatus (rot) tatsächliche Nutzer',
				ISNULL(#hlpResult.totalEducationTime, 0.0) AS 'IDD Minuten übertragen (für den selektierten Zeitraum)'
				FROM #hlpResult INNER JOIN tblItems ON tblItems.id = #hlpResult.item_id
				INNER JOIN @itemMapping AS types ON types.id = tblItems.itemType_id
				ORDER BY #hlpResult.sortType, #hlpResult.group_id, tblItems.title

				-- cleanup queries
				DROP TABLE #hlpResult
				DROP TABLE #users
				DROP TABLE #qualificationItems
			</command>
		</Report>
	</Reports>
	<Parameters>
		<Parameter id="7958af06-3e85-4dbe-b2ea-114699e66aa5" isSystem="True" name="Qualification" reportParameterType_id="e629bb84-0db6-4d66-8009-b781cea6a13e" queryParameterName="@qualification_id" />
		<Parameter id="19308b6b-d4fd-43a8-b8fc-68ac4606cd34" isSystem="True" name="Einzelne Zielgruppe" reportParameterType_id="19b9487c-a81b-4fd3-b12e-7e9ffec4de4a" queryParameterName="@distinctTargetGroup_id" />
		<Parameter id="d8e4595f-8bdd-4a54-9298-8f378450e6a0" isSystem="True" name="Zeitraum" reportParameterType_id="abff13be-91c3-4ee1-93a3-7292f8e013ba" queryParameterName="@dateRange" />
	</Parameters>
	<ParameterTypes>
		<ParameterType id="e629bb84-0db6-4d66-8009-b781cea6a13e" isSystem="True" name="Qualifications" datatype="StringDDL" dataValueField="id" dataTextField="title">
			<query>
				SELECT tblObjects.id, tblObjects.title
				FROM tblQualifications
				INNER JOIN tblObjects ON tblObjects.id = tblQualifications.id
				WHERE tblObjects.mandator_id = @current_mandator_id AND tblObjects.deleted IS NULL
				ORDER BY tblObjects.title
			</query>
		</ParameterType>
		<ParameterType id="19b9487c-a81b-4fd3-b12e-7e9ffec4de4a" isSystem="True" name="Einzelne Zielgruppe" datatype="StringDDL" dataValueField="id" dataTextField="title">
			<query>SELECT id, title FROM tblTargetGroups where mandator_id = @current_mandator_id order by title</query>
		</ParameterType>
		<ParameterType id="abff13be-91c3-4ee1-93a3-7292f8e013ba" isSystem="True" name="DateRange" datatype="DateRange" dataValueField="" dataTextField="" />
	</ParameterTypes>
</ReportsExport>