tag:blogger.com,1999:blog-5834481626118491862024-02-21T14:06:55.142+00:00Phil's fairly useful blogPhilhttp://www.blogger.com/profile/10605647000243636584noreply@blogger.comBlogger67125tag:blogger.com,1999:blog-583448162611849186.post-84762772528481620202013-01-09T22:52:00.002+00:002013-01-09T22:53:16.778+00:00Reporting Services 2012 on iOSA couple of months ago Microsoft announced support for iOS (ie iPhone, iPad and iPod Touch) in Reporting Services 2012 with the release of SQL Server 2012 Service Pack 1. During the Christmas break I thought I'd try it out.<br />
<br />
The basic instructions are <a href="http://msdn.microsoft.com/en-us/library/jj659023">here</a> - and they are pretty straightforward. The result is that Reporting Services reports render in Safari on iOS devices. A screenshot of an AdventureWorks sample report on an iPhone (in landscape mode) follows:<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPrZ8AO1aozeJi4SbHPzvD1bgtwoq5XsZJwg282MVQOKrTwGqevkudBoSO8m5tJkqW2Xb8DgsVlJDlSmtIjc7CIAKsghwXNCA8vDtoGE-by62AGXyCvpHs9sw2cz1YPSLvcPybBFAWkWI/s1600/photo.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPrZ8AO1aozeJi4SbHPzvD1bgtwoq5XsZJwg282MVQOKrTwGqevkudBoSO8m5tJkqW2Xb8DgsVlJDlSmtIjc7CIAKsghwXNCA8vDtoGE-by62AGXyCvpHs9sw2cz1YPSLvcPybBFAWkWI/s320/photo.PNG" width="320" /></a></div>
<br />
As you can see all of the interactivity is available as well as the ability to pinch-to-zoom in and out of a report and swipe-to-pan around it.<br />
<br />
A couple of things to note:<br />
<br />
1. Reports rendered in the Report Manager don't appear to work - the web page is blank. So if you're relying on this serve reports to users you're out of luck, its the web service report viewer only.<br />
<br />
2. As the screenshot demonstrates even a relatively simple report doesn't format all that well on the small amount of screen-estate available on an iPhone. The Reporting Services implementation won't help much with this issue. This is slightly mitigated by the additional touch-enabled navigation options, but I think bespoke iPhone reports will be necessary.<br />
<br />
3. Trying to find software to emulate iOS on Windows is hard! Most are on-line only which require a publicly accessible website. The iOS SDK appears to be OS X only. In the end I had to borrow an iPhone to demo it.<br />
<br />
4. Remember if you're trying it out using Reporting Services on your Windows 7 machine to open up your Windows firewall!Philhttp://www.blogger.com/profile/10605647000243636584noreply@blogger.com0tag:blogger.com,1999:blog-583448162611849186.post-45819443350655735912012-12-17T16:41:00.001+00:002012-12-17T17:06:11.300+00:00More SSIS expressionsOne of my first (and most popular!) posts was related to <a href="http://phil-austin.blogspot.co.uk/2008/01/ssis-expression-for-yyyymmdd-iso-date.html">SSIS expressions</a>, so I thought I'd post a few more examples.<br />
<br />
<b>First day of this month </b><br />
<br />
As a date:<br />
<blockquote class="tr_bq">
(DT_DATE)((DT_WSTR, 4)YEAR(GETDATE()) + "-" +RIGHT("0" + (DT_WSTR,2)MONTH(GETDATE()),2)+"-01")</blockquote>
<br />
As YYYYMMDD unicode string:<br />
<br />
<blockquote class="tr_bq">
(DT_WSTR, 4)YEAR(GETDATE()) + RIGHT("0" + (DT_WSTR,2)MONTH(GETDATE()),2)+"01"</blockquote>
<br />
<b>First day of the previous month</b><br />
<br />
As a date:<br />
<blockquote class="tr_bq">
(DT_DATE)((DT_WSTR, 4)YEAR(DATEADD("mm", -1, GETDATE())) + "-" +RIGHT("0" + (DT_WSTR,2)MONTH(DATEADD("mm", -1, GETDATE())),2)+"-01")</blockquote>
As a YYYYMMDD unicode string:<br />
<br />
<blockquote class="tr_bq">
(DT_WSTR, 4)YEAR(DATEADD("mm", -1, GETDATE())) + RIGHT("0" + (DT_WSTR,2)MONTH(DATEADD("mm", -1, GETDATE())),2)+"01"</blockquote>
<br />
<b>Last day of the previous month</b><br />
<br />
This uses the old programmer trick of subtracting one day from the first day of the current month. <br />
<br />
<blockquote class="tr_bq">
DATEADD("dd", -1, (DT_DATE)((DT_WSTR, 4)YEAR(GETDATE()) + "-" +RIGHT("0" + (DT_WSTR,2)MONTH(GETDATE()),2)+"-01"))</blockquote>
<br />
<b>Timestamp in the format YYYYMMDDHHMMSS (ie 20121217160035)</b><br />
<br />
Using the start time of the containing package:<br />
<blockquote class="tr_bq">
(DT_WSTR, 4) Year(@[System::StartTime] )<br />
+(Month(@[System::StartTime] )>9?(DT_WSTR, 2) Month(@[System::StartTime] ):"0"+(DT_WSTR, 2) Month(@[System::StartTime] ))<br />
+(DT_WSTR, 2) Day(@[System::StartTime] )+SUBSTRING(REPLACE((DT_WSTR, 20)@[System::StartTime], ":", ""), 12, 8)</blockquote>
Using GETDATE():<br />
<br />
Note that the SUBSTRING is slightly different:<br />
<blockquote class="tr_bq">
<br />
(DT_WSTR,4)YEAR(GETDATE()) + RIGHT("0" + (DT_WSTR,2)MONTH(GETDATE()),2) + RIGHT("0" + (DT_WSTR,2)DAY(GETDATE()),2)+SUBSTRING(REPLACE((DT_WSTR, 29)GETDATE(), ":", ""), 12, 6)</blockquote>
<br />Philhttp://www.blogger.com/profile/10605647000243636584noreply@blogger.com0tag:blogger.com,1999:blog-583448162611849186.post-73029684637695403612012-11-04T21:20:00.000+00:002012-12-17T16:42:17.633+00:00SSIS release and Source ControlThis post was inspired by a post by the inestimable <a href="http://sqlblog.com/blogs/jamie_thomson/">Jamie Thomson</a> <a href="http://sqlblog.com/blogs/jamie_thomson/archive/2012/10/16/should-we-be-able-to-deploy-a-single-package-to-the-ssis-catalog.aspx">here</a> and the associated comments, in which I rashly said I'd try and explain the source control model in use where I currently work. Source control is one of the first things I try and organise when starting a project, and given there are perfectly good <a href="http://subversion.apache.org/">free</a> <a href="http://git-scm.com/">source control</a> <a href="http://mercurial.selenic.com/">systems</a>, with <a href="http://rocketsvn.com/">Visual Studio integration</a> there's no real excuse not to use one. So assuming you're using one how do you use it?<br />
<br />
The simplest way is to simply start randomly adding projects to source control, however this creates the problem of creating mulitple working folders and after a while it becomes really difficult to find things. So the first tip is fairly obvious;<br />
<br />
<b>Put all SSIS packages in one folder and have one working folder</b> <br />
<br />
Put all of the SSIS packages in one folder. Call the folder 'SSIS', 'ETL' or 'Stuff that moves data around', it doesn't matter. Also split your packages into multiple projects which go seperate sub-folders. Finally set the root of your source control to a working folder so that all of the sub-folders on your file-system match with source control.<br />
<br />
<b>Branch before deploying your packages</b><br />
<b><br /></b>
Assuming you're not developing on your live environment (if you are, I strongly recommend you stop - even if it means using you're own PC or laptop as the development environment), at some point you're going to need to deploy your packages to another server (hopefully a test server).<br />
<br />
<a href="http://www.blogger.com/blogger.g?blogID=583448162611849186" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="data:image/png;base64,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" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a>This creates a potential problem. You have two copies of the package - one on the development machine and one on the test (or live) machine. However, there is only one in source control. This is obviously fine until you need to change the development package. As soon as you do you've 'lost' the test/live version from source control. Of course this isn't quite true as one of the advantages of source control is the ability to keep the history of your packages. However, if you encounter problems with your live version you have to roll-back to the live version in the development environment (assuming you can easily tell which one this is).<br />
<br />
If you are in a team, even a small one, this could then hold up development, if others need to change the same package. If you imagine this problem replicated across dozens of packages you can easily end up in a big muddle with package versions being rolled back and forward with no-one knowing which version is which.<br />
<br />
The solution is to branch from development folder before deploying to another machine. This is very easy in TFS and Subversion - I'll demonstrate in TFS;<br />
<br />
<b>Step one</b><br />
<br />
Select the main development folder (TFS calls this 'trunk' by default). Right-click on it and select 'Branch...'<br />
<br />
<img alt="" src="data:image/png;base64,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" /><br />
<b>Step two</b><br />
<br />
Simply name the branch. Its best to add it under a seperate 'branches' folder.<br />
<br />
<img alt="" src="data:image/png;base64,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" /><br />
<br />
<br />
The advantage of this is that you now have two packages that reflect the machines they are on. If you need to fix the live package, you can without disturbing the development version of the package, or preventing the onward development of that package. There is no need to go back and restore previous versions. You also have a complete 'snapshot' of all packages on the live environment, which means that you can recreate it, re-release it, migrate it and so on with ease.<br />
<br />
<b>Only release packages that are 'ready'</b><br />
<a href="http://www.blogger.com/blogger.g?blogID=583448162611849186" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="data:image/png;base64,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" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><b><br /></b>
The other advantage of branching in this way relates back to Jamie's original post. It gives you the ability to release packages that are ready for release, instead of all packages under development, including those that have only just been started. <br />
<br />
<a href="http://www.blogger.com/blogger.g?blogID=583448162611849186" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="data:image/png;base64,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" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a>We delete all packages from the target server before releasing; this has a number of advantages;<br />
<br />
1. Any packages that are dropped from the source control release branch becuase they are no longer needed are also dropped from target servers. This means the target exactly mirrors the source control release branch.We do this by using the dtutil /delete command (we're still on 2008 R2) and some good old-fashioned batch script, to get us a list of packages to delete;<br />
<blockquote class="tr_bq">
dtutil /SourceServer "<target server>" /FDirectory SQL;<target SSIS folder>;S > packagelist.txt<br />
<br />
type packagelist.txt | findstr /v package(s) > packagelist2.txt<br />
<br />
type packagelist2.txt | findstr /v successfully > packagelist3.txt<br />
<br />
FOR /F "skip=6 tokens=4" %%G IN (packagelist3.txt) DO dtutil /SourceServer "<target server>" /SQL MGP_BI\%%G /DELETE</blockquote>
2. We can be sure that the release is deploying all of the packages. Any packages snuck in by any 'back-doors' will get overwritten by their source control-derived cousins. Anything developed outside of source control will equally get removed.<br />
<br />
3. Finally, we can use the same process to build or migrate to a new SSIS server.<br />
<br />
<b>Merging packages</b><br />
<br />
This simple branching technique does give rise to another problem however. At some point you have to make sure that the development and live/release branches are the same. Fixing the live package is all very well but obviously the fix needs to be applied to development as well - otherwise the fix will get overwritten when the development package is released.<br />
<br />
This is where merging comes in - and for SSIS it can prove tricky, however if you stick to the following you won't go far wrong;<br />
<br />
Try merging the files using your favourite source control client. If you have a package file in a release branch that has been changed and the development package has <b>not</b> been altered since the release version was changed the merge is simple. If you have BIDS and TFS;<br />
<br />
1. Right-click the release package that has just been changes.<br />
<br />
2. Click 'Merge..'<br />
<br />
3. In the Merge dialogue you will see the Source branch (ie the release package) and in the Target branch you will see the development (or 'trunk') package. <br />
<br />
<img alt="" src="data:image/png;base64,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" /><br />
<br />
4. Click 'Next', 'Next' again and 'Finish'.<br />
<br />
5. You'll find that the development package in the 'trunk' folder has a merge check-out on it. Check it in and you will find the development package has been updated with the release branch changes.<br />
<a href="http://www.blogger.com/blogger.g?blogID=583448162611849186" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAmUAAADjCAIAAABLm/ScAAAgAElEQVR4nO29PWjjSt//reIptkxxFy6u4gqc4h+4izVcxWU4zTGcYg1brGGLY9gimC0Ws8VitljMNkGkWEyKIFIY4cIwLgzjwjAuDHJjkP8QUB7Iw7gIKEUKFSlUpFCxxTzF2LKsl5H8FinO78uX4IxH86bRfDSjF0v/3//7f7nf/FHzujEqsOkRmx55A9mPAvtRqPUtX2QwGAwGgw/bUigvG6OCclNmsxM2K7HJGx7IfhTszyf255OTtl1um6kXHQwGg8HgZ3MILxvjonJTXvJyVnJ6BQ5L6/2J+d+Tk7Z9cmUVL2nqpQeDwWAw+Hns52WjU+G8LH0/1q4kNiuxSYX9KNif8xyWSu5N/is+ubIKP/X8VzX1CqRixhhjLJupvSCzhdLKOiPJrrXVwfSWg6kI+PXYz8vy+UljXCx9P+b/alcS+1mwP+etD3NY8vDCN7XSbrjR3njGvlQOg21y38kmz1yAnTRXVODzlMebS1SOoXF2UjxBC3h34rp5bbChoC8lL/kGMXeSxTab7GpXgsHP5hBe5r+S0g/C/2U/C84XDstjJffG/JXn4Y1xsd4vuLxMt99vmftORodtypAWL72Zisfo/ZVB3AJJ4uyqzQUE3SbZjUuyQ5ht3zj72OR56gIG79ABXn5tFr5rJxdmpWN6YHnCYekMc84wp1xXGpNEvGQeBWO6n70fxBuuNaiJE4lKOXlhxGUQ1DS2TaK2TR5H7NAqB1tgs8ZJuPsEBUjShuLiJW9VcS/aIP3YQibsNr6vorIIDdmy10XVRVCj5CG+XhpsATA4sw653+fkVD25NE/atndmqQ8aWrdO2jXSquGrGr6sosuqel7hmyQ8IMWBoXEESYV+K94kNlBcmNgSrrVhMHDdxomKE2txygmruW7jJGmK0KL6qrZuRqERxFWLSiR5RRJWUxASteEGEZJ/K6j1Wu0pyFEQEwzOuMOfJzn5pJy0be81S63XYAHVP5fdTXxfvdlocPGFRyUuPryDgdvknmQTcRlCUwhNLXnxfCmH5h5aADd83fKs2zjJay0ovzi1hBnFds6EfXizTiWupiBk4wZMWIaEzSgo5DYNJUgcDM6sw3n55o/ayScFvy8of80vWGrdOmNM/l4r/12ofSo7Tw5jrPapHEwx4VEaFRj8NzQk9ttd5Z7wyBeUITSF0NQ2a5zY9gltsSQ7Lraa4qolr5eg/EnacIOMxC2WpPETpi+uZmj6Pq3bgAnLkLAZN2iEtdo8NBAMzqYjeekz6dQZY+W/C4wx1FK0IWG/We2fUjDmBge5+PgMDYn9dle5JzzyxSEJC7BZ48S2T2iLJdlxsdUMLfA2PSHJ/t1JRglzTFLfDfZpwqpt1oAJy5CwGTdohLXaXLwjwOBMOTEv2zW2mF+W/y7gLnJ+s+rHOS/ZqtytYgPFh27wqAumJvg2KiTq87qFERcgNL6gnLvKK4lDIwtKvkHj+GLG1iu4SbBggsZM3hOSVERQsA3SD002tHZRNU3ewUL3Y5JvBbUOllzcCOv25OT9FgxO10l5iVvLA0C5aJIBdhxW/VBMvQIvyzBAgH1+zV3iNdcd/BKdmJdXy/ll7VPZcZjzxCrvgZfrGQYIcNCvs1e8zlqDX7TX4eVv5vxmjsMch9lPzAZegsFgMPjVOCkv1fNK9UOx8r5YeVeovCuU3xX4hczUKwAGg8Fg8DM4KS/BYDAYDH7NXvKS3hpgMBgMBoND/cp4OQuxmRXT3fju0H2/ua1Im9nyw6Hb8npfstP144uwvbmzJGdPflox8DJ1TAIvgZfAS+Al8HIrAS+Bl8BL4OWBGniZFQMvgZfAywM28PIADLzMioGXwEvg5QEbeHkABl5mxcBL4CXw8oANvDwAAy+zYuAl8BJ4ecAGXh6AgZdZMfAyDV5KkvQMwNs2l5fAS0mSfAgMhhwqLyVJygIvJUnKAi8lSUofbMBL4CXwcmNeSqtyGbYrXgbTD/Jy8xwXjJQkyfvZXPzdn72ViuIl5+KueOlryecn3wa574SXkiRFfbYWf9PlpS/9kOyAl8BL4OU6yi4v9zLzS5aO99vd8nLf9uYSkeNe5pfPT8ptcn8GXmZhfgm8BF5mxsDL5+Wlb7YXNTXchpdRM9q1M0owv/TNAgUftuRlIMQ/v1ydku6Gl8EJny/E++/2E9MNco+Kudv5pbdtXV6uBq6E+MAW/LATXi6z8/BypVSpcw54CbwEXu5qPVbacv4XQGNomsG81uWli0xplYJSNNWCH7Zcjw3kRYN/dzu/jPrsDQlF1054GfwcFRKTY4LrlByTwb9W2Kosx5WXYbEh2/PSp5DsHlb+egl6CAZeZsXAy/Tml0Gabj+/fGZe+sAW9Xff88s98XKldoHA7PBSlGnavAz+3cn80k9Q4CXwEniZWC+VlxswMlO8DOXcwfAy9tss8NIL8lfFy2Wgh47AS+Al8DJWL56Xm7Hz2XjpIlO8HhsV+NJ5GUus1HkZmXWyR0eksKuYW/IyKnDnvIT5JfASeLmWXiQv6S7u9/EqGBjMa4e89C7JClC3GS9DU/YEpny/z755Kc7dR01ftGfgpW9F1BcSijppp7xcyc5Dx5VSpc454CXwEngJ7/fJgBMTcR1eHqD3/76C9O1By0FhEniZOQMvgZfAywM28PIADLzMioGXwEvg5QH7lfHyMA28zIqBl8BL4OUBG3h5AAZeZsXAS+Al8PKADbw8AAMvs2LgJfASeHnABl4egIGXWTHwEngJvDxgAy8PwMDLrBh4CbwEXh6wgZcHYOBlVgy83JqX1oPpgEAgEOg168m2bVt0RpIZpcZL68F0nhwwGAwGv3oDL4W8THv3gMEvyc2LJrh50Ux9R4D3ZOvBEjttVtp2qrz0RwKDwVFuXjTTvzCftpsXzdR3BHhPBl66DuPlIirqINRBvu2tac25a7JH1ewfs0fFeVCtm+a+ypq2Uddf/QPzYVdwT7XzJQu8nPMycbM3e3azZ8tdu9Gx6y27dmVVL6zKuVU6s4o/rMJ3q/DNSr3zgF2b96bYabPStvdX/XV5yRhb2f4BWaM8e2pakwp7UszhiTZW9tHvtRFZekjIEJMBJgNM+hj3Me4h3EO4i3DiMRF1TdQx1ZapXNLmLyqfGY0fev2bXvuiVz7hiE1iEqe3hjYi/LP9aBlTXR9ra9duRLQhMe/MLXetNiTakJABtu6TJpWcKOYd5bUzpjq9NezH3Yxo9qNFbw2esjmj9uMO0lyrdmbitopKFni5AS/RhCkjpgxZc8DkHmt0Wb3j1NtOreVUr5z8Z0Ocgm3bpKfqQ4Xe6KQroysZXcnqRUM5r8vfKvqYqNdKY1yLyt31rphtWZZ+TbUJ1aZUm1J9Si0r0eaN9orrLbvesquXduWXXT6ziz/twnc7/80++WKffEo0sOzDwEsRL72FYIwxxlZCHlX2pLDfumNh9ltnT4p1rwr6/cb110ZEHxMywOGH6I2utlXUVlFbTZgg6pjamCmXzJXjMPkXrX9H5Y84fJMuEqdpPZikj23Lsm3bvKfakPgaUFA7b3W0IcFdtG7Po7fG/BxigHEPGVPNmGr6REMddX4+0UPmHRWkEFtBLn2qa8Ml3fWxpo81+3HrdZhHiyflpkwGmM5EBV5LSWq3QbP7kgVecl4mb3bOqkZ7TqnyuVX6aRW/W4Vvc5+cxh9ExkRzLNz4UmGPtbkf6s6sao7LzW/lZrsm38hRuaMJUydMHccwO7YMSocoHaJPDdu2zXtTmxhqT6d3ljahZGwkuR3GR8ralV25WJDym33yxT52/SF8jLLXOQOILU+ozDtT7M2S3a0ywcugzN6xNS47j5gxx3kk1rhsjfLb9PsozXnZD+PljW5c62pLVS6bagJehs8sv+v1r3r1lNS/k415ads2GWB9qtuPlnGto45qJRt8V3h5o5MB1scEddS1Oh8ZYONa5yZ9bFzruI+1MUEdFbVVbUy0ERG3j6CCZIitB9O2beNa59NW1FH5OQruIm1E9ImWvKih0ieaNiK4h1BbVdsq6qhkgMmQmDNq27b1YKJO0pOhUCXkpdper9mBlxvwkt4S3G2itqxeybhPmFe/meMwx2H2E7NtZj2y/Ltq7F4w72jjS5nZNdyqzGF5X3Nuyva0xEbHqFMp94uhG66gZTtm27aNh0azRdx/rQer2SaO49i2g/p67LW98tnSLFrWoy1ok93WKCjgpZCXi8dR+Xqs7xnVxfxScx7n80v2pIr6/aYPw2pDoo8J7qFQWBpTXW0puIfUthqbVOjMUm2b9W+o/F6tfdXLH/zVnG/YDQ9fKeeIkD6mM6qPidpWrQczUe1GhN4a+kTTx5ox1cgAa2PCCceXZ/kKrTgRl5e4h7Qx4ZNLbUxIH6ttFXcR7mNx+0RX0CIDrE80emNoQ4J7CHVU1FH5SrjaVnEP6RNtq4edH219oi1Sw7iPOTVxH5MBNmdUn2iorW7zSHWS3Ye7SB9rals17+hmyQIv57wUNjvuNO3RMbdy0eDWJxr7zZzfK4MGmdCocaPRNrnxyMTdJntoKOdlZtdK/807dzXntmJPivYob/eOmpflYjsfvvuGRgiR1hy7lA6xH23z3lT7eu3nyiHWbBHLss17i84stRdzjJTP5jPLemvOy1xLyrUkx1ueJ6ZfR7ZJZI089bKfmGVvPhoDL8W8nL/6wb1+6X0fBL1RzWGePTas6fz6Jb1u4jGN7vcbvniCDHEILxew1KeaeqXgLlJbqiCRyGuWX7XqJ1I5xeX3avWzVnofngjqothy6lON9LE21nAXLcb3ePOV22WNrnVtvLJCSwZ4MYhHN5HLyy5C3TnS+OSST9dwH6tXirB9IitI+pj05xeM+bTSmOr2o8WnfQtebvVuEc5L1OEnGZYx1dW2qrYUb77bpJ9k96EuIgPsQebayQIvF7wUNbt6JTNGuB2r6VyXzO5x5WOJ3tv6jWncWXzQEI8bjbaJpky7tnC36TzI9dOSddOonpaZXSv/WTQHeaOV0y+PmqdH5c/FwtVJ+O4bBOgSGLu0aczYpXQI6utqX0d9vfZzeYgZN7TZIsatpV+b2oTKl9h6EPWl8pnd7DvNvt3sL3l5MpNyLWlZHtvlZUSHDK2Rpzqm5WwzGtMZFTttVtp2FnhpP1q88b0hxrDu3NXYY8OaFMw71bmrWdeV/Luqr8PtgJd8ibLr4aUHlvpEU64U1InjZdjMsnpqFP9qlD/i2je99F4tfyKld+FQSTLgmncUdxFfqyQDnLR2Q0xvDe+tTL4rmqSP9TFRW4o5ixzE57yc6nxm6V7L5KjDfYz7WLnckJfz26l6iKdJ3WJY1pyX4615Odb4RVb35WF0Rt3LsbiL1Jao8LFOxEu+CDyYz5uTIBN4uQEvlYsGY9h5VJ37hnNbdaZFrVPBQx2PjWaX1M9VNDRiR/ZG2yTXDu42rVu5flpqXqL6acmcVCvvy+w2l//j6M3/c3Tyb6n6sVT5Uclf5EITUft6KCyde+yMy84dsh6ZcWuiHhH0AeOG1s/U8he58rXJGMNDg3MRt5FxazUucOMXqp+j+rla+6kaN5Gdqnxm8wml1yezOTL5vNB6jOElr5EkSfpEX8JyMa00LWY+AC+fhZdB45Hh2IhMTDIx8ZjyD+6//GxI3O+lVUVl5F7SC4WlPtaUSwV1VPGQqrZMbcTkc9uFpWk55X/0yidU/qBWP2uld0rpAy7+3QzdPMmAy6PNZ2A3Ma3nrR290d1KGVON85KvxOpTDfeQ2lK4BYm4sNTHGr/KuLx/eDHpFJc8ckd3EeqouItIH8/vG+JfubyMnl/6nmSPiubOL11eWvemNiSkj+enIMLJcWwuCXnJmwu1VbWlKFeKeW/G7m5fMVLH1XNy0evkvGye15mtuLA0hxU80u3fjsOY6TB0bVa+NvUby3xw8ChyZNevKT99l79XLMtkjBnXev20RHsnuaM31U8VpT3PutmTTz5H8LKneXHp/GZowqothruIWcTp50zLMWaW3VWddwWnG7/CUTtTODLtjmqdlqt/lvSpYT9a1oNZ+6laj3b1R2Q3Lv20OB29zj9KReeII5PPPWJ4uaiRJEnmveV41mD5UEzvRbyMHZDpLRU7bVbadhZ4ubh+uTpYDHTnQSYT09vh+O7Jv6u6e0jc72NhaT9afIKljQhfY1TbqtpS1ZaiXinKlTKHZTuGl8olJQOn/s10YWnMrMJ7Uvu6mFn+3Sy+Q8W/5CQjY9DmvcnvWNFGBHUR7iJtrMWec9gLXs4fkulj3Md8xrk8OZjq+kTThkTADNLHS1iOCSfNyunFtc7XZqNSEFRwvsDbXrT8ohjmvYnaKu4h8clBLCztR8u4MXAPqS3VWvDSk+N8R4ubUZxLEl7ya7FzWF7GwzKY7KvipReZvkBxs8s/as60bPZPaCdHW0ekr5rW/CzWcpj+yJpDivqEPjhoaIh56RPuk/qnIr2zLJsV35djd5/S1XxjV63NyA07+crY4Ni6p9q9UR2X6Lci66rsr/BFXa/pjFa/NRljqK+jt8WVAk9p9YfCLzeEuvjDPJlJJ5bf+Uep8HR0PJJyZ5JpxfDSrdGcl6srsfTBofei0diOG5CBl0JeLt6vv7x+6XnpvtrTndsKHhnOb8ZvgOZPC9E7K/+u6sJy2e8jXt4vSZL47f64j5YPXw5WnrlEi/XP+TgenUjzF8U9p/6dVk+N8j964T05/gufvMPzmeVHXPyrWfgbFf5shG6OukiQuHlH3ftfUGdZMG2kxf52wWIpVdMnc+DxJ2fm+Fw8WqoNiRJdQdzH+kTTx8uHMXAf08UklQywPtXUtsrXdTeooGvLMt3P9MZAHYT72BsY3vgXzdhkcR+jDqI3RmheSSzIJUnt1Ja6hOUdTZKjL9nXxktOx2CIuNkbXyv103Ltn1L1Y7HyvihfYcthjDGHMeuJ6Q9MnVilf+poZArGDX0a4OXv5U0x5iMrvi/H7j6lQ7zbOk8MjdnxV4a7KnvAbPCmOiqRO5xv59ifx05XjT86Oqp+Wi1/lhljak8379fowMVv9Hgk+cwJejySjj5KpuVZqxPWSJIkbaz7YGk+OPTeMe5iRmNbOCAbN4bYaTHSq9R46f2pnfkJoCdE6WrOJI8Gum/Kb8ys/LuqC0t6P99Dqz/cs4b5pI3PwNSWunR7ZbqpXCmCROQzA3VstWU1L0z5nDZ+GLVvevWz5p1ZFv5bL/y3Hro56iJB4stnIVoq6WPURea9aVzraktUJG4ywAqfKC/MUbdYoV3c6TrEggryRdGVs4oe8i1cu62kXIakI65gVKa4h4xrfeM96zW/uRf31i5GEiepHV/x5rDcLNlXyMtQgq7X7F1Nu7fN34w+McNyyJ3T6BqFd9X8wqFb8fkl6uuor7sfXFOLFd+XY7Oe89Jzj0/5F9Nn7M0/jD0gu/0G35Fi99i4qrCJxv7Pm5gEr5rGuyL5T0H+V770qc4YU7uaeZ+0ixa+GEcfJa9zZ3NqzmH54NAHh4ypYCxd1sjxrMTybe8d484xZluNxvpUFzttVtp2mrwU/nCd0iH24Ejt6ba9Mr80bkzOS7p6RrPxL+ThHnJnlmpLlc9k5VLRJ5ox1VBncW3vSlGuFEEijR86h2XxfXXuD9Xih2rpw3JmKdgcdZG4hOaM0hlVW4p5T3EXmTOqT3RxkQSp0VvDnVlyz3kZvcn8YX/3ymUX8ccl5yEDzOedZICbF811K+izeUfneFtnqyQV5wA27+gOk01YO34mYc7WyNqXLPByzst1ml2bGo020SymWYzcs+bILH9tyj9ihgv/euxvZjvMspn5yOgDow+s+L4cv8c7xHdDbOEHQxP25oPNZjK9lGrTkvGoFwfHrIfsf78RpXY5h2Xzf/LGgNBbWvhQY4wpHc28S9SX8p/1RovWr2j9ito2s2129NGF5XLuMeeloEae62LW6kqsMXP0261GY22scfuudLrhabPStrPAS74eG9w3dldSupr1OL/zitNRvzbz76p4bKLRwlvysovcZVi1pSqXCuoiY6rxxyeUq8WFTCGc6t90PrMsvq9WTmuoT/QbWvpYXZlZJh4Z/SXsIToz+JOg1oPJn39QLpVQMsUadRG9maNuftPsEMfyUhsRvLgVFvcx6iLPLVHE+96c7XnJcY66yLjWN96tQZv3dD4zjjtX26BJY+MoVwpdB5bBZIGXG/DSejDxUKueoUbHqLe00hel+b1kz2R0JRoxVuaXv/3zS+M+KS+d34w/H2ncmsbMyn1mcs+R3lF2U6WXUnVa0h5IoX3M2grNSZH9dhWW7jGSf1edzzITnP+dfNLKP/Tyd738Xefw5rNMLywT8dJTI/3G1K75DZi7GY3JkLj2LYfzwLRZadtp8nLxI+/u9UvvL78rHZJ/V1U6xLQc7/xSm9C8Zzllua6y6U/M8wfjcA8pV0rzojl/H9uY6GNN9a5kXiqCRGpfdPmclj5phb/LjZ+yMTPxkBT+Ks1nlgnKIPiWA5LPdM17akx1XjB9om1S347qTpoTVpDeGPz1NGpL5a2EOqo+9TxY4nHzorluBX02rnV9opl3dON9Kk7cuNZ3m2aS2nk7/GbJAi/nvFy/U9FbiocaGevGjVH6UDJaJ/adjK4iBw3jxnOb4cL2b2Y9MfrI6CMrvi/HZspHMNdKG7/56NRalvQ3pZcSvZTKkzy6UwrtY+e8Qf8lRaWjvz1R/51v/k/e6JOVSs08s8z7mIPl5B9y/JEcf8DHH7Axs4yZpd9Y2rWlXVtk6jHnZbIaCbzZcUQGROy0WWnbKfLSvKeuedf0hnArHULvnfm5zJRqE8r3aDDmxuavl1Pd+zNbqncN1mWJcqkIEsF9o3pKKv+Q8kdc/oBK75Ti383Cnw0+s4wtA+oiUQmnOuqoypWijbUdVnwbo7Yq+IXCdSv40r2n2vmSBV5yXm7Z7PRGL70v6Vcn9c/FqDj1743Su1LpfXnuD+XSh/Ly3/fl4vvyBllL70zpbyr9Pf+3NDxRbuX8ZY7+S6L/kqK2ah6dNP8nb/Rw8Cvjxsi/qzZ+qbFZJ+Qc9z46cxLjHub2rce64Wmz0rbT5OUdjXXUGU2SbV+QURelXgaoYNZq50sWeDnn5dbNTm/0+vc67jQ323xXLvaOS72Tk4ujdIuRHfOFRm4XlnwqNX/mMAPKNC9fiQ8bJwdfQeDly+IlOJteeTyhpbqwdEPSZqVtp8nLGRgMTmrBAvircuo7Arwn+558U64Uxpj337RZadsp8nLuGRgMBoNfu2NPldJmpW2nz0swGAwGv27jHpLP5Uifya/9eRLu1BfNwWAwGJyicQ/JZ7LAGYGlnTovD9mrqw2pXx4wZ4Y5o3tx2sfbMznxnfFWuHf50Od+vdP3OWTG1op3p7VeRPxMjnt7+7N7q598X/FB8nIVnMDL1EkJvAReAi+Bl8BL4OWaFs/9wc/m9BEIvAReAi+Bl5nl5TbD665IGfxxO1AqemHIBF6+bAMvgZcvjZfboG5npPwNzoBfHDKBly/bwEvgJfAy2bZ8dHZAWRLwMqNOn23AS+Al8DIZL5UOUTpkV7zksHSenFdl/vbFbKbmGniZUafPNuAl8BJ46eFl8+hEf3sSxFv9TEV9fVfzywUsbefJ9r323vfIy769Te472eSZC5DEwMuMOn22AS+Bl8BLDy+VXF79d954V/QRrvxFVhe89M4yN+AlhyWvJx/x02rlLXPfYPPgJtuUYU+tB7zMqNNnG/ASeAm8XF2PVXJ58p+CD5mVr03U19W+jodb8XIOy8UOm4/4gR3pnXIFY7qfvR/EG4ZmtG7u4pSTF0ZcBkFNY9skatvkcexHC3iZUafPNuAl8BJ4Gbh+6UNm7UxhjNV+KrWfarNFfPxbG5aeDuTHgCfQ91kQGBpHkFTot+JNYgPFhYkt4VobBgPXbZyoONzAy4w6fbYBL4GXwMuw+304MvXTavVbkzGGh5EI3BiWOwSGmIihVNgTL5OnE1uG0BTW5aW4KUJzB15m1OmzDXgJvAReRtwfK/+rUP4sh8JSv6Zr8ZLDUnzk8LHb+2GtwOC/oSGx3+4q9ySbiMsQmkJoaps1TlQg8DKjTp9twEvgJfAygpelT3XGGOrrdkf1faVN1uBlEliuNfofNi83KADwEnj5Yg28BF6+fF4WPtQYY2pPR2+L1mkZt5H7ldrTtWlSXs5hGTFaSasKDRdE9kUI3TAqC8G3USFRn9ctjLgAofEF5dxVXq6Blxl1+mwDXgIvgZcBXubfVRljalfj/1b/LBm3VrNFmi3SbBN6ZyXkJYdl+kPqyzcH2/PkBbzMqNNnG/ASeAm8XOUln1kqHc0b2LjAxq1lWbbjOO5irJiXc1im/2tZh+A5L58lL+BlRp0+24CXwEvgpYeXvpnlkpe/kH5tmveWbTtkHH9/LIdlkluBwFkz8DKjTp9twEvgJfDSw8vGL9U3s+SunyNtQunM8r0VL5SXAMsXbeBlRp0+24CXwEvgZdz71ms/1fq5Kl9itedHqY+Xu/pFTHC6Tv03q8FgMDhTTsTL6g/FerRrP/2PlLgDa+hnMBgMBoMPxknnl9UfStRXLiMBlmAwGAw+VO/y96KBl2AwGAw+VO+Ll6kvNIPBYDAYvEPvl5cOCAQCgUAHofV4WfzL/yPSwEsQCAQCvQbtmZdPjus3f9S2tzdBMBgMBoOfzZG8LP5VDPU2vKQzcxsDL8FgMBiclvc9v7Rd74iXNhgMBm9vBgIJFewze+al531Cu+HlIrVmb8Vy12507HrLrl1Z1Qurcm6VzqziD6vw3Sp8twrfrOD7jVAX7fX9SfqYkAFGHXXvL2qKcGgFtRHxWR+T7ZPNiPdUtrWS1ceE221h2wrpfluaDDD3i27YdJ32aAxKU0m6RzBwz/fHenLaOS/RhKEJUydMHTNlxJQhaw6Y3GONLqt3nHrbqbWc6pVTvXLyn43th83PSZYAAB75SURBVAB9TPSJZkw1bUj0iaZPNG0kIo02IvRGV1uqO4B6x1DrwYzfYY8WO6+zBDFDHcVL3+7Tx0S5UrZMNsq2ZWlD4rOg7uvG33Kf7iNZbUzorUFvdG5tSFBHtXaKTDLAxlQzrnVjqq2LTH2i8dM43EP6WCN9TIZYiztnAl6CDkxJukcwcL+89L4P1+WleWd6EaKPiXmXlJduav7JZXs+syyfW6WfVvG7Vfi29MmpEXw/L+qitd7na0w1bUSMa939q4+10Ji4h/gwRG905UrhdgdQPoYqV4p1b4pzZFONfS6x0yKLjsl6atRXoRWM4qVypYgLI06Wy7Ks5kWz+aspn8v8f224yO5Gpze6ca2TIY5MIS5+7C5Lvk/Ne9PdlWbcjlirq/DzJNdkgNdq3iRyJ5cr7mPciymnNiSkj1FH1UbEmM5bmJ/5kQHWxyRqw3UPlhehtEdsUJpK0j2CgSJeim/z2ZiX+pjYFrEtgrtNr2Op6eUlGhiJWuU3c36z/LtqsOahQ4BlWWSIvbYsi39lTHXjWqc3unegCW1o3EM8wtxT3ctL41rnY1MsMtm1zr6W2WmRfS6xdtP/7YPJTovsrBa6bVQFOZDc4RV3ES/kDnj5aClXijmj9qPl5rVshGvduNa1IVHbalQK4vioi1BHnf+owrplWxXfBV7TWcgZ1brJzmsxIvRGxz2Ee8ityA55aVkW6eP5ase8g2n6RNPHRFxOfbyEpZfo3PpEI32sRSBzt7yUJGmHqW2s/Y7HoGwrSfcIBoruj429chnPS8+vvXh4ifUxxt2m84idJ+w8YcfG7BHhTgwy3/xRc1NT+3poK1QupeU/v5nzm5EJzb+rBn99BnVRMJAMsW/IJgNs3Zv8Kz4d4cicX5oK+10b5UpBbRX3ECelO7/0pumGi38ih1kW+1VnH/LsnwL7VlmG/6iyj3l22RBsG1VB72qhl+gJf7UnNFn70bYtS20ptrX8hSBtSDg25u4i1FFJH0elIIiPOirqqGpbVVuKcqWY9+Z6ZXu0yRDzD3NY9jHqqKitoraKu4gMsHlH167yqvkVa9xDuL/ai9ZpXrHprcE7Hs9oeWmAXyxvq4JtOWVRWw3CUhsR3Ef6mOBeeE2DLSBJUuznKCeJ8wzmgwT/GXZ3zHD/lRbyfk74rVe+xMU5CrYSlFYQGCyPr/BRKR+8knSPkK67Z14uf2jNy0v2pOHOkpfMRuxRZZaC2k3UktXLhnLRUH7Vw3g5T03tad7KWw6lj1h/aFYupcqlxH7PYek4Li/9P/yGuigYGL7SNcCkj7URMaYaZ8xyfhn9w3KooxpTzZ1ZBjHMqZnkN+rYhLB3J+xDnv2s2o8W+1Vn/xTYr7p4q6gK8kVCd37pljPhD+aFJsuRprZV9UpRLps8UBuuzGP4fJGDKjRlcXy1papXim1Z5h1tXjRDf0owtGzLit8afG6Ne4jDEvcQ6iK1reIeEuzN0GSD16S1MXGnxfwCIe4i1EVrNa/A5h11p4Z8MZlPFnkZSB+r0bkYUw33kD4m6ioveTpqW112yyFO0gKSJMV+jnKSOM9gPnRE0Yutgkrwrxgz++bl9uWJ3eQglaR7hHTdFHg5WuWlveQle2iy+wa7q7NZTcxL73qs5VCOSe7qlVS5lDgs7ae1eemdFhhTTeeLXYsbfIxrXR8TPibqYxEv3Rmkj5Q8WX6nxlrDKPunwE6L7EOefSyw75XY+AJeemeWfDUPdREZYD6+4y7SRmStZG0Xma0lC5frq4sqz9dXo3kpjs9JbFlW81fTWpeXfUz6mAww7mO1raptlQPSejDVxRRzrSp77+vRx0tYes+H3IrshJf8drPl7ptq2pCQAeZ/cR+5ZyrBuvMpuzYkaktVW4q6WPDgLew2uzYiOOJ8yBcSy0t3EuMN9/6NiuydG3mTFYeERhC3JwtMxUCuUuPYcyn2cAuNs+frl56cXF5qI8yeNNRe8lLrN7V+k/SapNvEHRm1ZHTVUC8b6uosc2V+6VmPrVxK9BEzxqynOTgdh9kOs5+25KVmuLAca9poeVss/yyAynxIHc3JupzP9RBaTOnW5aX9aLGPBfb+hL3PJ4ksml8OPTeJdBEvIS+Sy3Lci+RiZI6rIPSvr/bm66tqO5KXCePL5/K6vOSzPdxD/O5Q41pfbsV52V+Tl56rgCvdhk8xRwR1VH7+oUfwsnnR9Doqd+8iB1/bmC9vTDVtRNSW6nat5q/wRPjkUhsS3Meoi9QrRR9rPAW1raK2yk8gjKnGV7wTtoAUQKAUAKH3KymMnXYAbMFtozIVbxLcNpgUSKDUUPYsiuoGbjhbl5cJvTYvh5g9aaglc16aU5l0m+xeZg8L38vuLBO1mrHrseS+zviVy9+MwxLP6hyWtr0mL90rT15YTrTlstviIYeoQX9lSPXdwLKYbehTTd9sfvmfI+ftkfP2Dfu2+fxyfsPR4jyAI8SYavTWUFsKv63JmOq4hxIuzfGaug6v/lTX+Xyoj71z0MjmCsQPzSJJ2bj5yjPnIu4h844ut2qrvBHWStZ7Xw9ZvWCpTzRtSFBbdbtQ1I5OAkvvoyO+e3zIAPPJonKpNC+a8rkclY4x1VBHncNykYg2Iu6Zk9vhQ/fOTnjpDRH/G/zsG9GkAC9Dhzyxd8mWQ1RqKHsWhfYEbyBLYX5pWa6XvBwgZhP1as5L0mvqoya7q7NZde6bMpuWnFHR7JzoE7LCy0VqSnfl+iWfVpo2dRxGH2nlUrJtZtvMemR4RPPvqt6ScKMuCgbOBz7fSuxY0zy85PfNzu9tEZoDIHR+yQc75So+EW72scD+zNmnJduy2Ney/b9v2FQTbxJewQHWx/ORl58E8MkW32tqW53z8lqf32+ZLFn3ORBtuNxqlX8apwjpRzadOH5oFknKNv+qM79mqbZVvia5/Kqt4h7SxpHtGVnlxbK2NiR8LYHDUh9rqItIf3lXl2BHz6/FRjh4HV1f9Mz5VdLoKvusTzS1pejjlZMS9xyOd3ieZsIWkCQp9K/3Q/Cr0BD+b5KYUdsmbIRgjqAopQSyZ1JoZ/Y6GMe29nz90rJM1y4vyQA5j0S9lJ1HbE0b88nlbY3Nquy2ym4qzrjoDAt2Py9/OfbeMfvmj5qbmtIhbs29Fy+5tXtiPTJuNDTy76reknCjLgoGkv7ymlMoLOfwG2DlUglu7vMcAKtDkjtn5byMTcSyTPap6Px1bP51Ys/oPOS8Tv94I94qtIJuNfkKMx8f3Ycy+d2n/EEIPrFLmOwcZjeLO3S6aFn95QMPc/5F1VocPzSL5FWOsjmjqINwD1n367UkL617Ky/mD/7zJu0itaXwy6WCZJPYt9KrDQm/1Ir5/b1dxJ8DSZKUPtHck6EgKXmf5HPl5A0rSVLCz6HfegMFMcUhCRMPmsH1y2ilxrHnUuzxEhpnz7x8MF0vedlDzj1SfjXouIG7TXbfYDcVdl1m05IzLjqDvNU5phdH8ufj2peK734fNzUvLxlH5rlE7prkrmlY1Hpk5iOzLGZazpyXnpJwoy4KBuIe8sHStxLL169wHysXzeDmPpMhNqYx88vYRNiPKvvrmP7vkX2tr3z194l1WhJsGFpBd/1tTqPBfNhFHeTe9MttTHW1FVK80GTdW1v5cMzjLE4XNH2iqVeKNiZL/oUVWBw/NIskZRP53uQXNemtsW5L+laPjanmPqOitlTURWSI9YmG+3i9Ivn21wCvnENMNG1EcA+htsrPb/hSAUmWC+/JkSdwQ4w6avIWsB5MSZJCP/N/ucQxvWN0VIg4Wui/wfIEzYeOIBukwBMjwZjeb5OQJiod8beCraTALbXBkoeWJ/Tb14NJV7EHS2icVHip4o6qnNdxp0kHNeNC4tYvJO3XG3L2Rv2eU77lKu+O6S2N5+XiuZHKpWQ/MctmHJamxUyLmQ+b8DLqsqULG35vRfxgN8TLgWnidxJeOnfU+c8R/fcb66we/Fb/441zR6O2jRrj+LMx82tX/fnDFfpU885j+K2Saitk9BTw0h3Z+bCrDQm/DLlsySFRrpQoOInjh2aRsMrhvjfpzOCzQ3HMqDMP7/zSva/HejDNe6q2VNzH/HRkjSIFc+E32XpeSuA+OmI9mOYd5RNZ1E6UC2ctfzKKtzN/kMZ9SR4ZhnN37RORLRzLuV05xcEalLqSdI+QzrnX65fWvena9/7Y5nm9eVaVf1QbX8u101L1Y7H8rlD870n+f49zuaOjoze5ozfB50nc1DgvzXuLzizj1tRvTO3aJBMTj000WjXnpack3KiLgoG4h/hthytXKz2zQz4yoi5q/pKDm/vs3nQaZf6KH4HZlWz9nzfm3/nQb52u4jxEbhtaQfcrF/yoo+I+5jdMem904vemJkx2ZSl1qqlt1bo3zTvK28r7qgE6M6JKJY4fmkXyKgfNYUn62Lyj4pihyfLFA9/5kLtDOcnUKyU28SRdaH7Bcky8j47MM5pRviqbMEH+xAjuY/5AFOqo/LZk1FHnq8dr9qWdW5Kk58ko7REblKaSdI+QzrnX+2PNe+p6J+9bd1NTOiT/rprc3pJwoy4KDXSH7MWoPR+4lUtFuWzy96PyV6QGN/fZ+x6fKItTcB5MdtGIzSjUoRX0fstHSfOeaiOC+/Nrb5yj/HH75MnyqaGLDbUVU68NnCQLcZV91icavTU2bsmonbvbWvMrzSvP/yweHdkq2QFGHVVtKWpL4SdGG7TAS3faIzYoTSXpHsHA/f5etHlHXe+Gl54EtzTqoh2mlkHHVtAbgT9Yws8PUFslQ7xWsvwK6Mor6/ZQndgs9rRPU+wq3lcDLl6fNH905DmLcZAHS9ojNihNJekewcA9zy89OQEvn9mHBw+o8oE1bLpOe8QGZV3BPrPn+eXMcL0bXnoSBIPBYDD42Rxzv0/szbFiXtKZ4frNH7Xt7U0QDAaDweBn836fJ9l4jRcMBoPB4EwZeAkGg8FgcLz3+/xl6tUDg8FgMHgn3u/9salXDwwGg8HgnRjml89t3jJgMBgMflmG65cp8DLqWR0wGAwGZ9bAy3R4mfaTuCAQCARaT8BL4CUIBAKB4gXXLzPHS/vJoTOTjHQ80FB/4R5Ru0SwFQgEAoH2qkO+P1aSpNTpuB4vR0VnXDMnzeA35r2l9jX/ztvp77uKf9IWtI1C21P8C72wC0CgrCmF9Vjvr3tnk5feDXdeyFBeFs+Y3GK4i5hFnH5+HjrE7ExmA2zbDI+o0sb+nZf4h9oTdYXE2wZ/2/1FDO6hPyIvgFYw/mYhbKMWO8hdAAK9aO35/bG7Y1havNy5Q3kptxm5YYUzxgYFfYTJTJPHVb3dYF2VfSxYli3/UuVfqn/npcTLzdJPV6G1Szi9i4JTkpAk38YWYOM4ofAGgUCbKWY9Nvbi5U546ZtuBqd33r+h8UNnq4II4hS8/8bGCZZ2A16WzljhjOGuyh4wGxw3RhVyh0vtPPtQYMP5tDKUl74B0ftv6GfxgB5MFnQw2tmYAQK9Vj33/DI5HX0hofFDIydJLaouSTaJCtmGl7VfTJ+x42+MPSC7nTNsrdwtGFc1NtHYn8f2E8Mjo34m+3femvMb32dBBNDhaeMxAgQCcaX5PIm0HZx89OXajJe+FLYs0ga8LJ8xNGG5LzabyfQyJ0+rxqNeGRRYD9n/yRk3pnym1HbNS0FSoMPTJsMDCATyKM37Y6Ud8XKb9DcugKBIG/Ay/4PJPSd3StmNTC9zjWlFeyDldoG1Ffo2xxizbaf6A3gJ2lAbDA0gEMing+Jl6Ffi1HbLSykBOEN5mfvqyC0r94nSyxy9zNUmJXSnlNsF51ymb3PWI0MDo/od1mNBm2jj0QEEAnn13Lz0HsbBwKhoUoBw3vjBzYMYE+cYLFUw62CEXfLy1Mx9orlPlDHWvMLVYVG5lUuXJ/Rtjr7NWTZDfaPyNZ6XbPUBCfdz6OgpJQBn6IfQ9L0hgjE6SfriInmz8GUkyF1aVVT80Ly2CQktoTijfe8CEAi0mZa83Oat7cl5CY59v4/aI+VeodorFi9O7Cdm28y4c9SeUf7i5+UauznBw3xJYoLW1QbtCbsABMqmDvn9Ptl0LC/JSGeM0XuH3ju2zY5uikc3RbVnlD8DL1+egJcg0MEIeJk5Xsq/EGPMmDn6zNFnztFN8WhSVrr6NrwEgUAg0Jby81KSZEliyQ283D0vz1Uy1pWeoXT1uTu60tFLp8BLEAgESk0hvNQnetKNgZf74aV8pjTOmrUzufJNrnyVy1/k8he59Kmxiz0OAoFAoE0UzsuEyARe7oOXIBAIBMqgInnJkSm+8wB4uRkvUy8DGAwGg9e1iJeSJHknmsFJJ/ByA+/hpAcEAoFAe5eYl7IkLTEZvLQJvASDwWDwK7GIlwtkzjHJ//UiE3gJBoPB4FfiGF56Z5mS5J9iAi/BYDAY/EqcaH65eCElrMeCwWAw+JU69vqlHFyYTc5LMBi8vb1HbOqFAYNfrWPuj+UrsVHIhPklGLxvywFepl4kMPh1Om499sy3PMvksyUygZdg8L4NvASDM+L4+318Bl6Cwc9p4CUYnBGvzUvf238o8BIM3qeBl2BwRrw5L/nyLAVegsH7NPASDM6IQ3/PK7n3wktJkmJDwOBX4ufh5ZaH2GEfoZIE5yhggwZ5uYHX4qW0qvAyAS/Bh+hgnxccBa6T8HL7AyS0YOLieb/arAD8tNv7b1S0FPdaFgoAzohT4GV8mYCX4EO0j0CxQOJOi5exiQMvwa/NmeBlcBzxhUcNMfzDugMQGJyWpYBiN9mMl8H0kxxKoQkKNnH/Da1RbO04h1waeT94Uer7NxgY5G7o5oKQ0FxCo4Ffs9fgZfGvYvGvYjB8y/XY4AEmDveFRB3wYHA2vRYs6Ua8FB87odsm4aVgkyi+xjVFCC+DM85QXIVSVpz+liFgcCJeRpGSe8v55Vq8FLMWkAnOvjPCS8GhFFXI2DPd0MIImyKElNvz0jcvTEjH2K3A4BheiknJ/Zy8TJIaUBOcWUsBxW6yD16uFSHJJtnh5fazSV+yUQUAv0JH8jIJKblT4WUUQaMCweDU7WNkQmS+XF7GVi14sTAYSCNwtT9ewvwSHOX4+WVsEqnf7xP6FRicNQf75w55GQvjqAgJeSnIhQaOREEiqwmG8NL9HPWtb9sk67Fwvw94J46/fsknmru6fgkGg9cyvN9nS4vXWsHg5H7u+2PBYPBaPmBe+u6yybhTby5w6o65fskBKV6VBV6CwfvzAfMSDH5ZFvHS+wHWY8HgVAy8BIMzYuAlGJxpAy/B4IxYdP3SS0rgJRicioGXYHBGHH/9MvZBTOAlGLw/Ay/B4Iz4ud+3DgaD1zLwEgzOiJPOLzdbjwWDwdvbd7iBweBUnPR964JvZeAlGLw3M8aAl2BwFpx0PXaz+WVwkgoGg5Ob3hpBXqZeKjD4dXq/1y+LfxVZetr54jX4sJ1iX40SjeBl2uUCHaCgX8VqveuXxTXfh7ePHWA/OXRmkpGOBxrqL9wjapf4YqY+/oJflnfeV7cXjeZl6s0FPiRDv0riFzW/HBWdcc2cNIPfmPeW2teCYw0YnNy77Ks7EgVegp/F0K+SeL/vj90VL4tnTG4x3EXMIk4/Pw8dYnYmswG2bYZHVGnj4FhDd/1zmFG/+Qfebdt6AwXtvNtdsJO+ultR4CX4WQz9Kon3+z68KF4KbkAKj99m5IYVzhgbFPQRJjNNHlf1doN1VfaxYFm2/EuVf6nBsYYm++XbNdor8bbi39TNrEN/RlQArdjfWUwYslmL7XYX7BJ0OxIFXoKfxfvrV/ubsTy/U+PlWuGlM1Y4Y7irsgfMBseNUYXc4VI7zz4U2HA+rcwaL7Owd9fuDWv+6m8w/mYhSb7duHmT74KNiLZf0cS8DJ6RpN6dwC/I4n4lXuYRO/QHydfa3FuAjPKS7uL9sbviZe0X02fs+BtjD8hu5wxbK3cLxlWNTTT257H9xPDIqAe2jdrfvtYPfhYP6L7PwRR8vSS4pwX9L5QfgvSjPoSWJDb3YEnEhQwt7QYh4vYU12vdXeCTt14bU21/oi+Hl7inPHOO4B1a0K9CPyf3Nl0xuO3zd+yV3Pf6/thd8bJ8xtCE5b7YbCbTy5w8rRqPemVQYD1k/ydn3JjymVKL5qWvraN6gHgcp4HxF/TS5du/G1Ntf6Lr8DK033orS6PPLYIx1zLuKdwpjmXgbbwWL6M6VWh38vbMJDFDsxZH3qA8wa2SOJ37YzkXpVW54cG/+R9M7jm5U8puZHqZa0wr2gMptwusrdC3OcaYbTvVH3vhZdSuAh2M3P27L+htIbo1L2MjSMKDIoldWAIyX66T83KbkCQxo/6NKk/w281KmMRrPH8ZNdF8hvll7qsjt6zcJ0ovc/QyV5uU0J1Sbhecc5m+zVmPDA2M6nfgJWg9+fbvxlTbn+iavAx2cl99fdG88QUtI7APloDMF+rk1y+DXUVKzKckMaP+DQbGdnJxvht0+Pjrl3QPz5OszctTM/eJ5j5RxljzCleHReVWLl2e0Lc5+jZn2Qz1jcrX51iPBR2Mgvt3U6jtUXQ7XkrRnT80/roOhSUg8yU6yfwySYi44yWJKchorbyShyR3/P2xof/6Gtr3ge6al16pPVLuFaq9YvHixH5its2MO0ftGeUvSXlJF+TzfQ4OpjRifAEdjLw9eS2SPY/o+rz0demoYcL3IRgT/Kq8GS9ju5kvJEnM/eWePN8op8bLtZ6/9IqMdMYYvXfovWPb7OimeHRTVHtG+XM4L5Nb3GowoOzPG7TnPnbBlmzbh+h2vHQ/Bwka+iF4DgF+JU7OSxroKqFjY2jHSxIzKq/kKSTMZYMOH7Meu6f7Y7eR/AsxxoyZo88cfeYc3RSPJmWlqwMvX66Bl1Gi8L4C8LM4C/3qecbVbXJ5Ue+PZYwxJp+rZKwrPUPp6nN3dKWjl0635SX4lXvnfXV7UeAl+FmcYr96noWNneSSzv2x20g+V+UzpXHWrJ3JlW9y5atc/iKXv8ilT43gWAMGJ/fO++r2otG8FFzUAIM3MPSrWL+8+aUrOcHFThDoRSuKl2Aw+Pn98q5fJlezZ7uWu7bcseWWLV9ZjQurdm5Vz6zKmVU+s8pnVoqFBIEEEswvQSDQMyud963vRLHzy2bPRhOmTpg6ZsqIKUPWHDC5x+QukzuO3HbkliNfOaWzLC7EgUBsz7xMeEJZghNKEIgx9qJ5GauVsaC9MhCUPS7+eG5eSpIUGwICsf3zMskJZRFOKEEgxtiL46XgSmwwMhqGHee/meMwx2H8XQfWIyud+m8UmjeNJHkx5v7r/et+Ffo5SsBLUEI9z/wy9ISytPDzn1CCQNlUot/zys71y6g12HBeDgLH+W/m/F6BpTal6/LS/Tf2c5R8cdwbnWM3BL027ZWXSU8oPXee77WvwnkkKON6YffHernoPZZCean29ZX/F7B07rEzrjl3yHpkxq2JeiS4rZSSdtZSoIPQfnmZ8IRywcu0Dgo4LkAZUTrvW99Y6/Gyp3n/dX4zNGFyi+EuYhZx+nnTcoyZZXdV57TEhtibMowLoCxor7xc94QyxeMCDg1QFvTyrl+yxD+cqXSXvOQDgdxm5IYVzhgbFKx7qt0b8rhKzyqsq7KPhWWjpKfdNhfopWu/vFzzhDLF4wIODVAW9CJ5OS963PxS6SwWWvlZ8xNDY1Y4Y7irsgfMBseNUYXc4VI7zz4UsjC/3G1bgQ5Ae+XlBieUaR0acHSAsqAYXiZZks06Lz2XZGq/mD5jx98Ye0B2O4fvSLlbMK5qbKKxP49X2gWGA1AGtF9exp1Q1sNOKJ//0ICjA5QRveDrl7HhSof47l8onzE0YbkvNpvJ9DInT6vGo14ZFFgP2f/J+Zsm4m49Kdmdsb5DPTQmjAggsZ6Dl2ueUAa7tO+48P4b+lXoVoIQECgjenn3xyZ//lLpEOc3M+8tOrOMW9OYWfkfTO45uVPKbmR6mWtMK9oDKbcLrK3Qt35egkCpa++8XD2hLPETys+iE8ptziOBl6AXrRfGy7WkdEjptOFaaePcV0duWblPlF7m6GWuNimhO6XcLjjnMvASlEHtm5fJTijz3hNKWHcBvVodMi+Dyp2auU8094nyf6vDonIrly5P6Nsc8BKUQe2bl6VPDddKG+e+hJ5Q5uGEEgRiXl6u+0tgXr8UXvpU7hWqvWLx4iTtgoBA4dorL4PynVBW4IQSBPJoB/PL4ETzpfASBMq4npmXPpV7hQqcUIJACwEvQaDsKl1egkAgr4CXIFB2BbwEgbIj4CUIlF0BL0Gg7Ah4CQJlV8BLECg7Al6CQNkV8BIEyo6AlyBQdgW8BIGyI+AlCJRdAS9BoOwIeAkCZVfASxAoOwJegkDZFfASBMqOgJcgUHYFvASBsiPgJQiUXQEvQaDsCHgJAmVXwEsQKDsCXoJA2RXwEgTKjoCXIFB2BbwEgbIj4CUIlF0BL0Gg7Ah4CQJlV8BLECg7Al6CQNkV8BIEyo6AlyBQdgW8BIGyI+AlCJRdAS9BoOwIeAkCZVfASxAoOwJegkDZFfASBMqOgJcgUHYFvASBsiPgJQiUXQEvQaDs6P8H8Z2YMWU/o5kAAAAASUVORK5CYII=" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><br />
You could of course manually make the same changes in both packages, but in this case TFS handles the change gracefully by simply overwriting the development package, ensuring there are no mistakes made. This of course makes the assumption that the live package contains all of the development package information plus the fix. This is reasonable as the release package is a copy of the development package in the first place.<br />
<br />
In the next example the development package has been changed <b>after</b> the live package.<br />
<br />
In this case you will get a merge conflict - TFS can't tell which bits of the development package need changing and which bits need to be updated with the live package. In this case <b>do not</b> attempt to merge the files using the merge conflict resolution tool in TFS. Simply cancel the merge. The changes have to be manually worked out and applied to both packages using BIDS. Generally speaking this happens when different developers have been working on the same package, therefore they need to collaborate and make sure all of the appropriate changes are included. In big teams it is often worth making one individual responsible for ensuring that changes to the release branch are included in the development branch. They can even set up an alert in TFS so that get a mail when such live changes occur.<br />
<a href="http://www.blogger.com/blogger.g?blogID=583448162611849186" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="data:image/png;base64,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" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><br />Philhttp://www.blogger.com/profile/10605647000243636584noreply@blogger.com0tag:blogger.com,1999:blog-583448162611849186.post-22819204988533717562012-10-11T21:58:00.000+01:002012-10-22T15:52:10.553+01:00Fairly useful TFS commandsYesterday I had the pleasure of remapping the Team Foundation Server workspace that our automated build process uses, after we decided to move it from the system drive that was running out of space. This involved heavy use of the TFS's command line utility - <a href="http://msdn.microsoft.com/en-us/library/z51z7zy0%28v=vs.80%29.aspx">tf</a>.<br />
<br />
I discovered that by using the tf <a href="http://msdn.microsoft.com/en-US/library/y901w7se%28v=vs.80%29.aspx">workspace </a>command you could alter a workspace to be public as described <a href="http://dev.goshoom.net/en/2011/08/shared-workspace/">here</a>. This is useful as not only does the automated account need access to the workspace but also anyone who wants to run the build manually but doesn't want to log in under the automated account.<br />
<br />
You can also remap a workspace to a different working folder, using <a href="http://msdn.microsoft.com/en-US/library/0fa04bx6%28v=vs.80%29.aspx">workfold</a>; <br />
<blockquote>
tf workfold $/ <working folder>
</blockquote>
For example<br />
<blockquote class="tr_bq">
tf workfold $/ c:\projects</blockquote>
<br />
Changes the current workspace to use c:\projects as the working folder.<br />
<br />
Alternatively<br />
<blockquote class="tr_bq">
tf workfold $/ c:\projects /workspace fred</blockquote>
<br />
Changes the working folder of the fred workspace to use c:\projects and removes the mapping to any old working folders.<br />
<br />
Finally<br />
<blockquote class="tr_bq">
tf workfold /workspace fred</blockquote>
Changes your current workspace to fred - with whatever working folder fred is mapped to.<br />
<br />
Another useful command I found that wasn't at all well documented is<br />
<br />
<blockquote class="tr_bq">
tf workspaces *;* <server name></blockquote>
<br />
If you're an admin, this allows you to see <i>all</i> workspaces - not just your own, tf workspaces * just seems to look for workspaces called *!<br />
<br />Philhttp://www.blogger.com/profile/10605647000243636584noreply@blogger.com0tag:blogger.com,1999:blog-583448162611849186.post-39118087608600092402012-09-02T15:52:00.000+01:002012-09-02T15:52:22.184+01:00Using OR for multiple constraints into an SSIS taskAfter helping out a colleague a while ago with this issue, I thought I'd post a short explanation of the gotcha that occurs when you route two or more precedence constraints (ie the 'arrows' that join tasks) into a downstream task. The behaviour of the flow may not be what you expect. Hopefully a quick example will make this clear.<br />
<br />
<b>Step 1:</b><br />
<br />
Create a package in your favourite version of SSIS (I'm using 2012 - but any will do). Create a Connection Manager to SQL Server (doesn't matter about the database), and add two SQL tasks to the Control Flow and connect them to a Script Task as follows:<br />
<img alt="" src="data:image/png;base64,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" /><br />
<br />
<b>Step 2:</b><br />
<br />
On the first Execute SQL Task connect create a SQL statement that you know will succeed, such as SELECT 1.<br />
<b><br /></b>
<b>Step 3:</b><br />
<br />
On the second Execute SQL Task create a SQL statement that you know will fail, such as 'SELECT * FROM NoTable'<br />
<br />
The Script Task can be left as is - we're just using to test the control flow logic.<br />
<br />
Before you run the package - what do you think will happen? Will the script task execute?<br />
<br />
<b>Step 4:</b><br />
<br />
Run the package. You should see the following:<br />
<img alt="" src="data:image/png;base64,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" /><br />
<br />
If you thought that the Script Task wouldn't run - award yourself a pat on the back. If you thought it would - read on!<br />
<br />
<b>Step 5: </b><br />
<br />
The default behaviour for precedence constraints is that <b>all</b> constraints must evaluate to True before allowing 'downstream' tasks to execute.<br />
<br />
Therefore in order to ensure that the downstream script task executes, double-click on one of the constraints (it doesn't matter which one) and in the editor click the radio button that says 'Logical OR. One constraint must evaluate to True'. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNQinRi0c16Df8OpMtrh1Ch_LJ7IvxYncgz66w4UYnspKxY9-qzEF29GtMs7JMOglVBFb0DQxIOH582zE6w2FGoLvVrK5wtqSv42FbfOyYVq2ZpYrU8-xkhLfRL9fke1785_esodjroSw/s1600/ORConstraint.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="336" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNQinRi0c16Df8OpMtrh1Ch_LJ7IvxYncgz66w4UYnspKxY9-qzEF29GtMs7JMOglVBFb0DQxIOH582zE6w2FGoLvVrK5wtqSv42FbfOyYVq2ZpYrU8-xkhLfRL9fke1785_esodjroSw/s400/ORConstraint.jpg" width="400" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Click OK and you'll see the precedence constraints change to being dashed;<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="data:image/png;base64,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" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" border="0" src="data:image/png;base64,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" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<b>Step 6:</b><br />
<br />
Now only one of the tasks will need to run successfully for the script task to run. Run the package and you'll note that the script task has indeed run;<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJY0R4aRijJPVh4tt6UTWKv1w4t91Iaezmg8fvi5T76EMI3nW2j1Nk-vKtMcxFsvnG1UWjDWSpVHdWHz1XK3UQ5_x-VTkcFgpxYw2gR3RUPcrWGYycTgK-_Mohw5DrnBonoAgvMs9Zvtc/s1600/ORComplete.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJY0R4aRijJPVh4tt6UTWKv1w4t91Iaezmg8fvi5T76EMI3nW2j1Nk-vKtMcxFsvnG1UWjDWSpVHdWHz1XK3UQ5_x-VTkcFgpxYw2gR3RUPcrWGYycTgK-_Mohw5DrnBonoAgvMs9Zvtc/s1600/ORComplete.jpg" /></a></div>
<br />
<br />
<br />
<br />Philhttp://www.blogger.com/profile/10605647000243636584noreply@blogger.com0tag:blogger.com,1999:blog-583448162611849186.post-62021749501668876622012-06-05T21:36:00.000+01:002012-06-26T09:17:37.085+01:00FireInformation to debug SSIS scriptThis is a quick blog that I've been meaning to post for a while. When writing script in an SSIS script task or transform, debugging can be a bit tricky.
<br />
Strategies for debugging scripts are briefly outlined <a href="http://msdn.microsoft.com/en-us/library/ms136033.aspx">here</a>. I know a lot of beginners (and those few hold-outs still migrating over from DTS) use message boxes to debug scripts. There are a number of disadvantages to message boxes; you can't copy the contents of the message (to validate a file-path for example), the message isn't recorded anywhere to allow you follow the script logic, and you have to remember to remove the message box statement before deploying to a server (otherwise the package will hang waiting for a response that will never come!).
Therefore I prefer using the <a href="http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.dts.runtime.idtscomponentevents.fireinformation.aspx">FireInformation</a> method of the IDTSComponentEvents interface. At its simplest it looks like this;
<br />
<blockquote>
<pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">void</span> Main()
{
<span class="kwrd">string</span> s1 = <span class="str">"Hello world"</span>;
<span class="kwrd">bool</span> f = <span class="kwrd">false</span>;
Dts.Events.FireInformation(0, <span class="str">""</span>, s1, <span class="str">""</span>, 0, <span class="kwrd">ref</span> f);
Dts.TaskResult = (<span class="kwrd">int</span>)ScriptResults.Success;
}</pre>
</blockquote>
This results in the following in the 'Output' window;
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHAoWSrFDOFVys1PbDmOEBG3bA4w_EEDEEBuzMA4-BvaRPJjb7MHla0HfIcncKE1gMDpQBffUFn836e9s1e4RZAVUL1L8jzL1ZSGkNbJwIXMr8pNj_EoiJRfb3cfw0OgFjxJ5pnMiU5Gw/s1600/Output.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHAoWSrFDOFVys1PbDmOEBG3bA4w_EEDEEBuzMA4-BvaRPJjb7MHla0HfIcncKE1gMDpQBffUFn836e9s1e4RZAVUL1L8jzL1ZSGkNbJwIXMr8pNj_EoiJRfb3cfw0OgFjxJ5pnMiU5Gw/s400/Output.jpg" width="500" /></a>
<br />
Note that the 'fireAgain' parameter ('f' in the script) is passed by reference and needs the '<a href="http://msdn.microsoft.com/en-us/library/14akc2c7.aspx">ref</a>' keyword. All this means is that the variable can be altered by the FireInformation method itself - I always set it to false.
Obviously more useful things can be logged - but the principle is the same. This is particulary useful in a Data Flow (ie as a Script Transformation) where breakpoints and so on rapidly become impractical. One word of warning though ensure that 'OnInformation' events aren't logged as part of the SSIS logging, otherwise all of these debugging messages will be written out to your logging provider, slowing things down. Alternatively simply comment the calls out before deploying the package.Philhttp://www.blogger.com/profile/10605647000243636584noreply@blogger.com1tag:blogger.com,1999:blog-583448162611849186.post-34723166015117657812012-05-05T19:09:00.000+01:002012-06-05T21:45:23.402+01:00Why you need UseSandboxSettingsAt MITIE we use Visual Studio Database projects to automate our database builds. This usually works perfectly, however recently we discovered that the build was deleting all of the data from one of our development databases. We had backups so we didn't lose any data, but it was inconvenient to say the least!<br />
<br />
Suspicion first fell on the 'Always recreate database' option in the Database.sqldeployment file, however this didn't appear to be set - which created something of a puzzle. After a bit of poking around we realised that the problem stemmed from the use of 'My isolated development environment' in the project properties;<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJNHgm9TZR1BF440Edz2UnfAEaX4FZF9O4ngWr8Pedmxo1QIaAkAlFmYboVDhTvxr5GbZ-mBiPMkj1DW-EkLz20pEvTwWYlMeTyJIacKYXYPliRW9UwG4lsVGUNmw_Bxb0RQfr59fVSaU/s1600/VSDBProDeploySetting.bmp" imageanchor="1" style="margin-left:1em; margin-right:1em"><img border="0" height="140" width="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJNHgm9TZR1BF440Edz2UnfAEaX4FZF9O4ngWr8Pedmxo1QIaAkAlFmYboVDhTvxr5GbZ-mBiPMkj1DW-EkLz20pEvTwWYlMeTyJIacKYXYPliRW9UwG4lsVGUNmw_Bxb0RQfr59fVSaU/s400/VSDBProDeploySetting.bmp" /></a></div>
This setting is intended to enable developers to build and deploy the database project to their own machines using their own settings as it explains <a href="http://blogs.msdn.com/b/dukek/archive/2009/12/01/visual-studio-2010-sql-database-and-dac-projects-dbproj-project-properties.aspx">here</a>. However, the .dbproj.user file that stores individual developers' settings was being stored in source control, hence the automated build was using these settings for the shared development environment. The solution was two-fold. Firstly we removed the .dbproj.user file from source control, and secondly we added the "UseSandboxSettings=False" option to our msbuild script, examples of which can be found <a href="http://msdn.microsoft.com/en-us/library/aa833165.aspx">here</a>. This msbuild option ensures that user settings are ignored by the build process, whether they are included or not. I'd recommend doing this for all builds on shared development environments.Philhttp://www.blogger.com/profile/10605647000243636584noreply@blogger.com3tag:blogger.com,1999:blog-583448162611849186.post-91396940424788214152012-04-03T20:58:00.004+01:002012-04-03T21:15:29.490+01:00SQL Bits X - the 'take-aways'I've just about recovered from attending <a href="http://www.sqlbits.com/default.aspx">SQL Bits X</a> in London and I thought I'd share the points that I took away from Thursday and Friday.<br />
<br />
Overall the conference was well-organised and probably twice the size of the last one I attended in Brighton. On Thursday alone they had about 600, and to quote Chris Webb there were 'loads more' on Friday. Its still organised by volunteers and does not make a profit, and is comfortably a match for the other more established conferences (such as <a href="http://devconnections.com/shows/sp2012/default.aspx?s=185">Connections</a>, <a href="http://europe.msteched.com/">TechEd</a> or MS's own BI Conferences). So many thanks to all those who made it happen.<br />
<br />
One other note - what follows is my own personal take on each session, as much for my own benefit as anyone else's and any mistakes or omissions in relaying them here are entirely my own. <br />
<br />
<b>SSAS Deep-dive</b><br />
<i>Akshai Mirchandani</i><br />
On Thursday I went to Akshai Mirchandani's <a href="http://www.sqlbits.com/information/Event10/Deep_dive_into_Analysis_Services/TrainingDetails.aspx">SSAS deep-dive session</a>, which slightly confusingly, was merged with <a href="http://cathydumas.com/">Cathy Dumas'</a> <a href="http://www.sqlbits.com/information/Event10/Putting_tabular_models_into_production/TrainingDetails.aspx">'Putting tabular models into production'</a> for the first hour. This actually worked quite well as they went through the pro's and cons of SQL 2012's Analysis Services Tabular vs 'old' Analysis Services cubes (now re-branded as 'Multi-dimensional'). The major take-away for me here, was the fact that MS has committed to add Multi-dimensional (ie cube) support to Power View (aka 'Project Crescent') 'before the next major release'. Not sure exactly what that means - whether we have to wait for a service pack, an 'R2' release or even a Reporting Services-type release. Which if you recall, originally came out in 2003 as a seperate install (before SQL 2005). In any case this could still be a couple of years away.<br />
<br />
Additionally MS is committed to supporting both Tabular and Multi-dimensional into the foreseeable future. However, whilst Multi-dimensional will get incremental development, Tabular will get the most investment. As an aside my colleague spent the rest of his day in the Tabular session and identified some serious limitations in the current version around KPI's, which will limit the use to which we can put it. Anyway the controversy over the <a href="http://cwebbbi.wordpress.com/2011/05/17/good-news-on-the-future-of-analysis-services/">BI Semantic Model</a> and <a href="http://www.sqlchick.com/entries/2012/3/4/decisions-powerpivot-ssas-tabular-or-ssas-multidimensional-m.html">Multi-dimensional versus Tabular</a> has been covered at some length elsewhere and so I'll leave that particular hot potato.<br />
<br />
The rest of Akshai's session was 'deep' as advertised (it was based on the three-day meastro course) and way out of the scope of this blog post, however the following points stood out for me;<br />
<br />
<ul><li>Full processing of cubes blocks queries - no surprise - but it is also blocked by queries. This could lead to a situation where processing can't complete because of long-running queries. In turn other queries that started after processing began would be waiting for the cube to complete processing (ie release its 'pending' lock). In order to mitigate this change the 'ForceCommitTimeout' property. This sets the amount of time the processing will wait for a query to finish before cancelling it.</li>
</ul><ul><li>Always consider keying string attributes by using a integer, since there is a 12-byte overhead for even the smallest string. A smaller key means better querying and processing performance.<br />
</li>
</ul><ul><li>Similarly use an integer value to key degenerate dimensions. It may even be worth experimenting with a separate database table for degenerate dimensions. Also try indexing the degenerate column in the database.<br />
</li>
</ul><ul><li>Its usually worth explicitly setting the partition-slice (ie the 'Slice' property in a partition) explicitly. This is for various reasons, described <a href="http://www.ssas-info.com/analysis-services-articles/66-mgmt/3262-set-the-slice-on-your-ssas-cube-partitions-now">here</a> and <a href="http://sqlblog.com/blogs/mosha/archive/2008/10/14/get-most-out-of-partition-slices.aspx">here</a>. Further, some customers use regions or time-zone slicers in addition to date in order to support rolling partition-processing by time-zone.</li>
</ul><ul><li>Finally its worth remembering that when constructing a calculated measure its worth evaluating to NULL rather then 0. This improves performance by taking advantage of block computation algorithms</li>
</ul><br />
<b>Introduction to Microsoft Codename "Data Explorer"</b><br />
<i>Miguel Llopis</i><br />
The first session I attended on Friday was about <a href="https://www.microsoft.com/en-us/sqlazurelabs/labs/dataexplorer.aspx">'Data Explorer'</a>. This is a beta product from <a href="https://www.microsoft.com/en-us/sqlazurelabs/default.aspx">Azure Labs</a> that is essentially a self-service ETL tool. Despite being a beta product it is fully-featured with a long list of potential data sources such as SQL databases, text files, Excel, OData and even tables in web pages - the example they used was a Wikipedia page. There is also a wide variety of transformations that can be applied as well as look-ups and merges of seperate data sets. The immediate use-case I thought of was as a way of profiling data sources prior to bringing into a data warehouse via more traditional ETL tools. I will definitely be checking it out when I get the chance.<br />
<br />
<b>Building a BI Portal for Tabular Models</b><br />
<i>Cathy Dumas</i><br />
Despite the title this was more of a high-level look at the variety of SQL Server tools now available for reporting, rather than a practical lesson in creating portals for Tabular. This included the usual suspects such as SSRS, Excel Services, PerformancePoint and Power View. For me, the key points here were;<br />
<ul><li>Currently Reporting Services, of all things, has the best support for mobile - as long as you're using iOS (ie iPhone, iPad). The PASS presentation featuring Power View on mobile was in Cathy's words a 'fake'. Apparently it was merely indicative of functionality that will be made available in the future.</li>
</ul><ul><li>Reporting Services can also be used to report on Tabular models by using DAX by pretending its a DMX query. Its unsupported, but works, and reminds me of similar hacks needed to report on cubes in the first release of SSRS.<br />
</li>
</ul><ul><li>SharePoint is the future for BI reporting, for example the next version of PerformancePoint is likely to be much more integrated into SharePoint. If you consider yourself a BI professional, and you want to exclusively use MS products, its no longer enough just to learn SQL, you need to understand SharePoint too. This also means paying attention to SharePoint Cumulative Updates and the next version of SharePoint coming with the monster Office 15 release.<br />
</li>
</ul><ul><li>Cathy concluded by suggesting that the best solution for dashboards at the moment was a mix of Excel and Reporting Services. She called out the latter's strength in geospatial for which Excel has no support. Conversly Excel has the advantage of allowing end-users to alter reports rather than costantly needing BI pro's help.<br />
</li>
</ul><br />
<b>Load Testing Analysis Services</b><br />
<i>Bob Duffy</i><br />
The penultimate session I attended was devoted to performance testing Analysis Services. The source code can be found <a href="http://blogs.prodata.ie/post/Source-Code-for-Load-Testing-Analysis-Services.aspx">here</a>.<br />
<ul><li>The session principally used <a href="http://www.microsoft.com/visualstudio/en-us/products/2010-editions/test-professional/overview">Visual Studio Test Edition</a>, which was slightly disappointing for me as I don't think MITIE's MSDN subscription actually covers it!<br />
</li>
</ul><ul><li>Despite the reliance on VS Test Edition, there were some good tips. One if which was in the analysis of trace files. Bob suggested using checksum to identify similar queries and take the average response of these rather than focusing on the slowest queries that might represent 'freak' results.</li>
</ul><ul><li>What came through quite strongly in the case study Bob quoted was that caution needs to be exercised when using more CPU cores to process and query Analysis Services cubes. This is because before SQL Server 2012 SSAS didn't work at all well with <a href="http://technet.microsoft.com/en-us/library/ms178144.aspx">NUMA</a>. This can be so bad that performance can actually worsen. In the case study the ultimate solution for this was to run 4 virtual machines on each NUMA node, each hosting an SSAS instance.<br />
</li>
</ul><br />
<b>Unit Testing SSIS Packages</b><br />
<i>John Welch</i><br />
John presented his unit-testing framework/software for Integration Services. I'd actually already downloaded this from <a href="http://ssisunit.codeplex.com/">CodePlex</a> a while ago. <br />
<ul><li>Its still the only real option for unit-testing SSIS, and John promised that the next release would incude the ability to test individual data-flow transformations which is sorely needed.<br />
</li>
</ul><ul><li>One good tip was the use of database snapshots to roll-back changes made by unit tests.</li>
</ul><br />
<b>..and finally SQLRelay!</b><br />
<br />
At the end of the Friday we were all reminded that all-day SQL-related community events continue through April and May; details <a href="http://www.sqlserverfaq.com/">here</a>. I'd thought I'd give a special mention to the <a href="http://www.sqlserverfaq.com/events/391/ALL-DAY-THURSDAY-EVENT-SQL-Server-2012-at-the-SQLRelay-meeting-in-Bristol.aspx">Bristol</a> event since its in my back yard. Hope to see you there!Philhttp://www.blogger.com/profile/10605647000243636584noreply@blogger.com0tag:blogger.com,1999:blog-583448162611849186.post-81962144284528226102012-03-07T09:28:00.000+00:002012-03-07T09:28:25.743+00:00SQL Server 2012 RTM!SQL Server 2012 is released to everyone <a href="http://www.microsoft.com/sqlserver/en/us/default.aspx">today</a>. Get the evaluation <a href="http://www.microsoft.com/download/en/details.aspx?id=29066">here</a> (saves a couple of clicks).<br />
<br />
There's also a virtual launch event later on at about 4:00pm GMT. Register for that <a href="https://www.sqlserverlaunch.com/WW/Register">here</a>.<br />
<br />
Finally the official, European, real-world 'technical' launch event is <a href="http://sqlbits.com/%28S%28ckin5tat3ut34q55gkgc32eo%29%29/default.aspx">SQLBits X</a> on 29th-31st March. Register for that <a href="http://www.regonline.com/Register/Checkin.aspx?EventID=1030134">here</a>.Philhttp://www.blogger.com/profile/10605647000243636584noreply@blogger.com0tag:blogger.com,1999:blog-583448162611849186.post-63840859576929902612011-11-28T16:40:00.000+00:002011-11-28T16:40:41.391+00:00Reporting Services Win/Lose Sparkline - Setting the Axis LineWin/lose sparklines are a useful way of displaying performance over time, providing you can boil-down performance to a binary 'win or lose' result. <br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgK1LGMc8lDnRuAY-PIzJTUyjrwCM33_OcMSwdGBpVdAFtGMSHIyvvsGhA2fSddp9FkPb3bwKR8ltsTu-wsgxXrcun9EWhG4RXCWjIxu8sumfJTGfHEwCSMmLiWqYPPYkWCFtQ2mAnJOmY/s1600/WinLoseExmpl.JPG" imageanchor="1" style="margin-left:1em; margin-right:1em"><img border="0" height="31" width="385" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgK1LGMc8lDnRuAY-PIzJTUyjrwCM33_OcMSwdGBpVdAFtGMSHIyvvsGhA2fSddp9FkPb3bwKR8ltsTu-wsgxXrcun9EWhG4RXCWjIxu8sumfJTGfHEwCSMmLiWqYPPYkWCFtQ2mAnJOmY/s400/WinLoseExmpl.JPG" /></a></div><br />
Sean Boon has a good example of doing this <a href="http://blogs.msdn.com/b/seanboon/archive/2009/11/16/building-win-loss-sparklines-in-sql-server-reporting-services-2008-r2.aspx">here</a> but I struggled to get the Axis line to display in the right place. I thought I'd share what worked for me.<br />
<br />
What I found was after setting the axis to visible, as per Seans blog post, that initially the Axis is drawn at the bottom like so:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhda8hX3umMN4bdDMs_odNMDojqTa3G2koQ6CwGvloSZ-leU6vzDuFoakv2RZ7H4nluXuOGuH4LxlquWzJqFx35MWFCxbUzitn32kAZspH_eR1HAmMokDvaqJFCjxHk0doI_x1bWc2SdxY/s1600/WinLoseAxisBtm.JPG" imageanchor="1" style="margin-left:1em; margin-right:1em"><img border="0" height="31" width="215" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhda8hX3umMN4bdDMs_odNMDojqTa3G2koQ6CwGvloSZ-leU6vzDuFoakv2RZ7H4nluXuOGuH4LxlquWzJqFx35MWFCxbUzitn32kAZspH_eR1HAmMokDvaqJFCjxHk0doI_x1bWc2SdxY/s400/WinLoseAxisBtm.JPG" /></a></div><br />
<br />
<br />
This just looks daft and gives the incorrect or at least confusing impression of where '0' is.<br />
<br />
The answer to this is buried well within the SSRS interface. <br />
<br />
1. First select the sparkline chart. Then press 'F4' to see the Properties grid.<br />
<br />
3. Find the ChartAreas property and select the tilde to the right:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1PMsafqx2nzvzTvfR3FkAp-JdOrbKF6CVvr588MckOC5Bv7nuH-dqaCElj8WDlX1crld_oTdLy5pwL7j2poy2CQTQZT4AccNc4ZRYY9Hcb7df1cgFPbhi1hFzGBoShwe-0T8G6EwE3TQ/s1600/WinLoseChartData.JPG" imageanchor="1" style="margin-left:1em; margin-right:1em"><img border="0" height="70" width="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1PMsafqx2nzvzTvfR3FkAp-JdOrbKF6CVvr588MckOC5Bv7nuH-dqaCElj8WDlX1crld_oTdLy5pwL7j2poy2CQTQZT4AccNc4ZRYY9Hcb7df1cgFPbhi1hFzGBoShwe-0T8G6EwE3TQ/s400/WinLoseChartData.JPG" /></a></div><br />
4. Within the 'ChartArea Collection Editor' select the 'CategoryAxes' property and click the tilde to the right of that:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkhw-HUadgaE3_WX0cOIjiYxMOFtuqp5fdEMYr7dLd2b4AOTau0UHA_E69i81mEWtl0RnQjrQpERc5QkDLzS0gRP4xV7PVJKy5uxovlHyvaJhfSPMedwNYmul_yIT0MNOjFH80ul5EbqM/s1600/WinLoseChartArea.JPG" imageanchor="1" style="margin-left:1em; margin-right:1em"><img border="0" height="289" width="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkhw-HUadgaE3_WX0cOIjiYxMOFtuqp5fdEMYr7dLd2b4AOTau0UHA_E69i81mEWtl0RnQjrQpERc5QkDLzS0gRP4xV7PVJKy5uxovlHyvaJhfSPMedwNYmul_yIT0MNOjFH80ul5EbqM/s400/WinLoseChartArea.JPG" /></a></div><br />
<br />
5. Within the 'ChartAxis Collection Editor' make sure that the 'CrossAt' property is set to '0':<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjq9dEEiueWku5A0QdBrfunZ-ElqxIjQzF1AeTQLOJ2wRodKA62gnP2gr6jBKx28gCnYLQXIZoI1v2xktiPWWbK8PIHIEwBFYwU3iDBTR4nYTZ4C0zfGYxeDhzogduvDsGkiWzexZNCj00/s1600/WinLoseCrossAt.JPG" imageanchor="1" style="margin-left:1em; margin-right:1em"><img border="0" height="289" width="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjq9dEEiueWku5A0QdBrfunZ-ElqxIjQzF1AeTQLOJ2wRodKA62gnP2gr6jBKx28gCnYLQXIZoI1v2xktiPWWbK8PIHIEwBFYwU3iDBTR4nYTZ4C0zfGYxeDhzogduvDsGkiWzexZNCj00/s400/WinLoseCrossAt.JPG" /></a></div><br />
6. Click OK to get back to the 'ChartArea Collectino Editor' and then click the tilde on the right of 'ValueAxes' and repeat step 5.<br />
<br />
7. You should now find that the Axis for your win/lose sparkline goes through the middle of your chart where you'd expect. You'll probably also want to remove the tick marks from the Axis by ticking the 'Hide major tick marks' box in the horizontal axis properties.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIRqEh-ICZsAFdASnv5QQAF5_7MIeuiO3pQILlBVsugYbdRU1AaiYOkuwhGcxu82tN5gvSg82gKd7W0wKbg7hR-E3SZ4KH2rnGI3yzJXpB8nsC7Y29IpYylBeGVUcDloIL2rw23U2zRy4/s1600/WinLoseFinal.JPG" imageanchor="1" style="margin-left:1em; margin-right:1em"><img border="0" height="31" width="215" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIRqEh-ICZsAFdASnv5QQAF5_7MIeuiO3pQILlBVsugYbdRU1AaiYOkuwhGcxu82tN5gvSg82gKd7W0wKbg7hR-E3SZ4KH2rnGI3yzJXpB8nsC7Y29IpYylBeGVUcDloIL2rw23U2zRy4/s400/WinLoseFinal.JPG" /></a></div>Philhttp://www.blogger.com/profile/10605647000243636584noreply@blogger.com0tag:blogger.com,1999:blog-583448162611849186.post-68116456730178965312011-08-08T10:00:00.000+01:002011-08-08T01:01:25.073+01:00Splitting dates over monthly periods using a 'numbers table'One of the things you may find yourself having to do is to take a single record with a start and end date and subdivide it into monthly or weekly periods. Typically this is so that you can create a record for each month or week in a data warehouse, and have a data structure thats easy to report from. There are many ways of doing this of course, but an elegant set-based solution involves using a 'numbers table'. <br />
<br />
Numbers tables are well documented <a href="http://sqlblog.com/blogs/adam_machanic/archive/2006/07/12/you-require-a-numbers-table.aspx">elsewhere</a>, however they can now be created in a trivial fashion in Denali using a <a href="http://msdn.microsoft.com/en-us/library/ff878058%28v=SQL.110%29.aspx">Sequence</a>, with the following script.<br />
<br />
<blockquote><span style="font-family: Courier New;"><br />
<span style="color: blue;">USE</span> <span style="color: maroon;">adventureworks2008r2</span><br />
<span style="color: blue;">SET</span> <span style="color: maroon;">nocount</span> <span style="color: blue;">ON</span><br />
<br />
<span style="color: blue;">IF</span> <span style="color: blue;">EXISTS</span> <span style="color: maroon;">(</span><span style="color: blue;">SELECT</span> <span style="color: black;">1</span><br />
<span style="color: blue;">FROM</span> <span style="color: maroon;">information_schema</span><span style="color: silver;">.</span><span style="color: maroon;">tables</span><br />
<span style="color: blue;">WHERE</span> <span style="color: maroon;">table_name</span> <span style="color: silver;">=</span> <span style="color: red;">'Numbers'</span><span style="color: maroon;">)</span><br />
<span style="color: blue;">DROP</span> <span style="color: blue;">TABLE</span> <span style="color: maroon;">numbers</span><br />
<br />
<span style="color: blue;">GO</span><br />
<br />
<span style="color: blue;">CREATE</span> <span style="color: blue;">TABLE</span> <span style="color: maroon;">numbers</span><br />
<span style="color: maroon;">(</span><br />
<span style="color: blue;">NUMBER</span> <span style="color: black;"><i>INT</i></span> <span style="color: blue;">NOT</span> <span style="color: blue;">NULL</span><span style="color: silver;">,</span><br />
<span style="color: blue;">CONSTRAINT</span> <span style="color: maroon;">pk_numbers</span> <span style="color: blue;">PRIMARY</span> <span style="color: blue;">KEY</span> <span style="color: blue;">CLUSTERED</span> <span style="color: maroon;">(</span><span style="color: blue;">NUMBER</span><span style="color: maroon;">)</span> <span style="color: blue;">WITH</span> <span style="color: blue;">FILLFACTOR</span> <span style="color: silver;">=</span> <span style="color: black;">100</span><br />
<span style="color: maroon;">)</span><br />
<br />
<span style="color: blue;">IF</span> <span style="color: blue;">EXISTS</span> <span style="color: maroon;">(</span><span style="color: blue;">SELECT</span> <span style="color: black;">1</span><br />
<span style="color: blue;">FROM</span> <span style="color: maroon;">sys</span><span style="color: silver;">.</span><span style="color: maroon;">objects</span><br />
<span style="color: blue;">WHERE</span> <span style="color: maroon;">name</span> <span style="color: silver;">=</span> <span style="color: red;">'SeqNumbers'</span><br />
<span style="color: blue;">AND</span> <span style="color: maroon;">type_desc</span> <span style="color: silver;">=</span> <span style="color: red;">'SEQUENCE_OBJECT'</span><span style="color: maroon;">)</span><br />
<span style="color: blue;">DROP</span> <span style="color: maroon;">sequence</span> <span style="color: maroon;">dbo</span><span style="color: silver;">.</span><span style="color: maroon;">seqnumbers</span><br />
<br />
<span style="color: blue;">GO</span><br />
<br />
<span style="color: blue;">CREATE</span> SEQUENCE SeqNumbers<br />
<span style="color: blue;">AS INT</span><br />
<span style="color: blue;">MINVALUE 0</span><br />
<span style="color: blue;">GO</span><br />
<br />
<span style="color: blue;">INSERT Numbers(Number) VALUES(NEXT VALUE FOR SeqNumbers)</span><br />
<span style="color: blue;">GO</span> 10000<br />
</span></blockquote><br />
This will give you a table of numbers from 0-10000.<br />
<br />
Then a simple query will split a table into monthly records - or any other time period - by joining to the numbers table using the difference between the start and end dates of the rows you want to split. An example will probably make it clearer - we'll use the Production.BillOfMaterials in the <a href="http://msftdbprodsamples.codeplex.com/releases/view/55330">AdventureWorks2008R2 database</a>.<br />
<br />
Firstly lets make the dates a little less uniform:<br />
<blockquote><span style="font-family: Courier New;"><br />
<span style="color: blue;">UPDATE</span> <span style="color: maroon;">[Production]</span><span style="color: silver;">.</span><span style="color: maroon;">[BillOfMaterials]</span><br />
<span style="color: blue;">SET</span> <span style="color: maroon;">EndDate</span> <span style="color: silver;">=</span> <span style="color: red;">'20040405'</span><br />
<span style="color: blue;">WHERE</span> <span style="color: maroon;">BillOfMaterialsID</span><span style="color: silver;">=</span><span style="color: black;">271</span><br />
<br />
<span style="color: blue;">UPDATE</span> <span style="color: maroon;">[Production]</span><span style="color: silver;">.</span><span style="color: maroon;">[BillOfMaterials]</span><br />
<span style="color: blue;">SET</span> <span style="color: maroon;">StartDate</span><span style="color: silver;">=</span><span style="color: red;">'20040731'</span><span style="color: silver;">,</span> <span style="color: maroon;">EndDate</span> <span style="color: silver;">=</span> <span style="color: red;">'20040801'</span><br />
<span style="color: blue;">WHERE</span> <span style="color: maroon;">BillOfMaterialsID</span><span style="color: silver;">=</span><span style="color: black;">1950</span><br />
<br />
<br />
<span style="color: blue;">UPDATE</span> <span style="color: maroon;">[Production]</span><span style="color: silver;">.</span><span style="color: maroon;">[BillOfMaterials]</span><br />
<span style="color: blue;">SET</span> <span style="color: maroon;">StartDate</span><span style="color: silver;">=</span><span style="color: red;">'20041031'</span><span style="color: silver;">,</span> <span style="color: maroon;">EndDate</span> <span style="color: silver;">=</span> <span style="color: red;">'20051130'</span><br />
<span style="color: blue;">WHERE</span> <span style="color: maroon;">BillOfMaterialsID</span><span style="color: silver;">=</span><span style="color: black;">2899</span><br />
</span></blockquote><br />
Querying the Production.BillOfMaterials for an Id and start and end dates and quantity looks something like this:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpaeFN2cLA1v8DOWeP1ZMXvW2f03R1jEbep_qdpDMjKLreV2b5SDCI7WPX7ho7wi4gTQg1Z4CV1PVEvJAXD8S7hNiiUPoTufhyK1qlkgskCOVfJF0vGECJgzZ1SRHq0ab5SMMNFHPd3FA/s1600/BoM.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpaeFN2cLA1v8DOWeP1ZMXvW2f03R1jEbep_qdpDMjKLreV2b5SDCI7WPX7ho7wi4gTQg1Z4CV1PVEvJAXD8S7hNiiUPoTufhyK1qlkgskCOVfJF0vGECJgzZ1SRHq0ab5SMMNFHPd3FA/s1600/BoM.jpg" /></a></div><br />
Taking the difference between the start and end dates and joining to the numbers table gives one row per month that exists between the start and end dates. A little jiggery-pokery with the date functions gives you the start and end of each month over which the bill of materials spanned, like so;<br />
<blockquote><span style="font-family: Courier New;"><br />
<span style="color: blue;">SELECT</span> <span style="color: maroon;">[BillOfMaterialsID]</span><span style="color: silver;">,</span><br />
<span style="color: maroon;">[StartDate]</span><span style="color: silver;">,</span><br />
<span style="color: maroon;">[EndDate]</span><span style="color: silver;">,</span><br />
<span style="color: magenta;"><i>DATEDIFF</i></span><span style="color: maroon;">(</span><span style="color: maroon;">m</span><span style="color: silver;">,</span> <span style="color: maroon;">StartDate</span><span style="color: silver;">,</span> <span style="color: maroon;">EndDate</span><span style="color: maroon;">)</span> <span style="color: maroon;">NumberOfMonths</span><span style="color: silver;">,</span><br />
<span style="color: magenta;"><i>CAST</i></span><span style="color: maroon;">(</span><span style="color: magenta;"><i>CONVERT</i></span><span style="color: maroon;">(</span><span style="color: black;"><i>CHAR</i></span><span style="color: maroon;">(</span><span style="color: black;">6</span><span style="color: maroon;">)</span><span style="color: silver;">,</span> <span style="color: magenta;"><i>DATEADD</i></span><span style="color: maroon;">(</span><span style="color: maroon;">m</span><span style="color: silver;">,</span> <span style="color: blue;">Number</span><span style="color: silver;">,</span> <span style="color: maroon;">StartDate</span><span style="color: maroon;">)</span><span style="color: silver;">,</span> <span style="color: black;">112</span><span style="color: maroon;">)</span><span style="color: silver;">+</span><span style="color: red;">'01'</span> <span style="color: blue;">AS</span> <span style="color: black;"><i>DATETIME</i></span><span style="color: maroon;">)</span> <span style="color: maroon;">MonthStartDate</span><span style="color: silver;">,</span><br />
<span style="color: magenta;"><i>DATEADD</i></span><span style="color: maroon;">(</span><span style="color: maroon;">dd</span><span style="color: silver;">,</span> <span style="color: silver;">-</span><span style="color: black;">1</span><span style="color: silver;">,</span> <span style="color: maroon;">(</span><span style="color: magenta;"><i>CAST</i></span><span style="color: maroon;">(</span><span style="color: magenta;"><i>CONVERT</i></span><span style="color: maroon;">(</span><span style="color: black;"><i>CHAR</i></span><span style="color: maroon;">(</span><span style="color: black;">6</span><span style="color: maroon;">)</span><span style="color: silver;">,</span> <span style="color: magenta;"><i>DATEADD</i></span><span style="color: maroon;">(</span><span style="color: maroon;">m</span><span style="color: silver;">,</span> <span style="color: blue;">Number</span><span style="color: silver;">+</span><span style="color: black;">1</span><span style="color: silver;">,</span> <span style="color: maroon;">StartDate</span><span style="color: maroon;">)</span><span style="color: silver;">,</span> <span style="color: black;">112</span><span style="color: maroon;">)</span><span style="color: silver;">+</span><span style="color: red;">'01'</span> <span style="color: blue;">AS</span> <span style="color: black;"><i>DATETIME</i></span><span style="color: maroon;">)</span><span style="color: maroon;">)</span><span style="color: maroon;">)</span> <span style="color: maroon;">MonthEndDate</span><span style="color: silver;">,</span><br />
<span style="color: magenta;"><i>CAST</i></span><span style="color: maroon;">(</span><span style="color: maroon;">PerAssemblyQty</span><span style="color: silver;">/</span><span style="color: maroon;">(</span><span style="color: magenta;"><i>DATEDIFF</i></span><span style="color: maroon;">(</span><span style="color: maroon;">m</span><span style="color: silver;">,</span> <span style="color: maroon;">StartDate</span><span style="color: silver;">,</span> <span style="color: maroon;">EndDate</span><span style="color: maroon;">)</span><span style="color: silver;">+</span><span style="color: black;">1</span><span style="color: maroon;">)</span> <span style="color: blue;">AS</span> <span style="color: black;"><i>DECIMAL</i></span><span style="color: maroon;">(</span><span style="color: black;">5</span><span style="color: silver;">,</span><span style="color: black;">2</span><span style="color: maroon;">)</span><span style="color: maroon;">)</span><span style="color: maroon;">PerAssemblyQtyMonthly</span><span style="color: silver;">,</span><br />
<span style="color: maroon;">PerAssemblyQty</span><br />
<span style="color: blue;">FROM</span> <span style="color: maroon;">[Production]</span><span style="color: silver;">.</span><span style="color: maroon;">[BillOfMaterials]</span> <span style="color: maroon;">b</span><br />
<span style="color: blue;">INNER</span> <span style="color: blue;">JOIN</span> <span style="color: maroon;">dbo</span><span style="color: silver;">.</span><span style="color: maroon;">Numbers</span> <span style="color: maroon;">n</span> <span style="color: blue;">ON</span> <span style="color: magenta;"><i>DATEDIFF</i></span><span style="color: maroon;">(</span><span style="color: maroon;">m</span><span style="color: silver;">,</span> <span style="color: maroon;">StartDate</span><span style="color: silver;">,</span> <span style="color: maroon;">EndDate</span><span style="color: maroon;">)</span><span style="color: silver;">>=</span><span style="color: maroon;">n</span><span style="color: silver;">.</span><span style="color: blue;">Number</span><br />
<span style="color: blue;">WHERE</span> <span style="color: maroon;">[EndDate]</span> <span style="color: blue;">IS</span> <span style="color: blue;">NOT</span> <span style="color: blue;">NULL</span><br />
</span></blockquote>You'll note that I also divided the <span style="font-family: Courier New;"><span style="color: maroon;">PerAssemblyQty </span></span>by the number of months (adding one because the DATEDIFF on two dates in the same month returns 0). Finally lets see the result set <br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUswoSrTWkAR2DK565OT1YYWhlJ6YTfekDQWwSvtuou8TrvwlR85slFg-3cq8PpgNoDMSU63BdYP-bPOs1XjqRHAtZTk0_9G0AfnRQf_3AmVAKcsPsEiWcASG5jR1-aSsk9PD71eL5IrE/s1600/BoMMonth.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="196" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUswoSrTWkAR2DK565OT1YYWhlJ6YTfekDQWwSvtuou8TrvwlR85slFg-3cq8PpgNoDMSU63BdYP-bPOs1XjqRHAtZTk0_9G0AfnRQf_3AmVAKcsPsEiWcASG5jR1-aSsk9PD71eL5IrE/s640/BoMMonth.jpg" width="640" /></a></div>Philhttp://www.blogger.com/profile/10605647000243636584noreply@blogger.com0tag:blogger.com,1999:blog-583448162611849186.post-57389921811378422832011-07-13T14:55:00.002+01:002011-07-13T15:36:38.856+01:00Denali CTP 3 is out!Not exactly a big fanfare but a story in <a href="http://www.theregister.co.uk/2011/07/13/windows_server_8_peek/">The Register</a> reveals that the SQL Server Denali Community Technology Preview 3 is available for download <a href="http://www.microsoft.com/betaexperience/pd/SQLDCTP3CTA/enus/default.aspx">here:</a> (it weighs in at about 2GB). More details from Microsoft <a href="http://social.technet.microsoft.com/wiki/contents/articles/3711.aspx">here</a> and what is included <a href="http://blogs.technet.com/b/dataplatforminsider/archive/2011/07/11/sql-server-code-name-denali-ctp3-is-here.aspx">here</a>. From what I understand this is the last CTP/beta before it goes RTM.Philhttp://www.blogger.com/profile/10605647000243636584noreply@blogger.com0tag:blogger.com,1999:blog-583448162611849186.post-88539249927266583742011-07-08T16:48:00.001+01:002011-07-08T18:57:05.444+01:00MDS - Access DeniedWe're having a play with <a href="http://www.microsoft.com/sqlserver/2008/en/us/mds.aspx">SQL Server Master Data Services</a> at MITIE with a view to using them to manage some of our analytical Master Data - currently done via scripting. One of the first challenges was security. There is a set of instructions <a href="http://msdn.microsoft.com/en-us/library/ff486968.aspx">here</a> but we still managed to get stuck. We configured a user as an administrator for all models as described <a href="http://technet.microsoft.com/en-us/library/ff487055.aspx">here</a> but still got an "Access is Denied" message when trying to log in with that user. Note that the system administator has to be a user and not a group. The answer is <a href="http://msdn.microsoft.com/en-us/library/ff487014.aspx">elsewhere</a> in the MSDN documentation;<br />
<br />
<b>Step one</b><br />
Under <b>User and Group Permissions</b> click the down arrow > Edit > Functions. Here I'm showing the group page, but the user page works the same way:<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVPpqlnp4H8_ZuvAnZRjFmCHwvzqGp084exeQJRenor3JWSrRo8wMKbJSNmc6s5Xf_MMNuTZLYSrJ1SbDw25HY4T0SZG8TH_Tukxhyd2_nRYvsbJbkn_L0bDW9gVQFxZUxtf1UI3haMLQ/s1600/MDS_EditGrp.JPG" imageanchor="1" style="margin-left:1em; margin-right:1em"><img border="0" height="262" width="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVPpqlnp4H8_ZuvAnZRjFmCHwvzqGp084exeQJRenor3JWSrRo8wMKbJSNmc6s5Xf_MMNuTZLYSrJ1SbDw25HY4T0SZG8TH_Tukxhyd2_nRYvsbJbkn_L0bDW9gVQFxZUxtf1UI3haMLQ/s320/MDS_EditGrp.JPG" /></a></div><br />
<b>Step two</b><br />
Click the pencil icon to allow for editing<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYK9BSNiahuVZ1H3FppZW2Acx1g0Vjz9JTfukQk53s58jSCGnt5X1Wq1KaQ6hmsjbZyF-L7qPf95-Zbo2agzQ-LNCVRi5FHYpF6acsnfJBJsJK5G80bNAE6aD9JEa9baMBlOzqEuM37wY/s1600/MDS_EditBtn.JPG" imageanchor="1" style="margin-left:1em; margin-right:1em"><img border="0" height="228" width="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYK9BSNiahuVZ1H3FppZW2Acx1g0Vjz9JTfukQk53s58jSCGnt5X1Wq1KaQ6hmsjbZyF-L7qPf95-Zbo2agzQ-LNCVRi5FHYpF6acsnfJBJsJK5G80bNAE6aD9JEa9baMBlOzqEuM37wY/s320/MDS_EditBtn.JPG" /></a></div><br />
<b>Step three</b><br />
Add the functions as appropriate. These map onto the 'buttons' that are rendered in the MDS home-page, and should be self-explanatory. To add all of them simply click the button highlighted below:<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9srKVDK840lQlfppd508KAZXeuDtPKmA78Vi9S34ddIeG3mFR0m0EL0otrH1bNZDhXyalTG8syJp8VWpGBcGFvbxZ5aZdgURu97oP0xtCiS3KUXY18mLaeqgNwZbP50oFycJc2L0Qm44/s1600/MDS_AddFunc.JPG" imageanchor="1" style="margin-left:1em; margin-right:1em"><img border="0" height="215" width="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9srKVDK840lQlfppd508KAZXeuDtPKmA78Vi9S34ddIeG3mFR0m0EL0otrH1bNZDhXyalTG8syJp8VWpGBcGFvbxZ5aZdgURu97oP0xtCiS3KUXY18mLaeqgNwZbP50oFycJc2L0Qm44/s320/MDS_AddFunc.JPG" /></a></div><br />
Your user or group should now be able to log into MDS, with no "Access is Denied" message. Other permissions can be established as per the <a href="http://technet.microsoft.com/en-us/library/ff486968.aspx">MSDN documentation</a>.Philhttp://www.blogger.com/profile/10605647000243636584noreply@blogger.com2tag:blogger.com,1999:blog-583448162611849186.post-20295777251608387572011-02-09T19:50:00.001+00:002011-02-09T19:51:01.406+00:00'Invalid characters' in Analysis Services cubeWe ran into the following error whilst trying to query our development cube today;<br />
<br />
<blockquote>The server sent an unrecognizable response.<br />
' ', hexadecimal value 0x19, is an invalid character.</blockquote><br />
Rather peculiar I think you'd agree! Turns out the data in question was a Unicode field with a ASCII control character in it. 0x19 is ASCII character 25 (19 in hexadecimal) - which stands for EM or <a href="http://nemesis.lonestar.org/reference/telecom/codes/ascii.html">End of Medium</a> apparently. <br />
<br />
Analysis Services quite happily processed and stored the data - however any attempt to query it was defeated despite the fact that the associated dimension attribute was also Unicode (ie a <a href="http://support.microsoft.com/kb/299905">WChar</a>). This, I realised, was due to the fact that clients communicate with Analysis Services using the <a href="http://msdn.microsoft.com/en-us/library/ms977626.aspx">XML for Analysis</a> (XMLA) protocol. As the name suggests its based on XML which cannot encode some unicode characters - including ASCII 25!<br />
<br />
How on earth it got into our source system was a mystery - but we had to do something about it.<br />
<br />
Fortunately there's a very useful option in Analysis Services for dealing with this sort of issue; the <a href="http://msdn.microsoft.com/en-us/library/microsoft.analysisservices.invalidxmlcharacters.aspx">InvalidXMLCharacters</a> property. You can find it by right-clicking on an attribute and selecting Properties:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7YVQD0MMhPkNZY5gqm4XGvPQcsOlQi0m5uViAs7Z4yc65az93x9CYbYNpJ4RArLTrwL5iYe_7f5G9gcYJjD_OyecXtmvXU_Zh-YOLMQE3waDn8RPje8RY-oUR02uRVTZ1AZqFQLj-rfY/s1600/AttributeProperties.JPG" imageanchor="1"><img border="0" height="304" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7YVQD0MMhPkNZY5gqm4XGvPQcsOlQi0m5uViAs7Z4yc65az93x9CYbYNpJ4RArLTrwL5iYe_7f5G9gcYJjD_OyecXtmvXU_Zh-YOLMQE3waDn8RPje8RY-oUR02uRVTZ1AZqFQLj-rfY/s320/AttributeProperties.JPG" width="320" /></a></div><br />
Then expand the 'NameColumn' property and under that you'll find the InvalidXMLCharacters property:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQ2r0WWQaFG-sdQS1bM1PEFFquB6Kl9DxFPcUiM1Z01Wqg1-yYiZe-QuPGXQnYLTgi-y0SwrG7V67Pnw_9FprNhmvgNOVccOgErq0z19UTa4YLgaB0ruCwO1uO316CEgzhqo4_B9GzbY8/s1600/InvalidXMLCharacters.JPG" imageanchor="1"><img border="0" height="83" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQ2r0WWQaFG-sdQS1bM1PEFFquB6Kl9DxFPcUiM1Z01Wqg1-yYiZe-QuPGXQnYLTgi-y0SwrG7V67Pnw_9FprNhmvgNOVccOgErq0z19UTa4YLgaB0ruCwO1uO316CEgzhqo4_B9GzbY8/s320/InvalidXMLCharacters.JPG" width="320" /></a></div><br />
Essentially it tells Analysis Services what to do with characters that aren't supported by XML<br />
<br />
It has three settings:<br />
<br />
<table><tr><td><b>Preserve</b></td><td>Keep invalid characters. The default</td> </tr>
<tr><td><b>Replace</b></td><td>Replace with a '?'</td></tr>
<tr><td><b>Remove</b></td><td>Remove the character from the query results</td></tr>
</table><br />
We opted for 'Remove' which resolved our problem. Its worth considering setting this on all unicode and non-unicode text attributes as potentially any off these could include invalid XML characters. It really depends on how well you know - and trust - your data source...Philhttp://www.blogger.com/profile/10605647000243636584noreply@blogger.com0tag:blogger.com,1999:blog-583448162611849186.post-81643632146802921292011-01-18T16:19:00.006+00:002011-01-18T16:25:59.826+00:00Configure Reporting Services to use proxy for Bing mapsIf you work somewhere that uses a proxy server to connect you and your servers to the internet you will need to configure Reporting Services to use said proxy in order to use the Bing maps layer. Otherwise you will see something along the lines of the following message in your report, instead of a map:<br />
<blockquote>The remote name could not be resolved: 'dev.virtualearth.net'</blockquote>The solution is easy;<br />
<br />
<b>Step one</b><br />
Navigate to the webconfig file for the instance of Reporting Services you want to proxy out to the internet. Typically for 2008 R2 this will be:<br />
<blockquote><drive name>\Program Files\Microsoft SQL Server\MSRS10_50.<instance name>\Reporting Services\ReportServer\web.config<br />
</blockquote><br />
<b>Step two</b><br />
Add the following xml fragment to the file - I usually add it in-between the</runtime> tag and the </configuration> tag, at the end of the file:<br />
<br />
<blockquote><system.net><br />
<br />
<defaultProxy enabled="true" useDefaultCredentials="true"><br />
<br />
<proxy bypassonlocal="True" proxyaddress="http://<proxy server>" /><br />
<br />
</defaultProxy><br />
</system.net></blockquote><br />
Save the file.<br />
<br />
This of course assumes your server is allowed to proxy out in the first place (which it will need for Bing maps integration). You can test this by logging onto the server and firing up a browser or by asking your friendly local sysadmin...Philhttp://www.blogger.com/profile/10605647000243636584noreply@blogger.com6tag:blogger.com,1999:blog-583448162611849186.post-28916658420399690402010-11-14T22:53:00.003+00:002010-11-14T23:19:21.022+00:00SQL Server Denali: SSIS Configuration and Package ExecutionOne of the first things you note from the release notes are the changes to SSIS configurations in Denali. This is excellent news because the use of configurations in previous versions of SSIS weren't <a href="http://consultingblogs.emc.com/jamiethomson/archive/2008/08/29/ssis-parent-package-configurations-yay-or-nay.aspx">without</a> <a href="http://forums.asp.net/t/1035770.aspx">their</a> <a href="http://consultingblogs.emc.com/jamiethomson/archive/2005/10/31/SSIS_3A00_-Indirect-configurations-gotcha.aspx">problems</a>. The inimitable Jamie Thompson has a <a href="http://sqlblog.com/blogs/jamie_thomson/archive/2010/11/10/introduction-to-ssis-projects-in-denali.aspx">series</a> of <a href="http://sqlblog.com/blogs/jamie_thomson/archive/2010/11/12/the-new-execute-package-task-in-ssis-in-denali.aspx">excellent</a> <a href="http://sqlblog.com/blogs/jamie_thomson/archive/2010/11/13/ssis-server-catalogs-environments-environment-variables-in-ssis-in-denali.aspx">posts</a> about it which I won't repeat here, plus there is additional information on the <a href="http://social.technet.microsoft.com/wiki/search/SearchResults.aspx?q=denali">MSDN Wiki</a>.<br />
<br />
Briefly however, the new deployment model involves deployment to a specially constructed SQL DB otherwise known as 'SSISDB' (at least in this CTP) which appears under its own node in SSMS - with its own GUI options. The SSISDB database is the SSIS 'Catalog' and includes the concepts of environments and parameters to allow run-time configuration of packages. Therefore SSIS is now 'environment aware' and there is no need to have to store configuration locations outside of SSIS in Windows environment variables and so on - which was always a bit awkward. Parameters can now be created on a project level removing the need to create Parent package configurations. All of this can be administered by using views and stored procedures, the API or the aforementioned SSMS.<br />
<br />
However the one thing I was left wondering was: 'how do I execute a package under the new configuration model without using the SSMS GUI?'. DTExec still exists but does not appear to have options to use the new environment variables (at least in the current CTP). Happily perusal of the <a href="http://msdn.microsoft.com/en-us/library/ff878099%28v=SQL.110%29.aspx">new MSDN documentation</a> reveals the answer.<br />
<br />
Firstly create and environment called 'env1', deploy an SSIS project called 'Project' with a package called 'Package1' to a folder called 'Test'. See Jamie's blog to set these up. Then do the following. First of all you need to retrieve the appropriate reference id for the project and environment:<br />
<blockquote><span style="font-family: Courier New;"><br />
<span style="color: blue;">DECLARE</span> <span style="color: #8000ff;">@execution_id</span> <span style="color: black;"><i>BIGINT</i></span><br />
<br />
<span style="color: blue;">DECLARE</span> <span style="color: #8000ff;">@reference_id</span> <span style="color: black;"><i>BIGINT</i></span><br />
<br />
<br />
<br />
<span style="color: blue;">SELECT</span> <span style="color: #8000ff;">@reference_id</span> <span style="color: silver;">=</span> <span style="color: maroon;">e</span><span style="color: silver;">.</span><span style="color: maroon;">reference_id</span><br />
<br />
<span style="color: blue;">FROM</span> <span style="color: maroon;">catalog</span><span style="color: silver;">.</span><span style="color: maroon;">project_environments</span> <span style="color: maroon;">e</span><br />
<br />
<span style="color: blue;">INNER</span> <span style="color: blue;">JOIN</span> <span style="color: maroon;">catalog</span><span style="color: silver;">.</span><span style="color: maroon;">projects</span> <span style="color: maroon;">p</span><br />
<br />
<span style="color: blue;">ON</span> <span style="color: maroon;">e</span><span style="color: silver;">.</span><span style="color: maroon;">project_id</span> <span style="color: silver;">=</span> <span style="color: maroon;">p</span><span style="color: silver;">.</span><span style="color: maroon;">project_id</span><br />
<br />
<span style="color: blue;">WHERE</span> <span style="color: maroon;">e</span><span style="color: silver;">.</span><span style="color: maroon;">environment_name</span> <span style="color: silver;">=</span> <span style="color: red;">'env1'</span><br />
<br />
<span style="color: blue;">AND</span> <span style="color: maroon;">p</span><span style="color: silver;">.</span><span style="color: maroon;">name</span> <span style="color: silver;">=</span> <span style="color: red;">'Project'</span><br />
</span></blockquote>Then we need to tell the SSIS Catalog that we want to execute the package with the particular reference:<br />
<blockquote><span style="font-family: Courier New;"><br />
<span style="color: blue;">EXECUTE</span> <span style="color: maroon;">catalog</span><span style="color: silver;">.</span><span style="color: #ff0080;"><b>create_execution</b></span><br />
<br />
<span style="color: #8000ff;">@folder_name</span> <span style="color: silver;">=</span> <span style="color: red;">'Test'</span><span style="color: silver;">,</span><br />
<br />
<span style="color: #8000ff;">@project_name</span> <span style="color: silver;">=</span> <span style="color: red;">'Project'</span><span style="color: silver;">,</span><br />
<br />
<span style="color: #8000ff;">@package_name</span> <span style="color: silver;">=</span> <span style="color: red;">'Package1.dtsx'</span><span style="color: silver;">,</span><br />
<br />
<span style="color: #8000ff;">@reference_id</span> <span style="color: silver;">=</span> <span style="color: #8000ff;">@reference_id</span><span style="color: silver;">,</span><br />
<br />
<span style="color: #8000ff;">@execution_id</span> <span style="color: silver;">=</span> <span style="color: #8000ff;">@execution_id</span> <span style="color: blue;">OUTPUT</span><br />
</span></blockquote><br />
Finally tell SSIS to execute using the execution id created above:<br />
<blockquote><span style="font-family: Courier New;"><br />
<span style="color: blue;">EXECUTE</span> <span style="color: maroon;">catalog</span><span style="color: silver;">.</span><span style="color: #ff0080;"><b>start_execution</b></span> <span style="color: #8000ff;">@execution_id</span> <span style="color: silver;">=</span> <span style="color: #8000ff;">@execution_id</span><br />
</span></blockquote><br />
A couple of notes: <br />
<br />
1. The package referenced by 'create_execution' has to have the 'Entry-point package' property set in Visual Studio:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaLZpqbI9T81JaZ7zsi_4brBcX-lZdFEtPPY4ENUSH2xIklARvX5RGNHeNH7Z_NkTQlM2eIMy-A7rlLoRhYkIYpdDdO1ur4tP4wbkksnMNrnGd0KE7gR5uVFtoXPr68vclLMpCk6mNES4/s1600/EntryPoint.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaLZpqbI9T81JaZ7zsi_4brBcX-lZdFEtPPY4ENUSH2xIklARvX5RGNHeNH7Z_NkTQlM2eIMy-A7rlLoRhYkIYpdDdO1ur4tP4wbkksnMNrnGd0KE7gR5uVFtoXPr68vclLMpCk6mNES4/s1600/EntryPoint.jpg" /></a></div><br />
2. There is an unused parameter in the above call to 'create_execution' - '@use32bitruntime' - use this on 64-bit environments if you want to force SSIS to execute in 32-bit mode.<br />
<br />
This leaves two overall configuration options as I see it. You could either:<br />
<br />
1. Have one SSIS 'environment' for every application you have. This means that the SSIS environment referenced at runtime would be the same across Dev, Test, Live and so on. Obviously the parameters themselves would be different!<br />
<br />
2. Have all of your application/network environments (ie Dev, Test, Live) created in every instance of the SSIS Catalog and reference the appropriate one at runtime. This is obviously more flexible but probably carries more risk of running the wrong configuration on the wrong environment - with potentially serious consequences!Philhttp://www.blogger.com/profile/10605647000243636584noreply@blogger.com0tag:blogger.com,1999:blog-583448162611849186.post-82389910965914932402010-11-14T21:40:00.002+00:002010-11-14T23:22:26.438+00:00SQL Server Denali: First Impressions<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWB7G5A7jbnONDYymCimgfTT1WaKNArWhkCW89-D1kyY-RR4lsfNxWTSlrtBT466TF1oHT90ChATAjKXSBGK2NmRc0d3Jo9SVh_uAxv7xZxQhDpzYxksw7mZ4twx59xPH8EhwaeCmllnI/s1600/Denali.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="130" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWB7G5A7jbnONDYymCimgfTT1WaKNArWhkCW89-D1kyY-RR4lsfNxWTSlrtBT466TF1oHT90ChATAjKXSBGK2NmRc0d3Jo9SVh_uAxv7xZxQhDpzYxksw7mZ4twx59xPH8EhwaeCmllnI/s200/Denali.jpg" width="200" /></a></div>So I, along with a great many others, have been playing around with Denali CTP1 over the last few days and reading about the many announcements made at SQL PASS. Its become clear that its probably the biggest release since SQL Server 2005 in terms of new features, with possibly the biggest splash being made by 'Project Crescent' (the reporting tool I mentioned in my previous Denali post) and the Business Intelligence Semantic Model (BISM).<br />
<br />
They're both described in quite a bit of detail <a href="http://blogs.technet.com/b/dataplatforminsider/archive/2010/11/12/analysis-services-roadmap-for-sql-server-denali-and-beyond.aspx">here</a>, and the introduction of BISM has provoked some <a href="http://feedproxy.google.com/%7Er/wordpress/Cpjz/%7E3/JRFvASy0IG0/">misgivings</a> in the developer community. However the introduction of the Powerpivot engine (otherwise known as Vertipaq) to developer tools, has to be a good thing even if they haven't managed to integrate it with Analysis Services. Potentially this could even mean the end of data warehousing and ETL, although this has been tried before...<br />
<br />
<a href="http://blogs.msdn.com/b/sqlrsteamblog/archive/2010/11/09/a-glimpse-at-project-crescent.aspx">Project Crescent</a> is Silverlight-based and looks like the sort of end-user BI tool those of us working with MS BI software have been waiting for since Reporting Services came out. There's a very brief demo of it <a href="http://blogs.msdn.com/b/bi/archive/2010/11/09/data-visualization-done-right-project-crescent.aspx">here</a>.<br />
<br />
On a more detailed note as I said in my <a href="http://phil-austin.blogspot.com/2010/11/denali-available-for-download.html">previous post</a> you won't be able to use the new Denali CTP1 projects if you have 2008 or 2008 R2 installed and I found that I had to uninstall the <a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=B0155166-B0A3-436E-AC95-37D7E39A440C">2008 Team Foundation Client</a> as well. However if you're using Windows 7 PowerShell 2.0 is already installed.<br />
<br />
Additionally on starting SQL Server Management Studio (SSMS) I found the Create Catalog on the Integration Services folder (of which more in a later post) greyed out as follows:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9MLkiMwl3n61IF7YPKe3jcIdGoA963p0Ue20g6VFkzU6fOzUHZgqPd5N7aI-JBHgUujAJjB8QrK_77oHO703j9KBNGJZu25VKMH8F1yM1JU69frWmDOxskd7V5JwINSe3BOGU9TiQ7iY/s1600/CreateCatalogGreyedOut.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="244" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9MLkiMwl3n61IF7YPKe3jcIdGoA963p0Ue20g6VFkzU6fOzUHZgqPd5N7aI-JBHgUujAJjB8QrK_77oHO703j9KBNGJZu25VKMH8F1yM1JU69frWmDOxskd7V5JwINSe3BOGU9TiQ7iY/s320/CreateCatalogGreyedOut.jpg" width="320" /></a></div><br />
<br />
When I tried to connect to the (now superceded) Integration Services Server I got the following 'Access denied' error:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOJjxvX0UeHDPTg9euOHa-PoGg_2z5SQ3wugshQxjBLN-5Ou96OVPkR1EsVlao2K7Ddtj6Fpaz2PtHy9gd0iIkXaj3ePLQsnQFM1aILClNLcJjgIhA-NNSCV3P0huHYzMdEp0TxIMM_bA/s1600/SSISConnectionError.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="186" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOJjxvX0UeHDPTg9euOHa-PoGg_2z5SQ3wugshQxjBLN-5Ou96OVPkR1EsVlao2K7Ddtj6Fpaz2PtHy9gd0iIkXaj3ePLQsnQFM1aILClNLcJjgIhA-NNSCV3P0huHYzMdEp0TxIMM_bA/s320/SSISConnectionError.jpg" width="320" /></a></div><br />
<br />
On Windows 7 both problems were solved by simply running SSMS in Administrator mode by right-clicking on the SSMS icon and selecting 'Run as Administrator':<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDaRARKfldENVCkXAvCABwL51Yop9AksQcCIzB6jmfo5BWqBve2BOTilESDehb-Wgc2OJtfWxhl_xaGKfzmTap7z13gM_Pt5DALwbzDxu-46ZR21A6mwWw6sWGYdtolEsa-8BqyUT9DA4/s1600/RunSSISAsAdmin.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="81" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDaRARKfldENVCkXAvCABwL51Yop9AksQcCIzB6jmfo5BWqBve2BOTilESDehb-Wgc2OJtfWxhl_xaGKfzmTap7z13gM_Pt5DALwbzDxu-46ZR21A6mwWw6sWGYdtolEsa-8BqyUT9DA4/s320/RunSSISAsAdmin.jpg" width="320" /></a></div><br />
More soon...Philhttp://www.blogger.com/profile/10605647000243636584noreply@blogger.com0tag:blogger.com,1999:blog-583448162611849186.post-89837303146436398152010-11-11T08:34:00.002+00:002010-11-11T09:00:50.042+00:00Denali available for downloadAs promised by MS the first CTP of the next version of SQL Server is available for <a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=6a04f16f-f6be-4f92-9c92-f7e5677d91f9&displaylang=en">download</a> now. What's new? Check <a href="http://www.microsoft.com/sqlserver/en/us/product-info/future-editions.aspx">here</a> and <a href="http://msdn.microsoft.com/en-us/library/bb500435%28SQL.110%29.aspx">here</a>.<br />
<br />
One thing that immediately jumps out at me is the following;<br />
<br />
<blockquote>Business users will gain greater agility and empowerment with a new highly interactive, web-based data exploration and visualization solution. Introducing new and engaging ways to discover insights through a drag-and-drop interface, smart and powerful data querying and interactive storyboarding to allow users to quickly create and share visual presentations of large datasets.</blockquote>Sounds intriguing - but I'm not sure its in the CTP. Needless to say I'm downloading now...<br />
<br />
Update:<br />
<br />
Its worth checking the release notes <a href="http://social.technet.microsoft.com/wiki/contents/articles/sql-server-code-named-quot-denali-quot-ctp1-release-notes.aspx">here</a>. There is a dependency on Powershell 2.0 - and more importantly no support for side-by-side installations with 2008/R2. There is also no support for XP regardless of SP version.Philhttp://www.blogger.com/profile/10605647000243636584noreply@blogger.com0tag:blogger.com,1999:blog-583448162611849186.post-67517452452225479162010-10-28T13:34:00.001+01:002010-10-28T13:35:19.058+01:00Integration Services Lookup caching - Part oneLookup caching in Integration Services is a new feature in 2008 which didn't get a lot of attention at the time of release and even now a search reveals some posts that discuss one aspect or other, but maybe not the whole story. Hopefully I will redress the balance here a little.<br />
<br />
First of all then - what is Lookup caching?<br />
<br />
Back in Integration Services 2005 there was a transformation task which allowed you to match a record in the dataflow with record or field in a database via an OLE DB connection. In a data warehouse context this was often used to look up <a href="http://www.kimballgroup.com/html/articles_search/articles1998/9805d05.html">surrogate keys</a> when loading fact tables. This was OK but every time a lookup was needed it required a round-trip to the database. If you're loading a data warehouse with <a href="http://www.kimballgroup.com/html/articles_search/articles1997/9708d05.html">role-playing dimensions</a> you might be looking up the same values for the same fact table, in the same dataflow. There were some options for preformance-tuining but essentially you always had to connect to the database in some way every time. Inefficient and in stark contrast to products such as Informatica which allowed you to reuse lookup data cached in memory.<br />
<br />
So what changed in 2008?<br />
<br />
For 2008 Microsoft substantially improved lookup functionality. You now have two basic caching options for lookups. These boil down to in-memory caching and file caching. Both are potentially faster than lookups using a database.<br />
<br />
In this post we'll deal with memory-caching.<br />
<br />
As the name suggests this stores the lookup data in-memory (ie RAM). This is pretty well covered by Jamie <a href="http://consultingblogs.emc.com/jamiethomson/archive/2007/11/16/Katmai_3A00_-SSIS_3A00_-Lookup-component-gets-a-makeover.aspx">here</a> . The key point is that the in-memory cache will not extend beyond the scope of the package ie you can't re-use an in-memory cache in one package having created in another. At this point its worth clarifying how this is used in a package. <br />
<br />
<b>Step one:</b><br />
<br />
After you've created a connection manager, the first step is to create a data source in a Data Flow Task - in this example it is an OLEDB Source Transformation. Note you can use any source for this - providing another advantage over using the 2005 look-up task on its own. I'm calling this OLEDB_Dim_Time for obvious reasons:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQS8aOU8YET1gHysyQrfQIdscQuTIOqKSi99fu8rJe_Tx0OXOeLgqoa5N03pophkJxBfzuO2UvsNvN7PNvSoFR4LaSitrVgvlJicfMxMQ5EQD2_fmP76NFWOrro4Mle0XAtaSTPPCT-v4/s1600/Cache_OLEDBS.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQS8aOU8YET1gHysyQrfQIdscQuTIOqKSi99fu8rJe_Tx0OXOeLgqoa5N03pophkJxBfzuO2UvsNvN7PNvSoFR4LaSitrVgvlJicfMxMQ5EQD2_fmP76NFWOrro4Mle0XAtaSTPPCT-v4/s1600/Cache_OLEDBS.JPG" /></a></div> <ole db="" editor="" image="" source=""> </ole><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgh9k5MEGuh1uXGvwArAKO8Fh_ssDSa-bNIj6k7Oz7UKuv0gqgTJ5scsqgrmemFfHbijxHtCWLm8RI9rVTNB3okBnzHeNpPmlX429xTu_dpcRrcchIkzIdIrlzhdj0bEWd2KauAkVeR0yM/s1600/Cache_CTE.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><br />
</a></div><ole db="" editor="" image="" source="">As you can see we're going to look up a time surrogate key - and by time I mean time of day not a calendar or date dimension. I'll cover the usefulness of a 'real' time dimension in another post. As is best practice we are selecting only the fields needed for the look-up and the value to be added to the data flow (ie the TimeKey). <br />
<br />
<b>Step two:</b><br />
<br />
The next step is to terminate the data flow in the Cache Transform - which caches in memory.<br />
<br />
The Cache Transform Editor looks as follows:<br />
<br />
<cache editor="" image="" transform=""></cache></ole><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgh9k5MEGuh1uXGvwArAKO8Fh_ssDSa-bNIj6k7Oz7UKuv0gqgTJ5scsqgrmemFfHbijxHtCWLm8RI9rVTNB3okBnzHeNpPmlX429xTu_dpcRrcchIkzIdIrlzhdj0bEWd2KauAkVeR0yM/s1600/Cache_CTE.JPG" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgh9k5MEGuh1uXGvwArAKO8Fh_ssDSa-bNIj6k7Oz7UKuv0gqgTJ5scsqgrmemFfHbijxHtCWLm8RI9rVTNB3okBnzHeNpPmlX429xTu_dpcRrcchIkzIdIrlzhdj0bEWd2KauAkVeR0yM/s1600/Cache_CTE.JPG" /></a><br />
<ole db="" editor="" image="" source=""><cache editor="" image="" transform=""> <br />
Here you need to create a cache connection manager by clicking the New... button. This then displays the Cache Connection Manager Editor, give the Cache Connection Manager a sensible name - in this case 'TimeLKP', and click on the 'Columns' tab: </cache></ole><br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXhQBBtiFi8_vlEU4itZ02qD0GvjskoaKA2T384QXWAxWWk8Pme4aqvCdgJt-F4wPHorW7AZh9c5y93a9jTnlDycDURb13js8pSgY8LPgKodp8huztZSVWAIbfApobS_JsnFe9j8BFEcA/s1600/Cache_ColMaps.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXhQBBtiFi8_vlEU4itZ02qD0GvjskoaKA2T384QXWAxWWk8Pme4aqvCdgJt-F4wPHorW7AZh9c5y93a9jTnlDycDURb13js8pSgY8LPgKodp8huztZSVWAIbfApobS_JsnFe9j8BFEcA/s1600/Cache_ColMaps.bmp" /></a></div><br />
<ole db="" editor="" image="" source=""><cache editor="" image="" transform="">Here you need to specify which columns are 'indexed columns'. This isn't 'indexed' in the sense that there's a database index on the columns specified, instead this is the index that the lookup will use (ie the business key(s)). In other words, specify the order in which a lookup transform should use the lookup columns - lowest level (ie most granular) first. Here we have one column to lookup on so we make this position 1. Then if you want, you can alter the column names in the cache as follows:<br />
<br />
<cache editor="" image="" mappings="" transform=""></cache></cache></ole><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSPLFWNcBI28fySvONhENbxY9OxQMmNdrSuJM6I9fltCUy-ErRfzyRhu9oHXmZZeaLHBkmzEOXcuLlzlLngXoHk2Op1xFCn_55ZJ7SicJxovLW4hbegZO77cMmX4dZ2Fpo4AdhZ47HTGo/s1600/Cache_ColMaps2.JPG" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSPLFWNcBI28fySvONhENbxY9OxQMmNdrSuJM6I9fltCUy-ErRfzyRhu9oHXmZZeaLHBkmzEOXcuLlzlLngXoHk2Op1xFCn_55ZJ7SicJxovLW4hbegZO77cMmX4dZ2Fpo4AdhZ47HTGo/s1600/Cache_ColMaps2.JPG" /></a><br />
<ole db="" editor="" image="" source=""><cache editor="" image="" transform=""><cache editor="" image="" mappings="" transform=""> </cache></cache></ole><br />
<ole db="" editor="" image="" source=""><cache editor="" image="" transform=""><cache editor="" image="" mappings="" transform=""><br />
</cache></cache></ole><br />
<ole db="" editor="" image="" source=""><cache editor="" image="" transform=""><cache editor="" image="" mappings="" transform="">At the end of this you should have a Data Flow that looks something like this:</cache></cache></ole><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDzX6zItOKgsR5Z60xg1Z0xkECf72vhnPM3R5sZAdUfCRKt0lnpqwjMxed5gVSa2O8pDRIPfkRPrmI2UlXMrbnhlWda3jlCALqeVZhIhi55XyEf4o865SBXszPVvToBQ2uI66AhSRdu_A/s1600/Cache_Dataflow.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDzX6zItOKgsR5Z60xg1Z0xkECf72vhnPM3R5sZAdUfCRKt0lnpqwjMxed5gVSa2O8pDRIPfkRPrmI2UlXMrbnhlWda3jlCALqeVZhIhi55XyEf4o865SBXszPVvToBQ2uI66AhSRdu_A/s1600/Cache_Dataflow.JPG" /></a></div><ole db="" editor="" image="" source=""><cache editor="" image="" transform=""><cache editor="" image="" mappings="" transform=""><br />
</cache></cache></ole><br />
<ole db="" editor="" image="" source=""><cache editor="" image="" transform=""><cache editor="" image="" mappings="" transform="">If you were creating multiple caches you could put them all within the same Data Flow - or split them up, its up to you. However, you have to ensure that the cache is created before the lookup is used. To this end I put the lookup in a seperate Data Flow.<b> </b></cache></cache></ole><br />
<br />
<ole db="" editor="" image="" source=""><cache editor="" image="" transform=""><cache editor="" image="" mappings="" transform=""><b>Step three:</b><br />
<br />
All thats left is to use the Cache Connection Manager in a Lookup Transform. </cache></cache></ole>This is very straightforward. <ole db="" editor="" image="" source=""><cache editor="" image="" transform=""><cache editor="" image="" mappings="" transform="">Create another Data Flow and </cache></cache></ole>within that, <ole db="" editor="" image="" source=""><cache editor="" image="" transform=""><cache editor="" image="" mappings="" transform="">a data source connection in the normal way. Then add a Lookup Transform to the Data Flow and open its Editor. </cache></cache></ole>Select the 'Cache connection manager' radio button.<br />
<ole db="" editor="" image="" source=""><cache editor="" image="" transform=""><cache editor="" image="" mappings="" transform=""> <br />
<lookup transform=""></lookup></cache></cache></ole><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgA_iP4vjewkPt2Q9Lrp5-PeQfG63l9C1J-o3Ejt3whojJ54x3Kj9Tdq5I5IjhXVFgyseyOAuHCIG2oSey7ueGT_pD9pqKYyqFan1mXFwHptXcSXsviOezKSBHTn7zYZsrgQUAbkqLAy60/s1600/Cache_LookupGen.JPG" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgA_iP4vjewkPt2Q9Lrp5-PeQfG63l9C1J-o3Ejt3whojJ54x3Kj9Tdq5I5IjhXVFgyseyOAuHCIG2oSey7ueGT_pD9pqKYyqFan1mXFwHptXcSXsviOezKSBHTn7zYZsrgQUAbkqLAy60/s1600/Cache_LookupGen.JPG" /></a><br />
<ole db="" editor="" image="" source=""><cache editor="" image="" transform=""><cache editor="" image="" mappings="" transform=""><lookup transform=""> <br />
Then choose your Cache connection: </lookup></cache></cache></ole><br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxCAethsGDGNSDwocQ1lbQEwMMrYq59q7eWa9dJw2FnloxJpAb0kbGpD1FppPRsXodmvP4AWTbPWuSaqsqaGEoHeHabZeDI0MkingbSURI8AI5gt6HWxbcDoc9ep_c5wfZCVBlT0FbwAU/s1600/Cache_Lookup1.JPG" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxCAethsGDGNSDwocQ1lbQEwMMrYq59q7eWa9dJw2FnloxJpAb0kbGpD1FppPRsXodmvP4AWTbPWuSaqsqaGEoHeHabZeDI0MkingbSURI8AI5gt6HWxbcDoc9ep_c5wfZCVBlT0FbwAU/s1600/Cache_Lookup1.JPG" /></a><ole db="" editor="" image="" source=""><cache editor="" image="" transform=""><cache editor="" image="" mappings="" transform=""><lookup transform=""> </lookup></cache></cache></ole><br />
<ole db="" editor="" image="" source=""><cache editor="" image="" transform=""><cache editor="" image="" mappings="" transform=""><lookup transform="">The rest of the process is exactly the same as a normal lookup:</lookup></cache></cache></ole><br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcma9LnBR71zZodcFDB6boKeF92WgmbjtmTJpEQP5QAqSP1g80uFo1r6EDlhtQ6lSygy9UBRp2ezeCRY3ddnDwxzdjHfGXnj6ASQZvIbc6yoyocAkWx_rQQK8B0JXuS5vtiG-4Twv4blM/s1600/Cache_Lookup2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcma9LnBR71zZodcFDB6boKeF92WgmbjtmTJpEQP5QAqSP1g80uFo1r6EDlhtQ6lSygy9UBRp2ezeCRY3ddnDwxzdjHfGXnj6ASQZvIbc6yoyocAkWx_rQQK8B0JXuS5vtiG-4Twv4blM/s1600/Cache_Lookup2.JPG" /></a></div><br />
Hopefully thats clarified how to go about creating an in-memory lookup cache. In my next post I'll demonstrate creating a file-cache and share the results of my entirely unscientific performance comparison of memory-caching vs file-caching vs <ole db="" editor="" image="" source=""><cache editor="" image="" transform=""><cache editor="" image="" mappings="" transform=""><lookup transform="">no caching. </lookup></cache></cache></ole>Philhttp://www.blogger.com/profile/10605647000243636584noreply@blogger.com0tag:blogger.com,1999:blog-583448162611849186.post-28824163129685101282010-09-30T21:30:00.002+01:002010-09-30T21:50:06.729+01:00Next version SSISDetails of the next version of SSIS have been <a href="http://blogs.msdn.com/b/mattm/archive/2010/08/25/upcoming-product-changes.aspx">leaking</a> onto the <a href="http://sqlblog.com/blogs/jamie_thomson/archive/2010/09/10/newly-closed-connect-items-auger-well-for-ssis-in-denali.aspx">internets</a>. Some highlights; undo in the designer - which will be a big time-saver, data-flow sequence containers - allowing developers to group and hide transformations, and last but not least - rounded corners!<br /><br />This is great, and no doubt other improvements will be announced over the next few weeks (presumably Visual Studio 2010 integration is a cast-iron certainty). However other gripes on <a href="https://connect.microsoft.com/">connect</a> remain open, or have already been closed as 'won't fix', such as case sensitivity on the Lookup transform (forcing additional 'uppercase' columns, or passing the whole lookup to the SQL database), and some of Jamie Thomsons debugging suggestions.<br /><br />Nit-picking aside its interesting to note that less than 6 months after the release of R2 MS is starting to talk about CTP's of the next version.Philhttp://www.blogger.com/profile/10605647000243636584noreply@blogger.com0tag:blogger.com,1999:blog-583448162611849186.post-15592132401425386892010-09-22T01:10:00.000+01:002010-09-22T01:10:00.963+01:00Data dude build without a Visual Studio installationThe simple answer is that <a href="http://sqlserverselect.blogspot.com/2010/07/visual-studio-2010-database-projects.html">you can't</a>.<br /><br />I've just run into this issue myself. It strikes me that requiring an additional client license, and a full VS install simply to_build_a project is way over-the-top. The TFS alternative is obviously better (it being a server product) - but potentially still requires additional licensing. Anyway with increasing numbers of shops running <a href="http://martinfowler.com/articles/continuousIntegration.html">continuous integration</a> I think it removes a significant amount of desirable functionality from the Visual Studion database project story.<br /><br />If you want to try and get database projects built only using MSbuild vote <a href="https://connect.microsoft.com/VisualStudio/feedback/details/580568/ability-to-build-database-projects-using-only-msbuild">here</a>.Philhttp://www.blogger.com/profile/10605647000243636584noreply@blogger.com2tag:blogger.com,1999:blog-583448162611849186.post-2544162408802917392010-09-19T10:40:00.000+01:002010-09-19T10:46:12.314+01:00Data dude erroring on deployment - Connect requestI've created a <a href="https://connect.microsoft.com/VisualStudio/feedback/details/601532/add-database-size-and-auto-growth-settings-to-visual-studio-database-projects">connect request</a> for the problem described <a href="http://phil-austin.blogspot.com/2010/08/data-dude-erroring-on-deployment-over.html">below</a>. Fingers crossed it gets accepted - if you want it added go and vote now!Philhttp://www.blogger.com/profile/10605647000243636584noreply@blogger.com0tag:blogger.com,1999:blog-583448162611849186.post-26569820429549179832010-08-21T16:23:00.000+01:002010-09-04T10:20:29.154+01:00Data dude erroring on deployment over-writing database file settingsAt MITIE we've started using Visual Studio (VS) 2010 for managing database development. The nice thing about 2010 is that the functionality from Data Dude that used to be in a seperate sku and license is now included in the vanilla editions of VS Pro and Premium (Kimberly Tripp has a good post about it <a href="http://www.sqlskills.com/BLOGS/KIMBERLY/post/Data-Dude-moving-into-lower-priced-VS-Editions-in-VS-2010-excellent!.aspx">here</a>). Premium has more functionality than Pro, obviously.<br /><br />I won't cover the advantages of using VS 2010 to develop databases as that is covered in detail elsewhere. However there are some wrinkles that aren't quite so well documented.<br /><br />I started to get this error whilst trying to deploy a database project from VS 2010, that I'd previously imported from SQL Server:<br /><br /><blockquote>Error SQL01268: .Net SqlClient Data Provider: Msg 1834, Level 16, State 1, Line 1 The file <span style="font-style:italic;">[file name]</span> cannot be overwritten. It is being used by database <span style="font-style:italic;">[database name]</span>. </blockquote><br />There is some information on the problem <a href="http://social.msdn.microsoft.com/Forums/en-US/vstsdb/thread/04d29fec-417f-4d16-839b-89bce5836c57">here</a> however the thread is a bit long-winded and the final fix leaves something to be desired...<br /><br />Essentially my problem boiled down to the fact that the database that I imported had different file settings to the database I was deploying to. In this case the filegrowth settings. Therefore the database project also had different filegrowth settings than the deployment database. In this situation VS/data dude will detect a difference and attempt to alter the database file. Obviously if there are open connections to the database then this won't work. Therefore there are two solutions:<br /><br />1. Close all connections to the database and then deploy (possibly even putting the database in single user mode). This is a bit inconvenient and assumes you're happy with the settings in the database project. In this case I wasn't.<br /><br />2. Happily there is an alternative. You can change filegrowth (and other) settings of the database project, however these aren't available through the VS 2010 IDE. Instead you have to edit .sql files found here:<br /><br /><blockquote><br /><span style="font-style:italic;">[Project location]</span>\<span style="font-style:italic;">[Database project name]</span>\Schema Objects\Storage\Files</blockquote><br /><br />In my case I changed the filegrowth settings from:<br /><blockquote><br /><font face="Courier New"><br /><font color = "#FF0080"><b>FILEGROWTH</b></font><font color = "silver">=</font><font color = "black">1</font><font color = "maroon">MB</font><br /><br/><br /></font><br /></blockquote><br />To:<br /><blockquote><br /><font face="Courier New"><br /><font color = "#FF0080"><b>FILEGROWTH</b></font><font color = "silver">=</font><font color = "black">10</font><font color = "silver">%</font><br /><br/><br /></font><br /></blockquote><br />After doing this my deployment problems were solved.<br /><br />Clearly appropriate filegrowth settings is a whole seperate topic - which could be the subject of at a whole post in itself. On this occasion 10% was better than 1MB.<br /><br />Unfortunately there is a limited set of database settings available to change through VS 2010 using the database properties > schema settings dialogue - which doesn't include autogrowth let alone sizing. Ideally it'd be nice to be able to amend those settings through VS itself. I think there's probably another Connect request in the works...Philhttp://www.blogger.com/profile/10605647000243636584noreply@blogger.com1tag:blogger.com,1999:blog-583448162611849186.post-50639140634234327382010-07-07T18:42:00.000+01:002010-07-07T21:41:56.017+01:00MERGE and Slowly Changing DimensionsBlimey - has it really been over 2 months since my last post? A few things have happened since then - not least moving job from <a href="http://www.clarity-integration.com/">Clarity</a> to <a href="http://www.mitie.com/">MITIE</a>. Anyway on with the subject of the post.<br /><br />Using the <a href="http://technet.microsoft.com/en-us/library/bb510625.aspx">MERGE</a> statement is pretty well <a href="http://blog.sqlauthority.com/2010/06/08/sql-server-merge-operations-insert-update-delete-in-single-execution/">documented</a> however what about using it to update a dimension that includes <a href="http://en.wikipedia.org/wiki/Slowly_changing_dimension">Type 1 and Type 2</a> changes? There are <a href="http://www.rkimball.com/html/08dt/KU107_UsingSQL_MERGESlowlyChangingDimension.pdf">examples</a> on the web but they're either not SQL specific or seem flawed in one way or another. To follow this example you'll need the AdventureWorksDW2008 database available <a href="http://msftdbprodsamples.codeplex.com/releases/view/37109">here</a>. The R2 version of AdventureWorksDW might work but as yet I haven't tested it. Firstly lets set up a staging table and a dimension table:<br /><br /><blockquote><br /><font face="Courier New" size="2"><br /><font color = "blue">SELECT</font> <font color = "maroon">ProductKey</font><font color = "silver">,</font><font color = "maroon">ProductAlternateKey</font> <font color = "blue">AS</font> <font color = "maroon">ProductId</font><font color = "silver">,</font><font color = "maroon">EnglishProductName</font><font color = "silver">,</font><br /><br/> <font color = "#FF0080"><b>ISNULL</b></font><font color = "maroon">(</font><font color = "maroon">ListPrice</font><font color = "silver">,</font> <font color = "black">0</font><font color = "maroon">)</font> <font color = "blue">AS</font> <font color = "maroon">ListPrice</font><font color = "silver">,</font><font color = "#FF0080"><b>HASHBYTES</b></font><font color = "maroon">(</font><font color = "red">'SHA1'</font><font color = "silver">,</font> <font color = "maroon">EnglishProductName</font><font color = "maroon">)</font><br /><br/> <font color = "blue">AS</font> <font color = "maroon">Type1CheckSum</font><font color = "silver">,</font><br /><br/> <font color = "#FF0080"><b>HASHBYTES</b></font><font color = "maroon">(</font><font color = "red">'SHA1'</font><font color = "silver">,</font> <font color = "fuchsia"><i>CAST</i></font><font color = "maroon">(</font><font color = "#FF0080"><b>ISNULL</b></font><font color = "maroon">(</font><font color = "maroon">ListPrice</font><font color = "silver">,</font> <font color = "black">0</font><font color = "maroon">)</font> <font color = "blue">AS</font> <font color = "black"><i>VARCHAR</i></font><font color = "maroon">(</font><font color = "black">10</font><font color = "maroon">)</font><font color = "maroon">)</font><font color = "maroon">)</font> <font color = "blue">AS</font><br /><br/> <font color = "maroon">Type2CheckSum</font><br /><br/><font color = "blue">INTO</font> <font color = "maroon">ProductStaging</font><br /><br/><font color = "blue">FROM</font> <font color = "maroon">AdventureWorksDW2008</font><font color = "silver">.</font><font color = "silver">.</font><font color = "maroon">DimProduct</font><br /><br/><font color = "blue">WHERE</font> <font color = "maroon">EndDate</font> <font color = "blue">IS</font> <font color = "blue">NULL</font><br /><br/><br /><br/><font color = "blue">GO</font><br /><br/><br /><br/><font color = "blue">CREATE</font> <font color = "blue">TABLE</font> <font color = "maroon">[dbo]</font><font color = "silver">.</font><font color = "maroon">[DimProduct]</font><br /><br/> <font color = "maroon">(</font><br /><br/> <font color = "maroon">[ProductKey]</font> <font color = "black"><i>[INT]</i></font> <font color = "blue">IDENTITY</font><font color = "maroon">(</font><font color = "black">1</font><font color = "silver">,</font> <font color = "black">1</font><font color = "maroon">)</font> <font color = "blue">NOT</font> <font color = "blue">NULL</font><font color = "silver">,</font><br /><br/> <font color = "maroon">ProductId</font> <font color = "black"><i>NVARCHAR</i></font><font color = "maroon">(</font><font color = "black">25</font><font color = "maroon">)</font> <font color = "blue">NOT</font> <font color = "blue">NULL</font><font color = "silver">,</font><br /><br/> <font color = "maroon">[EnglishProductName]</font> <font color = "black"><i>[NVARCHAR]</i></font><font color = "maroon">(</font><font color = "black">50</font><font color = "maroon">)</font> <font color = "blue">NOT</font> <font color = "blue">NULL</font><font color = "silver">,</font><br /><br/> <font color = "maroon">[ListPrice]</font> <font color = "black"><i>[MONEY]</i></font> <font color = "blue">NOT</font> <font color = "blue">NULL</font><font color = "silver">,</font><br /><br/> <font color = "maroon">DateUpdated</font> <font color = "black"><i>DATETIME</i></font> <font color = "blue">NOT</font> <font color = "blue">NULL</font> <font color = "blue">DEFAULT</font> <font color = "fuchsia"><i>GETDATE</i></font><font color = "maroon">(</font><font color = "maroon">)</font><font color = "silver">,</font><br /><br/> <font color = "maroon">Type1Checksum</font> <font color = "black"><i>VARBINARY</i></font><font color = "maroon">(</font><font color = "black">8000</font><font color = "maroon">)</font> <font color = "blue">NULL</font> <font color = "blue">DEFAULT</font> <font color = "black">0</font><font color = "silver">,</font><br /><br/> <font color = "maroon">Type2Checksum</font> <font color = "black"><i>VARBINARY</i></font><font color = "maroon">(</font><font color = "black">8000</font><font color = "maroon">)</font> <font color = "blue">NULL</font> <font color = "blue">DEFAULT</font> <font color = "black">0</font><font color = "silver">,</font><br /><br/> <font color = "maroon">StartDate</font> <font color = "black"><i>DATETIME</i></font> <font color = "blue">NOT</font> <font color = "blue">NULL</font> <font color = "blue">DEFAULT</font> <font color = "fuchsia"><i>GETDATE</i></font><font color = "maroon">(</font><font color = "maroon">)</font><font color = "silver">,</font><br /><br/> <font color = "maroon">EndDate</font> <font color = "black"><i>DATETIME</i></font> <font color = "blue">NULL</font><font color = "silver">,</font><br /><br/> <font color = "maroon">CurrentFlag</font> <font color = "black"><i>BIT</i></font> <font color = "blue">NOT</font> <font color = "blue">NULL</font> <font color = "blue">DEFAULT</font> <font color = "black">1</font><br /><br/> <font color = "blue">CONSTRAINT</font> <font color = "maroon">[PK_DimProduct_ProductKey]</font> <font color = "blue">PRIMARY</font> <font color = "blue">KEY</font> <font color = "blue">CLUSTERED</font> <font color = "maroon">(</font> <font color = "maroon">[ProductKey]</font><br /><br/> <font color = "blue">ASC</font> <font color = "maroon">)</font><br /><br/> <font color = "maroon">)</font> <br /></font><br /></blockquote><br /><br />Note that we're using <a href="http://msdn.microsoft.com/en-us/library/ms174415.aspx">HASHBYTES</a> on the staging table - this will be used to compare columns. The SHA1 algorithm ensures sensitivity to changes across those columns. If you're using non-character fields you'll need to cast them before hashing them.<br /><br />Firstly lets add new records (at this point all of them):<br /><br /><blockquote><br /><font face="Courier New" size="2"><br /><font color = "blue">MERGE</font> <font color = "maroon">dbo</font><font color = "silver">.</font><font color = "maroon">DimProduct</font> <font color = "blue">AS</font> <font color = "maroon">dim</font><br /><br/><font color = "blue">USING</font> <font color = "maroon">ProductStaging</font> <font color = "blue">AS</font> <font color = "maroon">stg</font><br /><br/><font color = "blue">ON</font> <font color = "maroon">dim</font><font color = "silver">.</font><font color = "maroon">ProductId</font><font color = "silver">=</font><font color = "maroon">stg</font><font color = "silver">.</font><font color = "maroon">ProductId</font><br /><br/><br /><br/><font color = "blue">WHEN</font> <font color = "blue">MATCHED</font> <font color = "blue">AND</font> <font color = "maroon">dim</font><font color = "silver">.</font><font color = "maroon">Type1Checksum</font><font color = "silver"><></font><font color = "maroon">stg</font><font color = "silver">.</font><font color = "maroon">Type1Checksum</font> <font color = "blue">THEN</font> <font color = "green"><i>--type1 changes</i></font><br /><br/> <font color = "blue">UPDATE</font> <font color = "blue">SET</font> <font color = "maroon">dim</font><font color = "silver">.</font><font color = "maroon">Type1Checksum</font><font color = "silver">=</font><font color = "maroon">stg</font><font color = "silver">.</font><font color = "maroon">Type1Checksum</font><font color = "silver">,</font><br /><br/> <font color = "maroon">dim</font><font color = "silver">.</font><font color = "maroon">EnglishProductName</font><font color = "silver">=</font><font color = "maroon">stg</font><font color = "silver">.</font><font color = "maroon">EnglishProductName</font><font color = "silver">,</font><br /><br/> <font color = "maroon">dim</font><font color = "silver">.</font><font color = "maroon">DateUpdated</font><font color = "silver">=</font><font color = "fuchsia"><i>GETDATE</i></font><font color = "maroon">(</font><font color = "maroon">)</font><br /><br/><br /><br/><font color = "blue">WHEN</font> <font color = "blue">NOT</font> <font color = "blue">MATCHED</font> <font color = "blue">THEN</font> <font color = "green"><i>--new records</i></font><br /><br/> <font color = "blue">INSERT</font> <font color = "maroon">(</font><font color = "maroon">ProductId</font><font color = "silver">,</font> <font color = "maroon">EnglishProductName</font><font color = "silver">,</font> <font color = "maroon">ListPrice</font><font color = "silver">,</font> <font color = "maroon">Type1Checksum</font><font color = "silver">,</font> <font color = "maroon">Type2Checksum</font><font color = "maroon">)</font><br /><br/> <font color = "blue">VALUES</font> <font color = "maroon">(</font><font color = "maroon">stg</font><font color = "silver">.</font><font color = "maroon">ProductId</font><font color = "silver">,</font> <font color = "maroon">stg</font><font color = "silver">.</font><font color = "maroon">EnglishProductName</font><font color = "silver">,</font> <font color = "maroon">stg</font><font color = "silver">.</font><font color = "maroon">ListPrice</font><font color = "silver">,</font> <font color = "maroon">stg</font><font color = "silver">.</font><font color = "maroon">Type1Checksum</font><font color = "silver">,</font> <font color = "maroon">stg</font><font color = "silver">.</font><font color = "maroon">Type2Checksum</font><font color = "maroon">)</font><font color = "silver">;</font><br /><br/><br /></font><br /></blockquote><br /><br />You'll note that this statement actually does the Type 1 updates as well - ie where the checksum\hash columns are different. <br /><br />OK, lets add some changes to the ProductName - which will be handled as Type 1 overwrites, and some changes to ListPrice - which we'll handle as Type 2:<br /><br /><blockquote><br /><font face="Courier New" size="2"><br /><font color = "blue">UPDATE</font> <font color = "maroon">ProductStaging</font><br /><br/><font color = "blue">SET</font> <font color = "maroon">EnglishProductName</font> <font color = "silver">=</font> <font color = "red">'Fred'</font><font color = "silver">,</font><br /><br/> <font color = "maroon">Type1CheckSum</font> <font color = "silver">=</font> <font color = "#FF0080"><b>HASHBYTES</b></font><font color = "maroon">(</font><font color = "red">'SHA1'</font><font color = "silver">,</font> <font color = "red">'Fred'</font><font color = "maroon">)</font><br /><br/><font color = "blue">WHERE</font> <font color = "maroon">ProductId</font> <font color = "silver">=</font> <font color = "red">'AR-5381'</font><font color = "silver">;</font><br /><br/><br /><br/><font color = "blue">UPDATE</font> <font color = "maroon">ProductStaging</font><br /><br/><font color = "blue">SET</font> <font color = "maroon">ListPrice</font> <font color = "silver">=</font> <font color = "black">9.99</font><font color = "silver">,</font><br /><br/> <font color = "maroon">Type2CheckSum</font> <font color = "silver">=</font> <font color = "#FF0080"><b>HASHBYTES</b></font><font color = "maroon">(</font><font color = "red">'SHA1'</font><font color = "silver">,</font> <font color = "fuchsia"><i>CAST</i></font><font color = "maroon">(</font><font color = "#FF0080"><b>ISNULL</b></font><font color = "maroon">(</font><font color = "black">9.99</font><font color = "silver">,</font> <font color = "black">0</font><font color = "maroon">)</font> <font color = "blue">AS</font> <font color = "black"><i>VARCHAR</i></font><font color = "maroon">(</font><font color = "black">10</font><font color = "maroon">)</font><font color = "maroon">)</font><font color = "maroon">)</font><br /><br/><font color = "blue">WHERE</font> <font color = "maroon">ProductId</font> <font color = "silver">=</font> <font color = "red">'BE-2349'</font><font color = "silver">;</font><br /><br/><br /><br/><font color = "blue">GO</font><br /></font><br /></blockquote><br /><br />So now we'll do the Type 1 update using the same MERGE statement as above. We also set the DateUpdated column - for auditing purposes:<br /><br /><blockquote><br /><font face="Courier New" size="2"><br /><br/><font color = "blue">MERGE</font> <font color = "maroon">dbo</font><font color = "silver">.</font><font color = "maroon">DimProduct</font> <font color = "blue">AS</font> <font color = "maroon">dim</font><br /><br/><font color = "blue">USING</font> <font color = "maroon">ProductStaging</font> <font color = "blue">AS</font> <font color = "maroon">stg</font><br /><br/><font color = "blue">ON</font> <font color = "maroon">dim</font><font color = "silver">.</font><font color = "maroon">ProductId</font> <font color = "silver">=</font> <font color = "maroon">stg</font><font color = "silver">.</font><font color = "maroon">ProductId</font><br /><br/><font color = "blue">WHEN</font> <font color = "blue">MATCHED</font> <font color = "blue">AND</font> <font color = "maroon">dim</font><font color = "silver">.</font><font color = "maroon">Type1Checksum</font><font color = "silver"><></font><font color = "maroon">stg</font><font color = "silver">.</font><font color = "maroon">Type1Checksum</font> <font color = "blue">THEN</font> <font color = "green"><i>--type1 changes</i></font><br /><br/> <font color = "blue">UPDATE</font> <font color = "blue">SET</font> <font color = "maroon">dim</font><font color = "silver">.</font><font color = "maroon">Type1Checksum</font> <font color = "silver">=</font> <font color = "maroon">stg</font><font color = "silver">.</font><font color = "maroon">Type1Checksum</font><font color = "silver">,</font><br /><br/> <font color = "maroon">dim</font><font color = "silver">.</font><font color = "maroon">EnglishProductName</font> <font color = "silver">=</font> <font color = "maroon">stg</font><font color = "silver">.</font><font color = "maroon">EnglishProductName</font><font color = "silver">,</font><br /><br/> <font color = "maroon">dim</font><font color = "silver">.</font><font color = "maroon">DateUpdated</font> <font color = "silver">=</font> <font color = "fuchsia"><i>GETDATE</i></font><font color = "maroon">(</font><font color = "maroon">)</font><br /><br/><font color = "blue">WHEN</font> <font color = "blue">NOT</font> <font color = "blue">MATCHED</font> <font color = "blue">THEN</font> <font color = "green"><i>--new records</i></font><br /><br/> <font color = "blue">INSERT</font> <font color = "maroon">(</font><font color = "maroon">ProductId</font><font color = "silver">,</font><br /><br/> <font color = "maroon">EnglishProductName</font><font color = "silver">,</font><br /><br/> <font color = "maroon">ListPrice</font><font color = "silver">,</font><br /><br/> <font color = "maroon">Type1Checksum</font><font color = "silver">,</font><br /><br/> <font color = "maroon">Type2Checksum</font><font color = "maroon">)</font><br /><br/> <font color = "blue">VALUES</font> <font color = "maroon">(</font><font color = "maroon">stg</font><font color = "silver">.</font><font color = "maroon">ProductId</font><font color = "silver">,</font><br /><br/> <font color = "maroon">stg</font><font color = "silver">.</font><font color = "maroon">EnglishProductName</font><font color = "silver">,</font><br /><br/> <font color = "maroon">stg</font><font color = "silver">.</font><font color = "maroon">ListPrice</font><font color = "silver">,</font><br /><br/> <font color = "maroon">stg</font><font color = "silver">.</font><font color = "maroon">Type1Checksum</font><font color = "silver">,</font><br /><br/> <font color = "maroon">stg</font><font color = "silver">.</font><font color = "maroon">Type2Checksum</font><font color = "maroon">)</font><font color = "silver">;</font> <br /></font><br /></blockquote><br /><br />Here we're careful to ensure that Type 1 changes apply to all records including the historic ones. Some examples filter for current records only...<br /><br />Finally the Type 2 INSERTS. The trick here is to use the OUTPUT statement on the UPDATE to create a pseudo-table and then SELECT from that into the DimProduct dimension table to create the new 'current' record. Note that I'm also setting the CurrentFlag and EndDate on the old dimension record - so that its clear this is a historic record. Again all in one statement: <br /><br /><blockquote><br /><font face="Courier New" size="2"><br /><font color = "blue">INSERT</font> <font color = "maroon">dbo</font><font color = "silver">.</font><font color = "maroon">DimProduct</font><br /><br/> <font color = "maroon">(</font><font color = "maroon">ProductId</font><font color = "silver">,</font><font color = "maroon">EnglishProductName</font><font color = "silver">,</font><font color = "maroon">ListPrice</font><font color = "silver">,</font><font color = "maroon">DateUpdated</font><font color = "silver">,</font><font color = "maroon">Type1Checksum</font><font color = "silver">,</font><br /><br/> <font color = "maroon">Type2Checksum</font><font color = "silver">,</font><br /><br/> <font color = "maroon">CurrentFlag</font><font color = "maroon">)</font><br /><br/><font color = "blue">SELECT</font> <font color = "maroon">ProductId</font><font color = "silver">,</font><font color = "maroon">EnglishProductName</font><font color = "silver">,</font><font color = "maroon">ListPrice</font><font color = "silver">,</font><font color = "fuchsia"><i>GETDATE</i></font><font color = "maroon">(</font><font color = "maroon">)</font><font color = "silver">,</font><font color = "maroon">Type1Checksum</font><font color = "silver">,</font><br /><br/> <font color = "maroon">Type2Checksum</font><font color = "silver">,</font><font color = "black">1</font><br /><br/><font color = "blue">FROM</font> <font color = "maroon">(</font> <br /></font><font face="Courier New" size="2"><br /><font color = "blue">MERGE</font> <font color = "maroon">DimProduct</font> <font color = "blue">AS</font> <font color = "maroon">dim</font><br /><br/><font color = "blue">USING</font> <font color = "maroon">ProductStaging</font> <font color = "blue">AS</font> <font color = "maroon">stg</font><br /><br/><font color = "blue">ON</font> <font color = "maroon">dim</font><font color = "silver">.</font><font color = "maroon">ProductId</font> <font color = "silver">=</font> <font color = "maroon">stg</font><font color = "silver">.</font><font color = "maroon">ProductId</font><br /><br/><font color = "blue">WHEN</font> <font color = "blue">MATCHED</font> <font color = "blue">AND</font> <font color = "maroon">dim</font><font color = "silver">.</font><font color = "maroon">Type2Checksum</font><font color = "silver"><></font><font color = "maroon">stg</font><font color = "silver">.</font><font color = "maroon">Type2Checksum</font> <font color = "blue">AND</font> <font color = "maroon">dim</font><font color = "silver">.</font><font color = "maroon">CurrentFlag</font><font color = "silver">=</font><font color = "black">1</font> <font color = "blue">THEN</font><br /><br/> <font color = "blue">UPDATE</font> <font color = "blue">SET</font> <font color = "maroon">CurrentFlag</font> <font color = "silver">=</font> <font color = "black">0</font><font color = "silver">,</font><br /><br/> <font color = "maroon">EndDate</font> <font color = "silver">=</font> <font color = "fuchsia"><i>GETDATE</i></font><font color = "maroon">(</font><font color = "maroon">)</font><br /><br/><font color = "blue">OUTPUT</font> <font color = "maroon">$Action</font> <font color = "blue">AS</font> <font color = "maroon">Operation</font><font color = "silver">,</font><font color = "maroon">stg</font><font color = "silver">.</font><font color = "maroon">ProductId</font><font color = "silver">,</font><font color = "maroon">stg</font><font color = "silver">.</font><font color = "maroon">EnglishProductName</font><font color = "silver">,</font><font color = "maroon">stg</font><font color = "silver">.</font><font color = "maroon">ListPrice</font><font color = "silver">,</font><br /><br/><font color = "maroon">stg</font><font color = "silver">.</font><font color = "maroon">Type1Checksum</font><font color = "silver">,</font><font color = "maroon">stg</font><font color = "silver">.</font><font color = "maroon">Type2Checksum</font> <br /><font color = "maroon">)</font> <font color = "blue">AS</font> <font color = "maroon">MergeOut</font><br /><br/><font color = "blue">WHERE</font> <font color = "maroon">Operation</font> <font color = "silver">=</font> <font color = "red">'UPDATE'</font><font color = "silver">;</font><br /><br/><br /></font><br /></blockquote><br /><br />So that's it! Hope its um...useful.Philhttp://www.blogger.com/profile/10605647000243636584noreply@blogger.com1tag:blogger.com,1999:blog-583448162611849186.post-12907892472915120852010-04-21T22:10:00.000+01:002010-05-29T11:55:07.271+01:00SQL Server 2008 R2 RTMMS have issued a <a href="http://www.microsoft.com/Presspass/press/2010/apr10/SQL08RTMPR.mspx">press release</a> stating that SQL Server 2008 R2 has been Released To Manufacturing (are they still pressing discs? I guess so...). It also states that it will be available in early May from the likes of <a href="http://www.clarity-integration.com/">us</a> and MS's own channels. Self-service BI gets top billing. I've certainly been impressed with the reporting elements of R2 - not only PowerPivot but also Reporting Services, so I'm looking forward to using it in anger with clients...Philhttp://www.blogger.com/profile/10605647000243636584noreply@blogger.com0