If you need dynamically generated visualizations for your SharePoint data, have you considered leveraging the power of the Calculated Column? This Tuesday at 1:00pm EST, Mark Miller and I will give you all the keys to master this simple yet powerful technique. At the end of the two hour entry level workshop, you’ll be able to add color coding, KPIs and other effects – like the one described in this post – to your SharePoint lists.
Green/Yellow/Red is a standard color palette for dashboards. You can just use 3 colors to visualize discrete states, for example the status of a project (on track – drifting – late). But if your purpose is to communicate progress, or a measure on a scale, you need a larger color palette. This is for example the case in my screenshot, where the color reflects the level of completion (in %), in a tasks list.
So, how can I do this in SharePoint? Of course, my plan is to use a calculated column that will determine the color, based on the value in the [% Completed] column.
Method 1: nested IFs
This is the most basic approach:
if [% Completed]>90, select green
else if [% Completed]>80, etc.
I am not going to detail it, as we can do much better.
Method 2: CHOOSE function
The CHOOSE function is more elegant than nested IFs, and is a natural choice when dealing with multiple options. You’ll find all the explanations to achieve a color gradient in this post.
Method 3: pure calculation
So, how can we go even further? Well, colors can be identified by their name, but also by their rgb code, as each color can be generated from a combination of red, green and blue. For example:
red: rgb(255,0,0)
green: rgb(0,255,0)
blue: rgb(0,0,255)
yellow: rgb(255,255,0)
white: rgb(255,255,255)
Using these values, we can “easily” create our red/yellow/green gradient:
rgb(255,0,0) –> rgb(255,255,0) –> rgb(0,255,0)
The following formula, entered in a calculated column, will give you the rgb value for each value of the [% Completed] column:
=”rgb(“&INT(MIN(510-[% Complete]*255*2,255))&”,”&INT(MIN([% Complete]*255*2,255))&”,0)”
To obtain the visual effect as in the screenshot, use the HTML Calculated Column method, with the following formula:
="<span style='display:inline-block;position:relative; width:60px; height:14px;border:1px solid;'><span style='display:inline-block;position:relative;background-color:rgb("&INT(MIN(510-[% Complete]*255*2,255))&","&INT(MIN([% Complete]*255*2,255))&",0); width:"&([% Complete]*100)&"%;height:14px;'><span style='position:absolute; top:0px;'> "&TEXT([% Complete],"0%")&"</span></span></span>"
Note that the method works in both SharePoint 2003 and 2007.
Pingback: uberVU - social comments
Pingback: Visualizing Information in SharePoint: Demo 04 – Three Resources | End User SharePoint
Hi – Loved the class and was able to use TWO of the ideas within hours after the class was over.
I used the Gradient on one of our sites to show % complete. My PMO asked if we could adapt this for tracking % of budget.. Well, that’s good, except budgets tend go over 100%.
The PMO manager said she would be satisified if the box just shows 100%+ and a differnt (bright) color. I’d like to show the actual value (eg: 125%) in the box.
Any ideas for how to best address this? Thanks.
Thanks Wanda. good to see you can leverage what we did in the workshop.
First, you need to set up your business rules: what exactly do you expect to happen when you go over 100%? What would be the extreme value? When do you turn yellow or red?
Pingback: HTML Calculated Column and Unicode Graphics « Path to SharePoint
Wow, great stuff. I was able to implement a color background on one list but had no luck with the gradient on a task list.
The calculated column formula returns a syntax error: “The formula contains a syntax error or is not supported.”
I am using this in a SP 2003 Task List and it does have a “% Complete” column.
=”rgb(“&INT(MIN(510-[% Complete]*255*2,255))&”,”&INT(MIN([% Complete]*255*2,255))&”,0)”
Has this been an issue for others?
Hi Robert,
I had the same problem and found a way to make it work.
Try these following options :
– If your SP2003 is not in English, try to translate it into the correct language (I had to translate into French)
– Within the formula, use a ; instead of a , it worked for me.
I have a column called “Open Days” for which I need to calculate a risk indicator which need to return a background color to indicate risk. Dending on the impact level it needs to return different values and therefore colors.
Impact High 9=red otherwise orange
Impact Medium 14=red otherwise orange
Impact Low 19=red otherwise orange
So depending on the impact it needs to return color gradient as per each impact. I tried to do this with IF and INT but no success.
thanks
Great tip, works beautifully except when I print the screen it does not print the progress bar in colour. Any ideas what is causing this?
Keep up the great work
This is the expected behavior. If you need to print, you can change the print settings of your browser to include backgrounds. Or check some of my other progress bar posts that use a technique other than background color.
Chris
Would this work on SharePoint 2010…? I tried but did not work do i missing but what script i need on CQWP…?
I too am having trouble getting this to work with 2010 – worked perfectly with 2007. i’ve tried all 4 of the difference series and nothing works.
There’s a number of workarounds posted on my blog. Your best bet is this article:
https://blog.pathtosharepoint.com/2010/06/16/html-calculated-column-solutions-for-sp-2010-part-iv/
Expect more updates on this topic later this year.
Pingback: Security concerns with the HTML Calculated Column « Path to SharePoint
Pingback: Trick or Treat? Text to html, the wicked no-code way « Path to SharePoint
Pingback: Trick or Treat? Text to html, the wicked no-code way (Part II) « Path to SharePoint
Hi Christophe,
Thanks for the formula.
What is the Javascript for this visualization to work?
I have tried the Java code in the link below but it doesn’t seems to work for this visualization. I do not have any technical knowledge and hence no idea how Javascript is written.
Would anyone be able to help?
https://blog.pathtosharepoint.com/2008/09/01/using-calculated-columns-to-write-html/
Many thanks,
LAY
Problem solved. The script from the link works well.
https://blog.pathtosharepoint.com/2010/06/16/html-calculated-column-solutions-for-sp-2010-part-iv/
Big thanks for your tutorial.