How to develop reporting views using SSMS (SQL Server Management Server) and create and deploy the reporting view using the Colleague Application Presentation to NWEUG 2014 Presented by: Lewis-Clark State College Celeste McCormick, Sandra Boyd – IT Lewis-Clark State College Overview Founded 1893, public undergraduate college located in Lewiston, Idaho. Approx. 4500 enrolled students, 3000 FTE • Colleague users Administrators: 4 Power Users: 3 Report Writers/Runners: 40 Other users: ~150 What is a reporting view? What was once a QueryBuilder query using one table and many computed columns… What is a reporting view? …now requires joining data from all of these tables. What is a reporting view? IT can write a complex SQL query to perform the joins and incorporate all of the desired elements… What is a reporting view? into a “reporting view” that looks like a single table that report writers can query against: Identify users’ needs for reporting views • Identify the key report writers • Examine and assess their current slate of reports • Brainstorm future needs • List the Reporting Views that will be needed • Determine the columns to include in each view This is not an exact science. Each report writer will conceptualize this approach in a different way. Develop and test reporting views in SSMS (One record per address type for a person) Develop and test reporting views in SSMS (One record per address type for a person) Get help/ideas from delivered Ellucian views when developing your SQL code: Note : searching the internet on T-SQL is also a great resource Example: In SSMS, Right Click on dbo.PERSON_ADDRESSS_VIEW->Script View as->Create to->New Query Editor window: Separating out multi-part key fields: Example: dbo.STUDENT_TERMS_VIEW SELECT LEFT(STUDENT_TERMS_ID,CHARINDEX('*',STUDENT_TERMS_ID+'*')-1) as STTR_STUDENT, LEFT(SUBSTRING(STUDENT_TERMS_ID,(CHARINDEX('*',STUDENT_TERMS_ID+'*')+1),999), CHARINDEX('*',SUBSTRING(STUDENT_TERMS_ID, (CHARINDEX('*',STUDENT_TERMS_ID+'*')+1),999)+'*')-1) as STTR_TERM, LEFT(SUBSTRING(SUBSTRING(STUDENT_TERMS_ID, (CHARINDEX('*',STUDENT_TERMS_ID+'*')+1),999), (CHARINDEX('*',SUBSTRING(STUDENT_TERMS_ID,(CHARINDEX('*',STUDENT_TERMS_ID+'*')+1),999)+'*')+1),999), CHARINDEX('*',SUBSTRING(SUBSTRING(STUDENT_TERMS_ID,(CHARINDEX('*',STUDENT_TERMS_ID+'*')+1),999), (CHARINDEX('*',SUBSTRING(STUDENT_TERMS_ID, (CHARINDEX('*',STUDENT_TERMS_ID+'*')+1),999)+'*')+1),999)+'*')-1) as STTR_ACAD_LEVEL FROM dbo.STUDENT_TERMS WITH (NOLOCK) Sub-Select: Example: dbo.ADMISSIONS_VIEW SELECT APPL_APPLICANT, APPLICATIONS_ID, (Select LAST_NAME from PERSON WITH (NOLOCK) where ID = APPL_APPLICANT) AS LAST_NAME, (Select FIRST_NAME from PERSON WITH (NOLOCK) where ID = APPL_APPLICANT) AS FIRST_NAME, (Select MIDDLE_NAME from PERSON WITH (NOLOCK) where ID = APPL_APPLICANT) AS MIDDLE_NAME, (Select NICKNAME from PERSON WITH (NOLOCK) where ID = APPL_APPLICANT) AS NICKNAME, …. FROM APPLICATIONS as ap1 WITH (NOLOCK) WHERE APPL_APPLICANT IS NOT NULL ORDER by APPL_APPLICANT Case Statement: Example: dbo.STUDENT_ACAD_PROGRAMS_VIEW SELECT … CASE WHEN IS_FPER_ALIEN = 'Y' OR IS_ETHNIC_ALIEN = 'Y' OR IS_RACES_ALIEN = 'Y' THEN 'Non-Resident Alien' WHEN IS_HISPANIC = 'Y' THEN 'Hispanic/Latino' WHEN RACE_COUNT >= '2' THEN 'Two or More Races' WHEN RACE_MAX = '1' THEN 'American Indian' WHEN RACE_MAX = '2' THEN 'Asian' WHEN RACE_MAX = '3' THEN 'Black or African American' WHEN RACE_MAX = '4' THEN 'Hawaiian/Pacific Islander' WHEN RACE_MAX = '5' THEN 'White' ELSE 'Unknown' END AS IPEDS_RACE_ETHNIC_DESC, ... Concatenated _LS records: Example: dbo.L20_ADDR_PERSON_VIEW SELECT ... , STUFF((SELECT '; ' + PLS.PER_ETHNICS FROM PERSON_LS PLS WITH (NOLOCK) WHERE PLS.ID = p.ID FOR XML PATH ('')),1,2,'') AS 'PER_ETHNICS' ,STUFF((SELECT '; ' + PLS.PER_RACES FROM PERSON_LS PLS WITH (NOLOCK) WHERE PLS.ID = p.ID FOR XML PATH ('')),1,2,'') AS 'PER_RACES‘ … FROM ADDRESS_LS as al WITH (NOLOCK) inner join ADDRESS as a WITH (NOLOCK) On al.ADDRESS_ID = a.ADDRESS_ID inner join PERSON as p WITH (NOLOCK) On RESIDENTS = p.ID WHERE RESIDENTS IS NOT NULL Computed Columns -vs- T-SQL code Using Computed Columns will s..l..o..w reporting view. down your Use Computed Columns only if you are unable to use T-SQL code in place of the Computed Column, usually when a Computed Column calls a subroutine that cannot be rewritten in T-SQL due to the complexity. Examples: ,dbo.VW_S_CALC_AGE((select BIRTH_DATE from PERSON WITH (NOLOCK) where ID = STC.STC_PERSON_ID), GETDATE()) as 'AGE‘ ,dbo.STTR_ACTIVE_CRED(STUDENT_TERMS_ID) as 'STTR_ACTIVE_CRED‘ ,dbo.STTR_CUM_GPA(STUDENT_TERMS_ID) as 'STTR_CUM_GPA' Remember to use WITH (NOLOCK) on all FROM and JOIN statements: SELECT …. (SELECT CTRY_DESC FROM COUNTRIES WITH (NOLOCK) WHERE COUNTRIES_ID = CITIZENSHIP) AS 'CITIZENSHIP_DESC', (SELECT CTRY_DESC FROM COUNTRIES WITH (NOLOCK) WHERE COUNTRY = COUNTRIES_ID) AS 'COUNTRY_DESC‘ ….. FROM ADDRESS_LS as al WITH (NOLOCK) inner join ADDRESS as a WITH (NOLOCK) On al.ADDRESS_ID = a.ADDRESS_ID inner join PERSON as p WITH (NOLOCK) On RESIDENTS = p.ID WHERE RESIDENTS IS NOT NULL Create reporting views from UI (ESVS) See next slide for SQL Server script details if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[L20_ADDR_PERSON_VIEW]') and OBJECTPROPERTY(id, N'IsView') = 1) exec ('create view [dbo].[L20_ADDR_PERSON_VIEW] as select ''Error'' c1, ''encountered'' c2, ''when'' c3, ''creating'' c4, ''L20_ADDR_PERSON_VIEW'' c5'); &execute& ALTER view dbo.L20_ADDR_PERSON_VIEW as Select RESIDENTS as ID ,(SELECT ADDR_EFFECTIVE_END Select statement from PSEASON WITH (NOLOCK) from SSMS where PERSON_ADDRESSES = al.ADDRESS_ID and PSEASON.ID = p.ID) AS 'ADDR_EFFECTIVE_END‘ … &execute& Deploying reporting views from UI (DSVS) Confirm reporting view was successfully created via SSMS (remember to refresh Views first) Test reporting view in SSMS and MS Query SSMS: Right Click on dbo.L20_ADDR_PERSON_VIEW -> Select Top 1000 Rows Test reporting view in SSMS and MS Query MS Query: Add table L20_ADDR_PERSON_VIEW and run queries against it: Move reporting view to Colleague Test • If your view uses any computed columns, install those first! Otherwise the installation of your view will fail. • In Dev, create a savedlist that includes the name of the view: Move reporting view to Colleague Test CDEC in Dev: Create a custom declaration to include the savedlist Move reporting view to Colleague Test CPKG in Dev: Create a custom package to include the custom declaration Then in MSUG in Test, install the package in a group Create data dictionary of reporting view • The dictionary will aid the report writer in understanding what data the view can report • The dictionary also serves as a reference for IT in case future changes need to be made We are also documenting if a computed column is being used in the view. Have users test reporting view Testimonials: “A report that used to take me three hours to build now takes three minutes.” “I was able to send an email to 2700 students. I couldn’t have done without the reporting view.” You might need to make changes based on their feedback. Advantages of reporting views 1. Create and manage reporting views using the Colleague software 2. Can combine data from several tables 3. Users do not need to know SQL language to join tables, the view does it for the users Disadvantages of reporting views • Do I need to show the testimonials again? • Our disadvantages are mainly limited to the free reporting tools that we use (MS Query, MS Access) • MS Query: the window is not expandable nor user-friendly • MS Access: the reports are not easily publishable THE END … • Questions? • Contacts: • Celeste McCormick - cmmccormick@lcsc.edu • Sandra Boyd – saboyd@lcsc.edu