﻿<?xml version="1.0" encoding="utf-8"?>
<ReportsExport>
	<Reports>
		<Report id="2c441360-cfe1-429e-bd5a-1352521c79d1" codekey="ELECT_DataAnalytics" categoryCodekey="LearningPrograms" name="Report für modulares &quot;Data analytics&quot;" description="Eine Überblicksauswertung für den neuen modularen Content &quot;Data analytics&quot;.&lt;br&gt;&#xD;&#xA;&lt;b&gt;FÜR ELECT:&lt;/b&gt; Interne Zielgruppe verwenden – „Nein“ auswählen&lt;br&gt;&#xD;&#xA;&lt;b&gt;FÜR SONDERINSTANZ:&lt;/b&gt; Interne Zielgruppe verwenden – „Ja“ auswählen">
			<MetaData created="2019-08-19T12:00:52" createdBy="holger.betz1_LastName, holger.betz1_FirstName (holger.betz1)" createdBy_user_id="37276" modified="2021-07-29T13:15:05" modifiedBy="Administrator_LastName, Administrator_FirstName (Administrator)" modifiedBy_user_id="2" />
			<ExecutionDetails format="TableResult" commandType="SqlCommandOrQuery" exportHandler="" adminControl="" exportMultipleTablesToSheets="True" datesWithTime="False" extraParams="" />
			<Mandators mandatorMode="OnlyOwner" mandator_id="d5a90a49-e697-4aeb-8a5b-298782815490" mandatorName="ELECT" isStandard="False" isUsedByMenu="False" />
			<Parameters>
				<Parameter id="7a721121-2d2e-4a3d-b9e6-c6aa238e7ab2" isRequired="True" allowMultiSelect="False" name="Auswahl (ja/nein)" contextName="Interne Zielgruppen verwenden" defaultValue="1" renderHint="Undefined" disableParameter="DontDisable" />
				<Parameter id="a7e2390c-c4ee-4057-a4a6-9322a8972880" isRequired="False" allowMultiSelect="False" name="Zeichenfolge #1" contextName="Sheet2" defaultValue="Completed" renderHint="Undefined" disableParameter="DontDisable" />
				<Parameter id="16891d49-6015-490e-8e56-ac2454cf064a" isRequired="False" allowMultiSelect="False" name="Zeichenfolge #2" contextName="Sheet3" defaultValue="No Modules" renderHint="Undefined" disableParameter="DontDisable" />
				<Parameter id="218a8c96-5721-4331-a731-c35ad2502efd" isRequired="False" allowMultiSelect="False" name="Zeichenfolge #3" contextName="Sheet4" defaultValue="Locations" renderHint="Undefined" disableParameter="DontDisable" />
				<Parameter id="77f04a4c-1f0e-4fb6-abad-68281ee871a7" isRequired="False" allowMultiSelect="False" name="Zeichenfolge #4" contextName="Sheet5" defaultValue="Modules" renderHint="Undefined" disableParameter="DontDisable" />
			</Parameters>
			<Roles>
				<Role id="90" />
			</Roles>
			<command>
				--declare @current_mandator_id UNIQUEIDENTIFIER
				--DECLARE @selection_yesno NVARCHAR(1) = 1
				--select  @current_mandator_id = id
				--from    tblMandators
				--where   name = 'ELECT'


				DECLARE @targetGroupLikeQuery NVARCHAR(20)
				-- --------------------------------------------------------
				-- Location name mappings, hardcoded as provided by customer
				-- --------------------------------------------------------
				-- DROP TABLE #locMapping;
				IF OBJECT_ID('tempdb..#locMapping') IS NULL
				BEGIN
				CREATE TABLE #locMapping(
				sitecode NVARCHAR(200) COLLATE DATABASE_DEFAULT,
				langname NVARCHAR(200),
				region NVARCHAR(200)
				)
				END
				SET NOCOUNT ON;

				-- adding data for the mapping
				IF @selection_yesno = 0
				-- adding data for the mapping
				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[_]%'
				END
				ELSE
				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 = '[^_]%'
				END

				-- --------------------------------------------------------
				-- The Data Analytics WBTs
				-- --------------------------------------------------------
				IF OBJECT_ID('tempdb..#Wbts') IS NULL
				BEGIN
				CREATE TABLE #Wbts
				(
				id UNIQUEIDENTIFIER PRIMARY KEY,
				lang CHAR(2),
				langOrder INT,
				title VARCHAR(20),
				number INT
				)

				-- Add the German "Modules" (WBTs)
				INSERT INTO
				#Wbts
				SELECT
				ti.id,
				'DE' as lang,
				0 as langOrder,
				'D' + CAST(mi.sortOrder AS VARCHAR(3)) + ' - ' + ti.tag as title,
				mi.sortOrder as number
				FROM
				tblThemes t
				JOIN tblItems AS ti
				ON  ti.id = t.id
				AND ti.deleted IS NULL
				JOIN tblModuleItems AS mi
				ON  mi.item_id = ti.id
				JOIN tblItems AS modI
				ON  modI.id = mi.module_id
				WHERE
				modI.title = 'Data Analytics Basics - German'
				ORDER BY
				mi.sortOrder

				-- Add the English "Modules" (WBTs)
				INSERT INTO
				#Wbts
				SELECT
				ti.id,
				'EN' as lang,
				1 as langOrder,
				'E' + CAST(mi.sortOrder AS VARCHAR(3)) + ' - ' + ti.tag as title,
				mi.sortOrder as number
				FROM
				tblThemes t
				JOIN tblItems AS ti
				ON  ti.id = t.id
				AND ti.deleted IS NULL
				JOIN tblModuleItems AS mi
				ON  mi.item_id = ti.id
				JOIN tblItems AS modI
				ON  modI.id = mi.module_id
				WHERE
				modI.title = 'Data Analytics Basics - English'
				ORDER BY
				mi.sortOrder
				END

				-- --------------------------------------------------------
				-- Location target groups: Initialization
				-- --------------------------------------------------------
				-- DROP TABLE #LocationTargetGroups;
				IF OBJECT_ID('tempdb..#LocationTargetGroups') IS NULL
				BEGIN
				CREATE TABLE #LocationTargetGroups
				(
				TargetGroupId INT PRIMARY KEY,
				TotalUsers INT,
				Title NVARCHAR(MAX)
				);

				INSERT INTO
				#LocationTargetGroups
				(
				TargetGroupId
				)
				SELECT
				tg.id
				FROM
				[dbo].[tblTargetGroups] tg
				WHERE
				tg.title LIKE @targetGroupLikeQuery
				AND tg.defaultforlibrary = 0 -- Filter out special Bibliothek target group just in  case
				AND tg.mandator_id = @current_mandator_id
				END

				-- --------------------------------------------------------
				-- All users who have access to any data analytics WBT along
				-- with their (first) location.
				-- --------------------------------------------------------
				-- DROP TABLE #LocationUsers;
				IF OBJECT_ID('tempdb..#LocationUsers') IS NULL
				BEGIN
				---DECLARE @LocationUsers TABLE
				CREATE TABLE #LocationUsers
				(
				UserId INT,
				TargetGroupId INT
				)

				INSERT INTO
				#LocationUsers
				(
				UserId,
				TargetGroupId
				)
				SELECT
				u.UserId,
				(
				SELECT TOP 1
				id
				FROM
				[tblTargetGroups] AS tg
				JOIN [tblUsersTargetGroups] AS utg ON utg.targetGroup_id = tg.id
				JOIN #LocationTargetGroups AS ltg ON ltg.TargetGroupId = utg.targetGroup_id
				INNER JOIN v_Users ON v_Users.intUserCn = utg.UserCn AND v_Users.userStatus &lt;&gt; 2
				WHERE
				utg.UserCn = u.UserId
				-- Pick the first target group alphabetically by title
				ORDER BY
				tg.title
				)
				FROM
				(
				SELECT DISTINCT
				utg.UserCn as UserId
				FROM
				[tblUsersTargetGroups] AS utg
				JOIN [tblEduOffersTargetGroups] AS etg ON etg.targetGroup_id = utg.targetGroup_id
				JOIN [tblEduOffersModules] AS es ON es.eduOffer_id = etg.eduOffer_id
				JOIN [tblModuleItems] AS mi ON mi.module_id = es.module_id
				JOIN #Wbts AS wbts ON wbts.id = mi.item_id
				INNER JOIN v_Users ON v_Users.intUserCn = utg.UserCn AND v_Users.userStatus &lt;&gt; 2
				) as u
				-- all users which are assigned to those items via any existing targetgroup chain


				-- Quite a lot faster to delete from final result than filter out of insert
				DELETE FROM
				#LocationUsers
				WHERE
				TargetGroupId IS NULL
				END


				-- --------------------------------------------------------
				-- Location target groups: Finalization
				-- --------------------------------------------------------
				IF NOT EXISTS(SELECT * FROM #LocationTargetGroups WHERE Title IS NOT NULL)
				BEGIN
				-- Set the total user counts for each location
				;WITH TargetGroupCounts (TargetGroupId, UserCount) AS
				(
				SELECT
				ltg.TargetGroupId, COUNT(lu.UserId) as UserCount
				FROM
				#LocationTargetGroups ltg
				JOIN    #LocationUsers lu
				ON  lu.TargetGroupId = ltg.TargetGroupId
				GROUP BY
				ltg.TargetGroupId
				)
				UPDATE
				ltg
				SET
				ltg.TotalUsers = ISNULL(tgc.UserCount, 0)
				FROM
				#LocationTargetGroups AS ltg
				LEFT JOIN TargetGroupCounts AS tgc
				ON  tgc.TargetGroupId = ltg.TargetGroupId

				-- Set the TG title to avoid multiple joins later
				UPDATE
				ltg
				SET
				Title = tg.title
				FROM
				#LocationTargetGroups ltg
				JOIN tblTargetGroups tg
				ON tg.id = ltg.TargetGroupId

				--select  '#LocationTargetGroups' as tableName, *
				--from    #LocationTargetGroups
				END

				-- --------------------------------------------------------
				-- Count of users with each status broken down by WBT and
				-- location
				-- --------------------------------------------------------
				-- DROP TABLE #UserStatusCountPerWbtAndLocation;
				IF OBJECT_ID('tempdb..#UserStatusCountPerWbtAndLocation') IS NULL
				BEGIN
				--DECLARE @UserStatusCountPerWbtAndLocation TABLE
				CREATE TABLE #UserStatusCountPerWbtAndLocation
				(
				Category VARCHAR(50) NOT NULL,
				WbtId UNIQUEIDENTIFIER,
				TargetGroupId INT NOT NULL,
				WbtStatus INT,
				UserStatusCount INT,
				UserStatusPercentage FLOAT
				)

				-- Create entries for all user / wbt / location combinations where the user achieved some status
				INSERT INTO
				#UserStatusCountPerWbtAndLocation
				SELECT
				wbts.title AS Category,
				wbts.id AS WbtId,
				ltg.TargetGroupId,
				suih.status AS WbtStatus,
				COUNT(suih.id) AS UserStatusCount,
				ROUND(COUNT(suih.id) / CAST(MIN(ltg.TotalUsers) AS float), 2) AS UserStatusPercentage
				FROM
				#Wbts wbts
				JOIN tblStatusUserItemHistory suih
				ON  suih.item_id = wbts.id
				AND suih.endDate IS NULL
				JOIN #LocationUsers lu
				ON  lu.UserId = suih.user_id
				JOIN #LocationTargetGroups ltg
				ON  ltg.TargetGroupId = lu.TargetGroupId
				GROUP BY
				wbts.title,
				wbts.id,
				ltg.TargetGroupId,
				suih.status

				-- Create entries for all user / wbt / location combinations where the user has no status
				INSERT INTO
				#UserStatusCountPerWbtAndLocation
				SELECT
				wbts.title AS Category,
				wbts.id AS WbtId,
				ltg.TargetGroupId,
				NULL AS WbtStatus,
				COUNT(lu.userId) AS UserStatusCount,
				ROUND(COUNT(lu.userId) / CAST(MIN(ltg.TotalUsers) AS float), 2) AS UserStatusPercentage
				FROM
				#Wbts wbts
				CROSS JOIN #LocationUsers lu
				JOIN #LocationTargetGroups ltg
				ON  ltg.TargetGroupId = lu.TargetGroupId
				LEFT JOIN tblStatusUserItemHistory suih
				ON  suih.item_id = wbts.id
				AND suih.user_id = lu.UserId
				AND suih.endDate IS NULL
				WHERE
				suih.id IS NULL
				GROUP BY
				wbts.title,
				wbts.id,
				ltg.TargetGroupId
				END

				-- --------------------------------------------------------
				-- Dynamic pivot query preparation:
				--   To avoid hard coding the WBTs and support the specific
				--   ordering of columns requested by the customer a number
				--   of dynamic column lists are generated.
				-- --------------------------------------------------------
				DECLARE @PivotColumns NVARCHAR(MAX);
				DECLARE @IsNullPivotColumns_DE NVARCHAR(MAX);
				DECLARE @IsNullPivotColumns_EN NVARCHAR(MAX);
				DECLARE @IsNullPivotColumnsPC_DE NVARCHAR(MAX);
				DECLARE @IsNullPivotColumnsPC_EN NVARCHAR(MAX);
				DECLARE @FinalMixedPivotColumns_DE NVARCHAR(MAX);
				DECLARE @FinalMixedPivotColumns_EN NVARCHAR(MAX);
				DECLARE @FinalMixedPivotColumnsSum_DE NVARCHAR(MAX);
				DECLARE @FinalMixedPivotColumnsSum_EN NVARCHAR(MAX);

				SELECT  @PivotColumns = STUFF
				(
				(
				SELECT ', [' + title + ']'
				FROM  #wbts
				ORDER BY
				langOrder,
				number
				FOR XML PATH('')
				),
				1,
				2,
				''
				);

				SELECT
				@IsNullPivotColumns_DE = STUFF
				(
				(
				SELECT  ', ISNULL([' + title + '], 0) AS [' + lang + CAST(number AS NVARCHAR(10)) + ']'
				FROM    #wbts
				WHERE   lang = 'DE'
				ORDER BY
				langOrder,
				number
				FOR XML PATH('')
				),
				1,
				2,
				'');

				SELECT
				@IsNullPivotColumns_EN = STUFF
				(
				(
				SELECT  ', ISNULL([' + title + '], 0) AS [' + lang + CAST(number AS NVARCHAR(10)) + ']'
				FROM    #wbts
				WHERE   lang = 'EN'
				ORDER BY
				langOrder,
				number
				FOR XML PATH('')
				),
				1,
				2,
				'')

				SELECT
				@IsNullPivotColumnsPC_DE = STUFF
				(
				(
				SELECT ', ISNULL([' + title + '], 0) AS [' + lang + CAST(number AS NVARCHAR(10)) + ']'
				FROM  #wbts
				WHERE   lang = 'DE'
				ORDER BY
				langOrder,
				number
				FOR XML PATH('')
				),
				1,
				2,
				'')

				SELECT
				@IsNullPivotColumnsPC_EN = STUFF
				(
				(
				SELECT ', ISNULL([' + title + '], 0) AS [' + lang + CAST(number AS NVARCHAR(10)) + ']'
				FROM  #wbts
				WHERE   lang = 'EN'
				ORDER BY
				langOrder,
				number
				FOR XML PATH('')
				),
				1,
				2,
				'')

				SELECT
				@FinalMixedPivotColumns_DE = STUFF
				(
				(
				SELECT ', UserCounts.[' + lang + CAST(number AS NVARCHAR(10)) + '] AS [' + title + '], UserPercentages.[' + lang + CAST(number AS NVARCHAR(10)) + '] AS [' + title + ' %]'
				FROM  #wbts
				WHERE   lang = 'DE'
				ORDER BY
				langOrder,
				number
				FOR XML PATH('')
				),
				1,
				2,
				'')

				SELECT
				@FinalMixedPivotColumns_EN = STUFF
				(
				(
				SELECT ', UserCounts.[' + lang + CAST(number AS NVARCHAR(10)) + '] AS [' + title + '], UserPercentages.[' + lang + CAST(number AS NVARCHAR(10)) + '] AS [' + title + ' %]'
				FROM  #wbts
				WHERE   lang = 'EN'
				ORDER BY
				langOrder,
				number
				FOR XML PATH('')
				),
				1,
				2,
				'')

				SELECT
				@FinalMixedPivotColumnsSum_DE = STUFF
				(
				(
				SELECT ', SUM(CT.[' + title + ']) AS [' + title + '], AVG(CT.[' + title + ' %]) AS [' + title + ' %]'
				FROM  #wbts
				WHERE   lang = 'DE'
				ORDER BY
				langOrder,
				number
				FOR XML PATH('')
				),
				1,
				2,
				'')

				SELECT
				@FinalMixedPivotColumnsSum_EN = STUFF
				(
				(
				SELECT ', SUM(CT.[' + title + ']) AS [' + title + '], AVG(CT.[' + title + ' %]) AS [' + title + ' %]'
				FROM  #wbts
				WHERE   lang = 'EN'
				ORDER BY
				langOrder,
				number
				FOR XML PATH('')
				),
				1,
				2,
				'')


				DECLARE @DynamicQueryTemplate NVARCHAR(MAX);
				DECLARE @DynamicQuery NVARCHAR(MAX);

				-- #1 THIS IS THE FIRST SHEET FOR RESULTS
				SET @DynamicQueryTemplate = '
				;WITH CT AS
				(
				SELECT
				ltg.Title as ''Sitecode/Target Group'',
				ISNULL(lm.langname, '''') as ''Long name'',
				ISNULL(lm.Region, '''') as ''Region'',
				ltg.TotalUsers as ''Number of registered users'',
				UserCounts.MW_DE as [Mittelwert DE alle Module],
				UserPercentages.MW_DE as [Mittelwert DE alle Module %],
				' + @FinalMixedPivotColumns_DE + ',
				UserCounts.MW_EN as [Mittelwert EN alle Module],
				UserPercentages.MW_EN as [Mittelwert EN alle Module %],
				' + @FinalMixedPivotColumns_EN + ',
				UserCounts.MW_DE_EN as [Mittelwert DE + EN alle Module],
				UserPercentages.MW_DE_EN as [Mittelwert DE + EN alle Module %]
				FROM
				(
				SELECT
				TargetGroupId,
				(
				SELECT
				ROUND(AVG(CAST(ISNULL(usc.UserStatusCount, 0) AS FLOAT)), 2)
				FROM
				#Wbts wbts
				CROSS JOIN  #LocationTargetGroups ltg
				LEFT JOIN   #UserStatusCountPerWbtAndLocation usc
				ON  usc.WbtId = wbts.id
				&lt;WBT_STATUS_PREDICATE&gt;
				AND usc.TargetGroupId = ltg.TargetGroupId
				WHERE
				wbts.lang = ''DE''
				AND ltg.TargetGroupId = PivotTable.TargetGroupId
				) as MW_DE,
				' + @IsNullPivotColumns_DE + ',
				(
				SELECT
				ROUND(AVG(CAST(ISNULL(usc.UserStatusCount, 0) AS FLOAT)), 2)
				FROM
				#Wbts wbts
				CROSS JOIN  #LocationTargetGroups ltg
				LEFT JOIN   #UserStatusCountPerWbtAndLocation usc
				ON  usc.WbtId = wbts.id
				&lt;WBT_STATUS_PREDICATE&gt;
				AND usc.TargetGroupId = ltg.TargetGroupId
				WHERE
				wbts.lang = ''EN''
				AND ltg.TargetGroupId = PivotTable.TargetGroupId
				) as MW_EN,
				' + @IsNullPivotColumns_EN + ',
				(
				SELECT
				ROUND(AVG(CAST(ISNULL(usc.UserStatusCount, 0) AS FLOAT)), 2)
				FROM
				#Wbts wbts
				CROSS JOIN  #LocationTargetGroups ltg
				LEFT JOIN   #UserStatusCountPerWbtAndLocation usc
				ON  usc.WbtId = wbts.id
				&lt;WBT_STATUS_PREDICATE&gt;
				AND usc.TargetGroupId = ltg.TargetGroupId
				WHERE
				ltg.TargetGroupId = PivotTable.TargetGroupId
				) as MW_DE_EN
				FROM
				(
				SELECT
				ltg.TargetGroupId,
				ltg.TotalUsers,
				usc.Category,
				usc.UserStatusCount
				FROM
				#LocationTargetGroups ltg
				LEFT JOIN #UserStatusCountPerWbtAndLocation usc
				ON  usc.TargetGroupId = ltg.TargetGroupId
				&lt;WBT_STATUS_PREDICATE&gt;
				LEFT JOIN    #Wbts wbts
				ON  wbts.id = usc.WbtId
				) AS SourceTable
				PIVOT
				(
				SUM(UserStatusCount)
				FOR Category IN (' + @PivotColumns + ')
				) AS PivotTable
				) AS UserCounts
				JOIN
				(
				SELECT
				TargetGroupId,
				(
				SELECT
				ROUND(AVG(CAST(ISNULL(usc.UserStatusPercentage, 0) AS FLOAT)), 2)
				FROM
				#Wbts wbts
				CROSS JOIN  #LocationTargetGroups ltg
				LEFT JOIN   #UserStatusCountPerWbtAndLocation usc
				ON  usc.WbtId = wbts.id
				&lt;WBT_STATUS_PREDICATE&gt;
				AND usc.TargetGroupId = ltg.TargetGroupId
				WHERE
				wbts.lang = ''DE''
				AND ltg.TargetGroupId = PivotTable.TargetGroupId
				) as MW_DE,
				' + @IsNullPivotColumnsPC_DE + ',
				(
				SELECT
				ROUND(AVG(CAST(ISNULL(usc.UserStatusPercentage, 0) AS FLOAT)), 2)
				FROM
				#Wbts wbts
				CROSS JOIN  #LocationTargetGroups ltg
				LEFT JOIN   #UserStatusCountPerWbtAndLocation usc
				ON  usc.WbtId = wbts.id
				&lt;WBT_STATUS_PREDICATE&gt;
				AND usc.TargetGroupId = ltg.TargetGroupId
				WHERE
				wbts.lang = ''EN''
				AND ltg.TargetGroupId = PivotTable.TargetGroupId
				) as MW_EN,
				' + @IsNullPivotColumnsPC_EN + ',
				(
				SELECT
				ROUND(AVG(CAST(ISNULL(usc.UserStatusPercentage, 0) AS FLOAT)), 2)
				FROM
				#Wbts wbts
				CROSS JOIN  #LocationTargetGroups ltg
				LEFT JOIN   #UserStatusCountPerWbtAndLocation usc
				ON  usc.WbtId = wbts.id
				&lt;WBT_STATUS_PREDICATE&gt;
				AND usc.TargetGroupId = ltg.TargetGroupId
				WHERE
				ltg.TargetGroupId = PivotTable.TargetGroupId
				) as MW_DE_EN
				FROM
				(
				SELECT
				ltg.TargetGroupId,
				ltg.Title AS ''location'',
				usc.Category,
				usc.UserStatusPercentage
				FROM
				#LocationTargetGroups ltg
				LEFT JOIN #UserStatusCountPerWbtAndLocation usc
				ON  usc.TargetGroupId = ltg.TargetGroupId
				&lt;WBT_STATUS_PREDICATE&gt;
				LEFT JOIN    #Wbts wbts
				ON  wbts.id = usc.WbtId
				) AS SourceTable
				PIVOT
				(
				SUM(UserStatusPercentage)
				FOR Category IN (' + @PivotColumns + ')
				) AS PivotTable
				) AS UserPercentages
				ON UserCounts.TargetGroupId = UserPercentages.TargetGroupId
				JOIN #LocationTargetGroups ltg
				ON  ltg.TargetGroupId = UserCounts.TargetGroupId
				LEFT JOIN #locMapping lm
				ON  lm.sitecode = ltg.title
				),
				CT_Totals AS
				(
				SELECT
				''Totale'' AS ''Sitecode/Target Group'',
				'''' AS ''Long name'',
				'''' AS ''Region'',
				SUM(CT.[Number of registered users]) AS [Number of registered users],
				SUM(CT.[Mittelwert DE alle Module]) AS [Mittelwert DE alle Module],
				AVG(CT.[Mittelwert DE alle Module %]) AS [Mittelwert DE alle Module %],
				' + @FinalMixedPivotColumnsSum_DE + ',
				SUM(CT.[Mittelwert EN alle Module]) AS [Mittelwert EN alle Module],
				AVG(CT.[Mittelwert EN alle Module %]) AS [Mittelwert EN alle Module %],
				' + @FinalMixedPivotColumnsSum_EN + ',
				SUM(CT.[Mittelwert DE + EN alle Module]) as [Mittelwert DE + EN alle Module],
				AVG(CT.[Mittelwert DE + EN alle Module %]) as [Mittelwert DE + EN alle Module %]
				FROM
				CT
				)
				&lt;INLINE_ROW&gt;

				SELECT  &lt;OUTPUT_COLUMNS&gt;
				FROM    CT &lt;OUTPUT_WHERE_CONDITION&gt;

				UNION ALL

				SELECT  &lt;OUTPUT_COLUMNS&gt;
				FROM    CT_Totals &lt;OUTPUT_WHERE_CONDITION&gt;
				'

				-- --------------------------------------------------------
				-- Result 1, Completed status
				-- --------------------------------------------------------
				SET @DynamicQuery = REPLACE(@DynamicQueryTemplate, '&lt;WBT_STATUS_PREDICATE&gt;', 'AND ISNULL(usc.WbtStatus,0) = 2')
				SET @DynamicQuery = REPLACE(@DynamicQuery, '&lt;OUTPUT_COLUMNS&gt;', '*')
				SET @DynamicQuery = REPLACE(@DynamicQuery, '&lt;OUTPUT_WHERE_CONDITION&gt;', '')
				SET @DynamicQuery = REPLACE(@DynamicQuery, '&lt;INLINE_ROW&gt;', '')
				EXEC sp_executesql @DynamicQuery

				-- --------------------------------------------------------
				-- Result 2, Not Attempted
				-- --------------------------------------------------------
				SET @DynamicQuery = REPLACE(@DynamicQueryTemplate, '&lt;WBT_STATUS_PREDICATE&gt;', 'AND ISNULL(usc.WbtStatus,0) = 2')
				SET @DynamicQuery = REPLACE(@DynamicQuery, '&lt;OUTPUT_COLUMNS&gt;', '[Sitecode/Target Group], [Long Name],Region, [Number of registered users]')
				SET @DynamicQuery = REPLACE(@DynamicQuery, '&lt;OUTPUT_WHERE_CONDITION&gt;', ' WHERE [Mittelwert DE + EN alle Module] = 0')
				SET @DynamicQuery = REPLACE(@DynamicQuery, '&lt;INLINE_ROW&gt;', 'SELECT ''Locations/Zielgruppen,  in denen kein Modul bearbeitet wurde'' AS [Sitecode/Target Group], NULL AS [Long Name], NULL AS Region, NULL AS [Number of registered users] UNION ALL ')
				EXEC sp_executesql @DynamicQuery

				-- --------------------------------------------------------
				-- Result 3, Locations with &gt;= 5 Users with all modules completed
				-- --------------------------------------------------------
				DECLARE @WbtCount INT;
				SELECT  @WbtCount = COUNT(*)
				FROM    #Wbts

				;WITH WbtLangCounts AS
				(
				SELECT
				lang, count(*) as langCount
				FROM
				#Wbts
				GROUP BY
				lang
				),
				SelectedGroups AS
				(
				SELECT DISTINCT
				TargetGroupId
				FROM
				#UserStatusCountPerWbtAndLocation usc
				JOIN    #Wbts wbts
				ON  wbts.id = usc.WbtId
				WHERE
				WbtStatus = 2
				AND UserStatusCount &gt; 4
				GROUP BY
				TargetGroupId,
				wbts.lang
				HAVING
				COUNT(WbtId) = (
				SELECT  langCount
				FROM    WbtLangCounts
				WHERE   lang = wbts.lang
				)
				)
				SELECT 'Locations/Zielgruppen, in denen &gt;= 5 User alle Module einer Sprache bearbeitet haben' AS 'Location with &gt;= 5 users complete for one language', NULL AS 'Long Name'
				UNION ALL
				SELECT * FROM
				(SELECT TOP 100 PERCENT
				tg.title as 'Location with &gt;= 5 users complete for one language',
				lm.langname
				FROM
				SelectedGroups sg
				JOIN    tblTargetGroups tg
				ON  tg.id = sg.TargetGroupId
				JOIN    #locMapping lm
				ON  lm.sitecode = tg.title
				order by
				tg.title) AS hlp

				-- --------------------------------------------------------
				-- Result 4, Modules (WBTs) ranked by most completed
				-- --------------------------------------------------------
				;WITH CompletedWbts AS
				(
				SELECT
				WbtId, SUM(UserStatusCount) as StatusCount
				FROM
				#UserStatusCountPerWbtAndLocation usc
				WHERE
				WbtStatus = 2
				GROUP BY
				WbtId
				)
				SELECT
				[Module Title], [# of Users Completed]
				FROM
				(
				SELECT 'Rangreihe der Module nach Nutzung' AS 'Module Title', NULL AS '# of Users Completed', 2 AS hlpColumn
				UNION ALL
				SELECT * FROM
				(
				SELECT TOP 100 PERCENT
				title AS 'Module Title', StatusCount as '# of Users Completed', 1 AS hlpColumn
				FROM
				CompletedWbts cw
				JOIN    #Wbts wbts
				ON  wbts.id = cw.WbtId) AS hlp) AS Result
				ORDER BY hlpColumn DESC, [# of Users Completed] DESC

				DROP TABLE #LocationTargetGroups
				DROP TABLE #LocationUsers
				DROP TABLE #UserStatusCountPerWbtAndLocation
				DROP TABLE #locMapping
				DROP TABLE #Wbts
			</command>
		</Report>
	</Reports>
	<Parameters>
		<Parameter id="7a721121-2d2e-4a3d-b9e6-c6aa238e7ab2" isSystem="True" name="Auswahl (ja/nein)" reportParameterType_id="411ec93b-ab23-41ba-91d6-e7dc0235b5af" queryParameterName="@selection_yesno" />
		<Parameter id="a7e2390c-c4ee-4057-a4a6-9322a8972880" mandator_id="d5a90a49-e697-4aeb-8a5b-298782815490" isSystem="False" name="Zeichenfolge #1" reportParameterType_id="f8132846-123e-4d89-b24c-ace5556039fa" queryParameterName="@string1" />
		<Parameter id="16891d49-6015-490e-8e56-ac2454cf064a" mandator_id="d5a90a49-e697-4aeb-8a5b-298782815490" isSystem="False" name="Zeichenfolge #2" reportParameterType_id="f8132846-123e-4d89-b24c-ace5556039fa" queryParameterName="@string2" />
		<Parameter id="218a8c96-5721-4331-a731-c35ad2502efd" mandator_id="d5a90a49-e697-4aeb-8a5b-298782815490" isSystem="False" name="Zeichenfolge #3" reportParameterType_id="f8132846-123e-4d89-b24c-ace5556039fa" queryParameterName="@string3" />
		<Parameter id="77f04a4c-1f0e-4fb6-abad-68281ee871a7" mandator_id="d5a90a49-e697-4aeb-8a5b-298782815490" isSystem="False" name="Zeichenfolge #4" reportParameterType_id="f8132846-123e-4d89-b24c-ace5556039fa" queryParameterName="@string4" />
	</Parameters>
	<ParameterTypes>
		<ParameterType id="411ec93b-ab23-41ba-91d6-e7dc0235b5af" isSystem="True" name="Boolean" datatype="StringDDL" dataValueField="Value" dataTextField="Text">
			<query>
				SELECT 0 AS Value, 'Nein' AS Text
				UNION
				SELECT 1 AS Value, 'Ja' AS Text
			</query>
		</ParameterType>
		<ParameterType id="f8132846-123e-4d89-b24c-ace5556039fa" mandator_id="d5a90a49-e697-4aeb-8a5b-298782815490" isSystem="False" name="ELECT DataAnalytics SheetNames" datatype="StringDDL" dataValueField="Field" dataTextField="Field">
			<query>
				SELECT 'Completed' AS Field
				UNION ALL
				SELECT 'No Modules' AS Field
				UNION ALL
				SELECT 'Locations' AS Field
				UNION ALL
				SELECT 'Modules' AS Field
			</query>
		</ParameterType>
	</ParameterTypes>
</ReportsExport>