Overview
The list of tags may be created either manually in Student Success & Engagement (SS&E) or via the SIS Import/Person Datafeed. Tags can be assigned to a person in three ways: Automated Tags (assigned by SS&E system), Data-Backed Tags (assigned via SIS Import on personTag datafeed), and Manual Tags (assigned by an SS&E Administrator). This guide covers Data-Backed Tags. For more general information on Tags, see the Tagging section of the help center.
Tags in Implementation
In new implementations, two of these four data-backed tags (or sets of tags) are typically implemented as an example/template. Alternative tags may be considered on a case by case basis to meet project goals. In Design & Build, the System Admin and project team may determine that additional tags are needed, and the Data Lead may need to make adjustments throughout implementation and beyond.
Once the initial tags are implemented, the institution can replicate this process during and after implementation to continue importing additional tags into SS&E.
- Athletics
- Clubs
- Dean's List
- Academic Standing
Tag Related Feeds
The SIS Import Definitions outlines the import requirements for each of the following feeds.
-
tag
- This datafeed is optional as tags can be created in SS&E Admin. It is most useful when many tags are stored in the same table/file in the SIS, or when new tags need to be created dynamically over time (e.g. cohorts, clubs). If only a few tags will be used, it’s easier to create them in SS&E Admin > Tags.
-
personTag
- This datafeed is optional as tags can be assigned using Automated Tag Filters or manually in SS&E Admin.
- The tagId in this feed must match the tag integration id. This is either the id provided on the tag datafeed, or it is created along with the tag in SS&E. It is called the "Source System Id" on the tag in SS&E.
ER Diagram
Example Scenario
In this example, Olivia Student (0123456) runs track and cross country and should be tagged as an athlete as well as for each individual sport. Jonathan Student (0654321) was on the basketball team last year but is taking the year off.
tag
- SIS.TAG.ATHLETE, Athlete
- SIS.TAG.WTRACK, Women’s Track
- SIS.TAG.WXC, Women’s Cross Country
- SIS.TAG.MBASKETBALL, Men’s Basketball
personTag
- 0123456*SIS.TAG.ATHLETE, 0123456, active=true, SIS.TAG.ATHLETE
- 0123456*SIS.TAG.WTRACK, 0123456, active=true, SIS.TAG.WTRACK
- 0123456*SIS.TAG.WXC, 0123456, active=true, SIS.TAG.WXC
- 0654321*SIS.TAG.ATHLETE, 0654321, active=false, SIS.TAG.ATHLETE
- 0654321*SIS.TAG.MBASKETBALL, 0654321, active=false, SIS.TAG.MBASKETBALL
Tag Removal
If a personTag record might be removed in the future (most are), the personTag record must be imported as active=false. Because of this, it may be necessary to create a personTag record for each person in the data feed and for each tag, setting active=true for only those who should have the tag.
SQL Views/Queries
Because it is often necessary to create a personTag record for each person so that tags can be removed, it may be helpful to create the personTag feed by selecting from the Person list, and joining the tag data onto the person list. This allows for a case statement to set active=true when the person should have the tag, and active=false for everyone else in the person list who should not have it.
CSV Format Examples
When setting up personTag assignments using CSV files, sometimes it’s possible to create the file exactly matching the personTag SIS Import Definitions, but the CSVs can also be set up in different ways depending on how the data is available in the SIS. The Accelerate configuration can then transform the data into the SIS Import format. Examples can be found below. Most tags can fit into Options 1 or 2.
See the five CSV Format Options in the Data-Backed Tags article for more detail.
Option 1 - person_tag_athletes.csv
Anyone in this file will be tagged with the TAG.ATHLETE tag. Anyone who is not in this file will be marked active=false and the tag will be removed.
| personId |
| 0123456 |
| 0123457 |
Note: include column headers only if your other CSV files use headers.
Option 2 - person_tag_sports.csv
Anyone in this file will be tagged with the corresponding sports team tag. Anyone without a tag association will be marked active=false and the tag will be removed.
| personId | tagId |
| 0123456 | ATHLETE |
| 0123457 | WXC |
| 0123458 | ATHLETE |
| 0123458 | MBASKETBALL |
| 0123459 | WTRACK |
Note: include column headers only if your other CSV files use headers.
Option 3 - person_tag_sports.csv
Anyone in this file with a true value will be tagged with the corresponding sports team tag. Anyone with a false value will be marked active=false and the tag will be removed.
| personId | active | tagId |
| 0123456 | true | ATHLETE |
| 0123457 | true | WXC |
| 0123458 | false | ATHLETE |
| 0123458 | false | MBASKETBALL |
| 0123459 | false | WTRACK |
| 0654321 | true | ATHLETE |
Note: include column headers only if your other CSV files use headers.
Option 4 - person_tag_sports.csv
If today is between the start and end dates, the person will be tagged with the corresponding sports team tag. Anyone who is not in this file OR if today is outside the start and end dates will be marked active=false and the tag will be removed.
| personId | startDate | endDate | tagId |
| 0123456 | 2025-08-01T05:00:00+0000 | ATHLETE | |
| 0123456 | 2025-08-01T05:00:00+0000 | WXC | |
| 0123456 | 2025-08-01T05:00:00+0000 | WTRACK | |
| 0654321 | 2024-08-01T05:00:00+0000 | 2025-06-01T05:00:00+0000 | MBASKETBALL |
| 0654321 | 2024-08-01T05:00:00+0000 | 2025-06-01T05:00:00+0000 | ATHLETE |
Note: include column headers only if your other CSV files use headers.
Option 5
See personTag format above.
Accelerate Configuration
When using the CSV Method, the Accelerate configuration must be updated to accept the person_tag.csv files. Here are examples corresponding to the CSV options above:
Option 1
select
'SIS.TAG.ATHLETE.' || p.COLUMNS[0] as id,
p.COLUMNS[0] as personId,
case
when nullif(pta.COLUMNS[0], '') is not null then 'true'
else 'false'
end as active,
'SIS.TAG.ATHLETE' as tagId
from dfs.root.`person.csv` p
left outer join dfs.root.`person_tag_athletes.csv` pta on p.COLUMNS[0] = pta.COLUMNS[0]Option 2
select
concat('SIS.TAG.', t.tagId, '.', p.COLUMNS[0]) as id,
p.COLUMNS[0] as personId,
case
when pts.COLUMNS[0] is not null then 'true'
else 'false'
end as active,
concat('SIS.TAG.', t.tagId) as tagId
from dfs.root.`person.csv` p
cross join (select distinct COLUMNS[1] as tagId from dfs.root.`person_tag_sports.csv`) t
left outer join dfs.root.`person_tag_sports.csv` pts on pts.COLUMNS[0] = p.COLUMNS[0] and pts.COLUMNS[1] = t.tagIdOption 3
select
concat('SIS.TAG.', t.tagId, '.', p.COLUMNS[0]) as id,
p.COLUMNS[0] as personId,
case
when pts.COLUMNS[1] = 'true' then 'true'
else 'false'
end as active,
concat('SIS.TAG.', t.tagId) as tagId
from dfs.root.`person.csv` p
cross join (select distinct COLUMNS[2] as tagId from dfs.root.`person_tag_sports.csv`) t
left outer join dfs.root.`person_tag_sports.csv` pts on pts.COLUMNS[0] = p.COLUMNS[0] and pts.COLUMNS[2] = t.tagIdOption 4
select
concat('SIS.TAG.', t.tagId, '.', p.COLUMNS[0]) as id,
p.COLUMNS[0] as personId,
case
when CURRENT_DATE >= cast(pts.COLUMNS[1] as date)
and (CURRENT_DATE <= cast(pts.COLUMNS[2] as date) or nullif(pts.COLUMNS[2],'') is null) then 'true'
else 'false'
end as active,
concat('SIS.TAG.', t.tagId) as tagId
from dfs.root.`person.csv` p
cross join (select distinct COLUMNS[3] as tagId from dfs.root.`person_tag_sports.csv`) t
left outer join dfs.root.`person_tag_sports.csv` pts on pts.COLUMNS[0] = p.COLUMNS[0] and pts.COLUMNS[3] = t.tagIdOption 5
select
COLUMNS[0] as id,
COLUMNS[1] as personId,
COLUMNS[2] as active,
COLUMNS[3] as tagId
from dfs.root.`person_tag.csv`Adding Tags After Implementation
- When creating new personTags using SQL Views, ensure that the Accelerate Configuration (SS&E Admin > SIS Integration > Accelerate Configuration) includes the new personTag view name (if a new view was created).
- When creating new personTags using the CSV Method, ensure that the Accelerate Configuration (SS&E Admin > SIS Integration > Accelerate Configuration) includes a query to pull the file.
For Technical Services Assistance with either of these, a Medium Technical Project can be requested from the Watermark Academy.
Troubleshooting
CSV Method Connect2 Errors
Error: UNSUPPORTED_OPERATION ERROR: This query cannot be planned possibly due to either a cartesian join or an inequality join. If a cartesian or inequality join is used intentionally, set the option 'planner.enable_nljoin_for_scalar_only' to false and try again.
Solution: This error occurs when using a query with cross joins. Update Apache Drill settings to allow cross joins:
- On the Connect Server, open a browser and go to http://localhost:8047
- Navigate to the Options tab.
- Search for:
planner.enable_nljoin_for_scalar_only - Change it from
truetofalse. - Click the Update button next to it to save the change.
Additional Information
Additional resources related to tags in SS&E can be found here.