﻿<?xml version="1.0" encoding="utf-8"?>
<ReportsExport>
	<Reports>
		<Report id="6143ea40-c7e2-4afd-9cd2-4a1ca22fba44" codekey="LernzeitLocation_TargetGroups" categoryCodekey="UserStats" name="Lernzeit Location Zielgruppen" description="Der Report wertet für den gewählten Zeitraum die Lernzeiten für alle User in Location-Zielgruppen aus; dabei werden nur interne Mitarbeiter berücksichtigt.">
			<MetaData created="2020-06-10T20:12:01" createdBy="munichre-anticorruption, Administrator (Administrator)" createdBy_user_id="9414" modified="2021-02-19T13:56:09" modifiedBy="munichre-anticorruption, Administrator (Administrator)" modifiedBy_user_id="9414" />
			<ExecutionDetails format="TableResult" commandType="SqlCommandOrQuery" exportHandler="" adminControl="" exportMultipleTablesToSheets="False" datesWithTime="False" extraParams="" />
			<Mandators mandatorMode="OnlyOwner" mandator_id="b4fbe551-ee3c-4528-bead-422e88fa689d" 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="221F1A02-BCD4-4D87-BE6E-4C54585F7107" isRequired="True" allowMultiSelect="False" name="Auswahl (ja/nein/beides)" contextName="Was möchten Sie auswerten" defaultValue="0" 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='munichre-anticorruption';
				--DECLARE @selection_yesnoboth INT = 1
				---- -----------------------------------------------------------------------------
				-- Parameters
				--DECLARE @dateRange_start DATETIME = '2018-01-01';
				--DECLARE @dateRange_end DATETIME = '2020-12-31';
				-- End parameters
				-- ------------------------------------------------------------------------------

				-- TODO Gruppierung via ZG und Company !!!

				DECLARE @hours DECIMAL(18,2)
				DECLARE @days DECIMAL (18,2)
				DECLARE @minutes DECIMAL(18,2)
				DECLARE @counter BIGINT
				DECLARE @totalUsers BIGINT
				DECLARE @totalActiveLearner BIGINT
				DECLARE @targetGroupLikeQuery NVARCHAR(100)
				DECLARE @targetGroupNotLikeQuery NVARCHAR(100)
				-- mapping helper table for targetgroup and company
				DECLARE @targetGroupCompanies TABLE
				(
				targetGroup_id INT,
				company NVARCHAR(255)
				)
				-- user information for targetGroup and user
				DECLARE @usersTargetGroups TABLE
				(
				user_id INT,
				targetGroup_id INT,
				company NVARCHAR(255)
				)

				DECLARE @results TABLE
				(
				targetGroup_id INT,
				totalLearners BIGINT,
				totalActiveLearners BIGINT,
				totalSucceededProgresses BIGINT,
				totalDuration DECIMAL(10,2),
				company NVARCHAR(255)
				)

				DECLARE @hlpTargetGroups TABLE
				(
				targetGroup_id INT,
				title NVARCHAR(255)
				)

				-- DROP TABLE #locMapping;
				IF OBJECT_ID('tempdb..#locMapping') IS NOT NULL
					DROP TABLE #locMapping

				CREATE TABLE #locMapping(
				sitecode NVARCHAR(200) COLLATE DATABASE_DEFAULT,
				langname NVARCHAR(200),
				region NVARCHAR(200)
				)
				
				SET NOCOUNT ON;

				IF @selection_yesnoboth = 3
				-- Sonderinstanz
				BEGIN
					;WITH hlp(title) AS
					(SELECT DISTINCT LTRIM(RTRIM(tblTargetGroups.title)) FROM tblTargetGroups WHERE mandator_id = @current_mandator_id and defaultforlibrary = 0)
					INSERT INTO #locMapping
					SELECT title, '','' FROM hlp

					SET @targetGroupLikeQuery = '[^_]%'

					;WITH hlpTargetGroups(targetGroup_id, title)
					AS
					(
					SELECT DISTINCT originalUsers.targetGroup_id, tblTargetGroups.title
					FROM tblUsersTargetGroups AS originalUsers
					INNER JOIN tblTargetGroups ON tblTargetGroups.id = originalUsers.targetGroup_id
					WHERE tblTargetGroups.title LIKE @targetGroupLikeQuery
					and defaultforlibrary = 0
					AND mandator_id = @current_mandator_id
					)
					INSERT INTO @hlpTargetGroups
					SELECT targetGroup_id, title FROM hlpTargetGroups
				END
				ELSE
				BEGIN
					INSERT INTO #locMapping
					SELECT title,
					(SELECT TOP 1 value FROM [dbo].[fn_SplitByDelimiter](titleForLearners,';') AS A WHERE A.position = 1),
					(SELECT TOP 1 value FROM [dbo].[fn_SplitByDelimiter](titleForLearners,';') AS A WHERE A.position = 2)
					FROM tbltargetgroups

					SET @targetGroupLikeQuery = 'zz[_]loc[_]%'
					SET @targetGroupNotLikeQuery = 'zz[_]loc[_]%[_]external'

					IF @selection_yesnoboth = 0
					-- ELECT INTERNE
					BEGIN
						;WITH hlpTargetGroups(targetGroup_id, title)
						AS
						(
						SELECT DISTINCT originalUsers.targetGroup_id, tblTargetGroups.title
						FROM tblUsersTargetGroups AS originalUsers
						INNER JOIN tblTargetGroups ON tblTargetGroups.id = originalUsers.targetGroup_id
						WHERE tblTargetGroups.title LIKE @targetGroupLikeQuery AND tblTargetGroups.title NOT LIKE @targetGroupNotLikeQuery
						and defaultforlibrary = 0
						AND mandator_id = @current_mandator_id
						)
						INSERT INTO @hlpTargetGroups
						SELECT targetGroup_id, title FROM hlpTargetGroups
					END
					ELSE IF @selection_yesnoboth = 1
					-- ELECT EXTERNE
					BEGIN
						;WITH hlpTargetGroups(targetGroup_id, title)
						AS
						(
						SELECT DISTINCT originalUsers.targetGroup_id, tblTargetGroups.title
						FROM tblUsersTargetGroups AS originalUsers
						INNER JOIN tblTargetGroups ON tblTargetGroups.id = originalUsers.targetGroup_id
						WHERE tblTargetGroups.title LIKE @targetGroupNotLikeQuery
						and defaultforlibrary = 0
						AND mandator_id = @current_mandator_id
						)
						INSERT INTO @hlpTargetGroups
						SELECT targetGroup_id, title FROM hlpTargetGroups
					END
					ELSE IF @selection_yesnoboth = 2
					-- ELECT GESAMT
					BEGIN
						;WITH hlpTargetGroups(targetGroup_id, title)
						AS
						(
						SELECT DISTINCT originalUsers.targetGroup_id, tblTargetGroups.title
						FROM tblUsersTargetGroups AS originalUsers
						INNER JOIN tblTargetGroups ON tblTargetGroups.id = originalUsers.targetGroup_id
						WHERE tblTargetGroups.title LIKE @targetGroupLikeQuery
						and defaultforlibrary = 0
						AND mandator_id = @current_mandator_id
						)
						INSERT INTO @hlpTargetGroups
						SELECT targetGroup_id, title FROM hlpTargetGroups
					END
				END

				INSERT INTO @targetGroupCompanies
				SELECT DISTINCT tblUsersTargetGroups.targetGroup_id, ISNULL(customAttribute3,'') FROM v_Users
				LEFT JOIN tblUserCustomAttributes AS uca ON uca.user_id = v_Users.intUserCn
				INNER JOIN tblUsersTargetGroups ON tblUsersTargetGroups.UserCn = v_Users.intUserCn
				INNER JOIN @hlpTargetGroups AS A ON A.targetGroup_id = tblUsersTargetGroups.targetGroup_id


				INSERT INTO @usersTargetGroups
				SELECT tblUsersTargetGroups.UserCn, tblUsersTargetGroups.targetGroup_id, ISNULL(uca.customAttribute3,'')
				FROM tblUsersTargetGroups
				-- include all active users which are not eliminated or still available due of the time filter
				INNER JOIN v_Users ON v_Users.intUserCn = tblUsersTargetGroups.UserCn AND (v_Users.userStatus &lt;&gt; 2  OR (v_Users.userStatus = 2 AND v_Users.userStatusStart BETWEEN @dateRange_start AND @dateRange_end))
				LEFT JOIN tblUserCustomAttributes AS uca ON uca.user_id = v_Users.intUserCn

				INSERT INTO
				@results
				SELECT
				outQuery.targetGroup_id,
				(SELECT COUNT(*) FROM @usersTargetGroups WHERE targetGroup_id = outQuery.targetGroup_id AND tgc.company = company), -- totalUsers
				0,
				0, --totalSuccess
				0, --totalDuration
				tgc.company
				FROM @hlpTargetGroups AS outQuery
				INNER JOIN @targetGroupCompanies AS tgc ON tgc.targetGroup_id = outQuery.targetGroup_id

				-- grouping and calculating the learners
				;WITH LearnersActivity(user_id, learningDuration)
				AS
				(
				SELECT
				suc.UserId,
				SUM(ISNULL(learningDuration,0))
				FROM
				[dbo].[tblStatusUserCourse] suc
				INNER JOIN @usersTargetGroups AS ut ON ut.user_id = suc.UserId
				LEFT JOIN tblUserCustomAttributes AS uca ON uca.user_id = suc.UserId
				INNER JOIN @results AS resultHelper ON resultHelper.targetGroup_id = ut.targetGroup_id AND resultHelper.company = ISNULL(uca.customAttribute3,'')
				INNER JOIN tblThemes ON tblThemes.id = suc.theme_id
				WHERE
				suc.BestCompleteDate &gt; @dateRange_start
				AND suc.BestCompleteDate &lt; @dateRange_end
				AND suc.BestComplete &gt; 80
				GROUP BY suc.UserId, theme_id
				),CTE(targetGroup_id, totalActiveLearners, totalSucceededProgresses, totalDuration, company)
				AS
				(
				SELECT
				ut.targetGroup_id,
				totalActiveLearners = COUNT(DISTINCT LearnersActivity.user_id),
				totalSucceededProgresses = COUNT(*),
				totalDuration = SUM(LearnersActivity.learningDuration),
				ut.company
				FROM
				LearnersActivity
				INNER JOIN @usersTargetGroups AS ut ON ut.user_id = LearnersActivity.user_id
				LEFT JOIN tblUserCustomAttributes AS uca ON uca.user_id = LearnersActivity.user_id AND ISNULL(uca.customAttribute3, '') = ut.company
				INNER JOIN @results AS resultHelper ON resultHelper.targetGroup_id = ut.targetGroup_id AND resultHelper.company = ut.company
				GROUP BY ut.targetGroup_id, ut.company
				)
				--tblThemes.learningDuration ist WBT spezifisch
				UPDATE
				@results
				SET
				totalActiveLearners = CTE.totalActiveLearners,
				totalSucceededProgresses = CTE.totalSucceededProgresses,
				totalDuration = CTE.totalDuration
				FROM
				CTE INNER JOIN @results AS resultHelper ON resultHelper.targetGroup_id = CTE.targetGroup_id
				AND resultHelper.company = CTE.company

				SELECT @counter = SUM(totalSucceededProgresses),
				@minutes = SUM(totalDuration),
				@totalUsers = SUM(totalLearners),
				@totalActiveLearner = SUM(totalActiveLearners)
				FROM
				(
				SELECT
				SUM(resultHelper.totalLearners) / COUNT(resultHelper.totalLearners) AS totalLearners,
				SUM(resultHelper.totalActiveLearners) / COUNT(resultHelper.totalActiveLearners) AS totalActiveLearners,
				SUM(resultHelper.totalSucceededProgresses) / COUNT(resultHelper.totalSucceededProgresses) AS totalSucceededProgresses,
				SUM(resultHelper.totalDuration) / COUNT(resultHelper.totalDuration) AS totalDuration
				FROM @results AS resultHelper
				INNER JOIN @hlpTargetGroups as tg ON tg.targetGroup_id = resultHelper.targetGroup_id
				INNER JOIN #locMapping lm ON lm.sitecode = tg.title
				GROUP BY tg.title, lm.langname, resultHelper.company, lm.region
				)AS A

				--calculating the SUM information for minutes and hours
				SET @hours = @minutes / 60
				SET @days = @hours / 8

				-- output information for the result
				SELECT
				[Sitecode/Targetgroup],
				[Long name],
				[Company],
				[Region],
				[Anzahl der registrierten Nutzer],
				[Anzahl Lerner],
				[Anzahl erfolgreicher Bearbeitungen],
				[Gesamte Lerndauer (min)]
				FROM
				(
				SELECT DISTINCT
				tg.title AS [Sitecode/Targetgroup],
				lm.langname AS [Long name],
				resultHelper.company AS [Company],
				lm.region AS [Region],
				resultHelper.totalLearners AS [Anzahl der registrierten Nutzer],
				resultHelper.totalActiveLearners AS [Anzahl Lerner],
				resultHelper.totalSucceededProgresses AS [Anzahl erfolgreicher Bearbeitungen],
				resultHelper.totalDuration AS [Gesamte Lerndauer (min)],
				0 AS orderHelper
				FROM @results AS resultHelper
				INNER JOIN @hlpTargetGroups as tg ON tg.targetGroup_id = resultHelper.targetGroup_id
				INNER JOIN #locMapping lm ON lm.sitecode = tg.title
				UNION ALL
				SELECT
				'Min (# / min)',
				'',
				'',
				'',
				@totalUsers,
				@totalActiveLearner,
				@counter,
				@minutes,
				1
				UNION ALL
				SELECT
				'Stunden',
				'',
				'',
				'',
				NULL,
				NULL,
				NULL,
				@hours,
				2
				UNION ALL
				SELECT
				'Arbeitstage',
				'',
				'',
				'',
				NULL,
				NULL,
				NULL,
				@days,
				3
				) AS result
				ORDER BY result.orderHelper, result.Company, result.[Sitecode/Targetgroup]

				DROP TABLE #locMapping
			</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="221F1A02-BCD4-4D87-BE6E-4C54585F7107" isSystem="True" name="Auswahl (ja/nein/beides)" reportParameterType_id="C50C6DA5-E9A8-44CA-8AB0-C3157B038F1A" queryParameterName="@selection_yesnoboth" />
	</Parameters>
	<ParameterTypes>
		<ParameterType id="abff13be-91c3-4ee1-93a3-7292f8e013ba" isSystem="True" name="DateRange" datatype="DateRange" dataValueField="" dataTextField="" />
		<ParameterType id="C50C6DA5-E9A8-44CA-8AB0-C3157B038F1A" isSystem="True" name="Auswahlliste" datatype="StringDDL" dataValueField="Value" dataTextField="Text">
			<query>
				SELECT 0 AS Value, 'ELECT INTERNE' AS Text
				UNION
				SELECT 1 AS Value, 'ELECT EXTERNE' AS Text
				UNION
				SELECT 2 AS Value, 'ELECT GESAMT' AS Text
				UNION
				SELECT 3 AS Value, 'Sonderinstanz' AS Text
			</query>
		</ParameterType>
	</ParameterTypes>
</ReportsExport>