My requirement:

SharePoint 2007.

I would like to present a "dashboard" view, that displays line-items for particular metrics, each with an indicator displaying a summary score for that metric.

The summary needs to "grade" the score as either:

  1. "Expected achieved" (blue tick icon)
  2. "Minimum achieved" (with green icon)
  3. "Significant minimum achieved" (with amber icon)
  4. "Failed" (with red icon).

What I've tried:

I'm using a KPI List, and have created individual items of type Indicator using manually entered information (as at this stage, I have a finite list of KPIs we need to present as a proof-of-concept dashboard - down the track I would hope to link this to another datasource eg excel sheet, other list, or SSAS).

This OOTB solution offers three indications, Goal (with a threshold), Warning (with a threshold) and Otherwise (representing failure, when none of the other thresholds have been reached).

This seems like an ideal starting point for me, so long as I'm able to

  • add an an additional threshold level (as I need 4 distinct categories, not just 3), and

  • rename the existing threshold levels (Goal, Warning, and Otherwise aren't "appropriate" in my scenario)

I've have not been able to "reverse engineer" how this solution hangs together by looking at the content type definition or the column definitions, in order to recreate/extend it. (It looks like the "work" is being done in a KpiListWebPart and a ListViewWebPart and I don't know how to go about "looking inside" these, or even whether or not that's where I should be looking!).

My questions:

Am I able to customise/extend the existing solution (eg the content type, columns, the KPIListViewPage.aspx page, etc) to achieve this? In which case what tool/mechanism do you recommend I employ to achieve this?

Or do I need to start from "scratch" (eg with a custom content type of my own, or something else)?


I'm very much a beginner with SP (if that's not already evident!) and I simply stumbled across the KPI List while googling this. So please don't assume I've already discounted any other approaches. ie if there's something better/obvious I should be doing, please suggest it!

I am a capable .NET developer, but have never delved into customizing SP at the "code level". If that's what's required, happy to have a crack at it but right now I'm stumped because according to the KPIListWebPart class documentation:

This class and its members are reserved for internal use and are not intended to be used in your code

Your time and advice is greatly appreciated.

  • The KPIListWebPart is the display for the list, not the real meat behind the list. Oct 15, 2012 at 14:22
  • @rjcup3 So where should I be looking for the real meat? But am I not interested in the display aspect too, given I'm looking for a mechanism to display the KPIs differently?
    – Sepster
    Oct 15, 2012 at 23:21
  • The truth lies somewhere in the Xml. I've been looking into this, mostly out of curiosity, but I haven't found anything yet online about adding more than the third level. That's the part I'm really focusing on because that's the make or break point. I've got 6 days to get you an answer. Oct 16, 2012 at 2:26
  • Let me note, it might not be in the Xml. That's just a hunch. Oct 16, 2012 at 2:48
  • Your help much appreciated mate! ;-) Looking forward to hearing what you come up with. Note, if your findings aren't fruitful, I'd at the least upvote any answer that describes to other people what you've tried (and why you tried it), but that didn't work (and why it didn't work).
    – Sepster
    Oct 16, 2012 at 6:39

4 Answers 4


You may try instead of kpi to use and xml list view with an xsl tranform



I had a project that was heading down this path but was cancelled before I really got to write the xslt. These previous conversations may point you down a path to success though.

Update 10/19 here is a nice write up:


Not my work, but if I were to do it again, I would follow his instructions.

  • +1 This looks like a very flexible solution, thanks! NB the johnsworkshop write-up is for 2010 - but there's a number of valuable links referenced there for 2007, eg msdn.microsoft.com/en-us/library/cc300164(v=office.12).aspx
    – Sepster
    Oct 22, 2012 at 0:24
  • 1
    This looks to me to be the "right" way to do what I'm trying to achieve, OOTB. I'll have a crack at this tomorrow and advise.
    – Sepster
    Oct 22, 2012 at 8:35
  • And the bounty goes to... @ghangas! I'm working through this now... haven't finished, but it seems clear to me that while it's a little more leg work (as I'm not proficient with XSLT at this stage), this is the way I should be doing this. Thanks again.
    – Sepster
    Oct 23, 2012 at 0:38

My experience with modification like this, with custom code in calculated columns for color coding, highlighting or progress bars rendering are really bad. Even if they works, cannot be later migrated to SP2010 (or 13) and believe me, I had a serious headache when I must recreate all of them from scratch. We solved this issue by 3rd party tool Pentalogic Highlighter, no custom scripts, code and modifications are needed. It brings just a new type of column, it is simple, fast & clean. Small preview what you can do:

enter image description here

Color columns, rows or text inside rows, icons, progress bars and countdowns...

For the record: I'm not working for Pentalogic

  • +1 This looks promising, thanks. I've asked the powers-that-be if they're willing to run a 3rd party control.
    – Sepster
    Oct 21, 2012 at 23:59
  • If not, consider one thing - they will raise this issue after migration again. If you have just one list, no problem. We have nearly sixty of them :o)
    – Molik
    Oct 22, 2012 at 7:06
  • Thanks so much for your help, I really appreciate the input. At this stage we're just working with the one list, but if this changes, I'll be sure to look into this product.
    – Sepster
    Oct 23, 2012 at 0:40

Based on the blog post http://sarahlhaase.wordpress.com/2012/06/06/using-calculated-columns-to-add-color-coding-to-your-sharepoint-lists/ I've created a solution which is 100% configurable and automatic.

0: Create a custom list (MyList)

1: Add lookup column (MyPicturesTitle)

enter image description here

2: Add Calculated Column (X) with content :

="<div class='LookupPicture' id='MyList:"&Title&":MyPictures:MyPicturesTitle' />"
  • MyList is the name from the list
  • Title is the from from the column for the lookup list
  • MyPictures is the name from the lookup list (with pictures)
  • MyPicturesTitle is the name form the lookup column in the base list (MyList)

enter image description here

3: Add the 'Text to Html' web part to the MyList page

4: Add a content editor web part to the MyList page and reference the pictures.html
Download pictures.html here.

(Make sure all the javascripts used in that html file are found)

5: The result is enter image description here

  • +1 Took me a while to understand what this offered above @Drew-Lanclos's answer (aside from your awesome instructions, thanks!). But now I get it! ;-)
    – Sepster
    Oct 22, 2012 at 8:04
  • It seems I'm not (without significant red tape) able to add new web parts to the site, so instead I used a CEWP for the 'Text To HTML' component - which otherwise seems fine. But then the pictures.html file doesn't seem to be working for me; the image is not being rendered. I suspect the .js files are not being loaded. Is there any reason why I couldn't/shouldn't include that js in script tags within the pictures html, to keep it all self-contained (or are these .js files meant to be available in the SP build somewhere already)?
    – Sepster
    Oct 22, 2012 at 8:05
  • Also, say I'd use your lookup mechanism to select which image will be displayed for each of the 4 KPI thresholds (eg in future may have a number of different themed sets of icons from which to choose each status icon). But apparently I'm not able to use lookup values in the calculated column (where I need to check if the "score" column is over a certain "threshold" column, in order to select the correct status icon). Is there a suitable workaround that would make the lookup value available in the calculated column?
    – Sepster
    Oct 22, 2012 at 8:27
  • Thanks so much for your help, I learned a lot as a result of your input. Wish I could accept more than 1 answer, as this was really helpful to me.
    – Sepster
    Oct 23, 2012 at 0:39

I tried looking into this for a while before we just purchased a 3rd party add-on to do what we required, but one of the potential solutions I found was this:




It's not the most airtight way to do it as opposed to overriding the column control, but this accomplishes the business goal in a way that costs no money and can be implemented quickly and expanded upon for other uses.

  • +1 Thanks for the suggestion. Will explore this later today.
    – Sepster
    Oct 22, 2012 at 0:12
  • FYI had a look at this approach today, and it works and was straightforward, thanks. Am still going to explore the other answers here though, as Stef's adds a bit of "framework" around this approach (if I can get it to work), while @ghangas's looks like the "right" OOTB way to do it.
    – Sepster
    Oct 22, 2012 at 8:17
  • Thanks so much for your help. I wish I could accept more than 1 answer, as this was really helpful to me and was clearly an acceptable answer (I was able to implement it to meet the requirements of my question, with little fuss). But I went with the DataViewWebPart solution, because it seems more elegant (to me) to do the legwork on the server-side, rather than relying on client-side scripting. But not without quite a lot of internal debate, as your answer was the least complex solution that met my requirements. Thanks so much for your input, I do really appreciate your time and effort.
    – Sepster
    Oct 23, 2012 at 0:45
  • No worries, happy to help. Good luck! Oct 23, 2012 at 20:47

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.