This version of the Ed-Fi Dashboards is no longer supported. See the Ed-Fi Technology Version Index for a link to the latest version.
Dynamic Watch List Feature
- Itzel Torres
- Albert Ntiri
- Lisa Filemyr (Unlicensed)
Overview
The Dynamic Watch List feature is available for teachers who wish to view a listing of their students who meet selected conditions. It is similar to the standard watch list in that it produces a listing of the students and their information. However, the process of selecting students is different. While the standard watch list is created by the teacher’s explicit selection of students to put onto the list, the Dynamic Watch List is created as a result of filters that are applied to the teacher’s listing of students. These filters are selected by the teacher and dynamically produce a listing of students who meet the selected criteria. This feature was introduced in v1.3 of the Ed-Fi Dashboards.
Using the Dynamic Watch List
This section provides detail on creating, editing, and sharing Dynamic Watch Lists in the Ed-Fi Dashboards.
Creating a Dynamic Watch List
The following is a set of step-by-step instructions for using the Dynamic Watch List feature in the dashboard UI. This walkthrough uses the Grand Bend ISD sample dataset distributed with the Ed-Fi Dashboard code.
Step 1. Log into the Grand Bend ISD as Trent Newton (a Mathematics Teacher at Grand Bend High School). You should land on a page similar to the one below:
Step 2. Click on the “Customize View” button. The following submenu appears:
Click on the “Create Dynamic List” button. The Dynamic Watch List Configuration screen appears:
Step 3. At this point you are ready to start configuring your Dynamic Watch List. The first step is to change the name of the Dynamic Watch List to something more meaningful. Click the “Change Name” button and enter a new name for your Dynamic Watch List. The Change Name screen appears:
Once you have selected a new name, click the “OK” button, which will return you to the main configuration screen.
Step 4. For this exercise you will be creating a list for male, 11th grade students, with Reading Assessments scores >40% and <75% correct. Select the appropriate filter criteria (“Male,” “11th Grade”) from the “Student Information” tab.
As you select filter criteria, the student list will refresh applying the new criteria and the selected filters will be listed in the area above the “Save” and “Change Name” buttons.
Step 5. Once the “Student Information” filters have been selected, navigate to the “Assessments” tab.
On this tab, enter filter criteria for “Reading” to be “>40% and <75% Correct” and click the “Save” button. The page will refresh and the new Dynamic Watch List will be present and selected in the “Student List” drop-down list:
The Dynamic Watch List is ready to be used.
Editing a Dynamic Watch List
To edit a Dynamic Watch List, make sure that the list is selected in the drop-down “Student List,” then click Customize View. The “Create Dynamic List” button will be replaced with a “Show Dynamic List” button. Click Show Dynamic List to edit your list.
Note that while editing your list, you also have the option to delete it. While in edit mode, click the “Customize View” button again. A “Delete Dynamic List” button appears that will perform the delete.
Sharing a Dynamic Watch List
You can share a Dynamic Watch Lists so other educators can use the same filters. You can allow a Dynamic Watch List to be shared as you are creating or editing the list. Check the “Share Dynamic List” check box and then save the Dynamic Watch List.
Once you have shared a Dynamic Watch List, other educators can search for it and create a copy of it for their use. To search for a shared Dynamic Watch List, select the “Customize View” menu and then click Shared List Search.
The following screen appears:
On the “Shared List Search” page, you will be presented with a drop-down list of staff members and their shared Dynamic Watch Lists. When you select a Dynamic Watch List you will see its description and the filters it contains.
To add the Dynamic Watch List to your account, click the “Add Dynamic List” button. This action will create a copy of the shared Dynamic Watch List complete with filters to your staff account. Since the new Dynamic Watch List is a copy, you could then modify the selected filters without having those changes propagate to the original shared Dynamic Watch List.
What's New in 1.3.2
The 1.3.2 dashboard contains a number of changes that improve the student list functionality. The code was reorganized to make it more extensible, customizable, and consistent. Additionally, the security was fixed so that users now have access to all the pages that are applicable to them.
Regarding dynamic lists, if a user creates a dynamic list from the Students by Demographic or Students by Grade tab, the new lists will be stored there. If the user selects that list from the My Student Lists page, they will be directed to the page where the list was created. Also, the default list shown on the My Student Lists tab at the district level is now ‘All Students’. Users still have the option of selecting any customized list they have created at the district level.
The dynamic list functionality was also improved at the district level so when a new list is created, a new drop down option is created for that list. Also, the export all functionality is now fixed and all buttons in the ‘customize view’ option are correctly displaying in the grey box.
Lastly, the filtering issue in production causing the application to hang was fixed. This affects instances when the load balancer is used.
Related JIRA Tickets:
Technical Overview
Current Version
The Dynamic Watch List feature uses a series of LINQ statements to build lists. These LINQ statements are executed in the StudentMetricsProvider class. This class can be found under EdFi.Dashboards.Resources and is responsible for building the dataset required by a Dynamic Watch List. Worth noting is that this class also builds the standard student lists displayed throughout the dashboard.
public IQueryable<EnhancedStudentInformation> GetOrderedStudentList(StudentMetricsProviderQueryOptions providerQueryOptions, MetadataColumn sortColumn = null, string sortDirection = "", int? schoolMetricStudentListMetricId = null) { var query = ApplyQueryOptionsAndSecurity(EnhancedStudentInformationRepository.GetAll(), providerQueryOptions); return SortStudents(query, sortColumn, sortDirection, schoolMetricStudentListMetricId); }
A view called “domain.EnhancedStudentInformation” presents a unified return type for the methods in the StudentMetricsProvider class.
CREATE VIEW [domain].[EnhancedStudentInformation] AS SELECT [StudentInformation].[StudentUSI], [StudentInformation].[LastSurname], [StudentInformation].[FirstName], [StudentInformation].[MiddleName], [StudentInformation].[FullName], [StudentInformation].[ProfileThumbnail], [StudentInformation].[Gender], [StudentInformation].[Race], [StudentInformation].[HispanicLatinoEthnicity], [StudentSchoolInformation].[SchoolId], [StudentSchoolInformation].[GradeLevel], CASE [StudentSchoolInformation].[GradeLevel] WHEN '1st Grade' THEN 1 WHEN '2nd Grade' THEN 2 WHEN '3rd Grade' THEN 3 WHEN '4th Grade' THEN 4 WHEN '5th Grade' THEN 5 WHEN '6th Grade' THEN 6 WHEN '7th Grade' THEN 7 WHEN '8th Grade' THEN 8 WHEN '9th Grade' THEN 9 WHEN '10th Grade' THEN 10 WHEN '11th Grade' THEN 11 WHEN '12th Grade' THEN 12 WHEN 'Postsecondary' THEN 13 WHEN 'Early Education' THEN -3 WHEN 'Infant/toddler' THEN -2 WHEN 'Preschool/Prekindergarten' THEN -1 WHEN 'Transitional Kindergarten' THEN 0 WHEN 'Kindergarten' THEN 0 WHEN 'Ungraded' THEN 14 ELSE 15 END AS [GradeLevelSortOrder], [StudentSchoolInformation].[LateEnrollment], [SchoolInformation].[Name] AS SchoolName, [SchoolInformation].[SchoolCategory], [SchoolInformation].[LocalEducationAgencyId] FROM [domain].[StudentInformation] INNER JOIN [domain].[StudentSchoolInformation] ON ([StudentInformation].[StudentUSI] = [StudentSchoolInformation].[StudentUSI]) INNER JOIN [domain].[SchoolInformation] ON ([StudentSchoolInformation].[SchoolId] = [SchoolInformation].[SchoolId]) GO
The Dynamic Watch List code then leverages this new StudentMetricProvider by defining additional filters that can be applied to the LINQ statements returning the student list data.
The UI elements of the Dynamic Watch List start with the EdFiGrid and EdFiGridMetricsBasedWatchList views. The EdFiGrid view defines the "Customize View" menu DIVs in which the EdFiGridMetricsBasedWatchList view is rendered.
The MetricsBasedWatchListDataProvider provides the view model that is passed to the EdFiGridMetricsBasedWatchList view. The provider constructs the filter options with a series of tabs and columns, which are provided to it by the TabFactory. The TabFactory defines the column construction, which creates a MetricsBasedWatchListTab object.
The data interactions of the feature are governed by the MetricBasedWatchListService class. This class is responsible for taking the user selections and saving, updating, or deleting the new Dynamic Watch List.
Each Dynamic Watch List is saved in the Ed-Fi Application data store in three tables. The tables, along with data corresponding to the example list above, appear as:
MetricsBasedWatchList
Id | StaffUSI | EducationOrganizationId | WatchListName | WatchListDescription | IsWatchListShared |
---|---|---|---|---|---|
1 | 207247 | 255901001 | Sample List | A sample watch list. | FALSE |
MetricBasedWatchListOption
MetricBasedWatchListOptionId | MetricBasedWatchListId | Name | Value |
---|---|---|---|
1 | 1 | StaffUSI | 207270 |
2 | 1 | SchoolId | 255901001 |
3 | 1 | LocalEducationAgencyId | 255901 |
4 | 1 | PageController | GeneralOverview |
MetricBasedWatchListSelectedOption
MetricBasedWatchListSelectedOptionId | MetricBasedWatchListId | Name | Value |
---|---|---|---|
1 | 1 | gender | male |
2 | 1 | grade | 11th Grade |
3 | 1 | assessment-1232 | 40-to-75 |
These options correspond to the example above of all males in the 11th grade who have “Reading” assessment to be “>40% and <75% Correct”.
The diagram below shows the relationships between the three tables.
Upgrading from Dashboard Code v1.2 and Earlier
The StudentList database view has been removed as of Dashboards v1.3. When using it you will need to remove the code for any extension.StudentList views and the post-load steps that materialize them.
- If the extension was present solely to display additional metrics, those metrics should now be present without requiring an extension.
- For nonmetric columns, the extension will have to re-extend the code to support those new columns.
- All PagingProviders have been removed as of Dashboards v1.3 (StudentDemographicPagingProvider, StudentGradeListPagingProvider, StudentListPagingProvider, StudentMetricPagingProvider, StudentSchoolCategoryListPagingProvider).
- When using it you will need to remove the code for any extension PagingProviders and, if needed, re-extend the Metrics-based Watch List for the extension functionality.
Upgrading from Dashboard Code v1.3, v1.3.0.1, v.1.3.1
The MetricsBasedWatchListTabsProvider has been removed as of Dashboards v1.3.2 and replaced with TabFactory.
- Any code for extensions of the MetricsBasedWatchListTabsProvider will need to be removed and the TabFactory extended as needed.
- In the ListMetadataProvider, a UniqueIdentifier of -7(SpecialMetricVariantSortingIds.SchoolMetricStudentList) has been added to remove the ambiguity between -4 (Designations) and StudentMetricStudentList value. Previously, -4 (Designations, was used for both of these cases).
- Everywhere where -4 (Designations) was used to represent the StudentMetricStudentList case, the UniqueIdentifer was switched to -7.
- To fix in extensions, search in all extended ListMetatdataProviders for "Metric Value" and change the value for UniqueIdentifier and MetricVariantId to SpecialMetricVariantSortingIds.SchoolMetricStudentList.
- If an implementation is using DatabaseListMetadataProvider, the source data needs to be changed to -7 in cases where it currently has a value of -4 and is in the StudentMetricStudentList case.