<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" gd:etag="W/&quot;DEMFSHw-eyp7ImA9WhRbGEU.&quot;"><id>tag:blogger.com,1999:blog-7289861445889907506</id><updated>2012-02-10T15:06:59.253Z</updated><category term="TRANSFORM-it" /><category term="insource" /><category term="data quality" /><category term="functionality" /><category term="top down" /><category term="bugs" /><category term="MDX CUBE-it CHART-it" /><category term="data academy" /><category term="jail-it" /><category term="principals" /><category term="MS ACCESS" /><category term="data warehouse" /><category term="CUBE-it" /><category term="regex" /><category term="bottom up" /><category term="SSAS" /><category term="STAR-it" /><category term="SQL Azure" /><category term="64 BIT SERVER" /><category term="un-pivot" /><category term="kimball" /><category term="partners" /><category term="CHART-it" /><category term="Unit Testing" /><category term="MDX" /><category term="inmon" /><title>Data Warehousing and Data Academy ®</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://dataacademy.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://dataacademy.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Rob Davenport</name><uri>http://www.blogger.com/profile/05459562806146606083</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="23" src="http://4.bp.blogspot.com/_IH3ur8TilYQ/SsC5rXI41xI/AAAAAAAAAAg/0rOM4KQXrFE/S220/Rob05.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>147</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/DataWarehousingWithDataAcademy" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="datawarehousingwithdataacademy" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DEMFSHw9eCp7ImA9WhRbGEU.&quot;"><id>tag:blogger.com,1999:blog-7289861445889907506.post-7815429754064784819</id><published>2012-02-10T12:00:00.000Z</published><updated>2012-02-10T15:06:59.260Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-10T15:06:59.260Z</app:edited><title>Heading For The EX-it</title><content type="html">Getting data into your data warehouse is easy, using Data Academy - fire up LOAD-it, select a data source, select the tables and "bang" - job done!&lt;br /&gt;
&lt;br /&gt;
But what about getting data &lt;u&gt;&lt;i&gt;&lt;b&gt;out&lt;/b&gt;&lt;/i&gt;&lt;/u&gt; again?&lt;br /&gt;
&lt;br /&gt;
(Why would you &lt;u&gt;&lt;i&gt;&lt;b&gt;want&lt;/b&gt;&lt;/i&gt;&lt;/u&gt; to get data out? In the case of our NHS clients, for statutory reporting!)&lt;br /&gt;
&lt;br /&gt;
Until now, the only way to do this was by writing a custom SSIS package and pulling it into the Data Academy framework with ORCHESTRATE-it - all perfectly do-able, but we figured that there had to be a better way; and now there is... or rather, there &lt;u&gt;&lt;i&gt;&lt;b&gt;will&lt;/b&gt;&lt;/i&gt;&lt;/u&gt; be!&lt;br /&gt;
&lt;br /&gt;
The Data Academy 6.2 is set to include a new module for exporting data &lt;u&gt;&lt;i&gt;&lt;b&gt;from&lt;/b&gt;&lt;/i&gt;&lt;/u&gt; Data Academy; and we've been really zooming-in on ease-of-use - just set up an export definition, select the tables and "bang"! (Does this sound familiar?)&lt;br /&gt;
&lt;br /&gt;
The only question remaining for us is to decide on a module name:&lt;br /&gt;
&lt;br /&gt;
EX-it?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7289861445889907506-7815429754064784819?l=dataacademy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://dataacademy.blogspot.com/feeds/7815429754064784819/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dataacademy.blogspot.com/2012/02/heading-for-ex-it.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/7815429754064784819?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/7815429754064784819?v=2" /><link rel="alternate" type="text/html" href="http://dataacademy.blogspot.com/2012/02/heading-for-ex-it.html" title="Heading For The EX-it" /><author><name>Syd</name><uri>http://www.blogger.com/profile/14792368170002037565</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-EKaoKqhI1oo/TrpIbLXODnI/AAAAAAAAABU/ZDyh-5OQOJA/s220/SE1011.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CkMEQ3Y6cSp7ImA9WhRbEko.&quot;"><id>tag:blogger.com,1999:blog-7289861445889907506.post-3205593698735698011</id><published>2012-02-03T12:00:00.000Z</published><updated>2012-02-03T12:00:02.819Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-03T12:00:02.819Z</app:edited><title>Data Academy 6 Sneak Peeks: Source Code Control</title><content type="html">Data Academy 6 introduces the Data Academy Console - a Visual 
Studio-like development environment, dedicated to your data warehousing 
project!&lt;br /&gt;
&lt;br /&gt;
With Source Code Control, team working is easier than ever: you can 
check modules in or out; 'diff' selected versions; revert changes you 
don't want to keep; and see the full history of an object - who changed 
something, what they changed, and when they changed it. &lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-thRGYGV4kXg/TxAneUu2vnI/AAAAAAAAADI/r9oq9sVmLrk/s1600/Source_Code_Control.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-thRGYGV4kXg/TxAneUu2vnI/AAAAAAAAADI/r9oq9sVmLrk/s1600/Source_Code_Control.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7289861445889907506-3205593698735698011?l=dataacademy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://dataacademy.blogspot.com/feeds/3205593698735698011/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dataacademy.blogspot.com/2012/02/data-academy-6-sneak-peeks-source-code.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/3205593698735698011?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/3205593698735698011?v=2" /><link rel="alternate" type="text/html" href="http://dataacademy.blogspot.com/2012/02/data-academy-6-sneak-peeks-source-code.html" title="Data Academy 6 Sneak Peeks: Source Code Control" /><author><name>Syd</name><uri>http://www.blogger.com/profile/14792368170002037565</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-EKaoKqhI1oo/TrpIbLXODnI/AAAAAAAAABU/ZDyh-5OQOJA/s220/SE1011.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-thRGYGV4kXg/TxAneUu2vnI/AAAAAAAAADI/r9oq9sVmLrk/s72-c/Source_Code_Control.png" height="72" width="72" /><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;D0EESXk7eCp7ImA9WhRUFks.&quot;"><id>tag:blogger.com,1999:blog-7289861445889907506.post-1646627559577704894</id><published>2012-01-27T12:00:00.000Z</published><updated>2012-01-27T12:00:08.700Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-27T12:00:08.700Z</app:edited><title>Data Academy 6 Sneak Peeks: The Warehouse Explorer</title><content type="html">Data Academy 6 introduces the Data Academy Console - a Visual Studio-like development environment, dedicated to your data warehousing project!&lt;br /&gt;
&lt;br /&gt;
The Warehouse Explorer is equivalent to the Solution Explorer in a 
Visual Studio project - it allows you to zip around between Data Academy
 modules with unprecedented ease. &lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-VKBG11Okb6c/TxAj6JhN7CI/AAAAAAAAAC4/8uokaoDwFbc/s1600/Warehouse_Explorer.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-VKBG11Okb6c/TxAj6JhN7CI/AAAAAAAAAC4/8uokaoDwFbc/s1600/Warehouse_Explorer.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7289861445889907506-1646627559577704894?l=dataacademy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://dataacademy.blogspot.com/feeds/1646627559577704894/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dataacademy.blogspot.com/2012/01/data-academy-6-sneak-peeks-warehouse.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/1646627559577704894?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/1646627559577704894?v=2" /><link rel="alternate" type="text/html" href="http://dataacademy.blogspot.com/2012/01/data-academy-6-sneak-peeks-warehouse.html" title="Data Academy 6 Sneak Peeks: The Warehouse Explorer" /><author><name>Syd</name><uri>http://www.blogger.com/profile/14792368170002037565</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-EKaoKqhI1oo/TrpIbLXODnI/AAAAAAAAABU/ZDyh-5OQOJA/s220/SE1011.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-VKBG11Okb6c/TxAj6JhN7CI/AAAAAAAAAC4/8uokaoDwFbc/s72-c/Warehouse_Explorer.png" height="72" width="72" /><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;Ck8EQH85fSp7ImA9WhRUEEs.&quot;"><id>tag:blogger.com,1999:blog-7289861445889907506.post-7707979213680328568</id><published>2012-01-20T12:00:00.000Z</published><updated>2012-01-20T12:00:01.125Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-20T12:00:01.125Z</app:edited><title>When The Problem Is That You Don't Know What The Problem Is!</title><content type="html">One of the most "interesting" aspects of with working on Data Academy is that I often don't understand the full nature of the problem I'm trying to solve.&lt;br /&gt;
&lt;br /&gt;
In short: the problem is that I don't know what the problem is! &lt;br /&gt;
&lt;br /&gt;
This isn't because I'm stupid... not entirely anyway!&lt;br /&gt;
&lt;br /&gt;
It is because I tend to work by taking a &lt;i&gt;micro&lt;/i&gt; problem - for example, a transformation with 500 input columns, called Period_1, Period_2, etc. - and solving it at a &lt;i&gt;macro&lt;/i&gt; level - by (in this case) adding the capability to match any number of input columns via a Regular Expression.&lt;br /&gt;
&lt;br /&gt;
The difficulty is that, although it is straightforward to test my code against the &lt;i&gt;micro&lt;/i&gt; case, there &lt;i&gt;&lt;b&gt;is&lt;/b&gt;&lt;/i&gt; no &lt;i&gt;macro&lt;/i&gt; case until someone takes the functionality and starts actually using it... usually in ways I could never have anticipated!&lt;br /&gt;
&lt;br /&gt;
This is one of the reasons why we (as a business) &lt;i&gt;&lt;b&gt;have&lt;/b&gt;&lt;/i&gt; to have the ability to turn around code fixes quickly, and for the customer to implement them straightforwardly - and we pride ourselves on this. If you find a bug we will fix it rapidly &lt;i&gt;&lt;b&gt;and&lt;/b&gt;&lt;/i&gt; provide you with a new binary, which you can install in just a few clicks.&lt;br /&gt;
&lt;br /&gt;
You may find the same thing in your data warehousing project too - you don't &lt;i&gt;&lt;b&gt;know&lt;/b&gt;&lt;/i&gt; what questions are going to be asked of it; so you need to be able to turn around fixes quickly when it comes up against one it can't answer - which is when Data Academy itself really comes into its own, with its focus on the data warehouse as a development project, complete with source code control and package-release support.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7289861445889907506-7707979213680328568?l=dataacademy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://dataacademy.blogspot.com/feeds/7707979213680328568/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dataacademy.blogspot.com/2012/01/when-problem-is-that-you-dont-know-what.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/7707979213680328568?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/7707979213680328568?v=2" /><link rel="alternate" type="text/html" href="http://dataacademy.blogspot.com/2012/01/when-problem-is-that-you-dont-know-what.html" title="When The Problem Is That You Don't Know What The Problem Is!" /><author><name>Syd</name><uri>http://www.blogger.com/profile/14792368170002037565</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-EKaoKqhI1oo/TrpIbLXODnI/AAAAAAAAABU/ZDyh-5OQOJA/s220/SE1011.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DEcEQXs8eip7ImA9WhRVFEg.&quot;"><id>tag:blogger.com,1999:blog-7289861445889907506.post-693934567476362103</id><published>2012-01-13T12:00:00.000Z</published><updated>2012-01-13T12:00:00.572Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-13T12:00:00.572Z</app:edited><title>Pattern-Matching In SQL SELECT</title><content type="html">Data Academy has had the ability to do a pattern-matched SQL SELECT in &lt;i&gt;Un-Pivot&lt;/i&gt; transformations since version 5.6; but we've now added the same functionality to &lt;i&gt;Regular&lt;/i&gt; transformations in Data Academy 6.&lt;br /&gt;
&lt;br /&gt;
This means that you can select &lt;u&gt;all&lt;/u&gt; columns matching a particular &lt;i&gt;Regular Expression&lt;/i&gt; pattern, with a single swish of your Data Academy magic wand.&lt;br /&gt;
&lt;br /&gt;
So the following &lt;i&gt;RegEx&lt;/i&gt; expression:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;^Col&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
... when combined with the following &lt;i&gt;RegEx&lt;/i&gt; Target Field Name:&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;+.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
... will output &lt;u&gt;all&lt;/u&gt; columns beginning with Col - i.e. Col1, Col2, etc. - to a Target Field of the same name.&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7289861445889907506-693934567476362103?l=dataacademy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://dataacademy.blogspot.com/feeds/693934567476362103/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dataacademy.blogspot.com/2012/01/pattern-matching-in-sql-select.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/693934567476362103?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/693934567476362103?v=2" /><link rel="alternate" type="text/html" href="http://dataacademy.blogspot.com/2012/01/pattern-matching-in-sql-select.html" title="Pattern-Matching In SQL SELECT" /><author><name>Syd</name><uri>http://www.blogger.com/profile/14792368170002037565</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-EKaoKqhI1oo/TrpIbLXODnI/AAAAAAAAABU/ZDyh-5OQOJA/s220/SE1011.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;C04HQ349fSp7ImA9WhRWGEs.&quot;"><id>tag:blogger.com,1999:blog-7289861445889907506.post-111168291220521369</id><published>2012-01-06T12:00:00.000Z</published><updated>2012-01-06T14:58:52.065Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-06T14:58:52.065Z</app:edited><title>Median Aggregation in SQL Server</title><content type="html">It is one of those standard interview questions: how would you calculate a Median() aggregation in SQL Server?&lt;br /&gt;
&lt;br /&gt;
The usual answer involves temp tables (or if you are especially hip and modern, the OVER clause) combined with a couple of well-judged SELECT TOPs.&lt;br /&gt;
&lt;br /&gt;
And, sure, all this is do-able, but there has to be a better way!&lt;br /&gt;
&lt;br /&gt;
(To be honest, that "better way" really ought to be Microsoft building it into the actual product; but in the meantime...)&lt;br /&gt;
&lt;br /&gt;
Data Academy* now supports a dbo.__Median() aggregation in TRANSFORM-it, which you can use just like COUNT() or SUM().&lt;br /&gt;
&lt;br /&gt;
In Data Academy, this is as simple as setting the Group Function to:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;dbo.__Median(#)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
So next time someone asks you how to do a Median Aggregation in SQL Server, there is a new reply in town: &lt;br /&gt;
&lt;br /&gt;
Use Data Academy!&lt;br /&gt;
&lt;br /&gt;
--------&lt;br /&gt;
* SQL 2008 / 2008R2 versions only - sorry 2005 folks!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7289861445889907506-111168291220521369?l=dataacademy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://dataacademy.blogspot.com/feeds/111168291220521369/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dataacademy.blogspot.com/2012/01/median-aggregation-in-sql-server.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/111168291220521369?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/111168291220521369?v=2" /><link rel="alternate" type="text/html" href="http://dataacademy.blogspot.com/2012/01/median-aggregation-in-sql-server.html" title="Median Aggregation in SQL Server" /><author><name>Syd</name><uri>http://www.blogger.com/profile/14792368170002037565</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-EKaoKqhI1oo/TrpIbLXODnI/AAAAAAAAABU/ZDyh-5OQOJA/s220/SE1011.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;D0QMRHc5eSp7ImA9WhRWFU0.&quot;"><id>tag:blogger.com,1999:blog-7289861445889907506.post-1302360622669385025</id><published>2011-12-30T15:38:00.000Z</published><updated>2012-01-02T11:56:25.921Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-02T11:56:25.921Z</app:edited><title>The 4:30 Bug (And Why It Says Our Customers Are Smart!)</title><content type="html">I'm a bit of a "morning" person - I'm often at my desk before 6am; and by mid afternoon I'm definitely starting to wind-down.&lt;br /&gt;
&lt;br /&gt;
So why is it that bug reports always fly into my inbox at around 4:30pm?&lt;br /&gt;
&lt;br /&gt;
At first I thought I was just being unlucky! Or paranoid! Or both!&lt;br /&gt;
&lt;br /&gt;
But finally I realized that not only was there a genuine pattern of late-afternoon bug reports; but that it said something rather interesting about our customers:&lt;br /&gt;
&lt;br /&gt;
That they are out to get me?&lt;br /&gt;
&lt;br /&gt;
No! (I don't think so anyway!)&lt;br /&gt;
&lt;br /&gt;
Here is what I think happens:&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
A problem can occur at any time of day; and when it does, the typical Data Academy customer will try to work things out for themselves: why is this happening? Is it something I've done? Can I work around it?&lt;br /&gt;
&lt;br /&gt;
But eventually, after all these questions have been asked in vain, there will come a 
point in time when the customer is forced to concede defeat and report the issue to us...
 and that time is usually about 4:30pm! (Regardless of whether the original problem was discovered at 9 in the morning, or 2 in the afternoon - because it is human nature to give things 'till the end of the day' rather than (say) '3 hours'!)&lt;br /&gt;
&lt;br /&gt;
So, what this says about out customers is that they are pretty smart 
folks - they are always trying to understand the problem and find the 
answer themselves... at least until 4:30 rolls around!&lt;br /&gt;
&lt;br /&gt;
I still hate &lt;i&gt;The 4:30 Bug&lt;/i&gt; of course - and if I'm honest, I always will!&lt;br /&gt;
&lt;br /&gt;
But at least I can console myself with the thought that there is a very good reason for it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7289861445889907506-1302360622669385025?l=dataacademy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://dataacademy.blogspot.com/feeds/1302360622669385025/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dataacademy.blogspot.com/2011/12/430-bug-and-why-it-says-our-customers.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/1302360622669385025?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/1302360622669385025?v=2" /><link rel="alternate" type="text/html" href="http://dataacademy.blogspot.com/2011/12/430-bug-and-why-it-says-our-customers.html" title="The 4:30 Bug (And Why It Says Our Customers Are Smart!)" /><author><name>Syd</name><uri>http://www.blogger.com/profile/14792368170002037565</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-EKaoKqhI1oo/TrpIbLXODnI/AAAAAAAAABU/ZDyh-5OQOJA/s220/SE1011.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;AkcFQH0ycCp7ImA9WhRXF08.&quot;"><id>tag:blogger.com,1999:blog-7289861445889907506.post-5177511156078751965</id><published>2011-12-24T12:00:00.000Z</published><updated>2011-12-24T12:00:11.398Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-24T12:00:11.398Z</app:edited><title>Christmas Is Coming</title><content type="html">Christmas is coming - tomorrow, in fact - and if you're still looking for the perfect gift for the special Business Analyst in your life... then you're leaving it rather late!&lt;br /&gt;
&lt;br /&gt;
So, why not save yourself a last-minute trip to the shops, and click onto &lt;a href="http://www.bi-lite.com%20/" target="_blank"&gt;www.bi-lite.com &lt;/a&gt;where a copy of CUBE-it Zero Personal Edition is only $29!&lt;br /&gt;
&lt;br /&gt;
Feeling extravagant? Why not show them how much you &lt;i&gt;&lt;u&gt;really&lt;/u&gt;&lt;/i&gt; love them, with a copy of CUBE-it Zero Pro?&lt;br /&gt;
&lt;br /&gt;
It's just $149, and comes with built-in support for full SSAS Cubes!&lt;br /&gt;
&lt;br /&gt;
No?&lt;br /&gt;
&lt;br /&gt;
Oh well... it was worth a try!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7289861445889907506-5177511156078751965?l=dataacademy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://dataacademy.blogspot.com/feeds/5177511156078751965/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dataacademy.blogspot.com/2011/12/christmas-is-coming.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/5177511156078751965?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/5177511156078751965?v=2" /><link rel="alternate" type="text/html" href="http://dataacademy.blogspot.com/2011/12/christmas-is-coming.html" title="Christmas Is Coming" /><author><name>Syd</name><uri>http://www.blogger.com/profile/14792368170002037565</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-EKaoKqhI1oo/TrpIbLXODnI/AAAAAAAAABU/ZDyh-5OQOJA/s220/SE1011.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CU8CQXo7fyp7ImA9WhRXFkk.&quot;"><id>tag:blogger.com,1999:blog-7289861445889907506.post-8697627994985414482</id><published>2011-12-23T11:13:00.000Z</published><updated>2011-12-23T12:37:40.407Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-23T12:37:40.407Z</app:edited><title>Cooking The Record Books</title><content type="html">Who is the greatest batsman currently playing test cricket?&lt;br /&gt;
&lt;br /&gt;
The official ICC rankings say Kumar Sangakkara*. However, most fans would probably vote for Sachin Tendulka - the Indian star, who has scored more runs than anyone else in test history: more than 15,000!&lt;br /&gt;
&lt;br /&gt;
However, I'm going to propose an alternative candidate: England vice-captain Alistair Cook.&lt;br /&gt;
&lt;br /&gt;
But, why? Cook has scored less than 6,000 runs, and stands only 3rd on the ICC rankings!&lt;br /&gt;
&lt;br /&gt;
Yes... true... but...&lt;br /&gt;
&lt;br /&gt;
The ICC rankings tell only the sort-term story, so we can discount them!&lt;br /&gt;
&lt;br /&gt;
The all-time run-scoring table is where it matters, upon which Sachin stands atop, but his career is drawing to a close, and he is likely to retire soon, with around 16,000 runs to his name.&lt;br /&gt;
&lt;br /&gt;
Cook on the other hand is still only 26, and currently scoring at at a rate of about 1000 runs/ year.&lt;br /&gt;
&lt;br /&gt;
So let's do some extrapolation!&lt;br /&gt;
&lt;br /&gt;
(If only because it keeps this post vaguely on-topic in terms of data warehousing!)&lt;br /&gt;
&lt;br /&gt;
If Cook retires at 38 - the same age that Sachin is now - we can expect him to have accumulated a massive 18,000 runs!&lt;br /&gt;
&lt;br /&gt;
And &lt;i&gt;&lt;u&gt;&lt;b&gt;that&lt;/b&gt;&lt;/u&gt;&lt;/i&gt; would be one mightily &lt;i&gt;&lt;u&gt;&lt;b&gt;COOKED&lt;/b&gt;&lt;/u&gt;&lt;/i&gt; re-write of the record books!&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
* At time of writing!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7289861445889907506-8697627994985414482?l=dataacademy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://dataacademy.blogspot.com/feeds/8697627994985414482/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dataacademy.blogspot.com/2011/12/cooking-record-books.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/8697627994985414482?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/8697627994985414482?v=2" /><link rel="alternate" type="text/html" href="http://dataacademy.blogspot.com/2011/12/cooking-record-books.html" title="Cooking The Record Books" /><author><name>Syd</name><uri>http://www.blogger.com/profile/14792368170002037565</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-EKaoKqhI1oo/TrpIbLXODnI/AAAAAAAAABU/ZDyh-5OQOJA/s220/SE1011.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CkICQXcyfCp7ImA9WhRXEE4.&quot;"><id>tag:blogger.com,1999:blog-7289861445889907506.post-2359405368727027684</id><published>2011-12-16T10:16:00.000Z</published><updated>2011-12-16T10:16:00.994Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-16T10:16:00.994Z</app:edited><title>All Errors Are Equal</title><content type="html">All errors are equal... right?&lt;br /&gt;
&lt;br /&gt;
That was certainly the way I looked at it when I started work on Data Academy; and it is why a Data Academy 'Event' has only two possible 'Complete' states - &lt;i&gt;Successful&lt;/i&gt; or &lt;i&gt;Failed&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
But the truth is that &lt;i&gt;&lt;b&gt;that&lt;/b&gt;&lt;/i&gt; is over-simplistic - different errors mean different things to different people. &lt;br /&gt;
&lt;br /&gt;
If you are using LOAD-it to import a series of data tables from System X, then the failure of Table Y might be a critical problem... or it might not matter a dime!&lt;br /&gt;
&lt;br /&gt;
This was the genesis of the introduction of &lt;i&gt;On Error Resume Next&lt;/i&gt; in ORCHESTRATE-it - functionality we've recently extended into LOAD-it. It allows you to choose which errors really matter, and which you can quietly ignore.&lt;br /&gt;
&lt;br /&gt;
Because all errors might be equal... but some errors are more equal than others!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7289861445889907506-2359405368727027684?l=dataacademy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://dataacademy.blogspot.com/feeds/2359405368727027684/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dataacademy.blogspot.com/2011/12/all-errors-are-equal.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/2359405368727027684?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/2359405368727027684?v=2" /><link rel="alternate" type="text/html" href="http://dataacademy.blogspot.com/2011/12/all-errors-are-equal.html" title="All Errors Are Equal" /><author><name>Syd</name><uri>http://www.blogger.com/profile/14792368170002037565</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-EKaoKqhI1oo/TrpIbLXODnI/AAAAAAAAABU/ZDyh-5OQOJA/s220/SE1011.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CEcERn48cCp7ImA9WhRQFE4.&quot;"><id>tag:blogger.com,1999:blog-7289861445889907506.post-6199021375312376605</id><published>2011-12-09T12:00:00.000Z</published><updated>2011-12-09T12:00:07.078Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-09T12:00:07.078Z</app:edited><title>Why Is Siri's Head In The Cloud?</title><content type="html">Siri, the on-board voice assistant for the iPhone 4S, runs ‘in the cloud’, which as we discussed last week has some serious implications.&lt;br /&gt;
&lt;br /&gt;
But for me, the really interesting question is why? &lt;br /&gt;
&lt;br /&gt;
Why does Siri run ‘in the cloud’ and not on the iPhone 4S itself?&lt;br /&gt;
&lt;br /&gt;
When they were asked this question at the time of the product launch, Apple stated something as sophisticated as Siri could only be achieved by harnessing the massive processing power of the super-computers which run the cloud service.&lt;br /&gt;
&lt;br /&gt;
I’m not so sure about this!&lt;br /&gt;
&lt;br /&gt;
The voice-recognition system on which Siri is (apparently) based – Dragon – ran fine on an x-386 20 years ago, and would run just fine on an iPhone 4S, with its dual-core A5 chip. Admittedly, there is more to Siri than voice recognition, but I remain highly sceptical that this is the real reason.&lt;br /&gt;
&lt;br /&gt;
I think there are some other possibilities!&lt;br /&gt;
&lt;br /&gt;
Perhaps Dragon refused to licence their software for client installs, at least at a cost Apple was prepared to pay. Dragon’s desktop product retails for several-hundred dollars a pop, and they might have been reluctant to byte (sic!) (tee-hee!) into this market by enabling a Siri which could handle things like an entire novel!&lt;br /&gt;
&lt;br /&gt;
Another possibility is that Apple wants to retain control of the way that you use Siri. In particular, they reserve the right to start charging additionally for Siri; or to turn it off if you don’t upgrade to the iPhone 6 in two years time. &lt;br /&gt;
&lt;br /&gt;
You think Apple wouldn’t be this evil? Think again! They already did it, to users of the original Siri – an iPhone 4 app, which Apple summarily killed after the 4S announcement!&lt;br /&gt;
&lt;br /&gt;
Don't get me wrong - I think Siri is awesome!&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
But she'd be more awesome (and I'd trust her a little more) if she didn't have her head in the cloud!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7289861445889907506-6199021375312376605?l=dataacademy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://dataacademy.blogspot.com/feeds/6199021375312376605/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dataacademy.blogspot.com/2011/12/why-is-siris-head-in-cloud.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/6199021375312376605?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/6199021375312376605?v=2" /><link rel="alternate" type="text/html" href="http://dataacademy.blogspot.com/2011/12/why-is-siris-head-in-cloud.html" title="Why Is Siri's Head In The Cloud?" /><author><name>Syd</name><uri>http://www.blogger.com/profile/14792368170002037565</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-EKaoKqhI1oo/TrpIbLXODnI/AAAAAAAAABU/ZDyh-5OQOJA/s220/SE1011.jpg" /></author><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;DUEARHczfSp7ImA9WhRQEUU.&quot;"><id>tag:blogger.com,1999:blog-7289861445889907506.post-5734868979418766475</id><published>2011-12-06T09:50:00.001Z</published><updated>2011-12-06T16:07:25.985Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-06T16:07:25.985Z</app:edited><title>Fogbugz OLAP Cube</title><content type="html">&lt;div style="text-align: left;"&gt;
Download our free Fogbugz OLAP Cube Definition and start doing OLAP Analysis on your Fogbugz database!&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="http://www.bi-lite.com/product/DownloadCUBEitZERO.aspx" target="_blank"&gt;Click HERE to download CUBE-it Zero&lt;/a&gt;.&amp;nbsp; (The eval is free!)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.google.com/open?id=0B1c-yyoyH89SZjA3NzY3YzEtMThkNC00NjdjLWIzYTEtYWQ1YjM0Y2UxZTZj" target="_blank"&gt;Click HERE to download the Fogbugz OLAP Cube Definition.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Open fogbugz_cube.ciz in CUBE-it Zero&lt;/li&gt;
&lt;li&gt;If necessary, edit the data source connection to point to your fogbugz server/ database. (The pre-built definition assumes localhost/ fogbugz.)&lt;/li&gt;
&lt;li&gt;Click 'Process The Cube' to create a local ".cub" OLAP cube.&lt;/li&gt;
&lt;li&gt;Click 'Open In Excel' to open your cube in Excel.&lt;/li&gt;
&lt;li&gt;Err...&lt;/li&gt;
&lt;li&gt;... that's it!&lt;/li&gt;
&lt;li&gt;(As they say in Private Eye!) &lt;/li&gt;
&lt;/ol&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7289861445889907506-5734868979418766475?l=dataacademy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://dataacademy.blogspot.com/feeds/5734868979418766475/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dataacademy.blogspot.com/2011/12/fogbugz-olap-cube.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/5734868979418766475?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/5734868979418766475?v=2" /><link rel="alternate" type="text/html" href="http://dataacademy.blogspot.com/2011/12/fogbugz-olap-cube.html" title="Fogbugz OLAP Cube" /><author><name>Syd</name><uri>http://www.blogger.com/profile/14792368170002037565</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-EKaoKqhI1oo/TrpIbLXODnI/AAAAAAAAABU/ZDyh-5OQOJA/s220/SE1011.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DUUEQXY7cSp7ImA9WhRRGE8.&quot;"><id>tag:blogger.com,1999:blog-7289861445889907506.post-4208377789748382142</id><published>2011-12-02T12:00:00.000Z</published><updated>2011-12-02T12:00:00.809Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-02T12:00:00.809Z</app:edited><title>Siri &amp; The Cloud</title><content type="html">Siri, the much-hyped robotic voice assistant for the iPhone 4S, runs ‘in the cloud’. That means that when you ask Siri a question, your iPhone doesn’t answer the question itself – instead, it passes the question to another computer, running ‘in the cloud’ which then passes back an answer.&lt;br /&gt;
&lt;br /&gt;
This raises a number of interesting issues.&lt;br /&gt;
&lt;br /&gt;
Firstly, it means that Siri requires an always-on internet connection - no internet = no Siri! This is fine for Americans, who never leave the boarders of the United States, but for us Europeans it could have a serious implication on the cost of running our iPhones. I spend a fair bit of time in Spain, where I’ll be charged hefty ‘roaming rates’ for any internet access made via my phone, so I usually turn data roaming off… which means I won’t be able to use Siri, even if I’m just adding an item to my on-phone calendar!&lt;br /&gt;
&lt;br /&gt;
Second, Siri requires not only an internet connection, but a very specific internet connection, to Apple’s servers in wherever-they-are! So, as thousands of Apple’s American customers found out a few weeks ago, if those servers go down for any reason, so does Siri.&lt;br /&gt;
&lt;br /&gt;
This second point is actually more significant than the first, because you could argue that the first is just down to penny-pinching on my part; whereas the second means that you can’t rely on Siri as a mission-critical piece of software, which (if you are partially sighted, for example) you might be very tempted so-to-do!&lt;br /&gt;
&lt;br /&gt;
So, Siri is a luxury good, which can’t actually be relied upon to deliver - it is a bit like employing a butler… and then finding him asleep in the broom cupboard with a bottle of your finest sherry!&lt;br /&gt;
&lt;br /&gt;
And in England we have a word for butlers like that: &lt;b&gt;FIRED!&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7289861445889907506-4208377789748382142?l=dataacademy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://dataacademy.blogspot.com/feeds/4208377789748382142/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dataacademy.blogspot.com/2011/12/siri-cloud.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/4208377789748382142?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/4208377789748382142?v=2" /><link rel="alternate" type="text/html" href="http://dataacademy.blogspot.com/2011/12/siri-cloud.html" title="Siri &amp; The Cloud" /><author><name>Syd</name><uri>http://www.blogger.com/profile/14792368170002037565</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-EKaoKqhI1oo/TrpIbLXODnI/AAAAAAAAABU/ZDyh-5OQOJA/s220/SE1011.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CEMERXs6fCp7ImA9WhRREk8.&quot;"><id>tag:blogger.com,1999:blog-7289861445889907506.post-7933875700138554593</id><published>2011-11-25T12:00:00.000Z</published><updated>2011-11-25T12:00:04.514Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-25T12:00:04.514Z</app:edited><title>If You Don't Test It... Someone Else Will</title><content type="html">A customer recently raised a tech-support issue that his LOAD-it module was failing due to square-brackets in the field names.&lt;br /&gt;
&lt;br /&gt;
Impossible!&lt;br /&gt;
&lt;br /&gt;
(As I didn't &lt;i&gt;&lt;b&gt;actually&lt;/b&gt;&lt;/i&gt; reply to the customer, but did comment to the guys in the office!) &lt;br /&gt;
&lt;br /&gt;
That's unit tested!&lt;br /&gt;
&lt;br /&gt;And so it was - there is a test for LOAD-it called CheckColumnNameSquareBracket() alongside CheckColumnNameBracket() and CheckColumnNamePercent().&lt;br /&gt;
&lt;br /&gt;
However, it is in the very nature of unit tests that they won't cover &lt;i&gt;&lt;b&gt;every&lt;/b&gt;&lt;/i&gt; possible condition; and sure enough, when I looked closer I saw that these tests didn't include JAIL-it. And guess what? When I added JAIL-it, the module failed just as the customer had described! Cue humble pie for me in the office, alongside a fix for the customer!&lt;br /&gt;
&lt;br /&gt;
All of which goes to show that if you don't test it... someone else will!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7289861445889907506-7933875700138554593?l=dataacademy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://dataacademy.blogspot.com/feeds/7933875700138554593/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dataacademy.blogspot.com/2011/11/if-you-dont-test-it-someone-else-will.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/7933875700138554593?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/7933875700138554593?v=2" /><link rel="alternate" type="text/html" href="http://dataacademy.blogspot.com/2011/11/if-you-dont-test-it-someone-else-will.html" title="If You Don't Test It... Someone Else Will" /><author><name>Syd</name><uri>http://www.blogger.com/profile/14792368170002037565</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-EKaoKqhI1oo/TrpIbLXODnI/AAAAAAAAABU/ZDyh-5OQOJA/s220/SE1011.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DUEESHk4cSp7ImA9WhRSFkw.&quot;"><id>tag:blogger.com,1999:blog-7289861445889907506.post-6171170679749459060</id><published>2011-11-18T12:00:00.001Z</published><updated>2011-11-18T12:00:09.739Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-18T12:00:09.739Z</app:edited><title>Coding With Two Fingers (WPF + MVC = QWERTY)</title><content type="html">We've been working with WPF + MVC* for a fair while now, and I have to admit that I'm a bit frustrated. Although the results are looking good - look out for some sneak previews of Data Academy 6, on the blog soon - it has taken a looooooong time to get here - too long, for an old "rad" developer like me! You can't just drop a control onto a form - you have to code-up the view-model,then design the view and finally wire the two up!&lt;br /&gt;
&lt;br /&gt;
At first, I wondered if we were doing something wrong, but I've now come to the conclusion that on the contrary, we are doing it just right - WPF + MVC is a slow way of developing UIs, because... get this... THAT IS THE POINT!&lt;br /&gt;
&lt;br /&gt;
In short, it is like QWERTY! &lt;br /&gt;
&lt;br /&gt;
The original QWERTY keyboards were designed to overcome a flaw in the mechanics of typewriters, where the keys would jam if you typed too fast; so QWERTY was designed with the explicit goal of slowing people down in the short term, in order to speed up the overall process by precluding jams.&lt;br /&gt;
&lt;br /&gt;
WPF + MVC is the same - it slows down the development process in order to ensure that you do things right over the longer term - reducing your susceptibility to bugs, and actively preventing the kind of short-cuts which an old hack like me might take, but which would damage the structural integrity of the system over the longer term.&lt;br /&gt;
&lt;br /&gt;
It might be frustrating in the short term, but like QWERTY I'll get used to it... even if I do find myself having to code it with two fingers!&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
* Technically, MVVM.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7289861445889907506-6171170679749459060?l=dataacademy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://dataacademy.blogspot.com/feeds/6171170679749459060/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dataacademy.blogspot.com/2011/11/coding-with-two-fingers-wpf-mvc-qwerty.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/6171170679749459060?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/6171170679749459060?v=2" /><link rel="alternate" type="text/html" href="http://dataacademy.blogspot.com/2011/11/coding-with-two-fingers-wpf-mvc-qwerty.html" title="Coding With Two Fingers (WPF + MVC = QWERTY)" /><author><name>Syd</name><uri>http://www.blogger.com/profile/14792368170002037565</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-EKaoKqhI1oo/TrpIbLXODnI/AAAAAAAAABU/ZDyh-5OQOJA/s220/SE1011.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CkQAQnk7fip7ImA9WhRSEE8.&quot;"><id>tag:blogger.com,1999:blog-7289861445889907506.post-7071750552531036036</id><published>2011-11-11T12:00:00.000Z</published><updated>2011-11-11T14:05:43.706Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-11T14:05:43.706Z</app:edited><title>Silverlight Killed By Flash-Mob</title><content type="html">Adobe recently announced that they were ceasing development of Mobile Flash.&lt;br /&gt;
&lt;br /&gt;
Several news sites declared this a posthumous victory for Steve Jobs, who refused to allow Mobile Flash on the iPhone; and there is certainly an element of truth to this - it didn't make sense for Adobe to continue to push a solution which was locked-out of such a significant proportion of their potential end-client base.&lt;br /&gt;
&lt;br /&gt;
(Significant proportion? Yes! Android may be winning the war of sheer numbers, but it is doing so at the low-end. Look around you - the techies and the temps might have Androids, but the decision-makers all have iPhones!)&lt;br /&gt;
&lt;br /&gt;
Oddly, however, the biggest impact of the decision to cease development of Mobile Flash will be seen not in San Jose CA, where Adobe are HQ'd, but 850 miles to the north, in Redmond WA.&lt;br /&gt;
&lt;br /&gt;
The end of Mobile Flash means Silverlight - Microsoft's Windows-centered alternative - is now almost-certainly dead too.&lt;br /&gt;
&lt;br /&gt;
Why?&lt;br /&gt;
&lt;br /&gt;
Because HTML5 is now a no-brainer - the &lt;i&gt;&lt;b&gt;only&lt;/b&gt;&lt;/i&gt; choice to run your application across all platforms.&lt;br /&gt;
&lt;br /&gt;
Until recently, there were reasons to stick with Flash (legacy and leverage of existing knowledge and IP) even if it didn't support the iPhone; and this in turn offered a sliver of credibility to Silverlight, which was similarly hobbled by lack of full cross-platform support.&lt;br /&gt;
&lt;br /&gt;
But Adobe's embrace of HTML5, combined with hints coming out of Microsoft they they-too are now more interested in HTML5 as the go-forward platform for mobile, means that anyone who begins a new development in Silverlight today is officially insane. &lt;br /&gt;
&lt;br /&gt;
Which means that Silverlight is (albeit slightly less officially) dead - killed by a Flash-Mob!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7289861445889907506-7071750552531036036?l=dataacademy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://dataacademy.blogspot.com/feeds/7071750552531036036/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dataacademy.blogspot.com/2011/11/silverlight-killed-by-flash-mob.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/7071750552531036036?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/7071750552531036036?v=2" /><link rel="alternate" type="text/html" href="http://dataacademy.blogspot.com/2011/11/silverlight-killed-by-flash-mob.html" title="Silverlight Killed By Flash-Mob" /><author><name>Syd</name><uri>http://www.blogger.com/profile/14792368170002037565</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-EKaoKqhI1oo/TrpIbLXODnI/AAAAAAAAABU/ZDyh-5OQOJA/s220/SE1011.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;A0UFQXo_eyp7ImA9WhRSEE0.&quot;"><id>tag:blogger.com,1999:blog-7289861445889907506.post-886139438318999702</id><published>2011-11-11T11:00:00.000Z</published><updated>2011-11-11T11:00:10.443Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-11T11:00:10.443Z</app:edited><title>Remembrance Day</title><content type="html">...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7289861445889907506-886139438318999702?l=dataacademy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://dataacademy.blogspot.com/feeds/886139438318999702/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dataacademy.blogspot.com/2011/11/remembrance-day.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/886139438318999702?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/886139438318999702?v=2" /><link rel="alternate" type="text/html" href="http://dataacademy.blogspot.com/2011/11/remembrance-day.html" title="Remembrance Day" /><author><name>Syd</name><uri>http://www.blogger.com/profile/14792368170002037565</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-EKaoKqhI1oo/TrpIbLXODnI/AAAAAAAAABU/ZDyh-5OQOJA/s220/SE1011.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;AkcFSH08eCp7ImA9WhRTFE0.&quot;"><id>tag:blogger.com,1999:blog-7289861445889907506.post-2481486561704025975</id><published>2011-11-04T12:00:00.000Z</published><updated>2011-11-04T12:00:19.370Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-04T12:00:19.370Z</app:edited><title>Stack Overflow Exception</title><content type="html">We're on Twitter!&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://twitter.com/#%21/ASPDataAcademy"&gt;http://twitter.com/#!/ASPDataAcademy&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
And thanks to the dark arts of RSS, every post on this blog with automagically be tweeted, including this one.&lt;br /&gt;
&lt;br /&gt;
Yup - that's right folks: this post points to Twitter... which points to this post... which points to Twitter... which points to this post... which... etc. etc.&lt;br /&gt;
&lt;br /&gt;
So if the internet terminates in a bizarre Stack Overflow Exception at midday on November 4 2011, you know who to blame!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7289861445889907506-2481486561704025975?l=dataacademy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://dataacademy.blogspot.com/feeds/2481486561704025975/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dataacademy.blogspot.com/2011/11/stack-overflow-exception.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/2481486561704025975?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/2481486561704025975?v=2" /><link rel="alternate" type="text/html" href="http://dataacademy.blogspot.com/2011/11/stack-overflow-exception.html" title="Stack Overflow Exception" /><author><name>Syd</name><uri>http://www.blogger.com/profile/14792368170002037565</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-EKaoKqhI1oo/TrpIbLXODnI/AAAAAAAAABU/ZDyh-5OQOJA/s220/SE1011.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;A0EERX44fCp7ImA9WhdaF0Q.&quot;"><id>tag:blogger.com,1999:blog-7289861445889907506.post-6911678104577168154</id><published>2011-10-28T12:00:00.005+01:00</published><updated>2011-10-28T12:00:04.034+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-28T12:00:04.034+01:00</app:edited><title>What's On The Menu?</title><content type="html">Customization - that's what!
&lt;br /&gt;
&lt;br /&gt;You probably already know that Data Academy allows you to customize your Data Warehouse!
&lt;br /&gt;
&lt;br /&gt;(There wouldn't be much point if it didn't!)
&lt;br /&gt;
&lt;br /&gt;But did you know that you can also customize Data Academy itself?
&lt;br /&gt;
&lt;br /&gt;Take a standard Data Academy screen:
&lt;br /&gt;
&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-tPeXQi97_Eo/TmDJza2YLHI/AAAAAAAAAAQ/wppqgdjuO6k/s1600/Original.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 252px;" src="http://4.bp.blogspot.com/-tPeXQi97_Eo/TmDJza2YLHI/AAAAAAAAAAQ/wppqgdjuO6k/s320/Original.jpg" alt="" id="BLOGGER_PHOTO_ID_5647735817940511858" border="0" /&gt;&lt;/a&gt;Now let's see the same screen through new eyes!
&lt;br /&gt;
&lt;br /&gt;This is the exact same Data Academy screen, but with a custom UI:
&lt;br /&gt;
&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-ovhjK_rqHXk/TmDKM_TFo3I/AAAAAAAAAAY/1EIkpmhF0KE/s1600/Custom.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 252px;" src="http://3.bp.blogspot.com/-ovhjK_rqHXk/TmDKM_TFo3I/AAAAAAAAAAY/1EIkpmhF0KE/s320/Custom.jpg" alt="" id="BLOGGER_PHOTO_ID_5647736257221337970" border="0" /&gt;&lt;/a&gt;It's Data Academy, Jim, but not as we know it!
&lt;br /&gt;
&lt;br /&gt;Our sister-company, Insource ITC have taken the standard Data Academy UI, and not only customized the logo and CSS styling - they've even moved the menu to the left-hand side of the screen.
&lt;br /&gt;
&lt;br /&gt;Moving the menu took a little VB.NET know-how, but adding a custom logo and CSS styling is really easy - have a look our article on &lt;a href="http://support.dataacademy.com/default.asp?W180"&gt;Customizing The Data Academy UI&lt;/a&gt; to see how!
&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7289861445889907506-6911678104577168154?l=dataacademy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://dataacademy.blogspot.com/feeds/6911678104577168154/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dataacademy.blogspot.com/2011/10/whats-on-menu.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/6911678104577168154?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/6911678104577168154?v=2" /><link rel="alternate" type="text/html" href="http://dataacademy.blogspot.com/2011/10/whats-on-menu.html" title="What's On The Menu?" /><author><name>Syd</name><uri>http://www.blogger.com/profile/14792368170002037565</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-EKaoKqhI1oo/TrpIbLXODnI/AAAAAAAAABU/ZDyh-5OQOJA/s220/SE1011.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-tPeXQi97_Eo/TmDJza2YLHI/AAAAAAAAAAQ/wppqgdjuO6k/s72-c/Original.jpg" height="72" width="72" /><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;Dk8EQ34_fyp7ImA9WhdaEUQ.&quot;"><id>tag:blogger.com,1999:blog-7289861445889907506.post-1913313826429495911</id><published>2011-10-21T12:00:00.002+01:00</published><updated>2011-10-21T12:00:02.047+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-21T12:00:02.047+01:00</app:edited><title>Division By Zero</title><content type="html">A few weeks ago, a friend of mine posted the following on Twitter:
&lt;br /&gt;
&lt;blockquote&gt;
&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td height="52" width="52"&gt;&lt;img src="data:image/png;base64,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" /&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;EGVroom&lt;/b&gt;
&lt;br /&gt;
You'd think, at this point, computers would be able to chill the hell out when asked to divide by zero. No need to make a scene!
&lt;br /&gt;
&lt;a href="https://twitter.com/egvroom/status/106873348587397120"&gt;26/08/2011 00:39&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/blockquote&gt;
And he's got a point - it drives me up the wall too!
&lt;br /&gt;
&lt;br /&gt;
Try the following in SQL:
&lt;br /&gt;
&lt;blockquote style="font-family: courier new;"&gt;
SELECT 1/0&lt;/blockquote&gt;
SQL Server will reply:
&lt;br /&gt;
&lt;blockquote style="font-family: courier new;"&gt;
Divide by zero error encountered.&lt;/blockquote&gt;
Grrrr!
&lt;br /&gt;
&lt;br /&gt;
The problem is that the correct 'logical' answer to this question &lt;span style="font-style: italic; font-weight: bold;"&gt;is&lt;/span&gt; an error - you &lt;span style="font-style: italic; font-weight: bold;"&gt;can't &lt;/span&gt;divide anything by zero!
&lt;br /&gt;
&lt;br /&gt;
From a 'math' perspective, the answer could be argued to be infinity... but unfortunately that isn't very helpful either, because a SQL numeric variable can't express 'infinity' either!
&lt;br /&gt;
&lt;br /&gt;
Perhaps SQL Server could return a NULL, rather than throwing an error? This would make some sense but would be inconsistent with how other systems handle the problem, which I'm guessing is why they didn't do it!
&lt;br /&gt;
&lt;br /&gt;
So, what to do?
&lt;br /&gt;
&lt;br /&gt;
Personally, I'd be happy if the world just accepted that anything divided by zero &lt;span style="font-style: italic; font-weight: bold;"&gt;is&lt;/span&gt; zero and computer systems began reflecting that - after all, this is what we already do in most reporting output:
&lt;br /&gt;
&lt;blockquote style="font-family: courier new;"&gt;
iif(y = 0, 0, x / y)&lt;/blockquote&gt;
So, end-user expectations are already inclined in this direction!
&lt;br /&gt;
&lt;br /&gt;
But I can hear the wailing from the Math Department even as a type this, not to mention the gnashing of teeth from the Computing Department, who have to change the way their compilers work!
&lt;br /&gt;
&lt;br /&gt;
So I guess we're probably stuck with Division By Zero errors for the moment.
&lt;br /&gt;
&lt;br /&gt;
(But that doesn't mean we have to like it!)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7289861445889907506-1913313826429495911?l=dataacademy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://dataacademy.blogspot.com/feeds/1913313826429495911/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dataacademy.blogspot.com/2011/10/division-by-zero.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/1913313826429495911?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/1913313826429495911?v=2" /><link rel="alternate" type="text/html" href="http://dataacademy.blogspot.com/2011/10/division-by-zero.html" title="Division By Zero" /><author><name>Syd</name><uri>http://www.blogger.com/profile/14792368170002037565</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-EKaoKqhI1oo/TrpIbLXODnI/AAAAAAAAABU/ZDyh-5OQOJA/s220/SE1011.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CkcERn8zfyp7ImA9WhdbFUQ.&quot;"><id>tag:blogger.com,1999:blog-7289861445889907506.post-8406605475631325290</id><published>2011-10-14T12:00:00.003+01:00</published><updated>2011-10-14T12:00:07.187+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-14T12:00:07.187+01:00</app:edited><title>Too Many Keys?</title><content type="html">Q: Why is my motorcycle like a Data Academy DIMENSION table?
&lt;br /&gt;
&lt;br /&gt;A: They both have a &lt;span style="font-weight: bold; font-style: italic;"&gt;lot&lt;/span&gt; of keys!
&lt;br /&gt;
&lt;br /&gt;My motorcycle has a whopping &lt;span style="font-weight: bold; font-style: italic;"&gt;eleven&lt;/span&gt; keys - two ignition, two top-box, two paniers, two d-lock and &lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;three&lt;/span&gt;&lt;/span&gt; disk-lock!
&lt;br /&gt;
&lt;br /&gt;Of course, most of these keys are &lt;span style="font-style: italic; font-weight: bold;"&gt;duplicate keys&lt;/span&gt;, so I can throw them away... or at least keep them in a draw at home.
&lt;br /&gt;
&lt;br /&gt;But what about the &lt;span style="font-weight: bold; font-style: italic;"&gt;duplicate keys&lt;/span&gt; in a Data Academy DIM table?
&lt;br /&gt;
&lt;br /&gt;My first thought was to put them in a draw at home... but the data protection people got all uppity about that, so I needed another solution!
&lt;br /&gt;
&lt;br /&gt;The answer is the 'Handle Key Errors' check-box in Data Academy - this will take any duplicate keys and put them in the data warehousing equivalent of a 'draw at home' - an _KeyErrors table, which you can then use to trouble-shoot your key problems. (It will also ensure that Data Academy doesn't attempt to insert NULL keys into the DIM table.)
&lt;br /&gt;
&lt;br /&gt;Too many keys?
&lt;br /&gt;
&lt;br /&gt;Not in my DIM tables any more!
&lt;br /&gt;
&lt;br /&gt;(But, sadly, still for my bike!)
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7289861445889907506-8406605475631325290?l=dataacademy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://dataacademy.blogspot.com/feeds/8406605475631325290/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dataacademy.blogspot.com/2011/10/too-many-keys.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/8406605475631325290?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/8406605475631325290?v=2" /><link rel="alternate" type="text/html" href="http://dataacademy.blogspot.com/2011/10/too-many-keys.html" title="Too Many Keys?" /><author><name>Syd</name><uri>http://www.blogger.com/profile/14792368170002037565</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-EKaoKqhI1oo/TrpIbLXODnI/AAAAAAAAABU/ZDyh-5OQOJA/s220/SE1011.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;D0UEQH87fyp7ImA9WhdUGUU.&quot;"><id>tag:blogger.com,1999:blog-7289861445889907506.post-6981229205522349935</id><published>2011-10-07T12:00:00.003+01:00</published><updated>2011-10-07T12:00:01.107+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-07T12:00:01.107+01:00</app:edited><title>SQL Azure Transparency</title><content type="html">As you might have guessed from a number of recent posts, I've been spending a bit of time looking at SQL Azure - Microsoft's new cloud-computing database platform.
&lt;br /&gt;
&lt;br /&gt;One thing which has particularly impressed me is the TRANSPARENCY of the platform, right down to a driver level.
&lt;br /&gt;
&lt;br /&gt;When I first started working with it, I assumed that I would have to install special drivers, as I would for any other new database platform. If I want to start using Oracle, I have to install Oracle drivers; if I want to start using MySQL, I have to install MySQL drivers; etc. etc.
&lt;br /&gt;
&lt;br /&gt;So I certainly would have had no complaints if Microsoft had asked me to install SQL Azure drivers to get my .NET code up-and-running on the new platform!
&lt;br /&gt;
&lt;br /&gt;However, I was amazed to see that this is &lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;not&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt; the case - the SQL Azure platform is completely transparent - as far as your application is concerned, it is just another SQL Server database, which can be accessed via the standard ADO.NET drivers for SQL Server!
&lt;br /&gt;
&lt;br /&gt;This means that you don't even need to re-compile your code to take advantage of SQL Azure - just point it at the server and away-you-go!
&lt;br /&gt;
&lt;br /&gt;Now there are some limitations to be aware of - for example, SQL Azure requires a clustered index on all tables, or it will error when you try to do an INSERT.
&lt;br /&gt;
&lt;br /&gt;But broadly speaking, the difference is transparent to the end-client - it 'just works' and &lt;span style="font-weight: bold; font-style: italic;"&gt;that&lt;/span&gt; is pretty impressive!
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7289861445889907506-6981229205522349935?l=dataacademy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://dataacademy.blogspot.com/feeds/6981229205522349935/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dataacademy.blogspot.com/2011/10/sql-azure-transparency.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/6981229205522349935?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/6981229205522349935?v=2" /><link rel="alternate" type="text/html" href="http://dataacademy.blogspot.com/2011/10/sql-azure-transparency.html" title="SQL Azure Transparency" /><author><name>Syd</name><uri>http://www.blogger.com/profile/14792368170002037565</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-EKaoKqhI1oo/TrpIbLXODnI/AAAAAAAAABU/ZDyh-5OQOJA/s220/SE1011.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CkMFRXc5eCp7ImA9WhdUE0U.&quot;"><id>tag:blogger.com,1999:blog-7289861445889907506.post-2400700106635349538</id><published>2011-09-30T12:00:00.003+01:00</published><updated>2011-09-30T12:00:14.920+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-30T12:00:14.920+01:00</app:edited><title>SQL Azure Authentication</title><content type="html">Going back almost 15 years now, SQL Server has supported two kinds of authentication: SQL Server and Windows.
&lt;br /&gt;
&lt;br /&gt;Of the two, SQL Server Authentication is the 'old school' method, and Microsoft have been busily pushing us towards Windows Authentication for some years now.
&lt;br /&gt;
&lt;br /&gt;Why? Because it is Windows! And Windows is good! (More Windows!)
&lt;br /&gt;
&lt;br /&gt;So when you install SQL Server 2008, &lt;span style="font-style: italic;"&gt;Windows Authentication &lt;span style="font-weight: bold;"&gt;Only&lt;/span&gt;&lt;/span&gt; is the default option! SQL Authentication is still there... but only if you &lt;span style="font-weight: bold; font-style: italic;"&gt;really&lt;/span&gt; want it!
&lt;br /&gt;
&lt;br /&gt;So you probably won't be too shocked to learn that if you use SQL Azure - Microsoft's hip, young, cloud computing platform, which brings Windows to the web - your authentication options are reduced to a choice of one!
&lt;br /&gt;
&lt;br /&gt;As Henry Ford is alleged to have said, you can have any color you like, as long as it's black!
&lt;br /&gt;
&lt;br /&gt;However, it may surprise you that the 'black' option in SQL Azure is, in fact, SQL Server Authentication!
&lt;br /&gt;
&lt;br /&gt;If you think about it, this makes sense - SQL Azure lives 'on the web', beyond the scope of Windows.
&lt;br /&gt;
&lt;br /&gt;But that doesn't stop it being ever-so-slightly ironic, that in bringing this little corner of Windows to the web... Microsoft had to make it a bit &lt;span style="font-weight: bold; font-style: italic;"&gt;less&lt;/span&gt; Windows!
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7289861445889907506-2400700106635349538?l=dataacademy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://dataacademy.blogspot.com/feeds/2400700106635349538/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dataacademy.blogspot.com/2011/09/sql-azure-authentication.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/2400700106635349538?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/2400700106635349538?v=2" /><link rel="alternate" type="text/html" href="http://dataacademy.blogspot.com/2011/09/sql-azure-authentication.html" title="SQL Azure Authentication" /><author><name>Syd</name><uri>http://www.blogger.com/profile/14792368170002037565</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-EKaoKqhI1oo/TrpIbLXODnI/AAAAAAAAABU/ZDyh-5OQOJA/s220/SE1011.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;D0EEQXYzfSp7ImA9WhdVF0o.&quot;"><id>tag:blogger.com,1999:blog-7289861445889907506.post-863187325334305804</id><published>2011-09-23T12:00:00.002+01:00</published><updated>2011-09-23T12:00:00.885+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-23T12:00:00.885+01:00</app:edited><title>Conflict Resolution</title><content type="html">Time to call in the United Nations - we've got a conflict that needs resolving!
&lt;br /&gt;
&lt;br /&gt;The conflict is in the Data Academy source code - it is a VB.NET class file (FWIW, the &lt;span style="font-style: italic;"&gt;View DataSet&lt;/span&gt; form) which we've changed in both 5.6 &lt;span style="font-weight: bold; font-style: italic;"&gt;and&lt;/span&gt; (separately) in 6.1, so the two versions are now 'in conflict'.
&lt;br /&gt;
&lt;br /&gt;This kind of conflict used to terrify me, back in the days of SourceSafe - so much so that I used to go millions of miles out of my way, taking detours past Pluto, in order to avoid them!
&lt;br /&gt;
&lt;br /&gt;This mentality persisted until quite recently - even though we've been using SubVersion at Data Academy for almost 5 years, my natural instincts were still distrustful of automated conflict resolution - known as 'merging'.
&lt;br /&gt;
&lt;br /&gt;But as I've learned to trust SubVersion so I've come to fear conflict less and less, because I know that SubVersion will (almost always) be able to resolve it, without having to call in any soldiers in blue berets.
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7289861445889907506-863187325334305804?l=dataacademy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://dataacademy.blogspot.com/feeds/863187325334305804/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dataacademy.blogspot.com/2011/09/conflict-resolution.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/863187325334305804?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/863187325334305804?v=2" /><link rel="alternate" type="text/html" href="http://dataacademy.blogspot.com/2011/09/conflict-resolution.html" title="Conflict Resolution" /><author><name>Syd</name><uri>http://www.blogger.com/profile/14792368170002037565</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-EKaoKqhI1oo/TrpIbLXODnI/AAAAAAAAABU/ZDyh-5OQOJA/s220/SE1011.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;Ck8FQHo_fSp7ImA9WhdVEUo.&quot;"><id>tag:blogger.com,1999:blog-7289861445889907506.post-1277841972059237525</id><published>2011-09-16T12:00:00.004+01:00</published><updated>2011-09-16T12:00:11.445+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-16T12:00:11.445+01:00</app:edited><title>Top Of The Tops</title><content type="html">A common problem during the development phase of a data warehouse is that an end-to-end run of the system can take hours - not something we want to be waiting around for during the work-day!
&lt;br /&gt;
&lt;br /&gt;One strategy for mitigating this is to develop with smaller data sources, using a WHERE clause to limit the amount of data being imported.
&lt;br /&gt;
&lt;br /&gt;However, this can get confusing when your imports also need to include a 'real' WHERE clause, in addition to the 'artificial' dev-time constraint.
&lt;br /&gt;
&lt;br /&gt;To make this all easier, Data Academy now includes a SELECT TOP parameter for LOAD-it, allowing you to constrain the size of your test data by limiting the number of imported rows.
&lt;br /&gt;
&lt;br /&gt;This functionality is included in Data Academy 5.6 for SQL Server and MS Access imports; and Data Academy 6 will add support for Oracle too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7289861445889907506-1277841972059237525?l=dataacademy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://dataacademy.blogspot.com/feeds/1277841972059237525/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dataacademy.blogspot.com/2011/09/top-of-tops.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/1277841972059237525?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7289861445889907506/posts/default/1277841972059237525?v=2" /><link rel="alternate" type="text/html" href="http://dataacademy.blogspot.com/2011/09/top-of-tops.html" title="Top Of The Tops" /><author><name>Syd</name><uri>http://www.blogger.com/profile/14792368170002037565</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-EKaoKqhI1oo/TrpIbLXODnI/AAAAAAAAABU/ZDyh-5OQOJA/s220/SE1011.jpg" /></author><thr:total>0</thr:total></entry></feed>

