<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7046019952890386874</id><updated>2011-04-22T03:58:25.025+01:00</updated><category term='Introduction'/><category term='Kimball'/><category term='PAS'/><category term='Inmon'/><category term='Performance'/><category term='SQL'/><category term='Roadmap'/><category term='Attribute relationships'/><category term='farewell'/><category term='SSAS'/><category term='BI'/><category term='PPS'/><category term='XML Extract'/><category term='Tools'/><category term='Adatis'/><category term='PerformancePoint'/><category term='MVP'/><category term='SQL 2005'/><category term='Problems'/><category term='SSIS'/><category term='MDX'/><category term='News'/><category term='NovaView'/><title type='text'>Matt's BI Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://cubisbi.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7046019952890386874/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://cubisbi.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Matt</name><uri>http://www.blogger.com/profile/09429632466465868339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7046019952890386874.post-3178743116378075460</id><published>2009-03-05T19:35:00.004Z</published><updated>2009-03-05T19:44:34.573Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='farewell'/><title type='text'>I'm on the move</title><content type='html'>I have decided to move my blog as it takes longer to publish one, than to write one here.  Suppose with being a Microsoft BI Consultant it is quite fitting it is on the windows live site&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mattbi.spaces.live.com/"&gt;http://mattbi.spaces.live.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If I can figure out how to move old blogs from here painlessly, I will&lt;br /&gt;&lt;br /&gt;And for those of you have may have seen my &lt;a href="http://www.cubisconsulting.com/"&gt;website&lt;/a&gt;, then laughed rather hard (don't blame you).  That is also having a revamp and will probably be down as a new server is being set up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7046019952890386874-3178743116378075460?l=cubisbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cubisbi.blogspot.com/feeds/3178743116378075460/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7046019952890386874&amp;postID=3178743116378075460' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7046019952890386874/posts/default/3178743116378075460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7046019952890386874/posts/default/3178743116378075460'/><link rel='alternate' type='text/html' href='http://cubisbi.blogspot.com/2009/03/im-on-move.html' title='I&apos;m on the move'/><author><name>Matt</name><uri>http://www.blogger.com/profile/09429632466465868339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7046019952890386874.post-3585138767192433135</id><published>2009-02-05T12:34:00.004Z</published><updated>2009-02-05T13:44:01.473Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>SQL Refector</title><content type='html'>I’ve been using &lt;a href="http://www.red-gate.com/products/SQL_Refactor/index.htm"&gt;SQL-refactor&lt;/a&gt; the last few days to reformat my sql. Not because I am lazy when I write it, but when you write SQL in Reporting Services or Analysis Services (DSV) it removes all the fancy formatting you may have done. On the occasions when you return to edit the SQL, if like me, you can spend some time reformatting it to make your changes.&lt;br /&gt;&lt;br /&gt;So I thought there must be a tool out there that can quickly reformat my SQL and that’s when i stumbled on SQL Refactor by &lt;a href="http://www.red-gate.com/about/index.htm"&gt;Redgate&lt;/a&gt;. It does some other clever things, although that wasn’t my main reason for using it, such as qualifying objects and remove redundant code in stored procedures. It does come with a bit of a price tag, but there are some bundles Redgate do that may make justification of its purchase expectable.&lt;br /&gt;&lt;br /&gt;You can find some of Redgate’s products already incorporated in the Microsoft stack: SQL 2008 has &lt;a href="http://www.red-gate.com/products/SQL_Prompt/index.htm"&gt;SQL prompt&lt;/a&gt; (2008 maybe not as clever); SQL Compare and SQL Data Compare can be found in team foundation server 2008 Database edition GDR. Note SQL Refactor is not the same as GDR’s refactor.&lt;br /&gt;&lt;br /&gt;All in all, SQL Refactor is a clever little utility.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7046019952890386874-3585138767192433135?l=cubisbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cubisbi.blogspot.com/feeds/3585138767192433135/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7046019952890386874&amp;postID=3585138767192433135' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7046019952890386874/posts/default/3585138767192433135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7046019952890386874/posts/default/3585138767192433135'/><link rel='alternate' type='text/html' href='http://cubisbi.blogspot.com/2009/02/sql-refector.html' title='SQL Refector'/><author><name>Matt</name><uri>http://www.blogger.com/profile/09429632466465868339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7046019952890386874.post-1104624205617149682</id><published>2009-01-24T16:45:00.005Z</published><updated>2009-01-24T17:22:10.829Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='NovaView'/><category scheme='http://www.blogger.com/atom/ns#' term='News'/><category scheme='http://www.blogger.com/atom/ns#' term='PPS'/><category scheme='http://www.blogger.com/atom/ns#' term='BI'/><category scheme='http://www.blogger.com/atom/ns#' term='Roadmap'/><title type='text'>And as if by Magic</title><content type='html'>Seems my curiosity to see (well watch) the new roadmap for BI has been answered, see &lt;a href="http://blogs.msdn.com/bi/archive/2009/01/23/microsoft-bi-strategy-update.aspx"&gt;The BI Blog&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Kind of sounds like a reporting server with no mention of real analytics, apart from Excel which I don't think counts. Maybe the news of all of this will reignite the market for an analytics tool for analysis services. The return of Panorama Novaview perhaps, who happen to be running a webinar on &lt;a href="http://www.panoramasoftware.com/webcasts/archives/2009/microsoft-alternative-business-intelligence-jan-2009.html"&gt;An Alternative BI Solution to Microsoft PerformancePoint&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Chris Webb also raised some good points on Excel in his blog &lt;a href="http://cwebbbi.spaces.live.com/blog/cns!7B84B0F2C239489A!4133.entry"&gt;More thoughts on the death of PPS Planning&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7046019952890386874-1104624205617149682?l=cubisbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cubisbi.blogspot.com/feeds/1104624205617149682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7046019952890386874&amp;postID=1104624205617149682' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7046019952890386874/posts/default/1104624205617149682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7046019952890386874/posts/default/1104624205617149682'/><link rel='alternate' type='text/html' href='http://cubisbi.blogspot.com/2009/01/and-as-if-by-magic.html' title='And as if by Magic'/><author><name>Matt</name><uri>http://www.blogger.com/profile/09429632466465868339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7046019952890386874.post-2199433308688670780</id><published>2009-01-22T20:46:00.004Z</published><updated>2009-01-23T18:34:48.671Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='News'/><category scheme='http://www.blogger.com/atom/ns#' term='PerformancePoint'/><title type='text'>PerformancePoint gets a re-design</title><content type='html'>I'm little unsure on Microsoft's thinking behind this one with regards to Patrick Hustling's &lt;a href="http://performancepointinsider.com/blogs/bsm/archive/2009/01/22/just-call-me-performancepoint-services.aspx"&gt;blog &lt;/a&gt;on PerformancePoint turning into a service and planning being axed. It almost as disappointing as what has become of the ProClarity toolset.&lt;br /&gt;&lt;br /&gt;I’m a little surprised they have decided to improve the monitoring, my experience with monitoring has not been the greatest and I always let it off because it was version 1. Yet the planning aspect seemed a better product and this is the one to go.&lt;br /&gt;&lt;br /&gt;I suppose there is a big drive from Microsoft to deliver BI through SharePoint. Also recent articles have implied that recent trends in BI, not just Microsoft, are moving towards a web based application.&lt;br /&gt;&lt;br /&gt;Be interesting to see Microsoft's new roadmap and where PPServices now fits in.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7046019952890386874-2199433308688670780?l=cubisbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cubisbi.blogspot.com/feeds/2199433308688670780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7046019952890386874&amp;postID=2199433308688670780' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7046019952890386874/posts/default/2199433308688670780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7046019952890386874/posts/default/2199433308688670780'/><link rel='alternate' type='text/html' href='http://cubisbi.blogspot.com/2009/01/performancepoint-gets-re-design.html' title='PerformancePoint gets a re-design'/><author><name>Matt</name><uri>http://www.blogger.com/profile/09429632466465868339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7046019952890386874.post-9071061503842661322</id><published>2009-01-19T20:43:00.006Z</published><updated>2009-01-19T20:52:15.806Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSIS'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL 2005'/><category scheme='http://www.blogger.com/atom/ns#' term='Problems'/><category scheme='http://www.blogger.com/atom/ns#' term='Performance'/><title type='text'>Merge Join task not always matching</title><content type='html'>&lt;div&gt;&lt;div&gt;I’m not a big fan of the merge join task, mainly because you have to sort things and that comes with a performance cost. And to make things worse I stumbled on an issue with SQL 2005 where the merge join task doesn’t always perform as expected.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;img id="BLOGGER_PHOTO_ID_5293109314021855410" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 321px; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_wcNVF2IlIC8/SXTm4IOVkLI/AAAAAAAAABI/fCYMSjxeeNU/s400/source.jpg" border="0" /&gt;&lt;br /&gt;The issue occurs when you want to merge two data sources, but don’t want to use the SSIS sort task. Instead of using the sort task, you change the data sources to use a sql command, generate some SQL with an order by clause in it. Then in the advance editor of the source, set the IsSorted property to True. &lt;/div&gt;&lt;br /&gt;&lt;div&gt;Then you have to set the SortKeyPosition to match your order by clause in the SQL statement. Do this for both data source and then use them as inputs to the merge join task. As below.&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5293109715262622418" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 344px; CURSOR: hand; HEIGHT: 323px; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_wcNVF2IlIC8/SXTnPe9lytI/AAAAAAAAABQ/3Bv0rHJQmPU/s400/dataflow1.jpg" border="0" /&gt;&lt;/div&gt;&lt;div&gt;Problematic approach &lt;/div&gt;&lt;div&gt;&lt;br /&gt;This in theory should work, although for some reason, which I have yet to discover doesn’t. For some reason the merge join doesn’t always match. Replacing the sorts with sort tasks seems to fix the problem, what this method does differently to using a order by clause, I’m not sure.&lt;br /&gt;&lt;/div&gt;&lt;img id="BLOGGER_PHOTO_ID_5293109928718519570" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 338px; CURSOR: hand; HEIGHT: 317px; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_wcNVF2IlIC8/SXTnb6JcTRI/AAAAAAAAABY/2c8alEDtz5I/s400/dataflow2.jpg" border="0" /&gt;Working , with performance issues&lt;br /&gt;&lt;div&gt;&lt;br /&gt;Yet, if you are involving large volumes of data I would consider removing all of this with a simple lookup statement. Hopefully the problem will make itself apparent to me and I’ll update this blog with the reason.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7046019952890386874-9071061503842661322?l=cubisbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cubisbi.blogspot.com/feeds/9071061503842661322/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7046019952890386874&amp;postID=9071061503842661322' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7046019952890386874/posts/default/9071061503842661322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7046019952890386874/posts/default/9071061503842661322'/><link rel='alternate' type='text/html' href='http://cubisbi.blogspot.com/2009/01/merge-join-task-not-always-matching.html' title='Merge Join task not always matching'/><author><name>Matt</name><uri>http://www.blogger.com/profile/09429632466465868339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_wcNVF2IlIC8/SXTm4IOVkLI/AAAAAAAAABI/fCYMSjxeeNU/s72-c/source.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7046019952890386874.post-3180845127336123246</id><published>2009-01-05T18:37:00.004Z</published><updated>2009-01-05T18:56:54.646Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Adatis'/><category scheme='http://www.blogger.com/atom/ns#' term='MVP'/><title type='text'>Adatis Recieve Not just one MVP</title><content type='html'>Although Tim would prefer to keep this award quiet and not let it go to his head!  May I be one the first to congratulate both &lt;a href="http://blogs.adatis.co.uk/blogs/timkent/default.aspx"&gt;Tim Kent&lt;/a&gt; and &lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/"&gt;Sacha Tomey&lt;/a&gt; on receiving MVPs.  &lt;br /&gt;&lt;br /&gt;Both have contributed significantly here in the UK to promote Microsoft and help build what I would consider to be the leading consultancy firm in the UK for PPS.  Last year their consultancy firm became gold members and has since doubled in size. &lt;br /&gt;&lt;br /&gt;I’m sure we will be hearing a lot more from them in the future. &lt;br /&gt;&lt;br /&gt;Congratulations again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7046019952890386874-3180845127336123246?l=cubisbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cubisbi.blogspot.com/feeds/3180845127336123246/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7046019952890386874&amp;postID=3180845127336123246' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7046019952890386874/posts/default/3180845127336123246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7046019952890386874/posts/default/3180845127336123246'/><link rel='alternate' type='text/html' href='http://cubisbi.blogspot.com/2009/01/adatis-recieve-not-just-one-mvp.html' title='Adatis Recieve Not just one MVP'/><author><name>Matt</name><uri>http://www.blogger.com/profile/09429632466465868339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7046019952890386874.post-386238691293004217</id><published>2009-01-05T18:11:00.002Z</published><updated>2009-01-05T18:35:59.555Z</updated><title type='text'>A little break but I am back</title><content type='html'>&lt;p&gt;&lt;span style="color:#333333;"&gt;Well Christmas has passed, I'm a little fatter (some may still think I am s skinny rake but ho hum). Thought I better try and keep on top of my blogs, so better efforts this year. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#333333;"&gt;Below is just a heads up on future topics, although most have been done to death by various sources. &lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="color:#333333;"&gt;Compare the different methods currently implemented in SSIS to do updates for dimensions, various methods are out there, going to try and establish the better for 2005 and if I get my hands on a server 2008. &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color:#333333;"&gt;My favourite, Team Foundation Server, although looking at the database professional aspect of it.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color:#333333;"&gt;Deploying BIDS and PPS across environments, a commonly asked question with no real answer. It does seem to lend itself to various possibilities and some more dubious than others. &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color:#333333;"&gt;Fuzzy Lookup performance, a task not highly used and less often talked about &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="color:#333333;"&gt;Hopefully in the summations of everyone else’s blogging I uncover some interesting BI subjects of interest. I may even talk about service packs, although missed out on the handful that have just gone out :)&lt;/span&gt;&lt;/p&gt;&lt;span style="color:#333333;"&gt;And a Happy New Year&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7046019952890386874-386238691293004217?l=cubisbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cubisbi.blogspot.com/feeds/386238691293004217/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7046019952890386874&amp;postID=386238691293004217' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7046019952890386874/posts/default/386238691293004217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7046019952890386874/posts/default/386238691293004217'/><link rel='alternate' type='text/html' href='http://cubisbi.blogspot.com/2009/01/little-break-but-i-am-back.html' title='A little break but I am back'/><author><name>Matt</name><uri>http://www.blogger.com/profile/09429632466465868339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7046019952890386874.post-3973104418848872906</id><published>2008-10-01T20:57:00.003+01:00</published><updated>2008-10-01T21:07:54.136+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Inmon'/><category scheme='http://www.blogger.com/atom/ns#' term='Kimball'/><category scheme='http://www.blogger.com/atom/ns#' term='BI'/><title type='text'>Marco &amp; Alberto's Methodology Comparison</title><content type='html'>I seem to be getting worse at keeping up to date with reading my ever growing list of blogs.  Currently stands 277 unread.&lt;br /&gt;&lt;br /&gt;Stumbled across a blog from Marco Russo &lt;a href="http://sqlblog.com/blogs/marco_russo/archive/2008/09/20/methodology-comparison-kimball-inmon-and-sqlbi.aspx"&gt;Methodology comparison: Kimball, Inmon and SQLBI&lt;/a&gt;&lt;br /&gt;Well worth reading.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;I am proud to announce a public draft of the first paper about the &lt;/span&gt;&lt;/em&gt;&lt;a href="http://www.sqlbi.com/sqlbimethodology.aspx"&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;SQLBI Methodology&lt;/span&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;. I and &lt;/span&gt;&lt;/em&gt;&lt;a href="http://sqlblog.com/blogs/alberto_ferrari"&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;Alberto Ferrari&lt;/span&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt; tried to define a consistent methodology which covers the construction of the back-end of a BI Solution using Microsoft SQL Server and its complementary services.&lt;/span&gt;&lt;/em&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;&lt;/p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7046019952890386874-3973104418848872906?l=cubisbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://sqlblog.com/blogs/marco_russo/archive/2008/09/20/methodology-comparison-kimball-inmon-and-sqlbi.aspx' title='Marco &amp; Alberto&apos;s Methodology Comparison'/><link rel='replies' type='application/atom+xml' href='http://cubisbi.blogspot.com/feeds/3973104418848872906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7046019952890386874&amp;postID=3973104418848872906' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7046019952890386874/posts/default/3973104418848872906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7046019952890386874/posts/default/3973104418848872906'/><link rel='alternate' type='text/html' href='http://cubisbi.blogspot.com/2008/10/marco-albertos-methodology-comparison.html' title='Marco &amp; Alberto&apos;s Methodology Comparison'/><author><name>Matt</name><uri>http://www.blogger.com/profile/09429632466465868339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7046019952890386874.post-6014524511842324096</id><published>2008-09-17T20:45:00.004+01:00</published><updated>2008-09-17T21:02:11.889+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MDX'/><category scheme='http://www.blogger.com/atom/ns#' term='SSAS'/><category scheme='http://www.blogger.com/atom/ns#' term='Attribute relationships'/><title type='text'>The importance of Attribute Relationships</title><content type='html'>&lt;p&gt;An unusual finding around hierarchies and attribute relationships, hopefully it will convince you to perhaps double check your attribute relationships.&lt;br /&gt;&lt;br /&gt;In the case where a user hierarchy has not been defined properly and there’s a warning symbol glaring at you (perhaps in the hope you might fix it), it could make specific types of queries produce incorrect results. A certain scenario produces the All level total rather than the sub cube value. &lt;/p&gt;&lt;p&gt;The scenario seems to only occur when the following is true: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;The user Hierarchy’s attribute relationships are not set properly &lt;/li&gt;&lt;li&gt;The hierarchy is in the where clause &lt;/li&gt;&lt;li&gt;An attribute from the hierarchy is on columns or rows (must be at a higher level in the hierarchy) &lt;/li&gt;&lt;li&gt;And brackets are used in the where clause {}&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;To fix it: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Setup the attribute relationships in the user hierarchy correctly &lt;/li&gt;&lt;li&gt;Or alter your MDX query, not always that easy &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;Code as follows (Adventure Works DW Database) &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color:#3366ff;"&gt;SELECT&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;   [Measures].[Internet Sales Amount] &lt;span style="color:#3366ff;"&gt;ON COLUMNS&lt;/span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;   NON EMPTY [Product].[Days to Manufacture].[All &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;Products] &lt;span style="color:#3366ff;"&gt;ON ROWS&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;color:#3366ff;"&gt;FROM&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;   [Adventure Works]&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color:#3366ff;"&gt;WHERE&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;   [Product].[Manufacture Time].[Days to Manufacture].&amp;amp;[0] &lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;p&gt;&lt;/span&gt;Returns: $1,040,532.57.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Add {} to WHERE clause. It returns: $29,358,677.22 which is incorrect&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color:#3366ff;"&gt;SELECT&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;   [Measures].[Internet Sales Amount] &lt;span style="color:#3366ff;"&gt;ON COLUMNS&lt;/span&gt;,&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;   NON EMPTY [Product].[Days to Manufacture].[All Products] &lt;span style="color:#3366ff;"&gt;ON ROWS&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color:#3366ff;"&gt;FROM&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;   [Adventure Works]&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color:#3366ff;"&gt;WHERE&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;   {[Product].[Manufacture Time].[Days to Manufacture].&amp;amp;[0]}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;I couldn’t find reference to a cumulative update to this and I haven’t had a chance to test to see if it affects SSAS 2008. So I am not sure if they have fixed this. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7046019952890386874-6014524511842324096?l=cubisbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cubisbi.blogspot.com/feeds/6014524511842324096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7046019952890386874&amp;postID=6014524511842324096' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7046019952890386874/posts/default/6014524511842324096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7046019952890386874/posts/default/6014524511842324096'/><link rel='alternate' type='text/html' href='http://cubisbi.blogspot.com/2008/09/importance-of-attribute-relationships.html' title='The importance of Attribute Relationships'/><author><name>Matt</name><uri>http://www.blogger.com/profile/09429632466465868339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7046019952890386874.post-718219907325349956</id><published>2008-08-27T21:21:00.004+01:00</published><updated>2008-08-27T21:41:31.333+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MDX'/><category scheme='http://www.blogger.com/atom/ns#' term='PAS'/><category scheme='http://www.blogger.com/atom/ns#' term='PPS'/><title type='text'>PAS and MDX errors</title><content type='html'>&lt;span style="color:#000000;"&gt;I’ve been working with a Client to release a Microsoft BI Solution, they started to have problems with ProClarity pages not rendering in a Performance Point Dashboard and producing a message saying the “Your request could not be completed.” &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;img id="BLOGGER_PHOTO_ID_5239296949316822306" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_wcNVF2IlIC8/SLW40QDRJSI/AAAAAAAAABA/m4GZi7-GZJI/s400/errorPAS.jpg" border="0" /&gt;&lt;/span&gt; &lt;p align="left"&gt;&lt;span style="color:#000000;"&gt;Running the Profiler on the AS Server highlighted the fact that the mdx was causing an error.&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="center"&gt;&lt;span style="color:#ff0000;"&gt;The set in the WHERE clause cannot contain multiple measures. &lt;/span&gt;&lt;/p&gt;&lt;span style="color:#000000;"&gt;Searching the knowledge based return an interesting &lt;/span&gt;&lt;a href="http://support.microsoft.com/?kbid=947511"&gt;&lt;span style="color:#3333ff;"&gt;article &lt;/span&gt;&lt;/a&gt;&lt;span style="color:#000000;"&gt;on the error and how to get around it.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;Turns out PAS really doesn’t like errors. If a published PAS report produces an error, it crashes the IIS worker process thus rendering the PAS Service useless. The only way I could see to get this working again was to recycle the application pool.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;Back to my error, from the article there are quite a few scenarios that could produce this error, the example below produces the error because Berkshire isn’t a city in Canada (or anywhere for that matter, a county perhaps) and the measure is in the where clause.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;SELECT&lt;br /&gt;&lt;span style="color:#000000;"&gt;[Product].[Category].&lt;/span&gt;MEMBERS ON COLUMNS&lt;br /&gt;FROM&lt;br /&gt;&lt;span style="color:#000000;"&gt;[Adventure Works]&lt;/span&gt;&lt;br /&gt;WHERE&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;([Measures].[Order Count],&lt;br /&gt;[Geography].[City].&amp;amp;[Berkshire]&amp;amp;[ENG],&lt;br /&gt;[Geography].[Country].&amp;amp;[Canada])&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;The whole scenario is not ideal and does limit the type of reports that can be published to PAS. I’m sure if I ask Microsoft they would tell me ProClarity was designed that way like so many of their other features I've stumbled across. So just be careful if you are using PPS filters or ProClarity filters on you PAS reports, end users might bring down your PAS service.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7046019952890386874-718219907325349956?l=cubisbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cubisbi.blogspot.com/feeds/718219907325349956/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7046019952890386874&amp;postID=718219907325349956' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7046019952890386874/posts/default/718219907325349956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7046019952890386874/posts/default/718219907325349956'/><link rel='alternate' type='text/html' href='http://cubisbi.blogspot.com/2008/08/pas-and-mdx-errors.html' title='PAS and MDX errors'/><author><name>Matt</name><uri>http://www.blogger.com/profile/09429632466465868339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_wcNVF2IlIC8/SLW40QDRJSI/AAAAAAAAABA/m4GZi7-GZJI/s72-c/errorPAS.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7046019952890386874.post-2513983251264276487</id><published>2008-08-06T21:25:00.002+01:00</published><updated>2008-08-06T21:42:20.152+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BI'/><title type='text'>Requirements Gathering</title><content type='html'>I had some time to catch up on the 70 odd blogs I haven't had a chance to read and stumbled across an article written by Neil Raden&lt;a href="http://www.intelligententerprise.com/blog/archives/2008/07/requirements_ga.html"&gt; "Requrements Gathering: Don't Be Naive"&lt;/a&gt;. An interesting read.&lt;br /&gt;&lt;br /&gt;He basically discusses the possible downfalls in requirement gathering for BI Projects.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7046019952890386874-2513983251264276487?l=cubisbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cubisbi.blogspot.com/feeds/2513983251264276487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7046019952890386874&amp;postID=2513983251264276487' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7046019952890386874/posts/default/2513983251264276487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7046019952890386874/posts/default/2513983251264276487'/><link rel='alternate' type='text/html' href='http://cubisbi.blogspot.com/2008/08/requirements-gathering.html' title='Requirements Gathering'/><author><name>Matt</name><uri>http://www.blogger.com/profile/09429632466465868339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7046019952890386874.post-5670440431822893883</id><published>2008-08-05T21:16:00.005+01:00</published><updated>2008-08-05T22:11:36.726+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSIS'/><category scheme='http://www.blogger.com/atom/ns#' term='XML Extract'/><title type='text'>XML Data Destination</title><content type='html'>&lt;div&gt;&lt;div&gt;I had the pleasure of coding a Data Source that would output data in an XML format, thought I would share the code. I cannot take full credit for the code as it originated from &lt;a href="http://blogs.conchango.com/jamiethomson/"&gt;Jamie Thomson’s blog&lt;/a&gt; and I’ve just adapted it so it’s a little more dynamic and capable of multi-levels within a row. There is potential to improve the code further or to customise it to your needs.&lt;br /&gt;&lt;br /&gt;Why bother creating a Destination?&lt;br /&gt;&lt;br /&gt;Seems a sensible question to ask when you could quite easily use an Execute SQL Task and have a ResultSet of XML. I found this worked well on small sets of data, but as the volumes of data grew, the time it took to execute the task grew exponentially. The package also seems to be incredible resource intensive on the server. Creating the script reduced loads from hours (some loads never finished as the package threw an error after 10 hours processing) to a few minutes.&lt;br /&gt;&lt;br /&gt;The Code:&lt;br /&gt;&lt;br /&gt;For the code to work the naming of the columns into the destination task need to be in a specific format, for those of you who may have used SQL with a &lt;a href="http://msdn.microsoft.com/en-us/library/ms189068.aspx"&gt;FOR XML EXPLICIT &lt;/a&gt;clause, it’s the same structure.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Pass in all the columns that you want to output in XML Format, as shown below:&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5231143297778827842" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_wcNVF2IlIC8/SJjBHRFFwkI/AAAAAAAAAAw/mea96dmi8tQ/s400/InputColumns.JPG" border="0" /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;span style="color:#009900;"&gt;' Microsoft SQL Server Integration Services user script component&lt;br /&gt;' This is your new script component in Microsoft Visual Basic .NET&lt;br /&gt;' ScriptMain is the entrypoint class for script components&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Imports&lt;/span&gt; System&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Imports&lt;/span&gt; System.Data&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Imports &lt;/span&gt;System.Math&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Imports &lt;/span&gt;System.IO&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Imports &lt;/span&gt;Microsoft.SqlServer.Dts.Pipeline.Wrapper&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Imports &lt;/span&gt;Microsoft.SqlServer.Dts.Runtime.Wrapper&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Imports &lt;/span&gt;System.Xml&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Imports &lt;/span&gt;System.Reflection&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Public&lt;/span&gt; Class ScriptMain&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Inherits&lt;/span&gt; UserComponent&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Dim&lt;/span&gt; sw &lt;span style="color:#3366ff;"&gt;As&lt;/span&gt; StreamWriter&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Dim&lt;/span&gt; xWriter &lt;span style="color:#3366ff;"&gt;As&lt;/span&gt; XmlTextWriter&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Dim&lt;/span&gt; NewMainTag &lt;span style="color:#3366ff;"&gt;As&lt;/span&gt; Integer&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Dim&lt;/span&gt; strAttributeName &lt;span style="color:#3366ff;"&gt;As&lt;/span&gt; String&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Dim&lt;/span&gt; columnValue &lt;span style="color:#3366ff;"&gt;As&lt;/span&gt; PropertyInfo&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Dim&lt;/span&gt; strValue &lt;span style="color:#3366ff;"&gt;As&lt;/span&gt; String&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Public&lt;/span&gt; Overrides Sub PreExecute()&lt;br /&gt;&lt;span style="color:#009900;"&gt;'Read Only variables (strDestinationFolder and strXMLFileName)&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#3366ff;"&gt;Dim&lt;/span&gt; gsPickUp &lt;span style="color:#3366ff;"&gt;As&lt;/span&gt; String = &lt;span style="color:#3366ff;"&gt;Me&lt;/span&gt;.Variables.strDestinationFolder.ToString&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Dim&lt;/span&gt; gsPickUpFilename &lt;span style="color:#3366ff;"&gt;As&lt;/span&gt; &lt;span style="color:#3366ff;"&gt;String&lt;/span&gt; = &lt;span style="color:#3366ff;"&gt;Me&lt;/span&gt;.Variables.strXMLFileName&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Dim&lt;/span&gt; fileName &lt;span style="color:#3366ff;"&gt;As&lt;/span&gt; &lt;span style="color:#3366ff;"&gt;String&lt;/span&gt; = gsPickUp &amp;amp; &lt;span style="color:#993300;"&gt;"\"&lt;/span&gt; &amp;amp; gsPickUpFilename&lt;br /&gt;fileName = fileName &amp;amp; (Format(Now(), &lt;span style="color:#993300;"&gt;"yyyyMMddhhmmss"&lt;/span&gt;).ToString) &amp;amp; &lt;span style="color:#993300;"&gt;".xml"&lt;/span&gt;&lt;br /&gt;xWriter = &lt;span style="color:#3366ff;"&gt;New&lt;/span&gt; XmlTextWriter(fileName, &lt;span style="color:#3366ff;"&gt;Nothing&lt;/span&gt;)&lt;br /&gt;xWriter.WriteStartDocument()&lt;br /&gt;xWriter.WriteStartElement(&lt;span style="color:#993300;"&gt;"document"&lt;/span&gt;)&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Public Overrides Sub Input0_ProcessInputRow(ByVal Row &lt;span style="color:#3366ff;"&gt;As&lt;/span&gt; Input0Buffer) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;br /&gt;&lt;span style="color:#009900;"&gt;'declaration of varaibles&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#3366ff;"&gt;Dim&lt;/span&gt; column &lt;span style="color:#3366ff;"&gt;As&lt;/span&gt; IDTSInputColumn90&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Dim&lt;/span&gt; rownumber &lt;span style="color:#3366ff;"&gt;As&lt;/span&gt; &lt;span style="color:#3366ff;"&gt;String&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Dim&lt;/span&gt; rowType &lt;span style="color:#3366ff;"&gt;As&lt;/span&gt; Type = Row.GetType()&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Dim&lt;/span&gt; StringIndex &lt;span style="color:#3366ff;"&gt;As&lt;/span&gt; &lt;span style="color:#3366ff;"&gt;String&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Dim&lt;/span&gt; TagName &lt;span style="color:#3366ff;"&gt;As&lt;/span&gt; &lt;span style="color:#3366ff;"&gt;String&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Dim&lt;/span&gt; objColumn &lt;span style="color:#3366ff;"&gt;As&lt;/span&gt; &lt;span style="color:#3366ff;"&gt;Object&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Dim&lt;/span&gt; FirstTimeForTag &lt;span style="color:#3366ff;"&gt;As&lt;/span&gt; &lt;span style="color:#3366ff;"&gt;Integer&lt;/span&gt; = 0&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;If&lt;/span&gt; Row.Tag = 2 &lt;span style="color:#3366ff;"&gt;Then&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#009900;"&gt;'if start of document&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;If&lt;/span&gt; NewMainTag = 0 &lt;span style="color:#3366ff;"&gt;Then&lt;/span&gt;&lt;br /&gt;NewMainTag = 1&lt;br /&gt;xWriter.WriteStartElement(&lt;span style="color:#993300;"&gt;"Row"&lt;/span&gt;)&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Else&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#009900;"&gt;'create new row and end pervious&lt;/span&gt;&lt;br /&gt;xWriter.WriteEndElement()&lt;br /&gt;xWriter.WriteStartElement(&lt;span style="color:#993300;"&gt;"Row"&lt;/span&gt;)&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;End If&lt;br /&gt;End If&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#009900;"&gt;'for each column in the row&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;For Each&lt;/span&gt; column &lt;span style="color:#3366ff;"&gt;In&lt;/span&gt; ComponentMetaData.InputCollection(0).InputColumnCollection&lt;br /&gt;&lt;span style="color:#009900;"&gt;'convert tag number to string&lt;/span&gt;&lt;br /&gt;rownumber = &lt;span style="color:#3366ff;"&gt;CType&lt;/span&gt;(Row.Tag, &lt;span style="color:#3366ff;"&gt;String&lt;/span&gt;)&lt;br /&gt;&lt;span style="color:#009900;"&gt;'create tag lookup in column (e.g. !2! or !3!)&lt;/span&gt;&lt;br /&gt;StringIndex = &lt;span style="color:#993300;"&gt;"!" &lt;/span&gt;+ rownumber + &lt;span style="color:#993300;"&gt;"!"&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#009900;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#009900;"&gt;'if tag number matches column number&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;If&lt;/span&gt; column.Name.IndexOf(StringIndex) &gt; -1 &lt;span style="color:#3366ff;"&gt;Then&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#009900;"&gt;'extract name of tag from column before tag number(e.g. row from row!2!)&lt;/span&gt;&lt;br /&gt;TagName = column.Name.Substring(0, column.Name.IndexOf(StringIndex))&lt;br /&gt;&lt;span style="color:#009900;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#009900;"&gt;'if not the main tag and first entering the loop out put a tag header&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#3366ff;"&gt;If Not&lt;/span&gt; (Row.Tag = 2) And FirstTimeForTag = 0 &lt;span style="color:#3366ff;"&gt;Then&lt;/span&gt;&lt;br /&gt;xWriter.WriteStartElement(TagName)&lt;br /&gt;FirstTimeForTag = 1&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;End If&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#009900;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#009900;"&gt;'attribute names do not contain exclamation marks, remove !&lt;/span&gt;&lt;br /&gt;strAttributeName = column.Name.Replace(&lt;span style="color:#993300;"&gt;"!"&lt;/span&gt;, &lt;span style="color:#993300;"&gt;""&lt;/span&gt;)&lt;br /&gt;&lt;span style="color:#009900;"&gt;'get column values&lt;/span&gt;&lt;br /&gt;columnValue = rowType.GetProperty(strAttributeName)&lt;br /&gt;objColumn = columnValue.GetValue(Row, &lt;span style="color:#3366ff;"&gt;Nothing&lt;/span&gt;)&lt;br /&gt;&lt;span style="color:#009900;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#009900;"&gt;'if column is not null output it to xml file (does not include blanks)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;If&lt;/span&gt; IsNothing(objColumn) &lt;span style="color:#3366ff;"&gt;Then&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Else&lt;/span&gt;&lt;br /&gt;strValue = objColumn.ToString()&lt;br /&gt;xWriter.WriteStartElement(column.Name.Replace(TagName + StringIndex, &lt;span style="color:#660000;"&gt;""&lt;/span&gt;).Replace(&lt;span style="color:#660000;"&gt;"!element"&lt;/span&gt;, &lt;span style="color:#660000;"&gt;""&lt;/span&gt;))&lt;br /&gt;xWriter.WriteString(strValue)&lt;br /&gt;xWriter.WriteEndElement()&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;End If&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#3366ff;"&gt;End If&lt;br /&gt;Next&lt;/span&gt; column&lt;br /&gt;&lt;span style="color:#009900;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#009900;"&gt;'end of element part&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;If Not&lt;/span&gt; (Row.Tag = 2) &lt;span style="color:#3366ff;"&gt;Then&lt;/span&gt;&lt;br /&gt;xWriter.WriteEndElement()&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;End If&lt;br /&gt;End Sub &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Public Overrides Sub&lt;/span&gt; PostExecute()&lt;br /&gt;&lt;span style="color:#009900;"&gt;'EOF&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;br /&gt;xWriter.WriteEndElement()&lt;br /&gt;xWriter.WriteEndElement()&lt;br /&gt;xWriter.WriteEndDocument()&lt;br /&gt;xWriter.Close()&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;End Sub &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;End Class&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#3366ff;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;And that should be about all you have to do.  &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Happy Exporting!&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7046019952890386874-5670440431822893883?l=cubisbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cubisbi.blogspot.com/feeds/5670440431822893883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7046019952890386874&amp;postID=5670440431822893883' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7046019952890386874/posts/default/5670440431822893883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7046019952890386874/posts/default/5670440431822893883'/><link rel='alternate' type='text/html' href='http://cubisbi.blogspot.com/2008/08/xml-data-destination.html' title='XML Data Destination'/><author><name>Matt</name><uri>http://www.blogger.com/profile/09429632466465868339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_wcNVF2IlIC8/SJjBHRFFwkI/AAAAAAAAAAw/mea96dmi8tQ/s72-c/InputColumns.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7046019952890386874.post-1188429983936668685</id><published>2008-07-30T19:38:00.000+01:00</published><updated>2008-07-30T20:16:19.929+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Introduction'/><title type='text'>My very first blog</title><content type='html'>&lt;span style="font-family:georgia;"&gt;So I've finally got some spare time to write my first blog, just a little introduction, hopefully the next one won't take 6 months to write. And with some luck it will be of some use to others.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;I’ll probably write about the Microsoft BI space as this is the main area I have worked in for the last four years, although I may post some random things I stumble across from time to time.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Until next time&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7046019952890386874-1188429983936668685?l=cubisbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cubisbi.blogspot.com/feeds/1188429983936668685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7046019952890386874&amp;postID=1188429983936668685' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7046019952890386874/posts/default/1188429983936668685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7046019952890386874/posts/default/1188429983936668685'/><link rel='alternate' type='text/html' href='http://cubisbi.blogspot.com/2008/07/my-very-first-blog.html' title='My very first blog'/><author><name>Matt</name><uri>http://www.blogger.com/profile/09429632466465868339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
