Using Excel CUBE Functions with PowerPivot

June 21, 2010

Arriving Here from a Search Engine or via Excel Help?

This article below by Dick Moffat, as well as the one by Dany Hoter, is an excellent, detailed example of how to use cube functions with *any* OLAP data source, and NOT just PowerPivot.  Cube functions work the same with PowerPivot as they do with other OLAP sources like Analysis Services.

I highly recommend reading both for examples and ideas.

But if you want to use cube functions with just plain tables of regular data, you can do that with Excel 2010!  Just download PowerPivot (free addin from MS), copy/paste or link your tables of Excel data into PowerPivot sheet tabs, and you are off and running.  The New Visitor page has information on how to get started, including download links.

And now, on to Dick’s excellent article…

Using Excel Cube Functions with PowerPivot
By Dick Moffat
Personal Logic Associates Inc.

Today I am going to give you a quick and dirty example of what I think is one of the key features of PowerPivot that will give it a much broader initial and on-going impact for experienced power spreadsheet developers.

This is where existing spreadsheets can get the value-add of having PowerPivot data available to them in a way that is not only understandable for the traditional spreadsheet junkie (as opposed to the typical BI one) but that also that will add major value while integrating into existing models.

Excel CUBE Functions

A few weeks ago my friend Dany Hoter wrote a piece here about the use of the CUBE functions in Excel with PowerPivot data.  Dany’s article was a great intro to the capability of this unsung capability of Excel available since Excel XP.  I am going to go deeper into this issue here.

The Cube functions require access to an Analysis Services On-Line Analytical Process cube (OLAP) which has to be provided to the user from SQL Server’s Analysis Services application.

While there are companies around the world that are capable of taking advantage of this capability, this is by no means a large percentage of overall Excel users and from my experience it is generally an unknown and untried feature.

In Excel 2007 (and now 2010) the CUBE functions became native to Excel (as opposed to available through an Add-In) and were integrated with the new “Connection” object within the program.  Once again though, if one wanted to use an OLAP Cube in a Connection it required availability of an Analysis Services Cube of data.

But in Excel 2010, thanks to PowerPivot, users can now create their own “Cubes” inside PowerPivot and they automatically present themselves as an available Connection inside the Excel parent file.  This is a big thing and I hope to show you another reason why.

A Cube Automatically?

I’m sure I don’t have to explain here how one creates a PowerPivot data source consisting of multiple Relational data sources.  But one fact that may not be obvious is that the data set that is created by these PowerPivot objects, and by their relationships, is in fact a “Virtual” Cube in itself.  In the purest sense it is a ROLAP Cube – created at run-time from Relational data.

This default “Virtual” Cube is named “PowerPivot Data” and is exposed when you click the Connections Button on the Data Tab:

This is inherently an OLAP Cube conceptually and so is an acceptable source for Excel’s native CUBE Functions.

So what does this “Cube” Do For me?

OLAP “Cubes” were designed for two major reasons:

  1. To allow analysis of data in a hierarchical fashion.  In the business world that usually means Financial or Sales or other data organized by the hierarchy of business units (Region/Country/Zone/State/County/City) or by dates (Year/Quarter/Month/Week/Day) or by Product lines (Product Category/Product/SKU), where a number or numbers (i.e. Account balances or sales quantities or values) are stored at the lowest  level of detail (i.e. by Day or by SKU) and the total value or quantity can then be “Rolled Up” along any Hierarchy or Dimension and across dimensions.  So for example you want to see total sales for March 2010 of a particular Product and its SKUS in a particular Country….  Then you want to be able to “Drill up” or Drill Down” on any value in any dimension down to the lowest level or up to the highest easily and automatically.  This is where a Pivot Table attached to one of these Cubes is a natural presentation and analysis mechanism.
  2. To take disparate data sources and aggregate them automatically using the hierarchies in 1 above.  In the original implementations of OLAP Cubes the hardware available had limited RAM and slow processors and so many OLAP Cubes had to be created over-night and written to disk in the classic De-Normalized format that allowed for relatively quick queries to be made against data that otherwise would simply not be possible in a Normalized format.  But this is the 21st Century with incredibly cheap and sizable RAM memory on every PC and with processors so fast that it’s hard to believe.  This is the work that PowerPivot is designed for – so it can reconstitute your OLAP “Virtual” Cube at run-time inside your Excel file itself (and with compression to boot).

So if you bring in your sales data (like in the example Bike data available with PowerPivot samples) and set it up in a PowerPivot “Connection” you can refer to that info from your spreadsheet layer using not just Pivot Tables, but also using the Cube functions.  But the Cube functions give the traditional spreadsheet maker (and his/her boss) the flexibility to present this data in the classic free-form spreadsheet style as Income statements with analysis or to group them on the sheet in any way they want.

The Example

The data being used in this example is available in the “AW_CompanySales.accdb” database supplied as an example for use with PowerPivot. Keep in mind that there are many “Memo” field-types in this example database and it would be worth your while to change most of those fields to a Text format and add a few Indexes to improve the performance of the database when importing into PowerPivot.

This is an example of what the key tables look like when imported into PowerPivot :

When you create Relationships between these tables within PowerPivot, the result is a Virtual Cube with the ability to “Roll-Up” the core values (“Facts”) along any Dimension of the data, which actually are fields in the data sources of the table being used for Hierarchical relationships.  So Product Categories in the “ProductCategory” table have children in the “ProductSubCategory” table, which have children in the “Product” table.  This is the fundamental design of a “Snow-Flake” OLAP design (read about it!) and it should be fairly intuitive to anyone who knows the data sources and how they are related conceptually.

In my example, however, I have pulled together this same data into a single large De-Normalized PowerPivot table by creating an Access Query.   The result is exactly as PowerPivot does virtually within its “PowerPivot Data” Connection and hopefully will help me explain this functionality better.

This is how that PowerPivot window looks (in an unfortunately stiched together image I’m afraid):

Do you notice how there are multiple instances of Country and State across records (?)  This is in effect a result set from an Access query or SQL View or SQL Statement and is truly de-normalized.  There will be certain scenarios where this might work to your advantage over bringing in individual tables and joining them inside PowerPivot, but that’s an issue for another day. There is little or no impact on file size for the two ways of importing the source data however.  It is meant to help us see our data easier in this example.

Keep in mind that there are a million daily records in this data set and is a recipient of the exceptional compression algorithms of PowerPivot.  It is also worth noting that the single table de-normalized version is 1/10th the size of the file with multiple tables (3 megabytes compared to 30 megabytes).

The “Measures”

Once you have the data in place within PowerPivot you have to take the next step and create the Measures you will be working with.  Measures are the core of OLAP Cubes and are also the core of PowerPivot.  Measures are the aggregations that you will be analyzing based on the data in columns you wish to SUM or COUNT or AVERAGE (or whatever of the standard Excel Mathematical and Statistical functions you want to use).

The most basic example of a Measure is ours called “[Sum of SalesAmount]’, where it simply sums the [SalesAmount] column at every conceivable level of the Virtual OLAP Cube inside Excel,  created by PowerPivot.  In this case [SalesAmount] is simply a basic data column provided directly from the data source, but there is no reason why you can’t use DAX to create new Calculated Fields of calculated data and then create “Measures” based on those fields.

To create the aggregations you want in your spreadsheet you need to have created the “Measure” inside a Pivot Table in the Excel environment either within the “drag and drop interface or using the menus.  I created our Measure using the Pivot Table interface like this:

I started to create a Pivot Table from inside my PowerPivot environment (or in the Excel environment from the PowerPivot Tab), and then I dropped the [SalesAmount] field from my Field List into the Values section below.  By default the Pivot Table assigned this as a “SUM” function and it created the Measure [Sum of SalesAmount] automatically.  It is now available to the Workbook, not only to any Pivot Tables you might create, but also to any CUBE functions that you might want to use.

This does NOT mean you have to have a Pivot Table in your Workbook, BUT you do have to have started the process in order to create the Measure or Measures you want to refer to in your CUBE functions.   You can create the Measures from within the PowerPivot Pivot Table menu as well,  but using the Excel Pivot Table GUI this way strikes me as more intuitive and equally capable.  We can then rely on this Measure to aggregate the total “Sales Amount” at every level across any Dimension in our Virtual OLAP Cube.

The Spreadsheet:

So here’s the spreadsheet I want to feed from PowerPivot:

The CUBEVALUE() Function

In order to drive right to the heart of this functionality I am going to use just one of Excel’s Cube functions, CUBEVALUE in this model (but will show one more function later as well in an enhanced version).

So we are looking for the Sum of the Sales Amount ([SumofSalesAmount]) of Bikes ([Category]) for Fiscal Years 2006 ([FiscalYear]) for Australia ([Country]).  So this is the pseudo-code for this formula:

Sum the Sales Amount where Category = “Bikes” and Fiscal Year = 2006 and Country = “Australia”

Notice that the values are in the PowerPivot tables at the lowest level by Product, by City, by Date of the “Fact” Sales Amount.  Each value is shown as a member of a Week and Fiscal and a Calendar Month and a Fiscal and a Calendar Year.

So when we ask for values from the Fiscal Year, the Category and the Country fields we are inherently asking for aggregated totals ate the intersection of those three fields.  That is what you do when you look for values in an OLAP Cube.

This is the CUBEVALUE() function to get this value for “Bikes” in Australia for Fiscal 2006 :

=CUBEVALUE(“PowerPivot Data”,”[Sum of SalesAmount]“,”[Country].[Australia]“,”[Category].[Bikes]“,”[FiscalYear].[2006]“)

Which returns a total of $91,490,280.05.

Therefore to get the equivalent value for “Accessories” in Australia for 2005 the formula would be:

=CUBEVALUE(“PowerPivot Data”,”[Sum of SalesAmount]“,”[Country].[Australia]“,”[Category].[Accessories]“,”[FiscalYear].[2005]“)

And the result is $902,316.21.

If you have ever used a SUMIFS Function in Excel (or SUMIF or even IF functions) then this kind of formula is pretty straightforward IMHO.

The “Inherent” Connection

Notice that this function is a DIRECT reference to the “PowerPivot Data” Connection rather than referencing another cell that has a reference to the Connection?  If you were connecting to an external data source you would likely want to make a single cell the one that links to the data source and then you would “borrow” that link for all subsequent references to the Cube.  Otherwise you would have a HUGE performance hit.

But if the Connection is a “Virtual” Connection in PowerPivot inside the spreadsheet itself, then there is no such penalty.  So you can refer to the “PowerPivot Data” inherent connection in every formula. That is much easier to understand and to audit as well.

Adding the Power of Excel to the Mix

As a loooong-time spreadsheet user I have developed a fondness for the “Naming” capability of Excel.  By applying a “Name” to a cell or cells I can then refer to them everywhere in the Workbook without regards to the actual Sheer and Cell reference of the range.  This makes things more auditable and just generally more readable.

In addition, I believe in the use of cell references for Variables in formulae rather than hard-codes words and values.  To an experienced Spreadsheet developer this is simply “Best Practices”, but I still see many instances of “Hard-Coding” in Workbooks that make me cringe.  If the value will (or may) change it must be a cell reference or a named reference.  Of course ALL references could be named either as individual cells or arrays but I tend to use only single cell Variable names as it is likely easier for others to comprehend than using an multi-cell reference as an array in a formula (but there’s no reason nt to do so if you feel so inclined).

So by changing the View to “Formulas” in Excel these are the contents of the key cells and the first column of our little model:

 

Using Cell References and Names

The reference to the “PowerPivot Data” is located in cell B11 on the spreadsheet and is named in a way that would make it easy to reuse and to understand (“strConnection”).   This is the first expression in the CUBEVALUE() function.

The reference to the Field we want is in cell B12 and refers to the Measure we created [Sum of SalesAmount].  This is the second expression in the CUBEVALUE() function.

Referencing the Dimensions

Now that we have defined the Connection to the PowerPivot data and the definition of the Measure that we will be summing, we have to tell the CUBEVALUE() function the values we want to select for across the various Dimensions we want to analyze.

PowerPivot is capable of intuitively determining the Field (or Dimension) that the value you are looking for is from based on the contents and the data types of the fields in the OLAP cube.  This is way cool … but I am not quite ready to use this capability in my spreadsheets.  Instead I simply use a [Fieldname].[Value] syntax to tell the function what I am looking for.

So the criteria in cell B4 are going to be:

“[Country].[Australia]“,”[Category].[Bikes]“,”[FiscalYear].[2006]“

But I am using the contents of cells to drive my selections … so the correct syntax is:

“[Country].["&$B$5&"]“,”[Category].["&$B7&"]“,”["&$C$5&"].["&C$6&"]“

The result is exactly the same, but is driven by the contents of cells rather than being “hard-coded”.

There is no doubt that there are advanced CUBE functions that will draw the values in each Dimension automatically into the cells based on the contents of the data and also we can drive all of this using Slicers (as I will demonstrate later) but in many, many business scenarios the business is organized in a stable and consistent way. Month over month managers want to view certain values according to an organization that may or may not match their organization or groupings of the data coming in from outside sources.  So in our little example I am most concerned about Bikes, Accessories, Clothing and Components and I want all others to fall into a catch-all category called “Other”, and this total is calculated in cell B7 by taking the total for Australia’s sales for 2005 and subtracting that from the SUM of the three Categories looked at distinctly above:

=B8-SUM(B4:B6)

The ISERROR function is necessary in case there is no data for the combination of dimension values you chose and returns a zero rather than an error.

So what we have here is a simple spreadsheet model that uses the cache of PowerPivot data by drawing on the CUBEVALUE() function to query the OLAP cube inside the PowerPivot cache and to return the totals in the database at the intersect of all the values in the Dimensions my spreadsheet asked for.

This is serious spreadsheeting …..

Adding Slicers to the Mix

So let’s take our same example and add some of the new Slicer functionality of Excel and PowerPivot.

Rather than setting up a separate spreadsheet for every Country the company does business with I have created a Slicer that is pulling a unique list of all the values from the Country Dimension.  This Slicer is then tied to cell B5 and not only shows the name of the Country but also drives the formulas that use the [Country] Dimension of the PowerPivot OLAP cube.

So cell B5 has this formula in it:

=CUBERANKEDMEMBER(“PowerPivot Data”,Slicer_Country,1)

Which is referencing the value of the Slicer named “Slicer_Country”.

Cell C6 has this formula:

=CUBERANKEDMEMBER(“PowerPivot Data”,Slicer_CalendarYear,1)

It is of course referencing the slicer that is driving the Calendar year.  Cell D6 is just the contents of C6 minus 1 (which could also be derived using a CUBE Function as well – but this works for me).

In order to get the totals for all countries one need only click on the Funnel in the upper right of the Slicer.

Conclusion

There is no doubt that even in this little example of a spreadsheet there are a lot of moving parts, but if you understand how this model works you will be well on your way to integrating PowerPivot into many, many of even your existing Excel spreadsheets.  Or at least this will definitely change how you design future ones.   I have spent years emulating this functionality using VBA and DAO and ADO and customized functions for which I have sometimes been handsomely paid.  But this capability of PowerPivot moves the bar way forward and will allow you and me to finally start seriously integrating Excel into the world of serious BI analysis.

While there is a lot of talk about DAX and the Filtering capabilities of PowerPivot I think that I will be applying PowerPivot to many of my spreadsheets in the way detailed here.   With an understanding of the Relational nature of your data and with a strong knowledge of the capabilities (and flexibility) of Excel I believe that many of you will be able to bring value to your use of PowerPivot in Excel 2010 in short order using the CUBE functions against the inherent OLAP cube that is a PowerPivot data cache.

Dick Moffat

London, Ontario

June 19, 2010

dick@plogic.ca


Get insight to SharePoint PowerPivot usage without Central admin rights using custom SSRS reports

June 7, 2010

Posted by: Kasper de Jonge

As a salute to the session: “Building Custom Extensions to the PowerPivot Management Dashboard” of Dave Wicker today at MS Bi conference a blog post on customizing  the dashboard.

I just love the PowerPivot management dashboard, I think it’s a great dashboard and shows you all kind of information you need to maintain your PowerPivot environment. Unfortunately the management dashboard is placed inside the Central admin.You need access to the central admin  to be able to visit the PowerPivot management page, this means you also have access to all the other SharePoint admin pages.

I can understand your sharepoint admins aren’t too happy when your BI department is running around in your central admin.

To solve this have I have created a report based on the data inside the PowerPivot Management Dashboard data, that you can use without having the credentials. For more information check Dave Wickerts blog post: Customizing the PowerPivot Management Dashboard (too bad i had finished my report when this article was released )

The report will show you the usage of reports by users, nr of queries and load in the last 7 days and in the last 30 days. This way you can quickly identify which workbooks is being used a lot and you need to take a look at as BI department.

The data is placed inside a PowerPivot file which is stored at Central Administration site (Go to Site Actions -> View All Site Content -> under Document Libraries click PowerPivot Management folder). The file will be placed inside the directory with the name of a guid which you see there. Inside this folder you find “PowerPivot Management Data.xlsx” which is the PowerPivot file which contains the PowerPivot usage data.

We are going to create a user in the AD and give this user access to the central admin and use this to run our report with:

One thing to keep in mind, you need to use a reporting services that is integrated in the same SharePoint, i was unable to connect to the data using a separate reporting services. I guess this has something to do with claims / kerberos.

Ok on to the report. I created a report in BIDS. First I created a shared datasource connection using a Microsoft SQL Server Analysis Services connection type pointing to: “data source=http://sp2010rc:5566/PowerPivot Management/466f3002-543f-4c06-93bf-4d922641a73f/PowerPivot Management Data.xlsx”.  So we can reuse this connection for multiple reports we can build in the future. Change this link to the location of your PowerPivot Management Data.xlsx file.

Next i created the report, in this report i wanted to show the usage from the last 7 and 30 days of my PowerPivot Files. To get the data I altered a SSRS generated dataset in MDX to always return the last 7 days.

To determine the measure I wanted i used the “Workbook Activity.xlsx” provided in the management dashboard. The three measure used there to determine workbook activity are:

  • UserDCnt : Number of distinct users making connections to workbooks
  • QuerySum : Total querys fired in requests at workbooks
  • SizeMBMax : Total size of the load put against the server at each request, as i understand this is the size of the powerpivot data.
  • For dimension members i selected:

    • [Date].[Month] : Month a request was done in
    • [Date].[Year] : Year a request was done in
    • [Date].[Date] : The date a request was done in
    • [Documents].[AuthorLoginName] : Author of the document requested
    • [Documents].[FileUrlRelativeToSite] : Filename of the document requested
    • [Users].[FullName] : user that requested the filename

    This results in the following MDX statement:

    SELECT NON EMPTY { [Measures].[UserDCnt], [Measures].[QuerySum], [Measures].[SizeMBMax] } ON COLUMNS,
    	  NON EMPTY {
    				(	[Date].[Month].[Month].ALLMEMBERS *
    					[Date].[Year].[Year].ALLMEMBERS *
    					{ ParallelPeriod([Date].[Date].[Date], 7, StrToMember("[Date].[Date].[" + Format(now(), "yyyy-MM-dd") + "]"))
    						: StrToMember("[Date].[Date].[" + Format(now(), "yyyy-MM-dd") + "]") }*
    					[Documents].[AuthorLoginName].[AuthorLoginName].ALLMEMBERS *
    					[Documents].[FileUrlRelativeToSite].[FileUrlRelativeToSite].ALLMEMBERS *
    					[Users].[FullName].[FullName].ALLMEMBERS
    				)
    				}
    	DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS FROM [Sandbox]

    Take notice on the Date part:

    { ParallelPeriod([Date].[Date].[Date], 7, StrToMember(“[Date].[Date].[" + Format(now(), "yyyy-MM-dd") + "]“))
    : StrToMember(“[Date].[Date].[" + Format(now(), "yyyy-MM-dd") + "]“) }
    What happens here is that i only want to select the measures that in  the date range from 7 days ago to today, we can do this because the date dimension contains all dates and thus can do a strtomember. You can change this number to whatever you want, or maybe even make it a parameter in ssrs.

    Putting this in a report i show the powerpivot file together with its author, total nr of users, nr of queries and the size of the workbook, then i used a sparkline to show the nr of users for each day, and in a databar i show the numer of querys * the size of the workbook to show the load it has on the server.

    This results in the following report:

    Too bad that I didn’t have more data in my management dashboard so the trend doesn’t really come out as it should, but it should give you an idea what you can do. When we actually will have more data we can fine tune this report.

    I have published this report to SharePoint and made sure the report is executed as the user we just created and gave access to the central admin:

    The report will now have access to the powerpivot management data while the report user doesn’t.

    Feel free to download the the SSRS 2008 R2 project here. Tell me what you like or dislike from it or what you changed.


    Pivotstream has a new logo

    May 28, 2010

    We thought it was time to freshen the image a bit.  Whatcha think?

     

    pivotstream logo compact


    I Risk Serious Bodily Injury vs. the Dutch Menace

    May 17, 2010

     
    Dutch PowerPivot Menace

    “My name is kasper de Jonge. I’m a BI specialist from the Netherlands. I play hoops all my life and I never lose.  Soon I play PowerPivotPro, and the world will see his defeat.”

    Yeah folks, you’ve probably all seen Kasper’s guest posts.  But have you heard his voice?  As I’ve said many times, he doesn’t exactly sound like a computer nerd – he sounds more like the creation of some Soviet lab, leftover from the Cold War.

    And he plays basketball. 

    That’s right.  It’s not enough for Kasper to jump right into PowerPivot and subvert that beautiful American creation for nefarious Continental purposes (ok, actually, the PowerPivot team is at least 50% international in its makeup, but please, let’s not let facts get in the way of trash talk). 

    No, he also has to try to take our basketball from us, too.

    Well, I can’t let him do that.  Someone has to take a stand.

    I recently got word that Kasper will be attending TechEd / MS BI Conference in New Orleans next month.  I issued a challenge.  He accepted.  A one on one basketball game to set the world on its proper course.  Our representatives are busily negotiating the rules.

    Kasper plays hoops all the time.  Coaches a women’s team.  Watches NBA games at odd hours via what can only be black market means.  He is the modern basketball equivalent of Ivan Drago.  He is a machine.  He’s about 2-3 inches taller than me – imprecise because it’s so hard to get data from behind the Iron Curtain I guess.

    So maybe it’s time for me to get in shape, huh?  I haven’t played hoops in ten years.  I’m about 30 pounds heavier than I’d like to be.  And my hoops shoes…  well, I bought those in 1996 and they still have tread on them.

    So this weekend I began my training.  I found the biggest dude I know, my friend Mike, and we played a series of one on one games.  It was ugly – Mike’s taller than me, outweighs me by 60 pounds, and is all around just far more athletic.  I was lucky to steal one game from him, while he annihilated me three times.

    Afterwards, we still had enough breath in us to role-play The Ugly Americans:

    No Flopping

    PowerPivot FAQ roadshow at SQLPass EU

    April 20, 2010

    (Another guest post by Kasper – I have been in Redmond for the past week working on a few things with some of the pros back there.  Lots to report).

    (Oh, and should we do this roadshow idea at the BI Conf this summer? -Rob)

    At the great PowerPivot FAQ PowerPivot experts from across the globe answer all kinds of questions on PowerPivot. So my idea was wouldn’t it be great if we could have a live FAQ session at SQLPass EU! Since 2 moderators are at the SQLPass EU this year i decided to contact the Pass committee, they liked the idea as well .

    So without further ado: The great PowerPivot FAQ will be coming to you at the SQLPass EU this spring.

    Wesley Backelant (from Microsoft Belgium and also moderator at the FAQ)  and I will be having a PowerPivot FAQ session at the SQLKitchen at SQLPass EU. Since this idea was kinda last minute the date and time aren’t available yet but i’ll keep you posted ! Maybe we can have other experts to answer questions as well. Of course questions that aren’t in the FAQ will be added on the spot !

    Hope to see you there!

    UPDATE: The great PowerpivotFAQ.com session is at the sqlkitchen on SQLPASS EU, friday 11:45 until 12:45


    David Coe Wins Excel Monkey Contest

    April 7, 2010

    Awhile back we announced the Excel Monkey TShirt Contest.  All was good, but then I got a little lax about announcing the winner :)

    Well, the judges (me, Denny, and Chris) huddled and it was unanimous.  The man who started it all, David Coe, takes home the fabulous prizes… once those prizes are in print :)

    100% Authentic Quote from the Winner Himself

    “Wow.  I am speechless.  This is truly the most magnificent thing to happen to me in days.”

         (OK, he didn’t say that.  I just made that up.  His REAL quote was:)

    “Wow, I can’t believe my monkey didn’t get spanked”

         And no, I did NOT make that one up :)

    Prizes

    As a reminder, the prizes are three autographed books – one by Denny Lee and company, two by Mr. Excel:

    Denny Book Bill Book 1 Bill Book 2

    Entries Recap

    Here was David’s winning entry:

    Runner-Up – Entry from Dan English:

    Dan English Excel Monkey Evolution

    Our fine CEO at PivotStream, Jeff Elderton, submitted this entry that I think was perhaps a little tongue-in-cheek:

       jeff1 Jeff2

    And Thiago Zavaschi submitted this concept sketch that he was hoping the design department here at PowerPivotPro could flesh out better.  Sadly, there is no such department.

    Monkey

    Congratulations David!


    Captain Ramius: Epilogue

    February 12, 2010

    Sean-Connery-The-Hunt-for-Red-October The worry is the Americans. We meet the right sort, this will work. But if we get some… buckaroo…?

    -Captain Marko Ramius
    aka “The Vilnius Schoolmaster”

     

    A feel-good ending :)

    You recall the guy who became upset with me after thinking that my RSS link hijacked his Google Reader?  He turned out to be a very nice guy.  Check out this email reply from him:

    > Okay, I am sorry for my rampage, and I am sorry for unmotivated(pretty much) personal attack to an unfamiliar person.(You can smack me in the face for that, next time you be in Vilnius.Once.) And I hope I did not do too much damage(I don’t think I did), for whoever asks in the future you can just forward this email. As for the "angry passage", well I was pretty sure that this another wise trick/form of advertising to increase visibility of the specific website such as PPP or smth, it kinda gets on your nerves when you realize that the same webpage, no matter what you do, appears first when you open your GR/referesh/do whatever, for a week or so. Obviously,I should have contacted you in person first. Obviously.

    > As I said, I regret my actions, and appologise. I’ll do some testing with other wordpress blogs, and will see if the behavior is the same.

    > Then I will send "angry passage" to the WordPress. Haha, just kidding.

    > Peace and have a good one. 
    > Yours sincerely,
    > The lunatic from Vilnius

    How cool is that?  I died laughing at the “you can smack me in the face.  Once” part :)

    And he also agreed that I could visit him if I ever find myself in Vilnius :)   So by keeping my cool about it, I discovered a pretty incredible person and made a new friend.  That feels pretty good.

    By the way

    Dick Moffat reported to me that he saw similar behavior the other day with Google Reader and another site.  Which brings me to the obvious conclusion:

    Google fears PowerPivot.


    Surprising Example of PowerPivot Compression

    February 8, 2010

    Tony and Mike

    “Best not analyze too deeply on this one, huh?”

    A long time ago I promised a guy named Sam that I would dig up some examples of PowerPivot compression.  I then, of course, forgot all about it until today.  Sorry Sam.

    But today I was playing with a data set on my desktop machine that was really getting me down.  The data was provided as a (regular, non-PowerPivot) Excel file with 500K rows in it.  And my machine labored to do anything at all with that data – opening it took forever.  Deleting a single row took forever.  And so on.

    But this was the same machine I had used to do a PowerPivot demo with a 100M row data set, which ran with no problem!  0.5% of the data was bogging me down in Excel!

    So I decided to do a “before and after” comparison.

    Hypothesis

    Based on my knowledge of PowerPivot compression, I expected that PowerPivot would do a little bit better than Excel on disk, and a lot better in RAM.

    Didn’t quite turn out that way :)

    Results

           PowerPivot Compression Relative to Excel

     

    Data Stored in Excel Sheet

    Data Stored in PowerPivot

    File Size on Disk

    126 MB

    10.2 MB

    RAM consumed by Excel.exe

    1200 MB

    140 MB

    Wow.  8x better in RAM, 12x better on disk!  (I was SO tempted to use a pie chart.  Just kidding).

    Good thing I ran the experiment twice!

    First time I did this, the PowerPivot RAM number was 600 MB.  Still 2x better than Excel, but 8x is much better :)

    Not quite sure what was going on with that 600 MB number.  I’d had Excel open for awhile and probably hadn’t closed Excel.exe completely after closing the native Excel file.  Probably that was it.

    OK, don’t analyze!  Rejoice!

    Bottom line:  12x better on disk and 8x better in RAM, no matter what, is tremendous.  Not to mention the performance of working with the data and how much better that is.

    And PowerPivot’s data compression ratio only gets better with larger data sets.  500k rows is big, yes, but remember, this same computer handled 100M, which I obviously can’t even test out in Excel for comparison.

    Now that the data is loaded into PowerPivot, I don’t even have to use my desktop machine to work with it.  I’m switching over to my laptop.  The laptop is even running 32-bit whereas the desktop is 64.  But hey, the laptop fits on my new treadmill desk :)

    And my waistline could use some compression.


    Tommy Farmer? Donny Chong? A Photo Essay

    February 4, 2010

    Given that it’s Doppelganger Week on Facebook, I thought it was time to show you what I’ve been talking about.  Donald Farmer and Tommy Chong – not just separated at birth, but living intertwined lives ever since.

    Check it out.

    25 blog_author_donald_lg9 Donald_Farmer          4
    7 Capture 3 1

    Photos, Left to Right, Top to Bottom:  Donald at University, Greenwich 1976; Donald’s “Medieval Archaeology” Period, date unknown; Tommy, artist’s rendering on side panel of 1968 VW Minibus, 1981; Donald’s famous Speaking Vest makes its debut on Redmond campus; Tommy, mugshot, 1998; Donald, TechEd 2006 speaker photo; Donald on day 25 of his late 2009, 9-country, 27-day speaking tour; Tommy’s guest speaker role at SP Conf 2009 going awry; Donald on Larry King’s Extreme Makeover Edition; Tommy’s inaugural “Power Hour” podcast, Days Inn, Boulder Colorado 2006.

    (Yes, Donald selected me as one of his top 10 BI bloggers of the year, and THIS is how I repay him.)


    The bug count also rises

    January 14, 2010

    blaine-and-vulcan-in-predator

    “I will do it for Prado, who was once great with the bugs. I will do it for the time we filled Prado’s office with bouncy balls, and for the time Prado wore his nerf weapons in the marketing hall and slew all of them with no fear and only a great joy at the combat.”

    After last night’s post where I related the story of an engineer (me) savaging a marketer, I couldn’t resist sharing this story that appeared in MicroNews (the MS internal newsletter) during my first year at Microsoft.  It was a contest – write a (hyper-short) software story in the style of Hemingway.

     

    The whole story is here, and is only about half a page.  Well-worth the read:

    http://www.workpump.com/bugcount/bugcount.html 

    That half-page work of fiction – both its mere existence and its contents – is also a glimpse into what I would call “old Microsoft,” which I basically caught the tail-end of.  Good times.

    John Browne, author of software Hemingway without peer, I salute you, and am grateful I could find your fine work preserved on the web.  Oh, and I include your requested link to the copyright license.