﻿<?xml version="1.0" encoding="utf-8"?>
<ReportsExport>
  <Reports>
    <Report id="2e719425-52a5-460b-90ce-c22b6ee73025" codekey="Ressortbericht_Global" categoryCodekey="UserStats" name="Ressortbericht Global" description="Ein Report über alle Lerneinheiten, also Lernprogramme und Tests (auch ohne IDD-Zeiten)">
      <MetaData created="2019-12-09T19:50:05" createdBy="Albrecht, Administrator (Administrator)" createdBy_user_id="1" modified="2020-02-28T11:33:39" modifiedBy="Administrator, ERGO_e-Campus (Administrator)" modifiedBy_user_id="243" />
      <ExecutionDetails format="TableResult" commandType="SqlCommandOrQuery" exportHandler="" adminControl="" exportMultipleTablesToSheets="False" datesWithTime="False" extraParams="" />
      <Mandators mandatorMode="OnlyOwner" mandator_id="bfa70f6b-484c-49da-9ad7-1ccd8f0d684c" mandatorName="ERGO" isStandard="False" isUsedByMenu="False" />
      <Parameters>
        <Parameter id="19308b6b-d4fd-43a8-b8fc-68ac4606cd34" isRequired="True" allowMultiSelect="False" name="Einzelne Zielgruppe" contextName="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 = '2019-01-01'
		  --SET @dateRange_end = '2019-12-31'
		  --SET @distinctTargetGroup_id = 1231
		  DECLARE @item_id UNIQUEIDENTIFIER  -- = 'A89F2CD0-C081-433F-B87D-BC2B8D5151BD'-- '62235614-06F6-4FE8-919D-7BBD609FDC29'
		  SET @dateRange_end = DATEADD(DAY,1,@dateRange_end)
		  CREATE TABLE #users (user_id INT)
		  CREATE TABLE #hlpResult
		  (
		  item_id UNIQUEIDENTIFIER,
		  itemType_id INT,
		  totalUsers INT,
		  usersExecutedItem INT,
		  avgLearningDurationItem INT,
		  totalLearningDurationItem INT,
		  totalExecutionsItem INT,
		  greenStatuses INT,
		  yellowStatuses INT,
		  redStatuses INT
		  )

		  -- 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

		  WHERE itemType_id IN (0,1) AND ISNULL(@item_id,v_UsersAssignedItems.item_id) = v_UsersAssignedItems.item_id
		  )
		  INSERT INTO #hlpResult SELECT
		  item_id,
		  itemType_id,
		  (SELECT COUNT(*) FROM #users),
		  0,
		  0,
		  0,
		  0,
		  0,
		  0,
		  0
		  FROM
		  PotentialItems

		  -- 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

		  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
		  tblItems.title AS 'Baustein Titel',
		  types.title AS 'Baustein Typ',
		  #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'
		  FROM #hlpResult INNER JOIN tblItems ON tblItems.id = #hlpResult.item_id
		  INNER JOIN @itemMapping AS types ON types.id = tblItems.itemType_id
		  ORDER BY tblItems.itemType_id, tblItems.title

		  -- cleanup queries
		  DROP TABLE #hlpResult
		  DROP TABLE #users
	  </command>
    </Report>
  </Reports>
  <Parameters>
    <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="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>