LogoSupport Hub

Peak Employee by Location with Peak User Accounts Report

This report identifies peak employee counts by location and includes associated user account information, providing comprehensive workforce analysis across different organizational locations.

Overview

The Peak Employee by Location with Peak User Accounts Report analyzes the highest employee counts at each location during a specified time period, combining workforce data with user account information to provide a complete picture of organizational capacity and system usage.

Parameters

  • Date Range - Uses {mindate} and {maxdate} parameters for flexible date selection
  • Location Analysis - Groups results by workgroup/location
  • User Account Integration - Includes associated user account data
  • Peak Calculation - Identifies highest employee count per location

Report Output

The report provides the following information:

  • Location Information - Workgroup name and location details
  • Peak Employee Count - Maximum number of employees at each location
  • Peak Date - Date when the maximum employee count occurred
  • User Account Details - Associated user account information for peak employees
  • Employee List - Detailed list of employees at peak capacity

Technical Implementation

The script uses:

  • DAILYSTATE table for historical employee count tracking
  • EMPLOYEES table for employee and workgroup information
  • WORKGROUP2 table for location/workgroup names
  • Complex date parsing to identify peak employment periods
  • Temporary tables for data processing and aggregation
  • Window functions for peak identification within date ranges

T-SQL

peak_emp_by_location_with_peak_user_accounts.sql
SET NOCOUNT ON
SET ANSI_WARNINGS OFF

DECLARE @EMPLOYEES TABLE (FK INT, ACTIVEWORKGROUP INT)
DECLARE @ESSINFO TABLE (ESSCOUNT INT, WG int)  
DECLARE @WGINFO TABLE(WGNUM INT,WGNAME VARCHAR(300),EECOUNT INT, ESSCOUNT INT) 
DECLARE @USERS TABLE(USERID INT, AccType INT)

DECLARE
  @ITERATION SMALLINT,
  @COUNTER SMALLINT,
  @LENGTH SMALLINT,
  @CURRENTCHARACTER VARCHAR(1),
  @CURRENTVALUE VARCHAR(16),
  @INDEX SMALLINT,
  @STARTVALUE SMALLINT,
  @ENDVALUE SMALLINT,
  @START DATETIME,
  @END DATETIME,
  @ITEMTYPE SMALLINT,
  @STARTDATE DATETIME,
  @ENDDATE DATETIME,
  @EECOUNT INT,
  @HIGHDATE INT

SET @STARTDATE = '1/1/2023'
set @enddate = '1/31/2023'
/*

SET @STARTDATE ={mindate}
set @enddate = {maxdate}
*/
SET @ITERATION=1

WHILE (@ITERATION<=1)
BEGIN
IF @ITERATION=1
--************************************************************************************************************************************************
--Sets @Start and @END to the top (newest) EventDate inside of the search range. for example search range starts 4/1 and today is 4/13 is will come back with 4/13
--************************************************************************************************************************************************
BEGIN
	SET @ITEMTYPE=0
		SELECT TOP 1 
			@START = EVENTDATE
         FROM DAILYSTATE 
         WHERE (EVENTDATE >= @STARTDATE AND EVENTDATE <= @ENDDATE) AND ITEMTYPE = @ITEMTYPE
         GROUP BY EVENTDATE, INSTANCES
         ORDER BY INSTANCES DESC, EVENTDATE DESC
     SET @END = @START
END

--************************************************************************************************************************************************
--           Farse the filekey for the day out of REFDATA
--************************************************************************************************************************************************
  WHILE (@START <= @END)
      BEGIN
        SET @COUNTER = 0
        SELECT 
          @LENGTH = DATALENGTH(REFDATA) -- RefDATA appears to be a list of filekeys for the day.)
          FROM DAILYSTATE 
          WHERE EVENTDATE = @START AND ITEMTYPE = @ITEMTYPE
          SET @CURRENTVALUE = ''

        WHILE (@COUNTER <= @LENGTH)
          BEGIN
            SELECT @CURRENTCHARACTER = SUBSTRING(REFDATA, @COUNTER, 1) 
              FROM DAILYSTATE 
              WHERE EVENTDATE = @START AND ITEMTYPE = @ITEMTYPE
    
            IF @CURRENTCHARACTER != ',' SET @CURRENTVALUE = @CURRENTVALUE + @CURRENTCHARACTER

IF @CURRENTCHARACTER = ',' OR @COUNTER = @LENGTH
              BEGIN
                SET @INDEX = CHARINDEX(':', @CURRENTVALUE)
               
                IF @INDEX = 0 OR @INDEX IS NULL 
                  BEGIN
                    IF @ITEMTYPE = 0
                      INSERT INTO @EMPLOYEES VALUES (CONVERT(SMALLINT,@CURRENTVALUE), 0)          
               
                  END
        
 IF @INDEX > 0
                  BEGIN
                    SET @STARTVALUE = CONVERT(SMALLINT,LEFT(@CURRENTVALUE,@INDEX-1))
                    SET @ENDVALUE = CONVERT(SMALLINT,RIGHT(@CURRENTVALUE,LEN(@CURRENTVALUE)-@INDEX))
                                       
                    WHILE (@STARTVALUE <= @ENDVALUE)
                      BEGIN
                        IF @ITEMTYPE = 0
                          INSERT INTO @EMPLOYEES VALUES (@STARTVALUE, 0)
                       
             
                        SET @STARTVALUE = @STARTVALUE + 1
                      END
                  END
                
                IF @CURRENTCHARACTER = ',' SET @CURRENTVALUE = ''
              END
            SET @COUNTER = @COUNTER + 1
          END
        SET @START = DATEADD(DAY,1,@START)
      END      
    SET @ITERATION = @ITERATION + 1
  END
SET @START = DATEADD(DAY,-1,@START)


UPDATE @EMPLOYEES SET ACTIVEWORKGROUP=(SELECT WG1 FROM EMPLOYEES WHERE FILEKEY=FK AND WGEFFDATE<=@START)
UPDATE @EMPLOYEES SET ACTIVEWORKGROUP=(SELECT TOP 1 WG1 FROM EMPHOMEWGHIST WHERE FILEKEY=FK AND EFFDATE<=@START ORDER BY EFFDATE DESC)WHERE ACTIVEWORKGROUP IS NULL
UPDATE @EMPLOYEES SET ACTIVEWORKGROUP= (SELECT WG1 FROM EMPLOYEES WHERE FILEKEY=FK)WHERE ACTIVEWORKGROUP IS NULL

INSERT INTO @ESSINFO Select COUNT(DISTINCT EA.FILEKEY), e.ACTIVEWORKGROUP 
						FROM EMPLOYEEACTIVITY EA 
						Inner join @EMPLOYEES e on EA.filekey = e.FK
						WHERE EA.FILEKEY IN (SELECT fk FROM @EMPLOYEES) 
						group by e.ACTIVEWORKGROUP

INSERT INTO @WGINFO SELECT NULL,'Active Employee Count Per Location '+DATENAME(MONTH,@START)+' '+DATENAME(YEAR,@START),NULL,NULL

INSERT INTO @WGINFO SELECT NULL,NULL,NULL,NULL
INSERT INTO @WGINFO SELECT NULL,'Peak Employee Date'+' '+CONVERT(VARCHAR(10),@START,101),NULL,NULL
INSERT INTO @WGINFO SELECT NULL,NULL,NULL,NULL
INSERT INTO @WGINFO SELECT NULL,(Select 'Peak User Account: '+Convert(VARCHAR(10), MAX(Instances)) from DAILYSTATE where ITEMTYPE = 3 and EVENTDATE between @STARTDATE and @ENDDATE),null,null
INSERT INTO @WGINFO SELECT NULL,NULL,NULL,NULL
INSERT INTO @WGINFO SELECT DISTINCT WGNUM,NAME,NULL,NULL FROM WORKGROUP2 ORDER BY 2

UPDATE @WGINFO SET EECOUNT=(SELECT COUNT(*) FROM @EMPLOYEES WHERE ACTIVEWORKGROUP=WGNUM)WHERE WGNUM IS NOT NULL
UPDATE @WGINFO SET ESSCOUNT=(Select es.ESSCOUNT FROM @ESSINFO es WHERE es.WG=WGNUM)WHERE WGNUM IS NOT NULL 

INSERT INTO @WGINFO SELECT NULL,NULL,NULL,NULL
INSERT INTO @WGINFO SELECT NULL, 'TOTAL',(SELECT SUM(EECOUNT) FROM @WGINFO),(Select SUM(ESSCOUNT) from @WGINFO)

SELECT * FROM @WGINFO where (EECOUNT!=0 or EECOUNT IS NULL)

Common Use Cases

  • Capacity Planning - Understand maximum workforce capacity by location
  • Resource Allocation - Identify locations with highest staffing needs
  • System Planning - Plan user account requirements based on peak usage
  • Operational Analysis - Compare current staffing levels to historical peaks

Content Inventory

  • Doc File: content/docs/reports/system_information/peak_emp_by_location_with_peak_user_accounts.mdx
  • SQL Script: SQL/reports/system_information/peak_emp_by_location_with_peak_user_accounts.sql