<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Mike Diehl's WebLog</title><link>http://weblogs.asp.net/miked/default.aspx</link><description>Much aBlog about nothing...</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>Joel's Predictions for 2011 (and Mike's comments)</title><link>http://weblogs.asp.net/miked/archive/2010/12/31/joel-s-predictions-for-2011-and-mike-s-comments.aspx</link><pubDate>Fri, 31 Dec 2010 21:32:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7671495</guid><dc:creator>MikeD</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/miked/rsscomments.aspx?PostID=7671495</wfw:commentRss><comments>http://weblogs.asp.net/miked/archive/2010/12/31/joel-s-predictions-for-2011-and-mike-s-comments.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;Joel has posted his &lt;A title="predictions for 2011" href="http://blogs.telerik.com/joelsemeniuk/posts/10-12-30/predictions_for_2011.aspx" mce_href="http://blogs.telerik.com/joelsemeniuk/posts/10-12-30/predictions_for_2011.aspx"&gt;predictions for 2011&lt;/A&gt;. I find his predictions very interesting, mostly because I am crappy at doing predictions myself. However, I am seldom at a loss for commenting on someone else's work:&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;1. &lt;B&gt;The Kanban Influence&lt;/B&gt;:&lt;/P&gt;
&lt;P mce_keep="true"&gt;I have seen a little bit of this, and I like what I see. I would like to try to implement this in the project I am currently on, but I think it will take a lot of education of many involved in the project, as most of them don't even know the term.&lt;/P&gt;
&lt;P mce_keep="true"&gt;2. &lt;B&gt;Digital Entertainment Crossing the Chasm&lt;/B&gt;:&lt;/P&gt;
&lt;P mce_keep="true"&gt;In December 2009, our family purchased a high-def digital cable video recorder (DVR), and a new LCD flatscreen TV. The DVR has completely changed my viewing habits, I seldom watch programs live anymore. I watched the Vancouver olympics on two channels, in near-real-time, by using the two tuners on the DVR and using pause/skip to split our viewing across the channels, and avoid commercials. &lt;/P&gt;
&lt;P mce_keep="true"&gt;The new TV has USB connections, so we occasionally watch videos and view photos on the TV as well. We recently received an XBox 360 as a Christmas gift and I am probably going to explore its integration with Windows Media player on our home PCs. &lt;/P&gt;
&lt;P mce_keep="true"&gt;3. &lt;B&gt;Many App Stores&lt;/B&gt;: &lt;/P&gt;
&lt;P mce_keep="true"&gt;I recently noticed an "App Store" tab in the latest version of uTorrent. It lists the uTorrent add-ons available for download.&lt;/P&gt;
&lt;P mce_keep="true"&gt;4. &lt;B&gt;Kinecting with your PC&lt;/B&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;We also received the Kinect with our Xbox 360, and it significantly changes the gaming experience, I think. Still a little lagging in responsiveness in some games and situations, and really hard to be precise, but it's a huge leap over the WiiMote (which we also have). &lt;/P&gt;
&lt;P mce_keep="true"&gt;In terms of using Kinect on the PC, there is already a burgeoning community for this: &lt;A href="http://kinecthacks.net/"&gt;http://kinecthacks.net/&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;6. &lt;B&gt;Mobile Really Race Heats Up&lt;/B&gt;:&lt;/P&gt;
&lt;P mce_keep="true"&gt;I am following this somewhat, but our house is certainly not "bleeding edge" with our mobile phones. My daughter is on a pay-as-you-go plan, the cheapest service for what she needs - texting and very little voice calls&amp;nbsp;for $15/month. My wife has a relatively old phone, and she is on a pick-5 plan with unlimited texts (no data). What she likes most about the phone is the large number buttons, which makes me wonder about the aging demographic and when the mobility companies will start catering directly to people who shouldn't need to put on their reading glasses to send/read a text or make a phone call. &lt;/P&gt;
&lt;P mce_keep="true"&gt;My (non-smart) phone has a full qwerty keyboard (about the size of a Blackberry) and I have still refused to read/send email from my phone. I do find myself using the web occasionally from my phone, but primarily I use my phone for texts and voice (in that order). With those limited phones, I still pay between $120-$150 per month. That seems crazy, and I can't imagine a decent plan for a smart phone would reduce my costs. Add $30-40 per month for my landline that hardly ever gets used anymore, and I have long since concluded that I pay MTS too much (but changing providers probably wouldn't reduce anything either). &lt;/P&gt;
&lt;P mce_keep="true"&gt;What I would love as a feature on my phone: voice recognition for texts - I speak and the phone types. Or the phone reads aloud the texts that I receive. &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;7. &lt;B&gt;Cloud Apps will gain momentum&lt;/B&gt;: &lt;/P&gt;
&lt;P mce_keep="true"&gt;This is only recently that I have looked at Windows Azure, and it has changed the way I think of software architectures. The development experience "just worked" - things that I thought would be pretty complex to do (configure Visual Studio 2010 to deploy an app to the cloud) worked first try, and pretty darn simply. The large multi-national company that I am currently working on a project for may never use a public cloud for their applications, but they are starting to use Verizon cloud services, and I have already talked to some people there about using the Azure app fabric in a corporate cloud and how it would change their IT and Development processes significantly. &lt;/P&gt;
&lt;P mce_keep="true"&gt;8. &lt;B&gt;Storage Class Memory&lt;/B&gt;:&lt;/P&gt;
&lt;P mce_keep="true"&gt;I would so love to buy an SSD drive for my laptop. That would be sweet. 'Nuff said.&lt;/P&gt;
&lt;P mce_keep="true"&gt;9. &lt;B&gt;Another Stage of Social Networking&lt;/B&gt;:&lt;/P&gt;
&lt;P mce_keep="true"&gt;I am a Facebook user. I probably browse it a dozen times a day. I don't post as much on a regular basis, but Facebook has changed the way I keep track of my friends and family and former schoolmates. &amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;10. &lt;B&gt;In Vehicle Experience will spark new dimension&lt;/B&gt;: &lt;/P&gt;
&lt;P mce_keep="true"&gt;I have a relatively new vehicle (2007), and I am guessing the next brand new vehicle I buy may not be for another 5 years or more. Since my last purchase, a number of technologies have become more common in vehicles: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;easily accessible auxiliary connections for MP3 players (mine has an "Aux" selection button on the&amp;nbsp;front&amp;nbsp;and the connections for it in the back)&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;GPS-assisted navigation/mapping (I use Microsoft Streets and Trips but the laptop is awkward and requires power bricks, etc). The built-in ones or the after-market ones are much more convenient. I remember travelling in the 90's in foreign cities in rental cars and being stressed about finding the hotel or the training center. GPS and Google/Bing Maps and MS Streets and Trips has tamed that stress.&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Bluetooth integration for mobile phones. I've seen this work, seems pretty nice. &lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Ford/Microsoft Sync - I haven't seen this first hand, but I suspect I would like it. &lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P mce_keep="true"&gt;11. &lt;B&gt;Learning Content&lt;/B&gt;:&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;I have recently taken several Microsoft exams, after a hiatus of several years. I can't believe how difficult it is to schedule these things. It is easier for me to schedule an exam when I am travelling for work in St. Louis than it is to take it in Winnipeg. Also, I can't quote my MCT number on the Prometric website to get my MCT exam discount when booking an exam. &lt;/P&gt;
&lt;P mce_keep="true"&gt;OK, I'm going to add one "pet peeve" of mine here, not as a prediction, but as a "I hope this gets better in 2011":&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;Managing usernames and passwords&lt;/STRONG&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;For all the things I do online or with my credit and debit cards electronically, I have a hard time managing my usernames and passwords and PINs. My recently replaced credit card now has a chip built in, and it required me to set a PIN (this is a step up from some previous cards that have *told me* the PIN to use). However, the PIN was limited to 5 digits, and my "normal" PIN that I use on other cards is 6 digits. Needless to say, I have had that card locked out and the PIN reset a number of times because I couldn't remember the PIN for it. And to access it online, I cannot use the card number for the account, the provider created me a new account number to use for web access. That's more secure, I suppose, but now I have to "write down" that account number somewhere, and I have an encrypted file that contains a bunch of those accounts and their passwords stored, hopefully securely. The list of those usernames/passwords is growing, and becoming more unmanageable for me every month it seems. &lt;/P&gt;
&lt;P mce_keep="true"&gt;However, the prospect of having "one key to rule them all" doesn't make me feel any better either. I don't know what the solution is here, but I hope this gets better for me in 2011. &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7671495" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/miked/archive/tags/2011+predictions+azure+facebook+xbox+kinect/default.aspx">2011 predictions azure facebook xbox kinect</category></item><item><title>Imaginet is hiring</title><link>http://weblogs.asp.net/miked/archive/2010/06/01/imaginet-is-hiring.aspx</link><pubDate>Tue, 01 Jun 2010 20:08:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7514074</guid><dc:creator>MikeD</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/miked/rsscomments.aspx?PostID=7514074</wfw:commentRss><comments>http://weblogs.asp.net/miked/archive/2010/06/01/imaginet-is-hiring.aspx#comments</comments><description>&lt;SPAN style="mso-ansi-language: EN-US" lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;We have an immediate need for new staff members!&amp;nbsp;&amp;nbsp;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: EN-US" lang=EN-US&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt; 
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN style="mso-ansi-language: EN-US" lang=EN-US&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: EN-US" lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Project Manager&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN style="mso-ansi-language: EN-US" lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: EN-US" lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Systems Analysts&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN style="mso-ansi-language: EN-US" lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: EN-US" lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Test Manager&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN style="mso-ansi-language: EN-US" lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: EN-US" lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Web Developer&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN style="mso-ansi-language: EN-US" lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: EN-US" lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Database Admin&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P mce_keep="true"&gt;Please contact me if you are interested.&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7514074" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/miked/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/miked/archive/tags/asp.net/default.aspx">asp.net</category><category domain="http://weblogs.asp.net/miked/archive/tags/Team+System/default.aspx">Team System</category><category domain="http://weblogs.asp.net/miked/archive/tags/Visual+Studio/default.aspx">Visual Studio</category></item><item><title>SQL Table stored as a Heap - the dangers within</title><link>http://weblogs.asp.net/miked/archive/2010/04/30/sql-table-stored-as-a-heap-the-dangers-within.aspx</link><pubDate>Fri, 30 Apr 2010 16:55:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7466322</guid><dc:creator>MikeD</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/miked/rsscomments.aspx?PostID=7466322</wfw:commentRss><comments>http://weblogs.asp.net/miked/archive/2010/04/30/sql-table-stored-as-a-heap-the-dangers-within.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;Nearly all of the time I create a table, I include a primary key, and often that PK is implemented as a clustered index. Those two don't always have to go together, but in my world they almost always do. &lt;/P&gt;
&lt;P mce_keep="true"&gt;On a recent project, I was working on a data warehouse and a set of SSIS packages to import data from an OLTP database into my data warehouse. The data I was importing from the business database into the warehouse was mostly new rows, sometimes updates to existing rows, and sometimes deletes. I decided to use the MERGE statement to implement the insert, update or delete in the data warehouse, I found it quite performant to have a stored procedure that extracted all the new, updated, and deleted rows from the source database and dump it into a working table in my data warehouse, then run a stored proc in the warehouse that was the MERGE statement that took the rows from the working table and updated the real fact table.&lt;/P&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Use&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Warehouse&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;CREATE&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;TABLE&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Integration.Merge&lt;/FONT&gt;&lt;FONT size=2&gt;Policy&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;PolicyId &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; PolicyTypeKey &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Premium &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;money&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Deductible &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;money&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; EffectiveDate &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;date&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Operation &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;varchar&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;5&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;))&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;CREATE&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;TABLE&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; fact&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;Policy&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;PolicyKey &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;identity&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;primary&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;key&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; PolicyId &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; PolicyTypeKey &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Premium &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;money&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Deductible &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;money&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; EffectiveDate &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;date&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;CREATE&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;PROC&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Integration&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;MergePolicy &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;as&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;begin&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;begin&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;tran&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Merge&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; fact&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;Policy &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;as&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; tgt&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Using&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Integration.Merge&lt;/FONT&gt;&lt;FONT size=2&gt;Policy &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;as&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Src&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;On &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;tgt&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;PolicyId &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Src&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;PolicyId&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;When&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;not&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;matched&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;by&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Target&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;then&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;BLOCKQUOTE style="MARGIN-RIGHT: 0px" dir=ltr&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Insert &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;PolicyId&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; PolicyTypeKey&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Premium&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Deductible&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; EffectiveDate&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;values &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;src&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;PolicyId&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; src&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;PolicyTypeKey&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; src&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;Premium&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; src&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;Deductible&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; src&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;EffectiveDate&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;When&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;matched&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;and&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; src&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;Operation &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;'U'&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;then&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Update&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;set&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;FONT size=2&gt;PolicyTypeKey &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; src&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;PolicyTypeKey&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;,&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;Premium &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; src&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;Premium&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;,&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;Deductible &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; src&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;Deductible&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;,&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;EffectiveDate &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; src&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;EffectiveDate&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;When&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;matched&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;and&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; src&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;Operation &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;'D'&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;then&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;BLOCKQUOTE&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Delete&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;delete&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;from&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Integration&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;WorkPolicy&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;commit&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;end&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;Notice that my worktable (Integration.MergePolicy) doesn't have any primary key or clustered index. I didn't think this would be a problem, since it was relatively small table and was empty after each time I ran the stored proc. &lt;/P&gt;
&lt;P&gt;For one of the work tables, during the initial loads of the warehouse, it was getting about 1.5 million rows inserted, processed, then deleted. Also, because of a bug in the extraction process, the same 1.5 million rows (plus a few hundred more each time) was getting inserted, processed, and deleted. This was being sone on a fairly hefty server that was otherwise unused, and no one was paying any attention&amp;nbsp;to the time it was taking. &lt;/P&gt;
&lt;P&gt;This week I received a backup of this database and loaded it on my laptop to troubleshoot the problem, and of course it took a good ten minutes or more to run the process. However, what seemed strange to me was that after I fixed the problem and happened to run the merge sproc when the work table was completely empty, it still took almost ten minutes to complete. &lt;/P&gt;
&lt;P&gt;I immediately looked back at the MERGE statement to see if I had some sort of outer join that meant it would be scanning the target table (which had about 2 million rows in it), then turned on the execution plan output to see what was happening under the hood. Running the stored procedure again took a long time, and the plan output didn't show me much - 55% on the MERGE statement, and 45% on the DELETE statement, and table scans on the work table in both places. I was surprised at the relative cost of the DELETE statement, because there were really 0 rows to delete, but I was expecting to see the table scans. &lt;/P&gt;
&lt;P&gt;(I was beginning now to suspect that my problem was because the work table was being stored as a heap.)&lt;/P&gt;
&lt;P&gt;Then I turned on STATS_IO and ran the sproc again. The output was quite interesting.&lt;/P&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 8pt; mso-no-proof: yes"&gt;Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 8pt; mso-no-proof: yes"&gt;Table 'Policy'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 8pt; mso-no-proof: yes"&gt;Table 'MergePolicy'. Scan count 1, logical reads &lt;SPAN style="BACKGROUND: yellow; mso-highlight: yellow"&gt;433276&lt;/SPAN&gt;, physical reads 60, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt; 
&lt;P&gt;I've reproduced the above&amp;nbsp;from memory, the details aren't exact, but the essential bit was the very high number of logical reads on the table stored as a heap. Even just doing a SELECT Count(*) from Integration.MergePolicy incurred that sort of output, even though the result was always 0. &lt;/P&gt;
&lt;P&gt;I suppose I should research more on the allocation and deallocation of pages&amp;nbsp;to tables stored as a heap, but I haven't, and my original assumption that a table stored as a heap with no rows would only need to read one page to answer any query was definitely proven wrong. It's likely that some sort of physical defragmentation of the table may have cleaned that up, but it seemed that the easiest answer was to put a clustered index on the table. &lt;/P&gt;
&lt;P&gt;After doing so, the execution plan showed a cluster index scan, and the IO stats showed only a single page read. (I&amp;nbsp;aborted my first attempt at adding a clustered index on the table because it was taking too long - instead I ran TRUNCATE TABLE Integration.MergePolicy first and added the clustered index, both of which took very little time).&lt;/P&gt;
&lt;P&gt;I suspect I may not have noticed this if I had used TRUNCATE TABLE Integration.MergePolicy instead of DELETE FROM Integration.MergePolicy, since I'm guessing that the truncate operation does some rather quick releasing of pages allocated to the heap table. &lt;/P&gt;
&lt;P&gt;In the future, I will likely be much more careful to have a clustered index on every table I use, even the working tables.&lt;/P&gt;
&lt;P&gt;Mike&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7466322" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/miked/archive/tags/Heap/default.aspx">Heap</category><category domain="http://weblogs.asp.net/miked/archive/tags/Merge/default.aspx">Merge</category><category domain="http://weblogs.asp.net/miked/archive/tags/SQL+Server/default.aspx">SQL Server</category></item><item><title>SSIS Bulk Insert task that bit me in the butt...</title><link>http://weblogs.asp.net/miked/archive/2009/10/02/ssis-bulk-insert-task-that-bit-me-in-the-butt.aspx</link><pubDate>Fri, 02 Oct 2009 17:22:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7221795</guid><dc:creator>MikeD</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/miked/rsscomments.aspx?PostID=7221795</wfw:commentRss><comments>http://weblogs.asp.net/miked/archive/2009/10/02/ssis-bulk-insert-task-that-bit-me-in-the-butt.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;I've been working on SSIS packages that extract data from production databases and put them into data warehouses, and recently I hit an issue using the Bulk Insert task that bit me real good.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;When you create a Bulk Insert task in the control flow of your package, the properties you generally edit are:&lt;/P&gt;
&lt;P mce_keep="true"&gt;1. The target connection (which references a connection manager)&lt;/P&gt;
&lt;P mce_keep="true"&gt;2. The target table &lt;/P&gt;
&lt;P mce_keep="true"&gt;3. The source file (which references a file-type connection manager).&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;I did that, ran the package in Visual Studio with my local file against a dev SQL database on a test server and it all worked just fine.&lt;/P&gt;
&lt;P mce_keep="true"&gt;I ran it again, and it failed, due to a primary key violation - so I needed to make the execution of the task conditional, so long as the table was empty, I would run the task, otherwise if it contained anything, I would skip the task. &lt;/P&gt;
&lt;P mce_keep="true"&gt;This was harder to do than I thought it would be. I started by creating a variable to hold the row count of the table, then an Execute Sql&amp;nbsp;Task to run a statement on the target table (select count(*) as RowCount from targetTable) and set the variable value to the column in the resultset of the statement. &lt;/P&gt;
&lt;P mce_keep="true"&gt;Now I go to look for an IF construct and there isn't any such thing. The closest was a For Next loop that I went down a rabbit-trail trying to use, and having it execute only zero or once, and I couldn't get that to work. Is there magic between the @variable syntax in the initialize, condition, and iteration expressions and the package user:variable declarations that make those work together?&amp;nbsp;I still don't know the answer to that. &lt;/P&gt;
&lt;P mce_keep="true"&gt;Then I thought of using the Expression on the dependency arrow&amp;nbsp;from the task that got the row count from the target table. So I joined the Row Count&amp;nbsp;task to the Bulk Insert task using the green arrow, then edited the dependency to be dependent both on Success of the row count task and the value of the user:rowCount variable I had created. That worked. &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;Believe it or not, that isn't really what bit me in the butt. &lt;/P&gt;
&lt;P mce_keep="true"&gt;Now I had a package that I could execute multiple times and it would work properly. My buddy Jeremy would say that it is "idempotent". &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;What bit me was when I went to execute the package in another environment. &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;I moved the .dtsx file to a test server and used the Execute Package Utility. I set the values for the connection managers in the package to the new server connections (and the new location of the bulk copy file), and ran the package, and it worked. &lt;/P&gt;
&lt;P mce_keep="true"&gt;Just to make sure it was "idempotent", I ran it again. &lt;/P&gt;
&lt;P mce_keep="true"&gt;It failed this time. &lt;/P&gt;
&lt;P mce_keep="true"&gt;Another PK violation. Why? &lt;/P&gt;
&lt;P mce_keep="true"&gt;It took me a while to find the problem. Eventually it came down to the target table property of the Bulk Insert Task - the value of this property was not just a two part table name, but it also included the database name.&lt;/P&gt;
&lt;P mce_keep="true"&gt;It just so happened that the database I was testing with from my Visual Studio is on the same server as when I was testing with the Execute Package utility. &lt;/P&gt;
&lt;P mce_keep="true"&gt;So, the first time I ran it with the Execute Package utility with the modified connection manager settings, it was querying the *real* target database for the number of rows, and getting back 0. Then it executed the bulk insert task into the *original* database I was testing with on the server (that I happened to clear out the rows from the table), and the bulk insert worked. The second time, the number of rows was still 0, and it tried to do the bulk insert into the same database, despite the fact that the connection manager was pointing to a different database. &lt;/P&gt;
&lt;P mce_keep="true"&gt;I can understand why this was done this way, since when you use the bcp command line utility, you need to database-qualify the table you are moving data into, because bcp doesn't specify the database otherwise. But the Bulk Insert task was using the T-SQL statement BULK INSERT which is already database specific, so you don't generally qualify the table name with the database. With the whole database name in the target table property, the task isn't very responsive to changes to the connection manager at runtime. &lt;/P&gt;
&lt;P mce_keep="true"&gt;Here is how I fixed it, and it's a HACK. &lt;/P&gt;
&lt;P mce_keep="true"&gt;You can't just free-form enter the table name in the Bulk Insert task, it only allows you to pick from the list, which is based off the source connection you specify. So, in the Expressions tab of the Bulk Insert task, I used an expression to set the source table property to the non-database-qualified name of the table. It's kinda hidden, and it now overrides whatever table you select from the drop down later, and you wouldn't know it. &lt;/P&gt;
&lt;P mce_keep="true"&gt;I hope that the SSIS Bulk Insert task gets fixed so it doesn't include the database name in the target table; it isn't needed, and it gets in the way of runtime changes to the target connection.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Mike&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7221795" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/miked/archive/tags/Integration+Services/default.aspx">Integration Services</category><category domain="http://weblogs.asp.net/miked/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://weblogs.asp.net/miked/archive/tags/SSIS/default.aspx">SSIS</category></item><item><title>SQL Database diagramming and VSTS Data Dude</title><link>http://weblogs.asp.net/miked/archive/2009/07/28/sql-database-diagramming-and-vsts-data-dude.aspx</link><pubDate>Wed, 29 Jul 2009 00:14:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7156240</guid><dc:creator>MikeD</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/miked/rsscomments.aspx?PostID=7156240</wfw:commentRss><comments>http://weblogs.asp.net/miked/archive/2009/07/28/sql-database-diagramming-and-vsts-data-dude.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;At Imaginet, we use Visual Studio Team Edition for Database Professionals (Data Dude) on our projects to manage database schemas, keep them in source control, unit testing, and lots of other nice features. &lt;/P&gt;
&lt;P mce_keep="true"&gt;But it doesn't do database models well. Or at all, for that matter. I really would like the Database Diagramming tool in SQL Management Studio and Visual Studio to be able to go against a database project. But no, it can only go against an actual database.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Here is what we do to be able to model our tables and relationships with the diagramming tool and still use Data Dude. &lt;/P&gt;
&lt;P mce_keep="true"&gt;For every project, we have a number of database "instances" - usually named after the project (I'll use the name Northwind from here on) with a suffix for the "environment", such as Northwind_Dev and Northwind_Test. &lt;/P&gt;
&lt;P mce_keep="true"&gt;We also have another called Northwind_Schema, which is considered the "gold" standard for the schema of the project database. I'll start by creating that schema database and create tables in it using the database diagramming tool in SSMS. I can fairly quickly create a number of tables, and have a diagram for each subject area of the data. It also means my documentation is getting built at the same time as my database (in my world, the diagram forms the large part of the required database documentation). And these diagrams, like Xml comments in C# or VB, are also very close to "the code", and will keep current with the state of the schema database. Models created in other tools then exported to a database are very hard to keep accurate in the long run. When it comes time to snapshot the documentation for the database, we can fairly quickly embed pictures of the database models in Word or OneNote or some other documentation tool.&lt;/P&gt;
&lt;P mce_keep="true"&gt;At the same time as I am modelling the database in Northwind_Schema, I create a database project in Visual Studio called Northwind. If I have the Northwind_Schema database in a state that I like (for first draft), I will use the Import Schema from Database wizard when creating the new database project. Otherwise, I'll just create an empty database project. &lt;/P&gt;
&lt;P mce_keep="true"&gt;When I am happy with Northwind_Schema, I use a Schema Comparison to compare the Northwind_Schema database to the Northwind database project. I will update the database project with the changes that are in Northwind_Schema, then run any local tests against the database project before checking in. &lt;/P&gt;
&lt;P mce_keep="true"&gt;Upon checkin, we have Team System automatically build the database and deploy it to Northwind_Dev, which is available for any developers on the project to use as they code other areas of the project. In the project I am working on now, we use LINQ and CSLA-based entities for our data access layer, so I will keep our LINQ model synchronized with the database project as well (usually by dragging tables onto the LINQ designer surface from the Northwind_Schema database). &lt;/P&gt;
&lt;P mce_keep="true"&gt;If we ever lose Northwind_Schema, it is easy to rebuild it from the database project, because the database project in source control is "more true" than the Northwind_Schema instance. (However, we can lose the diagrams by rebuilding Northwind_Schema).&lt;/P&gt;
&lt;P mce_keep="true"&gt;As I said above, I would actually prefer to do my diagramming in Visual Studio, against a database project rather than a database, and in that way I could also keep the diagrams in source control. But with the Northwind_Schema database, I can model new subject areas or do fairly major refactoring prior to checking out the database project files. &lt;/P&gt;
&lt;P mce_keep="true"&gt;In my next post, I'll talk about how we build and manage stored procedures in project databases.&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7156240" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/miked/archive/tags/Data+Dude/default.aspx">Data Dude</category><category domain="http://weblogs.asp.net/miked/archive/tags/Imaginet/default.aspx">Imaginet</category><category domain="http://weblogs.asp.net/miked/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://weblogs.asp.net/miked/archive/tags/Visual+Studio/default.aspx">Visual Studio</category></item><item><title>MS BI Conference: Monday Keynote</title><link>http://weblogs.asp.net/miked/archive/2008/10/06/ms-bi-conference-monday-keynote.aspx</link><pubDate>Tue, 07 Oct 2008 01:31:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6660629</guid><dc:creator>MikeD</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/miked/rsscomments.aspx?PostID=6660629</wfw:commentRss><comments>http://weblogs.asp.net/miked/archive/2008/10/06/ms-bi-conference-monday-keynote.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;Here are my notes on the Monday morning keynote:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;About 3000 attendees at the conference, over 60 countries represented. &lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;There is BI in Halo3: whenever you look at competitor stats or weapon effectiveness, this is implemented using BI tech&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P mce_keep="true"&gt;Madison - MS has acquired DATAllegro, a company that was accomplishing low TCO MPP (massively parallel processing) scale out of BI. Using standard enterprise servers, you can process queries on very large data warehouse databases very quickly. They demonstrated a hardware setup of a MPP cluster: one control node, 24 compute nodes, and at least as many storage nodes (ie. shared disks). They loaded 1 trillion (yes trillion) rows in the fact table, and a bunch of dimension tables, such that the data warehouse contained over 150 TeraBytes of data. Then they sliced the fact table up onto the 24 SQL instances on the compute nodes (each compute node then had 1/24 of the trillion rows) and replicated the dimension tables to all compute nodes. Using SQL 2008 (and its new star join optimization) they then issued a query on the fact table and the related dimension tables to the cluster, where the control node passed the query along to the compute nodes, they each processed it, and returned the results back to the client. &lt;/P&gt;
&lt;P mce_keep="true"&gt;On one screen they had Reporting Services (the client app) and on another, a graphic display of the CPU and disk stats for the control node and all 24 compute nodes, each node having 8 CPUs. When the Report was being displayed, the query got processed, and you could see the CPU usage go up on many of the nodes, then disk usage on each of the nodes, then the activity would subside and the reporting view would then display the results. It was all done in under 10 seconds. It was truly impressive. Now, that was with essentially read only data, so you could probably "roll your own" MPP system, given the time and hardware. It's not a huge technical problem to scale out read-only data. If they could show the same demonstration except with a SSIS package *loading* a trillion rows into the cluster, that would have been astounding - it's a much different and more difficult problem. Still, I was impressed.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Gemini - this is "BI Self Service" - the first evidence of this is an Excel addin that the always-entertaining Donald Farmer demonstrated. He used the addin to connect to a data warehouse and in a spreadsheet showed 20 million rows. We didn't *see* all 20 million rows, but he did sort it in under a second, and then filtered it (to UK sales only, about 1.5 million rows) in under a second. That performance and capacity was on what he said was a &amp;lt;$1000 computer with 8 GB RAM, similar to what he purchased for home a few weeks ago. &lt;/P&gt;
&lt;P mce_keep="true"&gt;Aside from the jaw-dropping performance, he used the addin to dynamically link the data from analysis services with another spreadsheet of user-supplied data (I think it was "industry standard salary" or something). The add-in was able to build a star-schema in the background automatically and then make it available in the views they wanted in Excel&amp;nbsp; ( a graph or something? I can't remember). So it was showing the fact that sometimes the data warehouse doesn't have all the data needed for users to make decisions, so they got the data themselves, rather than wait for IT to get it in the DW. Ok, cool. So then he published that view into Sharepoint using Excel services, and the user-supplied data went along with it. So centrally publishing that view means it can be utilized by others in the enterprise, rather than sharing via email or a file share or something. &lt;/P&gt;
&lt;P mce_keep="true"&gt;From the IT perspective, he showed a management view (dashboard) in SharePoint showing usage stats of "Sandboxes" (the thing they are&amp;nbsp;currently calling these publications) and they could see how popular this particular sandbox was, and then take steps to formalize it into the enterprise. The tantalizing link on that web page was "Convert to Performance Point" - the idea was that you could take the sandbox view and convert it into a PPS web part. That looked cool too. &lt;/P&gt;
&lt;P mce_keep="true"&gt;So Gemini looks very interesting. &lt;/P&gt;
&lt;P mce_keep="true"&gt;Timeframes: the next major release of SQL will be 24-36 months from release of SQL 2008, but in the meantime, there are a number of releases coming: Madison and Gemini will be coming in the first half of 2010, and CTP's will be available sometime early next year. There are some incremental releases of Analysis Services, Integration Services and Reporting Services coming - the next gen of Reporting Services in particular will become available in a Feature Pack "real soon now". &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6660629" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/miked/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/miked/archive/tags/SQL+Server/default.aspx">SQL Server</category></item><item><title>MS BI Conference 2008 - First Impressions</title><link>http://weblogs.asp.net/miked/archive/2008/10/06/ms-bi-conference-2008-monday-keynote.aspx</link><pubDate>Mon, 06 Oct 2008 21:24:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6659724</guid><dc:creator>MikeD</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/miked/rsscomments.aspx?PostID=6659724</wfw:commentRss><comments>http://weblogs.asp.net/miked/archive/2008/10/06/ms-bi-conference-2008-monday-keynote.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;It has been over a year since I last blogged, but I want to restart with some posts about the BI Conference I am attending this week. &lt;/P&gt;
&lt;P mce_keep="true"&gt;Chris and I flew to Vancouver yesterday and drove down to Seattle in a Camry Hybrid. Sitting in the lineup at the US border for an hour drained the batteries on the Camry so it had to restart the engine to recharge a couple of times, for about 10 minutes each time. Seemed odd to discharge so much battery just sitting in a lineup and moving 10 feet every five minutes. Anyway...the trip display shows that our fuel efficiency was under 8 liters/100km on the trip down. That also seems a little poor compared to my Golf TDI that gets 4.5 liters/100 km regularly. &lt;/P&gt;
&lt;P mce_keep="true"&gt;We registered last night and wandered the Company Store for a bit - saw uber-geek stuff there and we thought of getting something for Cam, our uber-geek on the team at Imaginet. The conference package was predictable: a nice back-pack, a water bottle, a pen, a 2 GB USB stick, a SQL Server magazine, not as many sales brochures as last year, and a conference guidebook. &lt;/P&gt;
&lt;P mce_keep="true"&gt;Last year's guide book was a small coil bound notebook with a section of blank pages at the end for taking notes. This year's edition has the same content - a description of all the sessions and keynotes and speakers, as well as sponsor ads, but it is missing the note-taking section. I really liked that section last year, so today I found myself scribbling notes on loose paper, and running out. I specifically left my (paper) notebook at home because I liked the smaller conference book instead, but now I am going back to the Company Store to buy a small notebook for the rest of the sessions. &lt;/P&gt;
&lt;P mce_keep="true"&gt;The conference is trying to be more environmentally friendly - in the backpack was a water bottle and they encouraged you to refill that at the water stations rather than having bottled water. That's cool. For me, I would have preferred a coffee mug, since I had three cups of coffee over the day (in paper cups, and no plastic lids). In a strange twist, the breakfast and lunch dishes were on paper plates and not the real dishes like last year - one step forward, two steps back I guess. I can't figure it out. &lt;/P&gt;
&lt;P mce_keep="true"&gt;In the main hall before the keynote address, there was an live band playing 80's hits. They were pretty good, but it seemed odd to have a bouncy energetic group on stage at 8:30 on a Monday morning, everyone was filing in and sitting down, morning coffee still just starting to kick in. The bass player was one or two steps beyond bouncy-happy. It reminded me of someone on a Japanese game show. &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6659724" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/miked/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/miked/archive/tags/Business+Intelligence/default.aspx">Business Intelligence</category></item><item><title>How to rename a Build Type in Team System (and a suggested naming convention)</title><link>http://weblogs.asp.net/miked/archive/2007/05/24/how-to-rename-a-build-type-in-team-system-and-a-suggested-naming-convention.aspx</link><pubDate>Thu, 24 May 2007 14:33:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:2650867</guid><dc:creator>MikeD</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/miked/rsscomments.aspx?PostID=2650867</wfw:commentRss><comments>http://weblogs.asp.net/miked/archive/2007/05/24/how-to-rename-a-build-type-in-team-system-and-a-suggested-naming-convention.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;I suppose this might be in the manual, but...&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;If you want to rename a Build Type that you have created in a Team System Project, you need to open the Source Control Explorer window, dig down into the TeamBuildTypes folder under the project, and rename the folder that corresponds to the build type you want to change. After you check in that change, refresh the Team Builds folder in Team Explorer and you'll see your newly named Build Type. &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;Remember to change any scheduled tasks you may have created to run your builds automatically. &lt;/P&gt;
&lt;P mce_keep="true"&gt;One more thing about naming Build Types - because we like to have an email sent out to the team members after a build, we have found that a naming convention for the build types helps make it easier to easily recognize and organize the build notifications. We use a standard that includes the environment, the Team Project name, and the sub-solution as the name of the build. So we have build names like&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;DEV Slam Customer Website - This builds the CustomerWebsite.Sln in the $\Slam\DEV branch.&lt;/P&gt;
&lt;P mce_keep="true"&gt;QA Slam Customer Website - This builds the CustomerWebsite.Sln in the $\Slam\QA branch.&lt;/P&gt;
&lt;P mce_keep="true"&gt;DEV Slam Monitor Service - This builds the MonitorService.Sln in the $\Slam\DEV branch.&lt;/P&gt;
&lt;P mce_keep="true"&gt;QA Slam Monitor Service&amp;nbsp; - This builds the MonitorService.Sln in the $\Slam\QA branch.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;Having the project name in the build type helps because if you are a subscriber of lots of different builds for different projects, you cannot tell by looking at the email (other than this naming convention) which project the build is from. &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=2650867" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/miked/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/miked/archive/tags/Team+System/default.aspx">Team System</category></item><item><title>MS BI Conference 14: Evening Reception</title><link>http://weblogs.asp.net/miked/archive/2007/05/10/ms-bi-conference-14-evening-reception.aspx</link><pubDate>Fri, 11 May 2007 04:26:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:2545995</guid><dc:creator>MikeD</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/miked/rsscomments.aspx?PostID=2545995</wfw:commentRss><comments>http://weblogs.asp.net/miked/archive/2007/05/10/ms-bi-conference-14-evening-reception.aspx#comments</comments><description>&lt;p&gt;The evening reception was at the Experience Music Project/SciFi Museum Hall of Fame. Gary and I walked through the SciFi Museum. It was really great, lots of memorabilia from all the TV series, movies, as well as books, comics, magazines, scripts, photos, videos. Really cool. The only underrepresentaed Sci Fi series was Dr. Who - I saw one thing from that, the &amp;quot;Fun Gun&amp;quot;. No Daleks. Gary has read a lot of sci-fi I found out. &lt;/p&gt;&lt;p&gt;&amp;nbsp;I thot it was going to be a banquet and awards ceremony - they had awards, but it was more like a standup reception. No tables except in a tent outside. It was pretty stuffy inside, so I hung out with Gary in the fresh air (well, he was smoking, and so was a lot of others around me, but for the most part it was fresh air). &lt;/p&gt;&lt;p&gt;It would have been a great night to have my wife along - she would have loved the sci-fi museum (and the Experience Music Project, very little of which I saw), and she would have been a classy-looking woman to have with me too. We&amp;#39;ll come see this place another time. &lt;/p&gt;&lt;p&gt;Tomorrow morning keynote is Steve Ballmer. Somehow the chant &amp;quot;Business Intelligence, Business Intelligence, Business Intelligence&amp;quot; or &amp;quot;Information worker, information worker, information worker&amp;quot; doesn&amp;#39;t really roll off the tongue. What will be his hook tomorrow?&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=2545995" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/miked/archive/tags/.NET/default.aspx">.NET</category></item><item><title>MS BI Conference 13: BI Power Hour</title><link>http://weblogs.asp.net/miked/archive/2007/05/10/ms-bi-conference-13-bi-power-hour.aspx</link><pubDate>Fri, 11 May 2007 00:33:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:2542734</guid><dc:creator>MikeD</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/miked/rsscomments.aspx?PostID=2542734</wfw:commentRss><comments>http://weblogs.asp.net/miked/archive/2007/05/10/ms-bi-conference-13-bi-power-hour.aspx#comments</comments><description>&lt;p&gt;Apparently the Power Hour has been something that has been happening at TechEd in past years. I vaguely recall seeing something about it once. &lt;/p&gt;&lt;p&gt;This was a great session - two slides in total I think. All demos, and the demos were different - kinda crazy, but still educational. Lots of free stuff thrown into the crowd. I got something for my daughter. &lt;/p&gt;&lt;p&gt;1st demo - Magic 8-ball vs Data Mining Neural Net algorithm. &lt;/p&gt;&lt;p&gt;In an Integration package, the guy took a table of customer demographics, and ran it in parallel through two different algorithms to predict whether the customer was a homeowner or not. One algorithm was a DM NeuralNet algorithm, the second was a Script that launched the Magic 8-ball window. Looking at the results, the 8-ball didn&amp;#39;t do too badly. The demo was interesting in that it showed you could solicit feedback from the user who was executing it (the 8-ball was in a Windows Form, created on the fly in the package).&lt;/p&gt;&lt;p&gt;2nd Demo - by Hitachi Consulting, he demoed an implementation of Analytics for mobile devices. The framework they built helped push out reports, alerts, forms, to a mobile device. They used MS Communication Server to send an SMS text message to the phone, and when the phone received the text message, it used web services to pull back the content (alert, report, form, etc). So he sent out a &amp;quot;Price Change&amp;quot; alert. An RMA authorization form. A Sales report. He said they also had a method to ping the phone and tell it to erase all its content, in case it got lost or stolen. Very cool. &lt;/p&gt;&lt;p&gt;3rd demo - the guy said he wanted to find the geekiest thing to do with Integration Services. He took two sets of a million random numbers between 0 and 1, and through selection of them and applying an algorithm, he basically calculated the value of PI. He didn&amp;#39;t tell us what it was until at the end it became obvious. Terribly geeky. &lt;/p&gt;&lt;p&gt;&amp;nbsp;4th demo - The guy had built a custom reporting services item, which took in a dataset (a summary of sales amounts for three sales reps in three categories), then was an interactive KPI mechanism for displaying the data. It presented the categories and reps in a 3x3 matrix, with a green and red button in the corner of each cell. If you decided the amount was good, you clicked in the red button and the cell got an X. If you thot it was a good amount, you clicked the green button, and the cell got a green O. (Get it? X&amp;#39;s and O&amp;#39;s in a 3x3 matrix?)&lt;/p&gt;&lt;p&gt;Last demo - Using Performance Point Server, they showed a web page with ten suitcases on it, and they invited someone to come up and play Deal or No Deal. She won $10 (in play money I think). Her highest offer was nearly $485,000. &lt;/p&gt;&lt;p&gt;Between each demo they threw out schwag, like t-shirts and hats and stuff.&lt;/p&gt;&lt;p&gt;We should definitely try this the next demo we do at Imaginet. &lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=2542734" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/miked/archive/tags/.NET/default.aspx">.NET</category></item><item><title>MS BI Conference 12: MOSS 2007</title><link>http://weblogs.asp.net/miked/archive/2007/05/10/ms-bi-conference-12-moss-2007.aspx</link><pubDate>Fri, 11 May 2007 00:21:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:2542424</guid><dc:creator>MikeD</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/miked/rsscomments.aspx?PostID=2542424</wfw:commentRss><comments>http://weblogs.asp.net/miked/archive/2007/05/10/ms-bi-conference-12-moss-2007.aspx#comments</comments><description>&lt;p&gt;A rolling stone grows no MOSS. &lt;/p&gt;&lt;p&gt;This guy was very MOSSy, because he didn&amp;#39;t roll very much. I was nodding off in this session because the presenter wasn&amp;#39;t very passionate, or funny, or showing me anything that hadn&amp;#39;t already been shown in the keynotes, or at the MSDN tour in December. &lt;/p&gt;&lt;p&gt;(Microsoft Office SharePoint Server, btw). &lt;/p&gt;&lt;p&gt;Cool thing about SQL Server 2005 SP2 is that it adds much better integration of SS Reporting Services into MOSS, it contains the reports repository and the published reports become a document library, with much better web parts for integrating into Sharepoint. &lt;/p&gt;&lt;p&gt;I snoozed a little during this session. Good thing I did, because I was really glad I was awake for the next session. &lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=2542424" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/miked/archive/tags/.NET/default.aspx">.NET</category></item><item><title>MS BI Conference 11: chalk talk on MDX</title><link>http://weblogs.asp.net/miked/archive/2007/05/10/ms-bi-conference-11-chalk-talk-on-mdx.aspx</link><pubDate>Thu, 10 May 2007 21:11:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:2541322</guid><dc:creator>MikeD</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/miked/rsscomments.aspx?PostID=2541322</wfw:commentRss><comments>http://weblogs.asp.net/miked/archive/2007/05/10/ms-bi-conference-11-chalk-talk-on-mdx.aspx#comments</comments><description>&lt;p&gt;Two thumbs down. &lt;/p&gt;&lt;p&gt;Well, it probably was a great session, but I got there five minutes early, and already there was 30 people waiting outside the &amp;quot;room&amp;quot; it was in. So I went for lunch instead.&lt;/p&gt;&lt;p&gt;Chalk talks are the 2nd or 3rd class citizens in the sessions here at the conference, but they have the potential to be the most valuable. At least from my perspective. These sessions are real world, not lovey-dovey like the main sessions. &lt;/p&gt;&lt;p&gt;Microsoft, the chalk talks deserve a 1st-class upgrade. Please, I&amp;#39;m begging you.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=2541322" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/miked/archive/tags/.NET/default.aspx">.NET</category></item><item><title>MS BI conference 10: ProClarity</title><link>http://weblogs.asp.net/miked/archive/2007/05/10/ms-bi-conference-10-proclarity.aspx</link><pubDate>Thu, 10 May 2007 21:03:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:2541312</guid><dc:creator>MikeD</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/miked/rsscomments.aspx?PostID=2541312</wfw:commentRss><comments>http://weblogs.asp.net/miked/archive/2007/05/10/ms-bi-conference-10-proclarity.aspx#comments</comments><description>&lt;p&gt;A woman who was formerly from ProClarity, now a product manager in the Performance Point Server group, presented this session on ProClarity. &lt;/p&gt;&lt;p&gt;&amp;quot;Interface to insight&amp;quot; - answering the WHY? in BI.&lt;/p&gt;&lt;p&gt;Tools for decision makers to explore large amounts of data and get rapid insight. &lt;/p&gt;&lt;p&gt;Simple data navigation, powerful calculations, and advanced visualizations of data.&lt;/p&gt;&lt;p&gt;Reports tell you what happened. Dashboards tell you what is happening now, and ProClarity Analytics helps understand Why it is happening.&lt;/p&gt;&lt;p&gt;ProClarity Analytics Server (PAS) is an IIS App. There is also a SQL database of business metadata. The clients are thin-client web-based, thick client web-based (ActiveX control), and Windows-based thick client. &lt;/p&gt;&lt;p&gt;This product, to me, addresses a lot of the &amp;quot;last mile&amp;quot; gap between SQL Server Analysis Services cubes and stuff, and the user. &lt;/p&gt;&lt;p&gt;the KPI builder helps make calculated measures with no MDX at all, easily, and publish to the PAS. &lt;/p&gt;&lt;p&gt;Advanced visualizations: heat map, like spaceMonger, shows boxes stacked together, with the size indicating one measure (sales amount), and the colour indicating another KPI (profit margin, good/warning/bad).&lt;/p&gt;&lt;p&gt;Decomposition tree - view a measure, break it down by category, then by another dimension, and so on. Hard to describe, cool to see.&lt;/p&gt;&lt;p&gt;She was great - perfect balance of architecture slides to show how the thing fits together, with lots of demo time with the product itself. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=2541312" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/miked/archive/tags/.NET/default.aspx">.NET</category></item><item><title>MS BI Conference 9: Thursday keynote</title><link>http://weblogs.asp.net/miked/archive/2007/05/10/ms-bi-conference-9-thursday-keynote.aspx</link><pubDate>Thu, 10 May 2007 20:34:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:2541293</guid><dc:creator>MikeD</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/miked/rsscomments.aspx?PostID=2541293</wfw:commentRss><comments>http://weblogs.asp.net/miked/archive/2007/05/10/ms-bi-conference-9-thursday-keynote.aspx#comments</comments><description>&lt;p&gt;This morning&amp;#39;s first keynote had content about Katmai, the next release of SQL Server. (there was other stuff before that, about the BI platform and pervasiveness and yadda yadda.)&lt;/p&gt;&lt;p&gt;SQL&amp;nbsp;2005 SP2 includes stuff for Excel for data mining. This tool takes an ordinary spreadsheet and applies a data mining algorithm to it, such as categorization. It submits the data to SSAS, builds a mining model, trains it with the data, and adds the results of the mining as a new column in the spreadsheet. All without the user needing to know anything about mining, other than what kind of scenario they want. &lt;/p&gt;&lt;p&gt;I remember seeing this in yesterday&amp;#39;s keynote, where a tall, blonde, smart woman (she may have been from Canada, I saw her at the MS Canada thing at Fox Sports Bar last night) demoed a scenario. She took a table in Excel which was a list of prospects and their demographics. Someone who generated the list had started ranking the prospects, but we didn&amp;#39;t know how he decided their ranking. he had maybe 10% of the rows ranked. She took those rows as an example, submitted it for data mining, then it determined the rest of the rankings for the other rows, based on the example rankings. Very cool.&lt;/p&gt;&lt;p&gt;This morning&amp;#39;s demo showed another bunch of marketing prospects and their demographics. He submitted them for mining, asking it to categorize them into three groups. Group 1&amp;#39;s demographics suggested that they were good prospects for SUV&amp;#39;s (#children, age, income). Group 2&amp;#39;s demos was more &amp;quot;poor student&amp;quot; starter vehicle types, and the third group was good for selling bicycles to. &lt;/p&gt;&lt;p&gt;The coolest thing I thot was that this used the data mining engine in SSAS without needing a cube or anything, it left the spreadsheet as a plain spreadsheet, and the user didn&amp;#39;t need to understand all the data mining stuff to do it.&lt;/p&gt;&lt;p&gt;Katmai will be shipped in 2008. He didn&amp;#39;t say WHEN. &lt;/p&gt;&lt;p&gt;Some new datatypes natively supported - filestream, spatial coordinates, new date/times. It will include an Entity Data platform in .NET managed types, and LINQ of course. It&amp;#39;ll support the occassionally-connected database (like mobile databases) and handle the synch stuff better.&lt;/p&gt;&lt;p&gt;Microsoft bought OfficeWriter from Artisan, which is a set of tools that lets users author reports in Excel or Word, using the features of Word/Excel, and then publish the report to Reporting Services. Very nice. It was a &amp;quot;whyt didn&amp;#39;t I think of that!&amp;quot; moment. Seemed simple enough to do. &lt;/p&gt;&lt;p&gt;The spatial datatypes will be supported in the query optimizer and the indexes, so you can do geographical queries very quickly. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Dr. Robert Kaplan, Harvard Business School, creator of the Balanced Score Card methodologies.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Balanced score cards help business determine/measure their performance on more than just financial metrics. It helps to measure the more intangible assets, like quality, customer relationships, employee skills. &lt;/p&gt;&lt;p&gt;There is a BSC for non-profit organizations too, which adds the mission perspective (how do we have an impact?)and support perspective (how do we attract resources and support for our mission?).&lt;/p&gt;&lt;p&gt;Most organizations do not know how to execute a strategy.&lt;/p&gt;&lt;p&gt;Principles: &lt;/p&gt;&lt;p&gt;1. Mobilize change through executive leadership. &lt;/p&gt;&lt;p&gt;2. Translate strategy to operational terms.&lt;/p&gt;&lt;p&gt;3. Align the organization to the strategy.&lt;/p&gt;&lt;p&gt;4. Motivate to make the strategy everyone&amp;#39;s job.&lt;/p&gt;&lt;p&gt;5. Govern to make strategy a central process.&lt;/p&gt;&lt;p&gt;Mission - why we exist&lt;/p&gt;&lt;p&gt;Values - what is important to us&lt;/p&gt;&lt;p&gt;Vision - what we want to be&lt;/p&gt;&lt;p&gt;Strategy - our game plan.&lt;/p&gt;&lt;p&gt;Usually there is a gap from the Strategy to operations. We need to link the strategy to the operations (and it is a two-way street). the balanced scorecard and the strategy map are ways to bridge the gap.&lt;/p&gt;&lt;p&gt;Not all loyal customers are profitable. With time-driven, activity-based costing, you determine the actual cost of your customers. 20% of most-profitable customers generate 180% of the profit, and 20% least-profitable customers lost 80% of the profit. &lt;/p&gt;&lt;p&gt;Strategy map has perspectives: Financial, Customer, Process, Learning. &lt;/p&gt;&lt;p&gt;Motivate so strategy is everyone&amp;#39;s job. &lt;/p&gt;&lt;p&gt;CEO walkthrough with strategy map - asks a random employee, what is this? (should identify the strategy map - if not, it indicates a problem with that employee&amp;#39;s *supervisor*). Can you explain it to me? &lt;strong&gt;Sorry I interrupted your work. How does what you were just doing link to the strategy map?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Communicate the strategy seven times, in seven ways. Brand the strategy! &lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=2541293" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/miked/archive/tags/.NET/default.aspx">.NET</category></item><item><title>MS BI Conference 7: Wednesday evening</title><link>http://weblogs.asp.net/miked/archive/2007/05/10/ms-bi-conference-7-wednesday-evening.aspx</link><pubDate>Thu, 10 May 2007 06:26:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:2537226</guid><dc:creator>MikeD</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/miked/rsscomments.aspx?PostID=2537226</wfw:commentRss><comments>http://weblogs.asp.net/miked/archive/2007/05/10/ms-bi-conference-7-wednesday-evening.aspx#comments</comments><description>&lt;p&gt;The evening was the Partner Pavillion Expo reception. Open bar and light supper and you wander around the booths. Microsoft has areas where you can talk with the product managers. They have tables marked &amp;quot;Reporting and Analysis&amp;quot;, &amp;quot;Integration and Data Warehousing&amp;quot;, &amp;quot;Database engine&amp;quot;, &amp;quot;ProClarity&amp;quot;, &amp;quot;Performance Point Server&amp;quot;, yadda yadda yadda. I wanted to talk to some of them from the Analysis Services team, to&amp;nbsp;talk about the mutli-developer scenarios that I had been going through with my customer, and some of the problems I have had with team development in Analysis services. But I couldn&amp;#39;t tell which guys were the SSAS ones, which MS people were just wandering around themselves, and I&amp;#39;m not great at starting up conversations with people I don&amp;#39;t know anyway. And I wasnt&amp;#39; with anyone who would help bolster my courage. So I wandered around the tables, looking like I wanted to talk to someone if only they would come up to me and introduce themselves. It sounds stupid I know.&lt;/p&gt;&lt;p&gt;I decided to go back to the hotel at that point, and chat with my DW for a while, and my boss was asking me about the day too. MS Canada was hosting a party at the Fox Sports Bar a block away this evening, and Gary, the sales guy from Imaginet who is also here, said he was going to go, so I headed down there about 9. &lt;/p&gt;&lt;p&gt;I guess MS Canada just had an area of the bar, because there was still other &amp;quot;non-geek&amp;quot; types there - as evidenced by their lack of conference lanyards. It wasn&amp;#39;t immediately obvious which area was the MS Canada reception, but there was a busy corner so I went over there, looking for Gary. It soon became apparent that Gary wasnt&amp;#39; there, and there was no one there I knew. Ramon, a manager at Imaginet, and former MS Canada guy, had sent me some contact info for the MS Canada BI tech lead, whose name I have since forgotten, so he was hoping I would connect with him and introduce myself. The bar was fairly loud, I didn&amp;#39;t really know anyone, and pretty much everyone was already chatting amongst themselves, so I&amp;#39;m not one to stand at the edge of a group and horn in. Or go up to a complete stranger and introduce myself. If Ramon had been there, he would have known probably 75% of the people there, and he probably would have introduced me (actually, he would have &amp;quot;talked me up&amp;quot;) to anyone that mattered. His reasons to go to a conference like this (and Gary&amp;#39;s reasons too I bet) would be quite different than mine. He would have gone to network, to make contacts, to find business, and to come home with $150k worth of leads. &lt;/p&gt;&lt;p&gt;Me, I come to these things to soak up the knowledge. To find the best sessions and learn stuff I don&amp;#39;t know. I don&amp;#39;t really like the vendor booths because I don&amp;#39;t much like the sales pitch. I do try to think about how I would apply the things I am learning within Imaginet, or with my customers and on future projects. But I don&amp;#39;t really think &amp;quot;hey, if we took that idea to Customer X, we might get $50k of work out of it&amp;quot;. I suppose I should. My value equation, I think, is using the knowledge I gain from events like this to do my work better, to recognize ways I can add value to customers or leads when they come to me with a problem. Joel, on the other hand, is much better at this than I am, he comes out of these thigns with ten new product ideas, and a strategy to talk with a dozen of our customers about what they are missing because they haven&amp;#39;t done X or Y yet, and look at what you could do! (&amp;quot;and the villagers dance,&amp;quot; as he would say).&lt;/p&gt;&lt;p&gt;Today I was wondering at a couple points about my last customer - I view them as at the &amp;quot;tactical&amp;quot; level of maturity, because they see the value of BI at a department level, at the IT level there is support for it, but it isn&amp;#39;t particularly engrained at hte management level. I am left thinking &amp;quot;it&amp;#39;s too bad they don&amp;#39;t think at the broader scale about this.&amp;quot; I imagine that Joel would be thinking &amp;quot;how can I talk to the right people there, so that I can convince them they need to think of this at a broader scale.&amp;quot; There&amp;#39;s a difference there. I&amp;#39;m not sure I&amp;#39;ll ever get to where Joel is. I could be wrong, I suppose.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=2537226" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/miked/archive/tags/.NET/default.aspx">.NET</category></item></channel></rss>