<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sam Winstanley's Blog</title>
	<atom:link href="http://www.surveyxtreme.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.surveyxtreme.com</link>
	<description>Market Research Technology News and Views</description>
	<lastBuildDate>Fri, 18 Mar 2011 13:07:35 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Understanding the Stylesheet in SpreadsheetML</title>
		<link>http://www.surveyxtreme.com/?p=126</link>
		<comments>http://www.surveyxtreme.com/?p=126#comments</comments>
		<pubDate>Fri, 18 Mar 2011 13:04:22 +0000</pubDate>
		<dc:creator>sam</dc:creator>
				<category><![CDATA[DeepTech]]></category>
		<category><![CDATA[excel]]></category>
		<category><![CDATA[Office OpenXml]]></category>
		<category><![CDATA[StyleSheet]]></category>

		<guid isPermaLink="false">http://www.surveyxtreme.com/?p=126</guid>
		<description><![CDATA[Preamble: Warning this page has nothing to do with Market Research, it is purely technical information about Office OpenXML.
Introduction
This page discusses the way that Styles are applied to cells in SpreadsheetML, it is correct at the time of writing and is correct in accordance with ECMA 376 &#8211; Second Edition Part 1 which relates to the Microsoft [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-weight: normal;">Preamble: Warning this page has nothing to do with Market Research, it is purely technical information about Office OpenXML.</span></p>
<h2>Introduction</h2>
<p>This page discusses the way that Styles are applied to cells in SpreadsheetML, it is correct at the time of writing and is correct in accordance with ECMA 376 &#8211; Second Edition Part 1 which relates to the Microsoft Office Open XML schemas.</p>
<p>Initially I wrote this document just for me, to explain to myself how my code needed to work, but I decided it might be universally useful.</p>
<p>In terms of the actual XML code in this, its as produced by Excel 2010, therefore where people spot additional  attributes that seem pointless/irregular this should be directed at the Excel team not at me.</p>
<h2>Style Anatomy &#8211; How Excel Does This</h2>
<p>In terms of open office xml, a workbook loosely speaking has this structure (intentionally reduced for readability), I have bolded the areas I will be discussing in the document.</p>
<ul>
<li>Workbook
<ul>
<li>Styles
<ul>
<li>Fonts</li>
<li>Fills</li>
<li>Borders</li>
<li><strong>CellStyleFormats</strong> (cellStyleXfs)</li>
<li><strong>CellFormats</strong> (cellXfs)</li>
<li><strong>CellStyles</strong> (cellStyles)</li>
<li>Differential Formats</li>
<li>Table Styles</li>
<li>StylesheetExtensionList</li>
</ul>
</li>
</ul>
</li>
<li>Theme</li>
<li>Worksheet (multiple)
<ul>
<li>SheetData
<ul>
<li>Row (multiple)
<ul>
<li><strong>Cell</strong> (multiple)</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3>The Way Styles are Looked Up</h3>
<h4>The Cell (c)</h4>
<p>Each cell in a row can have a StyleIndex (s) attribute, this attribute is a number starting from 0. It represents a lookup into the <strong>CellFormats</strong> (cellXfs) by position (this is a zero index based lookup).</p>
<p>For example, you have a cell defined as:</p>
<pre>&lt;x:c r="C4" s="2" xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main"&gt;
	&lt;x:v&gt;123&lt;/x:v&gt;
&lt;/x:c&gt;</pre>
<p>This is telling Excel, this cell (C4) uses CellFormat (cellXfs) index 2. The actually CellFormat xf record at that position looks like this:</p>
<h4>The CellFormat (xf) for the cell</h4>
<pre>&lt;x:xf numFmtId="10" fontId="3" fillId="0" borderId="0" xfId="1" applyNumberFormat="1" xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main"&gt;
	&lt;x:alignment horizontal="center" vertical="top" /&gt;
&lt;/x:xf&gt;</pre>
<p>Inside this <strong>CellFormat </strong>record there are various format specifiers but the one to note is the <strong>FormatID </strong>(xfId) this  is saying its another lookup, this time into the <strong>CellStyleFormats</strong> (cellStyleXfs).</p>
<h4>The CellFormat for the &#8220;style&#8221; inside CellStyleFormats</h4>
<p>The CellFormat above contains an xfIf (FormatID) of 1, this is a reference to the item at index 1 in the CellStyleFormats (cellStyleXfs), in my workbook this looks as follows:</p>
<pre>&lt;x:xf numFmtId="0" fontId="3" fillId="0" borderId="0" xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main"&gt;
	&lt;x:alignment horizontal="center" vertical="top" /&gt;
&lt;/x:xf&gt;</pre>
<p>Note that this format record does not contain a FormatID (xfID) and it should not do that according to documentation, although this would make a nice future extension in terms of style inheritance in Excel if Microsoft ever chooses to implement that.</p>
<h4>The Relationship between CellStyleFormats and CellFormats</h4>
<p>In programming terms the best way I can come up with to describe the difference between the cellStyleXfs and the cellXfs records is like this:</p>
<blockquote><p>Logically the CellFormat inside the CellStyleFormats acts as an abstract base class to the CellFormat in the CellFormats, as such you cannot bind a cell directly to one as it cannot be instantiated directly. The CellFormat which lives inside CellFormats effectively inherits this base class and can be instantiated and if needed override one or more of the Properties that exist on it in order to customize the appearance applied to one or more cells.</p></blockquote>
<h4>CellStyles (cellStyles)</h4>
<p>Cell styles are not directly related to the actual formatting of cells, instead they primarily exist for the Excel UI to  show the user a style so that it can be modified etc. in essence they are like Labels for CellStyleFormats. My <strong>CellStyle </strong>for the style we&#8217;ve been talking about so far looks very simply like this:</p>
<pre>&lt;x:cellStyle name="CellValue" xfId="1" xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main" /&gt;</pre>
<h3>Some Working Examples</h3>
<h4>Bold a single cell within a workbook, the logical process.</h4>
<p>For the purposes of the example, assume there are many cells in a workbook which share a style. And you want to just bold one of these. This is what you have to do in order to make that happen:</p>
<ol>
<li>You have your Cell (c) it is currently set up to use a style xfId=1.</li>
<li>You go to your StyleSheet.CellFormats (styleSheet/cellXfs) and find the element<br />
at index 1 (the 2nd child). This is your CellFormat (xf) for the cell.</p>
<ol>
<li>If your xf for the cell has ApplyFont (the applyFont) attribute set, then get the<br />
value of that attribute and use that as the id of the font that is being used from<br />
the Font (fontID) attribute.</li>
<li>If your xf does not have ApplyFont set, then gets its FormatId (xfId) attribute<br />
(lets say this is set to 1 for now)</p>
<ol>
<li>Go to your StyleSheet.CellStyleFormats (styleSheet/cellStyleXfs) and get the child<br />
at index 1</li>
<li>read the Font ID from the Font (fontId) attribute of this CellFormat (xf)</li>
</ol>
</li>
</ol>
</li>
<li>Assuming a fontID of 1. Go to StyleSheet.Fonts (/styleSheet/fonts) and get the Font<br />
(font) child element at index 1.</li>
<li>Verify that the Fonts collection does not already contain an identical font with<br />
Bold=true (b=1) set already</p>
<ul>
<li>if one exists use its position as the font index.</li>
<li>if one does not, Copy the font element, then add a value Bold=true (b=1) to it, then append this<br />
newly cloned font specification back to StyleSheet.Fonts. The increment the value of Fonts.Count by 1. take the position of the newly added font definition as the font index.</li>
</ul>
</li>
<li>Assuming a font index of the newly added/found font of 6. Create a copy of your CellFormat (xf) for your cell (the one that lives in CellFormats (cellXfs))</li>
<li>On your newly copied CellFormat, set the attribute Font=6 (font=&#8221;6&#8243;), along with the attribute ApplyFont=true (applyFont=&#8221;1&#8243;).</li>
<li>Verify that you do not already have an identical CellFormat to the one you just made in your CellFormats (cellXfs)</li>
<li>Assuming that you do not have an identical CellFormat already, append your newly created CellFormat (xf) to CellFormats(cellXfs). Then increment the value of CellFormat.Count</li>
<li>Take the index of the newly added/created CellFormat within CellFormats (assume 19), set this value to the StyleIndex attribute of the Cell e.g. Cell.StyleIndex=19 (s=&#8221;19)</li>
</ol>
<p>Although the above is quite a lot of steps, repeating for another cell once you know that styleID=19 is the one to use is very simple.</p>
<p>In terms of being totally correct, you should really check that your old CellFormat for the cell you updated, is still in use by some other cells, then remove it if it has become Orphaned by the process, but be careful doing this as in doing so you are decrementing the index of any higher CellFormats in the workbook so effectively if you remove a CellFormat, you really may need to perform an update on every cell in the workbook. These are the areas that SpreadsheetML becomes really tricky and having good wrapper code becomes pretty important.</p>
<h4>General OpenXml Good Practises with Style elements</h4>
<ol>
<li>When Appending children onto a collection, always increment the Count.</li>
<li>Never remove any children from a collection unless you are prepared to do the work of finding all of the references to that collection<br />
and decrementing ID&#8217;s where possible.</li>
<li>Do not blindly add children to a collection without checking that there is not already an appropriate child the same as the one you are adding as it can lead to massive file size bloating.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.surveyxtreme.com/?feed=rss2&amp;p=126</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Visualization Series &#8211; Part 1, Going Analog</title>
		<link>http://www.surveyxtreme.com/?p=125</link>
		<comments>http://www.surveyxtreme.com/?p=125#comments</comments>
		<pubDate>Thu, 03 Jun 2010 15:46:21 +0000</pubDate>
		<dc:creator>sam</dc:creator>
				<category><![CDATA[Data Warehouse]]></category>
		<category><![CDATA[Market Research Industry]]></category>
		<category><![CDATA[Reporting]]></category>
		<category><![CDATA[Survey]]></category>
		<category><![CDATA[Tabulation]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Visualization]]></category>
		<category><![CDATA[Analog]]></category>
		<category><![CDATA[insightMart]]></category>
		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false">http://www.surveyxtreme.com/?p=125</guid>
		<description><![CDATA[In this 4 part series of posts I’m going to be looking at ways of visualizing survey data to speed up the insight process. 
This post looks into using a pretty cool visualization technique called a Tree Map to represent the data that would traditionally be looked at in a Cross Tab. 
TreeMaps from the [...]]]></description>
			<content:encoded><![CDATA[<p>In this 4 part series of posts I’m going to be looking at ways of visualizing survey data to speed up the insight process. </p>
<p>This post looks into using a pretty cool visualization technique called a Tree Map to represent the data that would traditionally be looked at in a Cross Tab. </p>
<h3>TreeMaps from the Beginning</h3>
<p>Tree Maps are an Area oriented way of showing data, for instance if you had some Top-Line responses to a question as follows:</p>
<table border="1" cellspacing="0" cellpadding="2" width="400">
<tbody>
<tr>
<td valign="top" width="199">11-16 years</td>
<td valign="top" width="199" align="center">
<p>38</p>
</td>
</tr>
<tr>
<td valign="top" width="199">17-20 years</td>
<td valign="top" width="199" align="center">
<p>82</p>
</td>
</tr>
<tr>
<td valign="top" width="199">21-24 years</td>
<td valign="top" width="199" align="center">
<p>95</p>
</td>
</tr>
<tr>
<td valign="top" width="199">25-34 years</td>
<td valign="top" width="199" align="center">
<p>192</p>
</td>
</tr>
<tr>
<td valign="top" width="199">35-44 years</td>
<td valign="top" width="199" align="center">
<p>91</p>
</td>
</tr>
<tr>
<td valign="top" width="199">45-54 years</td>
<td valign="top" width="199" align="center">
<p>55</p>
</td>
</tr>
<tr>
<td valign="top" width="199">55-64 years</td>
<td valign="top" width="199" align="center">
<p>33</p>
</td>
</tr>
<tr>
<td valign="top" width="199">65+ years</td>
<td valign="top" width="199" align="center">
<p>16</p>
</td>
</tr>
</tbody>
</table>
<p>&#160;</p>
<p>It’s TreeMap respresentation would be as follows:</p>
<p><a href="http://www.surveyxtreme.com/wp-content/uploads/2010/06/image.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.surveyxtreme.com/wp-content/uploads/2010/06/image_thumb.png" width="644" height="385" /></a> </p>
<p>This provides a very instant read for the viewer who can immediately tell not only which the largest and smallest segments of their sample are but also what the real proportions are. Therefore it’s doing the job of a sorted table that has percentages. In essence its an Analog view of the data much like comparing an Analog to a Digital watch. </p>
<h3></h3>
<h3></h3>
<h3>why Treemaps suit Tables</h3>
<p>The tables we get all the time in market research put a lot of information in front of the person who’s trying to make gain insight. This kind of table is really common:</p>
<p><a href="http://www.surveyxtreme.com/wp-content/uploads/2010/06/image1.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.surveyxtreme.com/wp-content/uploads/2010/06/image_thumb1.png" width="644" height="199" /></a> </p>
<p>There’s really&#160; a lot of information for the brain to consume in order to build an insight, its all very digital and it takes a long time to process. The Analog view of this is very different:</p>
<p><a href="http://www.surveyxtreme.com/wp-content/uploads/2010/06/image2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.surveyxtreme.com/wp-content/uploads/2010/06/image_thumb2.png" width="644" height="434" /></a> </p>
<h3>But Oh! There’s More</h3>
<p>Tree map’s have 2 main visual indicators available to them, the first being Area, the second being Color, so far the examples have had both driven by proportion of responses. Here’s an example where the Color is being driven by something different, in this case, the Color on is being driven by&#160; Mean score on another question (the proportion is still being driven from the sample size).</p>
<p>&#160;<a href="http://www.surveyxtreme.com/wp-content/uploads/2010/06/image3.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.surveyxtreme.com/wp-content/uploads/2010/06/image_thumb3.png" width="644" height="414" /></a> </p>
<p>Not only can you easily tell that the 55-65 age group is rating a product pretty high but you also have the visual warning that the insight might be based on a fairly small sub-group. </p>
<h3>Wow, how did you do this/How can I do this?</h3>
<p>There’s no cheating, we built an app platform quite a while ago now for feeding on survey results which we use for all kinds of visualizations. Then we built a demo app on the top of that which presents data from regular/real surveys into a TreeMap. </p>
<p>The demo app is built using the <a href="http://www.silverlight.net/" target="_blank">Microsoft Silverlight Toolkit</a>, and is reading data from our <a href="http://www.forgetdata.com/technology.html" target="_blank">insightMart</a> data warehousing system (the data is sample data and didn’t come from a real market research study in this case).</p>
<p>We can build this kind of visualization and many others for people’s dashboards or presentations very quickly, the data doesn’t even have to come from survey’s.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.surveyxtreme.com/?feed=rss2&amp;p=125</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Silverlight Color Interpolation</title>
		<link>http://www.surveyxtreme.com/?p=115</link>
		<comments>http://www.surveyxtreme.com/?p=115#comments</comments>
		<pubDate>Fri, 28 May 2010 16:23:31 +0000</pubDate>
		<dc:creator>sam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.surveyxtreme.com/?p=115</guid>
		<description><![CDATA[I recently faced a visualisation task which required me to set Colors on shapes according to the strength of a value, this kind of thing is not uncommon in dashboard making. 
I’ve changed the colors here but the essence of the problem was that I had a scale which looked something like this (actual colors [...]]]></description>
			<content:encoded><![CDATA[<p>I recently faced a visualisation task which required me to set Colors on shapes according to the strength of a value, this kind of thing is not uncommon in dashboard making. </p>
<p>I’ve changed the colors here but the essence of the problem was that I had a scale which looked something like this (actual colors changed):</p>
<p><a href="http://www.surveyxtreme.com/wp-content/uploads/2010/05/image.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.surveyxtreme.com/wp-content/uploads/2010/05/image_thumb.png" width="400" height="27" /></a> </p>
</p>
<p>In other words a gradient brush scale, such as:</p>
<p><font face="Consolas">&lt;LinearGradientBrush x:Key=&quot;MyTestBrush&quot; StartPoint=&quot;0.05,0&quot; EndPoint=&quot;0.95,0&quot;&gt;      <br />&#160;&#160; &lt;GradientStop Offset=&quot;0&quot; Color=&quot;Red&quot;/&gt;       <br />&#160;&#160; &lt;GradientStop Offset=&quot;0.5&quot; Color=&quot;Green&quot;/&gt;       <br />&#160;&#160; &lt;GradientStop Offset=&quot;1&quot; Color=&quot;Blue&quot;/&gt;       <br />&lt;/LinearGradientBrush&gt;</font></p>
<p>In my case the brush had far more colors than this in its scale and the particular offsetting of the start and the end of the gradient was important. </p>
<p>I’d previously stumbled on <a href="http://blogs.msdn.com/b/marlat/archive/2009/08/06/treemap-in-silverlight-toolkit-how-to-write-your-own-interpolator.aspx" target="_blank">this post</a> about making custom interpolators for the Silverlight Data Visualization Toolkit.</p>
<p>So I set about the task of making a LinearGradientBrushInterpolator trying to re-use as much as possible from the toolkit itself. </p>
<p>First off I looked at the way the SolidColorBrushInterpolator worked, it already did a big part of what I needed to do by interpolating a range between 2 different colors. </p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:C89E2BDB-ADD3-4f7a-9810-1B7EACF446C1:a40b3615-e689-4a51-9d94-7b235fd80c97" class="wlWriterEditableSmartContent">
<pre>
[sourcecode language='csharp'  padlinenumbers='true' light='false' autolink='false' gutter='false']
namespace ColorPicker
{
    public class LinearGradientBrushInterpolator : Interpolator
    {
        System.Collections.Generic.List<SolidColorBrushInterpolator> interpolators = new System.Collections.Generic.List<SolidColorBrushInterpolator>();
        LinearGradientBrush templateBrush;

        public LinearGradientBrush TemplateBrush
        {
            get
            {
                return templateBrush;
            }
            set
            {
                if (value != templateBrush)
                {
                    templateBrush = value;
                    interpolators.Clear();
                }
            }
        }                                                                                                                   

    }
}
[/sourcecode]
</pre>
</div>
<p>&#160;</p>
<p>In other words I decided to use an array of SolidBrushInterpolators to do this. To set these up I wrote this:</p>
<p>&#160;</p>
</p>
<p><div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:C89E2BDB-ADD3-4f7a-9810-1B7EACF446C1:7f62f196-094f-44b4-b551-b3668bc7fccf" class="wlWriterEditableSmartContent">
<pre>
[sourcecode language='csharp'  htmlscript='false' padlinenumbers='true']
 private void InitializeBrush(LinearGradientBrush br)
        {
            if (br == null)
                throw new ArgumentNullException("br");
            //set start and end interpolators
            double start = br.StartPoint.X;
            double end = br.EndPoint.X;

            if (br.GradientStops.Count < 2)
            {
                throw new Exception("2 Gradiant Stops must exist");
            }

            SolidColorBrushInterpolator startInterpolator = new SolidColorBrushInterpolator();
            startInterpolator.DataMinimum = start;
            startInterpolator.DataMaximum = br.GradientStops[1].Offset;
            startInterpolator.From = br.GradientStops[0].Color;
            startInterpolator.To = br.GradientStops[1].Color;
            interpolators.Add(startInterpolator);

            for (int i = 1; i < br.GradientStops.Count - 1; i++)
            {
                SolidColorBrushInterpolator inter = new SolidColorBrushInterpolator();
                inter.DataMinimum = br.GradientStops[i].Offset;
                inter.DataMaximum = br.GradientStops[i + 1].Offset;
                inter.From = br.GradientStops[i].Color;
                inter.To = br.GradientStops[i + 1].Color;
                interpolators.Add(inter);
            }

        }
[/sourcecode]
</pre>
</div>
<p>Because of my Gradients not starting or ending on 0 or 1 I had to add special handling of these beginning and end cases. </p>
<p>Finally I had to implement the Interpolate method itself:</p>
<p>&#160;</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:C89E2BDB-ADD3-4f7a-9810-1B7EACF446C1:e1946d97-bc20-4a2c-ae51-9141030a6e5e" class="wlWriterEditableSmartContent">
<pre>
[sourcecode language='csharp' ]
public override object Interpolate(double value)
        {
            if (interpolators.Count == 0)
            {
                InitializeBrush(templateBrush);
                if (interpolators.Count == 0)
                {
                    throw new InvalidOperationException("TemplateBrush is not optional");
                }
            }
            double min = 0;
            double max = 0;
            if (double.IsNaN(DataMinimum))
            {
                min = ActualDataMinimum;
            }
            if (double.IsNaN(DataMinimum))
            {
                max = ActualDataMaximum;
            }

            if (value < min)
            {
                value = min;
            }
            if (value > max)
            {
                value = max;
            }

            //calculate relative interpolation
            double offset = (value - min) / (max - min);

            foreach (SolidColorBrushInterpolator inter in interpolators)
            {
                if (offset < inter.DataMaximum)
                {
                    if (offset < inter.DataMinimum)
                        offset = inter.DataMinimum;
                    return inter.Interpolate(offset);
                }
            }

            return interpolators[interpolators.Count - 1].Interpolate(interpolators[interpolators.Count - 1].DataMaximum);

        }
[/sourcecode]
</pre>
</div>
<p>The end result worked nicely and I put together this TreeMap to prove it to myself:</p>
<p><a href="http://www.surveyxtreme.com/wp-content/uploads/2010/05/image1.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.surveyxtreme.com/wp-content/uploads/2010/05/image_thumb1.png" width="354" height="269" /></a></p>
<p>The live version of this sample (which randomizes each time you refresh is <a href="http://www.surveyxtreme.com/wp-content/uploads/2010/05/TestPage.html" target="_blank">here</a>).</p>
<p>Full Source code including the sample application is <a href="http://www.surveyxtreme.com/wp-content/uploads/2010/05/ColorPicker.zip" target="_blank">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.surveyxtreme.com/?feed=rss2&amp;p=115</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SPSS Product Naming Decoded</title>
		<link>http://www.surveyxtreme.com/?p=109</link>
		<comments>http://www.surveyxtreme.com/?p=109#comments</comments>
		<pubDate>Thu, 08 Oct 2009 08:00:21 +0000</pubDate>
		<dc:creator>sam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.surveyxtreme.com/?p=109</guid>
		<description><![CDATA[Some months ago SPSS who supply many tools for survey research industry (along with many other products for many other industries), dropped a bombshell of a name change of all their products from SPSS to PASW. This was all related to a trademark dispute http://bit.ly/2kh2Ac.
PASW sure got some eye’s rolling, although it was suggested to [...]]]></description>
			<content:encoded><![CDATA[<p>Some months ago SPSS who supply many tools for survey research industry (along with many other products for many other industries), dropped a bombshell of a name change of all their products from SPSS to PASW. This was all related to a trademark dispute <a title="http://bit.ly/2kh2Ac" href="http://bit.ly/2kh2Ac">http://bit.ly/2kh2Ac</a>.</p>
<p>PASW sure got some eye’s rolling, although it was suggested to be an acronym of Predictive Analytics Software, my favourite theory is that it was an available 4 letter domain name which could be made to fit. </p>
<p>Anyway with the PASW change, all the products SPSS sold were renamed. Therefore well known products like SPSS Base became PASW Statistics. Which brings me on to the products that other products for survey research that had previously been under the banner SPSS Dimensions with product names such as mrInterview and so on, Tim Macer said some fairly inspired words on it here <a title="http://bit.ly/155Ll3" href="http://bit.ly/155Ll3">http://bit.ly/155Ll3</a>. </p>
<p>Because the aforementioned trademark dispute was settled another rename has come, and PASW is to become IBM SPSS (<a title="http://bit.ly/10qexj" href="http://bit.ly/10qexj">http://bit.ly/10qexj</a>). </p>
<h3>Best Effort At Decoding the product Names</h3>
<table border="1" cellspacing="0" cellpadding="2" width="493">
<tbody>
<tr>
<td valign="top" width="134">Original Product Name</td>
<td valign="top" width="143">New Product Name</td>
<td valign="top" width="214">Description</td>
</tr>
<tr>
<td valign="top" width="135">SPSS Dimensions</td>
<td valign="top" width="143"><strike>PASW </strike>IBM SPSS Data Collection</td>
<td valign="top" width="213">Banner for the overall group of products that are related to Data Collection e.g. doing surveys, managing survey data, reporting on surveys.</td>
</tr>
<tr>
<td valign="top" width="136">SPSS Author (known by many as mrAuthor)</td>
<td valign="top" width="143"><strike>PASW </strike>IBM SPSS Data Collection Author</td>
<td valign="top" width="213">Desktop tool aimed at people with MS Office skills for authoring surveys.</td>
</tr>
<tr>
<td valign="top" width="136">SPSS mrStudio w. Interview Option</td>
<td valign="top" width="143"><strike>PASW </strike>IBM SPSS Data Collection Author Professional</td>
<td valign="top" width="213">Development environment for creating editing and debugging interview scripts (which are VB Like), shares no visual similarities with regular Author merely performs the same task in a more complicated/powerful way. Scripts are written verses the IOM (Interview Object Model)</td>
</tr>
<tr>
<td valign="top" width="136">SPSS mrInterview</td>
<td valign="top" width="143"><strike>PASW</strike> IBM SPSS Data Collection Interviewer Web</td>
<td valign="top" width="213">Server application for interviewing people (using scripts from Author (regular or Professional) or built using yet another authoring utility called Build), includes features for managing sample, sending out invitation emails and so on. </td>
</tr>
<tr>
<td valign="top" width="136">SPSS mrInterview CATI</td>
<td valign="top" width="143"><strike>PASW</strike> IBM SPSS Data Collection Interviewer Phone</td>
<td valign="top" width="213">CATI add-on for regular mrInterview which includes supervisory and interviewer tools.</td>
</tr>
<tr>
<td valign="top" width="136">Known as mrInterview Player</td>
<td valign="top" width="143"><strike>PASW</strike> IBM SPSS Data Collection Interviewer/Data Collection Remote Administrator</td>
<td valign="top" width="213">CAPI version of mrInterview which is designed for decentralized data collection using portable computers with features for collating data and managing surveys on a server component.</td>
</tr>
<tr>
<td valign="top" width="136">SPSS mrPaper/mrScan</td>
<td valign="top" width="143"><strike>PASW</strike> IBM SPSS Data Collection Paper/Scan</td>
<td valign="top" width="213">Tool which works with MS Word to produce printable surveys based on scripts written in Author which also contains a Scanning module (was known as mrScan) which assists with data entry.</td>
</tr>
<tr>
<td valign="top" width="136"><em>unrelated product SPSS Data Entry</em></td>
<td valign="top" width="143"><strike>PASW</strike> IBM SPSS Data Collection Data Entry</td>
<td valign="top" width="213">Tool which is built on the same components as the other Interviewing products with a user interface and management system which is geared towards Direct Data Entry.</td>
</tr>
<tr>
<td valign="top" width="136">SPSS mrDialer</td>
<td valign="top" width="143"><strike>PASW</strike> IBM SPSS Data Collection Dialer </td>
<td valign="top" width="213">A hardware auto-dialler solution which forms a component of the CATI system.</td>
</tr>
<tr>
<td valign="top" width="136">SPSS DimensionNet</td>
<td valign="top" width="143"><strike>PASW</strike> IBM SPSS Data Collection Interviewer Server</td>
<td valign="top" width="213">This is not a product per-se but its a web based system which kind of hangs all the web based tools together.</td>
</tr>
<tr>
<td valign="top" width="136">SPSS Reporter</td>
<td valign="top" width="143"><strike>PASW </strike>IBM SPSS Data Collection Reports for Surveys</td>
<td valign="top" width="213">Desktop utility for building Cross Tab reports and exporting them to other formats aimed at Analysts who aren’t as technical as an SPSS Base (IBM SPSS Statistics) user. </td>
</tr>
<tr>
<td valign="top" width="136">SPSS Reporter <em>server</em></td>
<td valign="top" width="143"><strike>PASW </strike>IBM SPSS Data Collection Reports for Surveys <em>server</em></td>
<td valign="top" width="213">Client-Server version of the above, which shares the same user interface but has a server component which performs all of the number crunching and file management, these 2 communicate via SOAP web services. Server version lacks the built in ability to export data, but gains the ability to control per-user/group which filters are applied on a given piece of data.          <br />The client is automatically installed/deployed via ClickOnce technology.</td>
</tr>
<tr>
<td valign="top" width="136">SPSS mrTables</td>
<td valign="top" width="143"><strike>PASW </strike>IBM SPSS Data Collection Web Reports for Surveys</td>
<td valign="top" width="213">Pure browser based version of the above which is less feature rich and is a significantly older product, the only common ground is the core components (Table Object Model (TOM), Data Model and Export Components).</td>
</tr>
<tr>
<td valign="top" width="136">SPSS mrStudio /Tables Option</td>
<td valign="top" width="143"><strike>PASW</strike> IBM SPSS Data Collection Reports Professional for Surveys</td>
<td valign="top" width="213">Scripting and Debugging environment for automated tables and exports, where you can program against the Table Object Model. Does not share any User Interface with Reports for Surveys strangely not to be confused with a heavyweight version, its a different product.</td>
</tr>
<tr>
<td valign="top" width="136">SPSS mrStudio</td>
<td valign="top" width="143"><strike>PASW</strike> IBM SPSS Data Collection Professional</td>
<td valign="top" width="213">The scripting and debugging environment on its own with less licensed components, which is primarily designed for creating Data Management scripts (ETL) using script and has not direct User Interface comparison as it stands.</td>
</tr>
<tr>
<td valign="top" width="136">SPSS Dimensions Data Model</td>
<td valign="top" width="143"><strike>PASW </strike>IBM SPSS Data Collection Data Model</td>
<td valign="top" width="213">Standalone components for using the (highly useful) Data Model components to read and write data, this puts a standard API over around 12 different data formats commonly used in survey research.</td>
</tr>
</tbody>
</table>
<h3>My Opinion</h3>
<p>If it matters, and I have no idea whether it does although I am an SPSS Customer and I do spend a good deal of my time working with this line of products for my various customers. </p>
<p>This is diluting your brand IBM SPSS, I know you are going for enterprise sales and it makes is easier to sell the concept of IBM SPSS Data Collection as an end to end solution (which it is at one level). However:</p>
<p>The tools still exist and the product names <u>just stink of a category dump</u> which may make it easier for you to internally manage things but are completely divorced from any real concept of branding. </p>
<blockquote><p>its the same as Heinz deciding to rename Heinz Baked Beans to Heinz&#160; Canned Foods Tomato With Beans and running an ad campaign on it.</p>
</blockquote>
<p>This may make it easier for Heinz to explain its product at an enterprise level when its talking to Walmart but it doesn’t mean it makes any good marketing sense.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.surveyxtreme.com/?feed=rss2&amp;p=109</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Harvesting grapes..</title>
		<link>http://www.surveyxtreme.com/?p=108</link>
		<comments>http://www.surveyxtreme.com/?p=108#comments</comments>
		<pubDate>Tue, 06 Oct 2009 18:33:51 +0000</pubDate>
		<dc:creator>sam</dc:creator>
				<category><![CDATA[Data Warehouse]]></category>
		<category><![CDATA[Market Research Industry]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false">http://www.surveyxtreme.com/?p=108</guid>
		<description><![CDATA[In the end, the glass of Barolo is desirable and taste’s nice, the process of growing the vines harvesting the grapes, pressing, fermenting and bottling them is a process which is taken for granted.
In terms of what happens in opinion research, the last couple of blogs have really been about fermentation and bottling; its all [...]]]></description>
			<content:encoded><![CDATA[<p>In the end, the glass of Barolo is desirable and taste’s nice, the process of growing the vines harvesting the grapes, pressing, fermenting and bottling them is a process which is taken for granted.</p>
<p>In terms of what happens in opinion research, the last couple of blogs have really been about fermentation and bottling; its all been about warehousing data. Little has been said about getting the data in or the process which we call Harvesting. </p>
<h3>What are the Grapes?</h3>
<p>While I am pressing (<em>excuse pun</em>) on with this analogy, a grape is an opinion; opinions about your business or one of its brands are not concrete things. There are potential grapevines all over the internet, internal information systems and there’s still of course surveys; either survey’s that you commission or industry reports that you are savvy to.</p>
<p>These sources of information vary wildly in quality, structure from a raw data point of view. Somehow you want to bring all or some of these sources to paint a full picture, one that can drive some action and deliver improvement.</p>
<h3>HArvesting</h3>
<p>At this point I could paint a rather blissful picture of the process of harvesting which looks like this:</p>
<p><a href="http://www.surveyxtreme.com/wp-content/uploads/2009/10/image.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.surveyxtreme.com/wp-content/uploads/2009/10/image-thumb.png" width="342" height="332" /></a> </p>
<p>To combat the disconnection between the simplicity of this diagram and the actual complexity involved in shuffling through data and getting it to sit nicely together in a warehouse. We developed the concept of Harvesters which quite literally take a stream of data and “do stuff” to it in order to make it sit nicely in a standard location for analysis and reporting.</p>
<h3></h3>
<h3>There’s no such thing as a free Opinion</h3>
<p>Structured data like that coming from surveys or CRM systems is relatively easy to deal with but rarely standardized. It’s also of relatively known quality, but there’s no surprise that you pay to get it (you either pay your call centre, web site, survey systems/vendors). Therefore this is the cheapest data to harvest. </p>
<p>Syndicated research (e.g. industry reports/omnibus data) data sits slightly in the middle of the spectrum, its got a structure (usually quite a variable one) but its aggregated so its limited, and some historic data also fits into this part of the spectrum. </p>
<p>Conversely unstructured data like <a href="http://www.facebook.com">facebook</a>, <a href="http://www.twitter.com">twitter</a> and blogs are almost without structure, generally need some categorization which can also mean a partly human process therefore the harvester is potentially a process in its own right. </p>
<p>Whichever way you look at it, you either pay more to grow the grapes and less to harvest them or the other way around.</p>
<h3></h3>
<h3>Keep focussed on the Barolo and You will Pick the Right Grapes</h3>
<p>Throughout the process of building a warehouse, you have to stay focussed on the wine you are trying to make at the end. The un-harvested grapevines will still be there. There’s been too many attempts to build warehouses without a clear vision of what’s got to come out of the other end. </p>
<blockquote><p>“lets grab all the data we possibly can and see if there’s anything there”</p>
</blockquote>
<p>This is <strong>NOT</strong> the idea, you will never get a good glass of wine from a bottle of random grapes without huge amounts of luck. </p>
<p>If you are interested in finding out more about what we do, or what value it can bring visit <a href="http://www.forgetdata.com">www.forgetdata.com</a> or message me personally on twitter @<a href="http://twitter.com/samwinstanley">samwinstanley</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.surveyxtreme.com/?feed=rss2&amp;p=108</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Teaching computers to think backwards&#8230;.</title>
		<link>http://www.surveyxtreme.com/?p=103</link>
		<comments>http://www.surveyxtreme.com/?p=103#comments</comments>
		<pubDate>Tue, 15 Sep 2009 17:28:40 +0000</pubDate>
		<dc:creator>sam</dc:creator>
				<category><![CDATA[Data Warehouse]]></category>
		<category><![CDATA[Interviewing]]></category>
		<category><![CDATA[Market Research Industry]]></category>
		<category><![CDATA[Tabulation]]></category>

		<guid isPermaLink="false">http://www.surveyxtreme.com/?p=103</guid>
		<description><![CDATA[Did you ever stop to think what’s really making survey data unique…? I talk with database people often, some of them work on enormous ultra important data-warehousing systems for banks. They pick on me, they say:
“survey data is simple, you should try building an analysis database from our customer records…my life is hell”

I shrug this [...]]]></description>
			<content:encoded><![CDATA[<p>Did you ever stop to think what’s really making survey data unique…? I talk with database people often, some of them work on enormous ultra important data-warehousing systems for banks. They pick on me, they say:</p>
<blockquote><p>“survey data is simple, you should try building an analysis database from our customer records…my life is hell”</p>
</blockquote>
<p>I shrug this stuff off, its easy to pick on the little guy who isn’t building the systems that have 7 figure budgets and 100 strong programming teams. </p>
<h3>Thinking Backwards…</h3>
<p>Researcher’s actually think backwards, they know they are digging for information about how things perform against each-other, they come up with the instrument to measure this data, possibly in terms of questions and answers, possibly in terms of qualitative analysis, web mining etc.. however the start is the business problem. Often this transpires into some kind of interview script which has modules and questions and sample variables etc… what just happened was that something very business specific into something deeply generic (questions and answers). This is what I call “downgrading”.</p>
<p>For years and years software vendors have been working very hard to build systems for collecting and analysing data for surveys, and all of them have focussed on ease of creating surveys. In other words all of them help convert business minded ideas into generic questions and answers.</p>
<h3>Ease of Authoring Might be a BAD thing..</h3>
<h3></h3>
<h3></h3>
<p>You see the truth is that ease of authoring is a pseudonym for data-hell, it means that a relative novice can create an immense survey with no thought whatsoever to the real structure of the data that’s coming out.. an entire DP industry and countless DP tools have been founded on creating order from the chaos that is surveys.</p>
<h3>We Revolve Around Cross-Tab Reports</h3>
<p>I refuse to do an extensive industry study to establish how many cross tabulation tools exist for market research vs. the rest of industry. Whatever the hard numbers I’m certain its extremely disproportionate to the market size.</p>
<p>It’s clear why the market research and survey research industry loves this kind of technology so much though. It’s allowing primitive information like questions and answers to be “upgraded” back into a business context so that it can be analysed.</p>
<h3>So are cross tabs a bad thing?</h3>
<p>Cross tabs have a role, they are an analysis tool more than a reporting tool, its a fairly neat way to compare X with Y in quite an ad-hoc fashion it enables exploration of results.</p>
<p>However cross tabs bring baggage with them when you use them as a reporting platform in a couple of ways:</p>
<ul>
<li>Cross tab reports are nearly always showing a single source of data and that data is questionnaire structured not business structured. This means every piece of information you put into this data source is getting “downgraded” and its loosing richness and its context.</li>
<li>Cross tabs naturally limit analysis, we “the techies who provide to the MR industry” try to force statistical models into these reports in a very un-natural way… for instance nobody else, anywhere outside surveys has really made use of a Column Proportions test which compares column A with B/C/D/E, that doesn’t mean that nobody else in the world ever does that kind of analysis it just means is a pretty absurd way to implement the result of a statistical test.</li>
</ul>
<h3>Preaching to the converted</h3>
<p>Much of the survey research world has moved on from cross tabs at least at some level, and I’m not out to teach people to suck eggs. But I see so much evidence that traditional DP and interactive tab&#160; packages still provide lots of underpinnings for the industry.</p>
<p>The industry is bound in chains but contains many smart people who do understand that if you think up-front about the way to arrange data, you can provide a much more valuable analysis and reporting experience on the back of it. What we lack is the 7 figure budgets that make it so easy for banks and blue-chips to roll elegant warehouse systems and dynamic business dashboards on the back of it.</p>
<h3>Back to You Mr Database Guru</h3>
<p>At the start of the post, I stated my poor treatment by my peers in the banking world. The truth is they live in a world of luxury, if they thought they had a hard life now whatever would they do if 100’s of people in the organisation were able to add a new data field into a customer records.. but that’s virtually the same thing as adding a new question to a questionnaire. Seriously, those guys would suck at surveys in every way…</p>
<p>At <a href="http://www.forgetdata.com">forgetdata</a> we spend a lot more time thinking about and designing the strategy for managing and storing survey data than most people. We understand that perfect standardisation of questionnaires isn’t a perfect world its a rare luxury and that even 6 figure data architecture budgets are even rarer.</p>
<p>Our passion is helping the industry solve this kind of problem without having to re-invent every wheel its based on, a sensible business based highly controlled kind of chaos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.surveyxtreme.com/?feed=rss2&amp;p=103</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Where&#8217;s my data?</title>
		<link>http://www.surveyxtreme.com/?p=101</link>
		<comments>http://www.surveyxtreme.com/?p=101#comments</comments>
		<pubDate>Fri, 11 Sep 2009 10:31:08 +0000</pubDate>
		<dc:creator>sam</dc:creator>
				<category><![CDATA[Data Warehouse]]></category>
		<category><![CDATA[Interviewing]]></category>
		<category><![CDATA[Market Research Industry]]></category>
		<category><![CDATA[Reporting]]></category>
		<category><![CDATA[Survey]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.surveyxtreme.com/?p=101</guid>
		<description><![CDATA[Have you ever had the uncomfortable task of assembling an expense report? You really want a number, but to get to that number you are trawling through paper receipts, bank statements, line items on phone bills and so on. All to arrive at what you deem to be the answer.. 1 number that you can [...]]]></description>
			<content:encoded><![CDATA[<p>Have you ever had the uncomfortable task of assembling an expense report? You really want a number, but to get to that number you are trawling through paper receipts, bank statements, line items on phone bills and so on. All to arrive at what you deem to be the answer.. 1 number that you can call accurate. </p>
<p>When analysing markets or business performance, analysts and researchers are faced with this kind of task all the time. Forced into a position to be able to give a certain figure for whatever the KPI in question is, this number I will call <strong>5.6</strong> just for consistency, it matters little what <strong>5.6</strong> is it could be a measure of anything. For instance “on a scale of 1.7 the average overall customer satisfaction was <strong>5.6</strong> for the last quarter” it can be a pretty important number this 5.6….</p>
<h3></h3>
<h3></h3>
<h3>If the Answer was 5.6 what was the question…..</h3>
<p>For a long time in the world of survey research arriving at such a number was a simple task relatively speaking.. you would run a survey, perform some data processing and somewhere probably in a cross tab report clearly stated there was the Overall Satisfaction question with a Mean score of 5.6. </p>
<p>However things are changing, the source of <strong>5.6</strong> is getting spread out, here are some of the things that could be considered now as evidence that “on a scale of 1.7 the average overall customer satisfaction was <strong>5.6</strong> for the last quarter” based on the world as it looks now (and this list is not exhaustive):</p>
<ul>
<li>The responses to several surveys quite possibly surveys that don’t exactly match some from in-house research, some bought in from outside sources. </li>
<li>Research from actual performance in CRM and mining what was said in emails and conversations between the company and its customers. For instance if based on 1000 respondents the overall satisfaction was <strong>5.6</strong> but based on 10,000 calls to customer service, 85% of people said “I hate this company and I never want to do business with it again” its hard for an analyst to ignore this data if its available when arriving at <strong>5.6</strong>. </li>
<li>What is said on the internet about a business in social networks and online communities can and more frequently is being listened to as evidence of 5.6. </li>
</ul>
<h3>Where’s My Data?</h3>
<p>Given that 5.6 is considered important, possibly even life changing from the point of view of an analyst or researcher, its pretty important the the evidence supporting it is very solid. So solid that if somebody different were asked to reproduce the number 3 years down the line after the life changing decision they can do.</p>
<p>Relating back to the expense claim, its traditional to write down all the line items which amount to your number in a spreadsheet, and sometimes even scan all the evidence supporting those numbers and attach it. </p>
<h3></h3>
<h3>How to Know Where your Data is and PRofit?</h3>
<p>An initial part of any kind of analysis to arrive at 5.6 usually involves getting all of your data into 1 place and somehow normalising it to make it comparable. If <strong>5.6</strong> was the only answer you needed then probably making a spreadsheet and doing some analysis in Microsoft Excel would be quite okay. Unfortunately 1 number is never enough and 1,000’s <strong>5.6’</strong>s are usually needed.</p>
<p>To produce this kind of information quickly and efficiently either on demand via a Dashboard or online report, or distributed in a periodic report you have to build a process to support it along with the technology to support that. You need a common repository or warehouse to put all of your data in to enable you to get it out in a structured way. </p>
<p>At <a href="http://www.forgetdata.com/home/case-studies/55-cs-dw-for-results.html">forgetdata</a> we’re pioneering a type of data warehouse that allows data from diverse sources to co-exist, that enables these worlds to meet and we’re building the tools around that to support the getting the data in, analysing it and reporting from it. </p>
<p>There’s lots of general benefits to having a warehousing system in place that I’ll try to discuss in future articles, but its clear that making wide use of this kind of warehouse system enables lots of new possibilities both in terms of analysis and efficiency. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.surveyxtreme.com/?feed=rss2&amp;p=101</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Does good customer service look like BT?</title>
		<link>http://www.surveyxtreme.com/?p=100</link>
		<comments>http://www.surveyxtreme.com/?p=100#comments</comments>
		<pubDate>Wed, 09 Sep 2009 17:31:32 +0000</pubDate>
		<dc:creator>sam</dc:creator>
				<category><![CDATA[Off Topic]]></category>

		<guid isPermaLink="false">http://www.surveyxtreme.com/?p=100</guid>
		<description><![CDATA[Once again the much maligned blog diverts from its usual course of inactivity to&#160; another controlled rant about a major multinational company (my previous Dell rant did spawn a apology at the very least). Today’s target is the beloved BT (for those outside the know BT is the largest fixed line phone provider in the [...]]]></description>
			<content:encoded><![CDATA[<p>Once again the much maligned blog diverts from its usual course of inactivity to&#160; another controlled rant about a major multinational company (my previous <a href="http://www.surveyxtreme.com/?p=35">Dell rant</a> did spawn a apology at the very least). Today’s target is the beloved <a href="http://www.bt.com">BT</a> (for those outside the know BT is the largest fixed line phone provider in the UK and was once a government owned entity prior to being floated on the stock market about 20 years ago).</p>
<p>Honestly, I’m not a serial ranter most people who know me would say I’m a fairly laid back kind of person, and they would be right until this chain of events…</p>
<ul>
<li>On 4th September I received a couple of letters in the post from BT One letter said “Welcome to BT, &lt;fluffy saying how great it was I’d opened an account with them”, the other letter said “please complete and sign the following Direct Debit mandate for £22.50/month” or words to that effect.
<ul>
<li>I was confused I had a BT account which had remained intact for at least 5 years I had never changed it and indeed I checked my bill and the Account number on these letters did not match the account number on my bill, but the telephone number did. </li>
<li>My new service would start of 4th September which was the same day I got the letters so I thought I should check this out pretty fast or risk getting sucked into a “mystery contract” from BT. </li>
</ul>
</li>
<li>I phoned up customer service, they didn’t understand what had happened at all, however they thought it was all likely some glitch and promptly shut down the “mystery account number”. I made a complaint I wanted to know what had happened. </li>
<li>The next day a very jolly lady phoned me up, she was clearly a kind of “anti-<a href="http://en.wikipedia.org/wiki/Churn_rate">churn</a> CRM master” of some kind, she was so deeply apologetic and explained to me that my account transitioned between different internal BT systems and that usually no letters would be sent out and I would see no change except my next bill would have a new account number on it. However something went wrong. She reassured me that everything would be okay that my old account number was still working just fine and not to worry. </li>
</ul>
<p>At this point I’d spend 2 hours on the phone to BT but at least felt that something had been achieved.</p>
<h1>&#160;</h1>
<h2>On Monday 7th…</h2>
<h2>the Phone went dead..</h2>
<p>A voice in the back of my head was telling me that this would happen before it actually did, the unstoppable ball had already started rolling in BT, the hasty Customer Service rep I had initially talked to had shut down my account, he didn’t realize he was doing it he thought he was shutting down a strange ghost account but no.. he shut down my account.</p>
<h4>My satisfaction at this moment in time was somewhere between Highly Dissatisfied and Completely Dissatisfied, I was scoring about 1.4 on BT’s own Sat scale.</h4>
<p>However I thought, this might not be too bad, I’ll phone up tell them “I’ve been disconnected in error, please sort it out”. After several hours on the phone with several people the information I’d been getting back from BT had moved from “Actually sir you have never had a phone account with us, your line is with another provider we just do your broadband” to “Okay sir we understand what’s happened, we’ll transfer you to sales because only they can reactivate your account” reluctantly I agreed to accept my 5th transfer of the evening… On came the sales rep and we reached this kind of point:</p>
<blockquote><p><em>Sir we can sort this out, you will need to pay a £5.95 connection fee, sign up to a new 12 month contract and within the next 5 working days your line will be active again</em></p>
</blockquote>
<p>Well I declined this kind offer, and explained the circumstances again very clearly and asked to be connected to a person who could reconnect me without a fee and without a minimum term contract. I discovered that Sales people dislike this line of action, predominantly because 2 different people <strong>CUT ME OFF</strong> when I uttered these words.. each time after I was cut off customer service would call me back and repeat the process of connect me to sales, each time I said those words the sales person (who is only scored on revenue generation) cut me off. Since then the Customer Service team have evidently given up as no word has been heard from any of the large quantity of people who all appear to be called Michelle (I’ve decided the name is culturally unlikely given what has become very wide spread research now) have attempted to contact me.</p>
<p>&#160;</p>
<h1></h1>
<h5></h5>
<h1></h1>
<h2>But all stories have a happy end…</h2>
<p>With Dell it was HP who they lost their business to, with BT I’m really happy to say it was <a href="http://www.thephone.coop/">thephone.coop</a> given I was beginning to conclude that the wheels of BT were actually unable to turn in a way that would reach a satisfactory end because the computer was saying <strong>NO</strong> regardless of the number of cheery people of sub-continental people called Michelle were thrown at it. I phoned up thephone.coop, I use this supplier for all my office telephone/internet needs. Within 20 minutes I’d started a new contract which was cheaper, on my old number (which BT wholesale still have to reconnect and will still take up to 5 days whatever happens). </p>
<p>But there’s more to my choice than that, thephone.coop just shines at customer service, every time I’ve had any cause to contact them, 1 person has been able to see or find out the whole picture. They are a company with values and it shows down to every single thing they do. Ethically they are great, they don’t just say they are different, they actually are different right from the core and for me at least it works. So if nothing else they deserve the viral marketing so here it is, my token effort.</p>
<p><a href="http://www.thephone.coop/"><img alt="The Phone Co-op" src="http://www.thephone.coop/templates/phone_coop_home/images/TPC_logo.png" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.surveyxtreme.com/?feed=rss2&amp;p=100</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Moving Hyper-V Virtual Machines between physical disks..</title>
		<link>http://www.surveyxtreme.com/?p=95</link>
		<comments>http://www.surveyxtreme.com/?p=95#comments</comments>
		<pubDate>Fri, 03 Oct 2008 08:16:49 +0000</pubDate>
		<dc:creator>sam</dc:creator>
				<category><![CDATA[Hyper-v]]></category>
		<category><![CDATA[Off Topic]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.surveyxtreme.com/?p=95</guid>
		<description><![CDATA[Generally spring is the time for cleaning, but for me it came early this year because one of my hard disks failed after only 4 months of service. It also happened to be the hard disk that contained all of my VM&#8217;s, quite annoying but I had backups. All of this lead to a rethink [...]]]></description>
			<content:encoded><![CDATA[<p>Generally spring is the time for cleaning, but for me it came early this year because one of my hard disks failed after only 4 months of service. It also happened to be the hard disk that contained all of my VM&#8217;s, quite annoying but I had backups. All of this lead to a rethink and a decision to replace my broken hard disk with 2 mirrorred hard disks. As these were both new, I decided to use 2 different brands of the disks in case some kind of factory problem was going to cause these to fail on the same day.</p>
<p>Installing the new disks into my trusty HP server was easy, it can hold 4 disks and it has support for Hardware RAID. I have a spare slot still and I will put the RMA&#8217;d failed disk into that when it arrives and use it as a backup device.</p>
<p>The net result of all this thinking was that some thinking and re-arranging of stuff was going to leave me with new drive letters for my Hyper-V area, as a result some configuration changes are needed to pull this off. On the net I&#8217;ve seen several somewhat hacky ways to do this but I wanted to do it what I think is &#8220;the right way&#8221;.</p>
<p>This is the approach I took:</p>
<ol>
<li>Export each of the VM&#8217;s to the new disk using the Hyper-V manager&#8217;s built in Export feature which I would say 2 things about:<br />
   &#8211; is rather slow to be polite. I am certain it would be faster if I paid an exhorbitant amount of money for expensive disks but still this is SATA-300 to SATA-300 on the same machine and exporting 120GB took somewhere over an hour.<br />
   &#8211; in general there should be an optimized way to just &#8220;move a VM&#8221; along with all its stuff. Exporting is more made for moving between machines.</li>
<li>Delete the VMs in the Hyper-V manager (gulp)&#8230; gotta hope that export was successful.</li>
<li>Change the Overall hyper-v settings to point at the new mirrored drive/paths.</li>
<li>Import each of the virtual machines. This is very much faster than exporting thankfully.</li>
</ol>
<div>This all seems pretty obvious, there&#8217;s likely a better way, the trouble is that Hyper-V is doing so many clever things with differencing disks and stuff all the time that just copying the VHD hard disk file is never going to work.</div>
<div>All of this wasn&#8217;t admin for the sake of Admin.. These problems have lead me to re-think the way I back up. Previously my main network server with lots of important stuff on it (which happens to be Windows 2003) was always backed up from the &#8220;inside&#8221;, e.g. it was running backup jobs on itself like it was a normal machine. This meant that when I had to restore it was really like doing a BMR (bare metal restore) and that took an age to do, I did have backups of the VM configurations and disks from an earlier point but they were out of date with my daily inside backups which left me in no-mans land a bit.</div>
<div>Usually I use Acronis to back up, but I&#8217;ve actually been having some problems because of patchy windows 2008 support meaning the Hyper-V area doesn&#8217;t back up properly (some kinds of VSS problems). My new thought is that I&#8217;ll use the build in Windows Backup system to backup the entire system to a hard disk, while still using acronis to back up critical files to an off-site location.</div>
<div>In essence, I&#8217;m feeling that when using Hyper-V &#8220;outside&#8221; backups of the VHD and associated files are going to lead to much faster recovery, but.. at the same time, outside backups are pretty lousy for restoring individual files/data inside the virtual machines, so I will have inside backups for those tasks. </div>
<div>My feeling is that somebody should capitalize on this, its probably not a lot of work, most backup catalogs can be browsed by the tool that makes them, if that browsing and restore ability was extended to include the inside of VHD files (while managing the associated snapshots) we&#8217;d be in much better shape for a unified backup solution..</div>
<div>/Sam</div>
]]></content:encoded>
			<wfw:commentRss>http://www.surveyxtreme.com/?feed=rss2&amp;p=95</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Excel Multiple Response Data in SPSS Reporter</title>
		<link>http://www.surveyxtreme.com/?p=74</link>
		<comments>http://www.surveyxtreme.com/?p=74#comments</comments>
		<pubDate>Wed, 13 Aug 2008 14:29:04 +0000</pubDate>
		<dc:creator>sam</dc:creator>
				<category><![CDATA[Dimensions]]></category>
		<category><![CDATA[Market Research Industry]]></category>
		<category><![CDATA[Reporting]]></category>
		<category><![CDATA[Tabulation]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.surveyxtreme.com/?p=74</guid>
		<description><![CDATA[Introduction
After my last blog post about using auto-categorization in Desktop Reporter, I was asked the question:
&#8220;How do I analyze multiple response data which is coming from Excel&#8221;	
Here&#8217;s a walkthrough of 1 way that you can handle it.
The Data
I started with data which is actually a profile extraction of the Museum database that I exported to [...]]]></description>
			<content:encoded><![CDATA[<h3>Introduction<br /></h3>
<p>After my last blog post about using auto-categorization in Desktop Reporter, I was asked the question:</p>
<p><em>&#8220;How do I analyze multiple response data which is coming from Excel&#8221;</em>	</p>
<p>Here&#8217;s a walkthrough of 1 way that you can handle it.</p>
<h3>The Data<br /></h3>
<p>I started with data which is actually a profile extraction of the Museum database that I exported to Microsoft Excel which looks as follows (in Excel):</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 48px;">
<col style="width: 54px;">
<col style="width: 286px;">
<col style="width: 199px;">
<col style="width: 52px;"></colgroup>
<tbody valign="top">
<tr style="height: 17px;">
<td style="border-style: solid none; border-color: black -moz-use-text-color; border-width: 0.5pt medium; padding-left: 7px; padding-right: 7px;" valign="bottom">
<p><span style="color: black;"><strong>Serial</strong></span></p>
</td>
<td style="border-style: solid none; border-color: black -moz-use-text-color; border-width: 0.5pt medium; padding-left: 7px; padding-right: 7px;" valign="middle">
<p style="text-align: center;"><span style="color: black; font-family: Arial; font-size: 8pt;"><strong>Biology</strong></span></p>
</td>
<td style="border-style: solid none; border-color: black -moz-use-text-color; border-width: 0.5pt medium; padding-left: 7px; padding-right: 7px;" valign="middle">
<p style="text-align: center;"><span style="color: black; font-family: Arial; font-size: 8pt;"><strong>Expectation</strong></span></p>
</td>
<td style="border-style: solid none; border-color: black -moz-use-text-color; border-width: 0.5pt medium; padding-left: 7px; padding-right: 7px;" valign="middle">
<p style="text-align: center;"><span style="color: black; font-family: Arial; font-size: 8pt;"><strong>Museums_Visited</strong></span></p>
</td>
<td style="border-style: solid none; border-color: black -moz-use-text-color; border-width: 0.5pt medium; padding-left: 7px; padding-right: 7px;" valign="middle">
<p style="text-align: center;"><span style="color: black; font-family: Arial; font-size: 8pt;"><strong>Gender</strong></span></p>
</td>
</tr>
<tr style="background: rgb(216, 216, 216) none repeat scroll 0% 0%; height: 17px; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<td style="border: medium none ; padding-left: 7px; padding-right: 7px;" valign="middle">
<p><span style="color: black; font-family: Arial; font-size: 8pt;">1</span></p>
</td>
<td style="border: medium none ; padding-left: 7px; padding-right: 7px;" valign="bottom">
<p><span style="color: black; font-family: Arial; font-size: 8pt;">No</span></p>
</td>
<td style="border: medium none ; padding-left: 7px; padding-right: 7px;" valign="bottom">
<p><span style="color: black; font-family: Arial; font-size: 8pt;">General knowledge and education</span></p>
</td>
<td style="border: medium none ; padding-left: 7px; padding-right: 7px;" valign="bottom">
<p><span style="color: black; font-family: Arial; font-size: 8pt;">National Museum of Science</span></p>
</td>
<td style="border: medium none ; padding-left: 7px; padding-right: 7px;" valign="bottom">
<p><span style="color: black; font-family: Arial; font-size: 8pt;">Male</span></p>
</td>
</tr>
<tr style="height: 17px;">
<td style="border: medium none ; padding-left: 7px; padding-right: 7px;" valign="middle">
<p><span style="color: black; font-family: Arial; font-size: 8pt;">2</span></p>
</td>
<td style="border: medium none ; padding-left: 7px; padding-right: 7px;" valign="bottom">
<p><span style="color: black; font-family: Arial; font-size: 8pt;">No</span></p>
</td>
<td style="border: medium none ; padding-left: 7px; padding-right: 7px;" valign="bottom">
<p><span style="color: black; font-family: Arial; font-size: 8pt;">Not answered</span></p>
</td>
<td style="border: medium none ; padding-left: 7px; padding-right: 7px;" valign="bottom">
<p><span style="color: black; font-family: Arial; font-size: 8pt;">National Museum of Science</span></p>
</td>
<td style="border: medium none ; padding-left: 7px; padding-right: 7px;" valign="bottom">
<p><span style="color: black; font-family: Arial; font-size: 8pt;">Female</span></p>
</td>
</tr>
<tr style="background: rgb(216, 216, 216) none repeat scroll 0% 0%; height: 17px; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<td style="border: medium none ; padding-left: 7px; padding-right: 7px;" valign="middle">
<p><span style="color: black; font-family: Arial; font-size: 8pt;">3</span></p>
</td>
<td style="border: medium none ; padding-left: 7px; padding-right: 7px;" valign="bottom">
<p><span style="color: black; font-family: Arial; font-size: 8pt;">No</span></p>
</td>
<td style="border: medium none ; padding-left: 7px; padding-right: 7px;" valign="bottom">
<p><span style="color: black; font-family: Arial; font-size: 8pt;">Interest/satisfy curiosity</span></p>
</td>
<td style="border: medium none ; padding-left: 7px; padding-right: 7px;" valign="bottom">
<p><span style="color: black; font-family: Arial; font-size: 8pt;">Museum of Design,National Art Gallery</span></p>
</td>
<td style="border: medium none ; padding-left: 7px; padding-right: 7px;" valign="bottom">
<p><span style="color: black; font-family: Arial; font-size: 8pt;">Female</span></p>
</td>
</tr>
</tbody>
</table>
</div>
<p> </p>
<p>Museums_Visited is a multiple response which is comma separated. </p>
<p> </p>
<h3>Splitting out the categories.<br /></h3>
<p>Before we can really work on the data in Reporter we need to make a couple of tweaks to it in excel.</p>
<p>Inside Excel &#8211; Select the Museums_Visited Column then click on the &#8220;Text to Columns&#8221; button:</p>
<p><img src="http://www.surveyxtreme.com/wp-content/uploads/2008/08/081308-1428-excelmultip18.png" alt="" />	</p>
<p>This starts the conversion Wizard.</p>
<p><img src="http://www.surveyxtreme.com/wp-content/uploads/2008/08/081308-1428-excelmultip21.png" alt="" align="left" /><img src="http://www.surveyxtreme.com/wp-content/uploads/2008/08/081308-1428-excelmultip31.png" alt="" align="left" /><img src="http://www.surveyxtreme.com/wp-content/uploads/2008/08/081308-1428-excelmultip41.png" alt="" />	</p>
<p>The end result of this is a brand new column or 2, actually 5 new columns in my case, there is one column for each response to Museums_Visited and the most responses anybody made to that question is 5. (This is what SPSS Base users will commonly call a &#8220;Category Set&#8221;).</p>
<p><img src="http://www.surveyxtreme.com/wp-content/uploads/2008/08/081308-1428-excelmultip51.png" alt="" />	</p>
<p>Now the data is in this shape we can take the rest to Reporter.</p>
<h3>Opening up in Reporter</h3>
<p>We open up the Excel file in Reporter and it recognises each column to be Text, Text is not great for doing tabulations! it needs some work&#8230;</p>
<p><img src="http://www.surveyxtreme.com/wp-content/uploads/2008/08/081308-1428-excelmultip61.png" alt="" /></p>
<p>	</p>
<p>To make the Text variables usable for tabulations we need to categorize them, and we do that using the new Categorize feature, as follows:</p>
<p><img src="http://www.surveyxtreme.com/wp-content/uploads/2008/08/081308-1428-excelmultip71.png" alt="" />	</p>
<p><img src="http://www.surveyxtreme.com/wp-content/uploads/2008/08/081308-1428-excelmultip81.png" alt="" />	</p>
<p>Note I have unchecked the &#8220;Other&#8221; option and very importantly Not asked (NULL) is checked <strong>FOR the first category only </strong> this point is very important for a reason I will mention later, the second variable should be categorized with these options:</p>
<p><img src="http://www.surveyxtreme.com/wp-content/uploads/2008/08/081308-1428-excelmultip91.png" alt="" />	</p>
<p><strong>Note that for this one the User Missing Category is checked.<br /></strong></p>
<p>And repeat this for all of the 5 new variables until we have along with the other categorical variables in the data until we have (note that there are new variables and these have new icons):</p>
<p><img src="http://www.surveyxtreme.com/wp-content/uploads/2008/08/081308-1428-excelmultip101.png" alt="" />	</p>
<p>The final step is to make a new variable that combines our Museums_1-5 into a multiple response.</p>
<p><img src="http://www.surveyxtreme.com/wp-content/uploads/2008/08/081308-1428-excelmultip111.png" alt="" />	</p>
<p>Hit the select button which opens the Expression builder&#8230; We want our new variable to add together all the individual responses to the Museums_1-6 variables to make one new multiple response variable.</p>
<p><img src="http://www.surveyxtreme.com/wp-content/uploads/2008/08/081308-1428-excelmultip121.png" alt="" /></p>
<p>Click okay, Desktop Reporter does some work in the background and this screen now has responses in it.	</p>
<p><img src="http://www.surveyxtreme.com/wp-content/uploads/2008/08/081308-1428-excelmultip131.png" alt="" /></p>
<p>Click Save and close to save this new variable into the data.</p>
<p>	</p>
<p>Then Export the data to a new format as follows:</p>
<p><img src="http://www.surveyxtreme.com/wp-content/uploads/2008/08/081308-1428-excelmultip141.png" alt="" />	</p>
<p>Then open the newly exported data.</p>
<p><img src="http://www.surveyxtreme.com/wp-content/uploads/2008/08/081308-1428-excelmultip151.png" alt="" />	</p>
<p>Note here that I am opening an MDD file after exporting a DDF file.</p>
<p><img src="http://www.surveyxtreme.com/wp-content/uploads/2008/08/081308-1428-excelmultip161.png" alt="" />	</p>
<h2>Drum roll Please<br /></h2>
<p><img src="http://www.surveyxtreme.com/wp-content/uploads/2008/08/081308-1428-excelmultip171.png" alt="" />	</p>
<p>There we have excel multi-response data tabulated in Desktop Reporter.</p>
<p> </p>
<h3>Some final notes<br /></h3>
<p> </p>
<ol>
<li><strong>Why did you set up the first Museum variable to use NULL and the others to not use Null. </strong><br />I knew I was going to make the multiple response variable which had the expression Museums_1+Museums_2+Museums_3 etc.. I also knew that Museums_1 was the real base of the variable, (e.g. people with a blank to Museums_1 actually did not answer that question). The Dimensions DataModel has special ways of dealing with the NULL value (this is called the ANSI SQL 92 way to handle nulls). As a result 1+NULL=NULL&#8230;. In our case if Museums_1 had a value and Musuems_5 did not then the end result of Museums_1+&#8230;.+Museums_5 would always be null which is definitely not what was expected.</li>
<li><strong>Why so many steps.. it must be possible to make it simpler.</strong><br />All of these steps can be automated if you are comfortable with mrStudio and particularly with TOM scripting. In the end Excel isn&#8217;t a great data format, especially when you talk about multiple response data and I think Reporter is doing a good job of getting around some of those weaknesses. This is a slightly specialized case because in the end if the data you have in excel is really simple like this you can achieve a good result just using excel itself.</li>
<li><strong>Why the export to DDF, why not just analyse in the Excel format. <br /></strong>There&#8217;s definitely a performance reason why it&#8217;s a good idea, but I also did find some problems with making tables before I did the export. I suspect there were ways to workaround these but I&#8217;d already decided I was going to export the data to something that could natively hold multiple response data.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.surveyxtreme.com/?feed=rss2&amp;p=74</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

