This is a continuation of my article from yesterday, where I showed how to take a preexisting SharePoint list and use it to create KPIs and from those a dashboard indicating a level of risk. The plus of the technique I used was that it was very easy to implement and required no changes to the list. But the algorithm was pretty naïve. It simply used the count of items (such as system changes or help desk tickets) in a given time period to indicate an arbitrary threat level.
Today while discussing it with my fellow director (I'm over app dev, he's over IT), we decided that it was in fact too simple, because not all changes are created equal. Some of our tickets are actually informational only and have no risk whatsoever ("Remember the new naming standard when standing up new servers.") Some changes have minimal impact ("I installed the Powershell feature on server foo.") And some are very wide-ranging and inherently risky ("I took the A/D domain into Windows 2008 mixed mode over the weekend.") Given that, we wanted to come up with a way to "weight" the list items and then have the dashboard use those weighted values to better indicate an overall risk level.
After some discussion we decided the requirements of the weighting scheme were:
- A "high" risk level item should immediately trigger a red stoplight for the day. In other words, if there is a high risk item performed, then at least the day's KPI should go to red.
- Lots of little changes can also end up adding up to a higher level of risk, just because a lot of variables, each seemingly low impact, are changing at once. So if a given number of low or medium items reached a given point score then the risk level would be raised.
- We felt that weekly and monthly risk levels were not "linear," i.e., they weren't gotten just by multiplying the daily limits by 7 and 30. The "change velocity" for a given day may be acceptable, but if the same number of changes were kept up over a week or a month then they represented a lot of change for that time period and deserved closer attention.
The following explains how I implemented the above. It presumes you read yesterday's article and isn't going to cover that ground again.
The first thing I did was modify the list by adding two columns. The first column was called Risk Level and I made it mandatory that the user had to fill it in. It is a "choice" column, which can be represented in SharePoint as a drop down. To create such a column:
- Navigate to your list.
- Click on Settings|List Settings.
- Under Columns click on Create column.
- Fill in a column name, such as Risk Level.
- Choose Choice for the column type.
- Fill in the Description field.
- Click Yes on Require that this column contains information.
- Enter your carriage return separated list of choices. I used Info - No Risk, Low, Medium and High.
- Set a default value. I chose Medium. Most changes in production have some risk.
- You can choose whether to add the column to the default view or not. I did.
- Click OK.
Here's a screenshot:
[Click on all images to enlarge.]
So now we have a nice, constrained set of options for the user to choose from. But our KPIs are going to need numbers to work with for weighting. So I created another column, called Risk Factor. It is a calculated column whose value will be determined by the value in Risk Level. To create it:
- Click on Create column again.
- Fill in the Name field. I chose Risk Factor.
- Choose Calculated as the type.
- Fill in the description.
- In the Formula field use something similar to the formula I give below.
- Indicate that the data type returned from the formula will be a number. Set the number of decimal places to 0.
- Choose whether to add it to the default view. I did not.
- Click OK.
The formula I used relies on SharePoint's IF function:
=IF([Risk Level]="None - Info Only", 0, IF([Risk Level]="Low", 1, IF([Risk Level]="Medium", 2, IF([Risk Level]="High", 8, 0))))
Basically that assigns a risk weighting of 0 to informational-only items (and unknown items via the inner-most embedded "else" value), 1 to low impact items, 2 to medium and 8 to highly risky items.
Here is the screenshot:
Then I changed the views. Yesterday I said you didn't need to care about what columns were in the time-based views you used to show the last day, week and month, but now you do because the view is going to have to include the risk weight (Risk Factor) so that the KPI can work with it. Therefore I altered all the time-based views to include both Risk Factor and Risk Level (the latter was not strictly needed, but it helped me confirm that Risk Factor was getting set appropriately based on Risk Level's value). Under List Settings click on each view in order and perform the following:
- Add Risk Factor and Risk Level as columns in the view.
- Click OK.
Obligatory screenshot follows:
Now we're ready to change our KPIs to use the Risk Factor column. Go to your KPI list and for each KPI hit the down arrow to get the context menu and choose Edit Properties and perform the following:
- Under Value Calculation change the radio button from Number of list items in the view to Calculation using all list items in the view.
- From the drop down for calculation type choose Sum.
- From the column drop down choose Risk Factor (in our list Risk Factor was the only numeric column, so it was the only column available here).
- Leave Better values are set to lower.
- Set your green light and warning level limits. See the table below for ours. Remember that these limits are for "less than," i.e., hitting the value changes the risk level.
- Click OK.
Screenshot:
Here are the limits we chose to start with:
| Risk Level | Green | Amber | Red |
| Past Day | <5 | <8 | >=8 |
| Past Week | <19 | <24 | >=24 |
| Past Month | <48 | <60 | >=60 |
Since we can easily change them at any time simply by editing the KPIs we're going to monitor for a while and tweak as we go. You don't want your dashboard to always be all green lights because that's misleading, and you don't want it to always be all red lights, either, because that just means everyone ignores them. So expect a bit of trial and error as you find the limits that realistically model your shop's risk level. We also decided that if an item was entered as low or medium impact and then actually ended up having a high impact after the change we are going to go and change the item's Risk Level after the fact so that it will be reflected in the dashboard for the day and more importantly the week and month KPIs.
We're almost done. Since we added those columns to the list, we have to populate the existing list items with them. I went to the list and chose the Action to edit it in datasheet view, which gives an Excel-like interface. I then quickly went through the rows and set the drop down for each item's Risk Level. The one warning I'd give about doing it this way is that if you have a lot of list items it's going to take someone a while to work through them all, so maybe you only want to make the changes to the last month's worth (since any before that won't show up on the KPIs anyway), and also if anyone has alerts set on the list to fire for each list item as it's changed they are going to get a lot of alerts. So you may want to remove alerts and then add them back after you're done.
Finally, here are the results on the dashboard on our department's home page:
I hope this will be useful to someone out there. We think it is going to be very helpful for us not just in monitoring risk on an ongoing basis, but also in scheduling when changes happen. For example, on a week that's already running amber or red we may choose to defer a major change until the following week, just to let everything stabilize first.










