Create Interactive User Experiences Quickly and Easily with Silverlight Pivot Viewer

The Appleton Compassion Project, a recent charity project Skyline has completed, takes advantage of a great tool in the Microsoft toolset that few people know is out there, the Silverlight Pivot Viewer. Unfortunately, Microsoft has quite a few things named Pivot so you may find this confusing. Pivot Viewer is NOT:

  • PowerPivot- This is an Excel tool that allows you to manipulate A LOT of data
  • Excel Pivot - This is your day to day Excel pivot The Silverlight Pivot Viewer IS a tool that allow developers to quickly create an engaging and interactive data driven experience. To get an idea of what I'm talking about, check out the Appleton Compassion Project Virtual Exhibit.

This online exhibit contains over 10,000 pieces of art done by students at dozens of different schools. You can see how site visitors can quickly click a school or a grade and narrow down the art that is displayed. Clicking an image will show the student's compassion statement and other demographic information without having to write any special code.

So it looks nice, but how do we create something this interactive? The great part is it's really not too difficult!

The first thing that needs to be done is create a Deep Zoom file, which I cover in another blog post, that will provide the images for the viewing experience. An XML file, with the extension of CXML is created and that is the file the Silverlight Pivot Viewer consumes. The important thing to realize is there is NO User Interface code to write. To reiterate... ZERO user interface development is needed. You create the Deep Zoom file, create the CXML file, add the Pivot Viewer control to your Silverlight XAML and you have a HIGHLY interactive user experience.

The CXML file has four parts to it. The first is a node called Collection, it is the top level node for the XML file.

Second is a node called Facets. The facets are the categories that are displayed on the left of the screen. In the example above, School, Grade, Art Teacher and Teacher are all facets. The facets are then searchable within the Pivot Viewer. Visitors can type in a school name or use the check box to filter down the data.

Third is a node for all of the Items. For the Appleton Compassion Project, the items are all the artists who created art work and accompanying compassion statements.

The last node is the item node, which is the data that is used to populate the Pivot Viewer. The item node has data for each of the defined facets to populate the search experience on the left of the screen. For our example, a given artist would have a School Name, which are then automatically queried to create the list on the example.

Here's an example of how the XML would look:

<xml version="1.0" encoding="utf-16"?>

<Collection xmlns:xsi="" xmlns:xsd="" Name="Appleton School Compassion Project" SchemaVersion="1.0" xmlns:p="" xmlns="">

        <FacetCategory Name="School" Type="String" p:IsWordWheelVisible="true" p:IsMetaDataVisible="true" p:IsFilterVisible="true" />
        <FacetCategory Name="Grade" Type="String" p:IsWordWheelVisible="true" p:IsMetaDataVisible="true" p:IsFilterVisible="true" />
        <FacetCategory Name="Art Teacher" Type="String" p:IsWordWheelVisible="true" p:IsMetaDataVisible="true" p:IsFilterVisible="true" />
        <FacetCategory Name="Teacher" Type="String" p:IsWordWheelVisible="true" p:IsMetaDataVisible="true" p:IsFilterVisible="true" />
        <FacetCategory Name="Picture Number" Type="String" p:IsWordWheelVisible="true" p:IsMetaDataVisible="false" p:IsFilterVisible="false" />
        <FacetCategory Name="Tile Location" Type="String" p:IsWordWheelVisible="false" p:IsMetaDataVisible="true" p:IsFilterVisible="false" />

<Items ImgBase="collection-2521020991055083062.dzc">
    <Item Img="#301" Id="3803" Href="" Name="Henry Ptacek">
    <Description>Artist statement not yet available</Description>
        <Facet Name="Picture Number"><String Value="3803" /></Facet>
        <Facet Name="School"><String Value="Franklin Elementary School" /></Facet>
        <Facet Name="Grade"><String Value="4" /></Facet>
        <Facet Name="Art Teacher"><String Value="Sara Wilda" /></Facet>
        <Facet Name="Teacher"><String Value="Louann Graf" /></Facet>

As you can see, it's relatively straight forward XML. There are many things I have not talked about, like the ability to have different types of data, sliders for your data, etc. Check out the links for more information.

Why Use it? The Silverlight Pivot viewer is a great data driven UI experience for end users. The creation process involves creating a Deep Zoom file and some Xml.

I want to learn more! Microsoft's Silverlight Pivot viewer site

Silverlight Pivot XML Schema information

To Develop with the Silverlight Pivot viewer, you will need the Silverlight 4 SDK as well as the Pivot Viewer Control, which you can download here.


SharePoint Search - Think Outside the (Search) Box!

Search is ubiquitous in the world of the Internet. Everyone starts their questions by going to Google (or for a small minority Bing) and typing in their query as the entry to the Internet. The expectation is that the results are going to be exactly what you are looking for, and if that doesn't work out, adding a second term will get you there.

In the Enterprise though, this is not always the case. Data exists in disparate system, files live on file shares, users keep documents on their hard drive, etc. Ultimately, it comes down to the fact that the data users need is not discoverable, for a variety of reasons. As a result, users generally don't regard search within the walls of the enterprise like they do search outside of the Enterprise. Instead of starting at the search page, they start at the application that hosts their data and search. This is a source of inefficiency. Additionally, what we are searching for may be the person within our organization who knows the most about a given topic so we can do research ourselves or resolve an issue. The good news is that SharePoint 2010 and its search functionality can enable an organization to overcome these inefficiencies or weaknesses.

SharePoint 2010 has great built-in Enterprise search functionality which can certainly help solve these problems. The downside is it can get a bit confusing because there are many variations of the Microsoft search product offering. The products, with a description are:

  • SharePoint Foundation 2010 Search - This is the search engine that ships with SharePoint foundation. It is limited to a single site collection (or in non-SharePoint speak, a single site) and cannot index the content and data external to that given site.
  • Search Server 2010 Express - Search Server Express is a standalone product that is available and free. It supports external content sources and search federation. It is limited in its capability to scale to your organization's needs.
  • Search Server 2010 - This is the full product upgrade from Search Server Express. It is an Enterprise search engine that can scale across multiple servers. The product is focused for organizations that are not using SharePoint 2010 and can provide a great product offering for your internal or public website needs.
  • SharePoint Server 2010 Search - The search available in SharePoint server 2010 includes all of the Search Server 2010 functionality but also includes features specific to SharePoint. Examples of this include taxonomy and people search.
  • FAST Search Server 2010 for SharePoint - FAST is Microsoft's advanced search functionality. It is used by many organizations that need highly scalable and functional requirements. An example would be the Best Buy site, which uses FAST search to provide their categories. The great part about SharePoint search, starting with Search Server 2010, is the ability to integrate data from other systems within your Enterprise. Using the Business Connectivity Services functionality (a feature of SharePoint itself) with SharePoint search, you can integrate into Line of Business (LOB) applications. For example, if you have customer information and contacts in a CRM application, SharePoint can be setup to index that information and make it part of the results that are returned when users search from within your SharePoint site.

Similarly, with the ability to search LOB applications, advanced versions of SharePoint allow search sources to be external to the server. SharePoint calls these content sources, and they can be a variety of types of data. Examples include corporate Intranet sites that aren't hosted in SharePoint, external file systems, and Internet sites. This is the majority of the data that organizations are interested in, all at the tip of employees' fingers.

Some examples of what customers have done with SharePoint search:

  • Make a file server drive that has 15 years of data quickly accessible via your SharePoint searches
  • Use SharePoint search to bring in product information from an ERP system with accompanying price as well as links to the ERP system
  • Use Google News and other external news sources to mine information about competitors As you can see, leveraging SharePoint search beyond its out-of-the-box functionality can quickly turn your corporate Intranet into the starting point for information for all your knowledge workers!

This blog post originally appeared at Skyline Technologies (


Developing with Microsoft's Azure Platform

For the past several months, Skyline has been working on an awesome charity project called the Appleton Compassion Project. This project will provide visitors to the Trout Museum of Art a way to view the 10,500 pieces in the exhibit and their accompanying artist statements. It has also provided us with an excellent opportunity to develop in Azure and learn a thing or two which I'm going to share with you.

The Appleton Compassion Project is hosted on Microsoft Azure. Azure is Microsoft's platform for developing cloud applications based on its Microsoft .NET technology. The good news is that if you're a programmer doing .NET development you are already well positioned to do Azure programming!

The cloud means a lot of different things to a lot of different people, but in discussing Azure, we can think of it as providing several features.

First, it provides infrastructure. For the Appleton Compassion Project, this was important. The goals of the project were such that they were (and still are) hoping to have some big-name celebrities involved, which could result in a large number of visitors to the site. While we could plan for that kind of demand, the Appleton Area School District - who is sponsoring the project - could not afford the hardware to meet it. Since one of the features of Azure is the ease of scalability, it can quickly meet the demands by adding more compute instances (the virtual machines that Azure uses). This is an example of where we pay for what we use, and don't have to pay for demand that we plan for, that may or may not be used.

Second, it provides scale. This is a necessity as the Virtual Exhibit on the site will contain over 10,000 individual images that need to be displayed. The process we have to create the Pivot collection for our current batch of 8,000 images creates over 750,000 Deep Zoom files, is computationally intense, and literally takes days to run. We can greatly reduce this time by paying more and using larger computer sizes and creating multiple tasks in parallel. Once the files are created, we can then reduce the computer size to serve up HTML pages until we need the increase in computing power. Doing this kind of implementation using computing hardware as needed on the school district's hardware would not be cost effective.

Another variation of scale is disk space ... we only pay for what we use. We don't need to be concerned with checking for disk space before we run our collection creation process, estimating the amount of files we will create and ensuring we have enough. Azure will automatically grow and make redundant copies of our data, so that if the server goes down, the data is stored elsewhere.

As I mentioned earlier, Azure is based on .NET technologies, making it relatively straightforward to move to cloud development. There are, of course, several differences. When you deploy an application to Azure, it starts a dedicated Virtual Machine to host your application in a Microsoft data center. The bigger the size of the machine you request, the more you pay. One result of the virtual machine being created for each deploy is that you don't want to persist data to these VMs. You will use blob storage for persisted data. This is one of the biggest differences between Azure and normal .NET development.


John Ptacek I'm John Ptacek, a software developer for Skyline Technologies. This blog is my contains my content and opinionss, which are not those of my employer.

Currently, I am reading Norse Mythology by Neil Gaiman

@jptacekGitHubLinkedInStack OverflowGoogle+