PowerPivot for SharePoint Video

January 28, 2010

Royale with Cheese

“You know the funny thing about Europe?  It’s the little differences.  I mean, they got the same shit we got here…  just a LITTLE different.”

-Vincent Vega

Greetings from Stockholm!  This place…  I never want to leave.

Many firsts have been recorded here.  My first-ever presentation to a large audience outside the states.  First time having dinner in a restaurant straight out of a 1930’s Hollywood movie.  First time seeing an American guy, a British guy, a Japanese guy, and a Norwegian guy all get tossed out of a hotel bar for being drunk.  First time getting half-trapped by a blizzard in a foreign country.

…and oh yeah, my first time having a mandatory, cannot-postpone-it Windows Update pop up near the end of a presentation and occupy my demo laptop for a full hour.

You can’t make this stuff up.

I have to hand it to Marcus Gullberg and company from MS Sweden though, as well as Johan Åhlén and the entire Swedish SQL Server Users group.  The former for their quick improvisation – finding an Amir Netz video of the SharePoint stuff I was unable to show, and the latter for their patience and excellence questions while we figured it out.  It ended up being pretty funny, actually.

Their loss yesterday is now your gain – as a make-up, I recorded a video of the stuff I couldn’t show yesterday, and posted it to YouTube.

(This also marks my first-ever recording in another country).

Oh, and you know what they call a Quarter Pounder, in Sweden?

A quarter pounder.


Pulling back the curtain: Intro to Cube Formulas

January 18, 2010

OK, last week I showed you a parameterized PowerPivot report that contained no pivots anywhere.  How did I build it?

Best Tutorial:  Start with a Pivot

The easiest way to show you is to start with a PivotTable, even though once you’ve mastered this technique, you won’t always want to start this way.

Here I’ve got 4 measures from the Plays table broken out by ‘Clean Players’.[FullName], and the report is sorted by the [Rushing Yards] measure:

basic pivot

First, I want to get rid of that blank value at the top – over the years, an awful lot of “nobodies” amassed a lot of stats, and apparently STATS did not care enough to capture their names.  Accordingly, I don’t care enough to want them in my report.

Filter Out Blanks

So, I’ll just filter them out.  Easy enough, as shown here at right.

But I also want to limit my report to the top 20 players.  How do I do that, now that I have already applied a filter to this field?

When I try to add a Top 10 filter to this field, it clears my filter that removed the blank, and I get that blank, unknown player back in the report.

So how do I do this?  Well, I use a feature of PivotTables that Allan Folting argued for, and I argued against, back in 2006.  He was right, I was wrong, and the feature has helped me numerous times since :)

That feature is hidden under the Options button on the PivotTable Options ribbon tab.  It defaults to off.  Once enabled, I can go back to the Pivot and add a Top 10 filter, set to show the top 20 players as sorted by Rushing Yards:

Multiple Filters Per Field

Checking that checkbox allows me to then add my Top 20 filter on top of the original:

Top 20

Then I add some slicers, which yields the basic starting point that I want:

top 20 results

Enough with the pivot, Rob! We want the pivot-LESS report!

Indeed.  Time to blow this pivot into a hundred pieces.  Literally.

On the Pivot Options tab of the ribbon, under a dropdown called OLAP Tools, there is a button named “Convert to Formulas.”  On normal pivots, this whole dropdown is disabled…  because normal pivots are not OLAP pivots.

But PowerPivot-backed pivots are OLAP, because under the hood, the PowerPivot db engine is an OLAP engine.  So this button is enabled:

OLAP Tools Convert to Formulas

Watch what happens when you click that button:

Recap

Briefly, let’s recap what we see in the video:

  1. Every cell in the pivot has been converted to a formula
  2. Each formula returns the same result that the cell previously contained (when it was part of the pivot)
  3. Slicers still work – the formulas return different numbers reflecting slicer selections
  4. The formulas can be treated just like regular spreadsheet cells – moved, rearranged, deleted, etc.
  5. There are two functions involved – CUBEMEMBER() and CUBEVALUE()
  6. Generically, we call this feature “Cube Formulas”

Cube Formulas are NOT DAX!

I know that cube formulas are new to most of you, and seeing how I am introducing them in the context of PowerPivot, it’s natural to suspect that these formulas are part of DAX.

But they are not.  They are built-in to regular Excel and are there before you install PowerPivot.  Remember, DAX can only be used on tables in the PowerPivot window, and in the New Measure dialog.  DAX cannot be used in normal Excel spreadsheet cells.

Cube formulas are just another way for Excel to interact with certain kinds of data sources.  And PowerPivot is one data source that qualifies.  That’s good news for Excel pros – a brand-new way to build reports.  It’s a free benefit of PowerPivot :)

CUBEMEMBER() and CUBEVALUE()

As shown in the video, let’s inspect the formulas in three specific cells to show you what’s going on here.

First, the Edgerrin James label cell:

Edgerrin James CUBEMEMBER

Brushing over syntax for a moment, that formula says “this cell now represents Edgerrin James” – the string “Edgerrin James” was returned from the PowerPivot database in fact.

Then the “Rushing Yards” header cell:

CUBEMEMBER Rushing Yards Measure

Again brushing over syntax, that formula means “this cell now represents the Rushing Yards measure.”

And lastly, the 9842 value, which is Edgerrin James’ total Rushing Yards:

Rushing Yards CUBEMEMBER

I put this one in edit mode to show you that it references the Edgerrin James and Rushing Yards cells.  So this CUBEVALUE formula shows the intersection of Edgerrin James, and Rushing Yards, just like it did in the PivotTable.

Notice how it also references the two Slicers.  That’s how the formula returns different values as the slicers are manipulated.  Again, just like it did in the PivotTable.

More to come

Cube formulas are indeed the core trick behind my “pivot-less” report.  But there are several elements yet to be explained, like the parameterization, and even more importantly, how the sort order of the report can change in response to parameters and slicers.

I also want to show you what happens with this report when published to SharePoint.

I think this is enough for one post though :)

Next Football Post:  CUBESET() and CUBERANKEDMEMBER() >>


Not your average PowerPivot report

January 13, 2010

Thats not a PowerPivot Report

“THAT’s not a PivotTable!  Oh wait…”

-Bill Gates

(OK, so I turned it into a movie quote of sorts by using the picture of Anthony Michael Hall playing Bill Gates in “Pirates of Silicon Valley.”  Was that a good casting decision?  I’m torn between “yeah it was OK I guess” and “well it WAS made for TV.”)

Setting that aside, the real Bill Gates DID in fact say that when we first showed him the new PivotTables in Excel 2007.  Prior to that, the appearance of a finished PivotTable was something that the average user found off-putting and geeky.  So we were pretty happy with that response to the new look.

PivotTables (and PivotCharts) have come a long way.  A few clicks and you’ve got a very professional and customized report.  But there are, of course, still cases where you need an even greater level of control than what pivots can give you.  The good news is that if you find yourself in one of those cases, you still have other options.

Excel Pros – Do NOT tune out!

Excel pros are probably thinking “yeah, Rob, I know all about those other options.  You make a PivotTable, you hide it on another sheet, and then build a report sheet using formulas, etc.”

I have a trick up my sleeve today, though.  I bet most Excel pros have NOT seen what I am about to show you :)

Here it is – Not Your Average PowerPivot Report!

(You’ll need to crank your volume up – I got a new mic and need to adjust its sensitivity).

Summary of what’s in that report

  1. PowerPivot-Backed – this report is indeed a PowerPivot report.
  2. No PivotTables anywhere – that’s right, there isn’t a pivot in the entire workbook!
  3. Custom formatting – I split the report body with horizontal and vertical dividers, and could place them wherever I wanted.
  4. Parameterization – users can play “what if” by changing input cells.  A numeric column in the report responds to those changes in realtime.
  5. Sorting – the report is dynamically sorted by that numeric column in #2.  Change a parameter, and the report re-calcs AND re-sorts.
  6. Respects slicers – all columns in the report respect the slicers on the page as well.  This also impacts the sort order of the report.

How it was done

I’m going to go through it step-by-step in the next few posts.  Yes, I am deliberately teasing you :)

Next Football Post:  Introducing Cube Functions >>


Touchdown Problem Solved, and COUNTROWS

January 8, 2010

In the last post I was struggling with horribly-designed source tables.  To be honest, I never found a way to relate those two tables to each other, even through other intermediate tables that initially seemed promising.

But I DID find two columns in my Plays table itself that saved my bacon – [OffensiveTeamScoreAtPlayStart] and [OffensiveTeamScoreAtPlayEnd].

PowerPivot PtsScoredOnPlay Calc ColumnA simple calc column subtracting the two and now I have [PtsScoredOnPlay]:

  =[OffensiveTeamScoreAtPlayEnd]-[OffensiveTeamScoreAtPlayStart]

And that appears to give me what I want – see the picture at right.

(I was a little suspicious at first that the Offensive team could score 2 pts, since only defenses can score safeties, but then I realized these were 2-pt conversions by the offense – see how subtle “business rules” can be?)

OK, so with that calc column in hand, and my knowledge that all Touchdowns score 6 pts, I can go back to my PivotTable and add a measure:

 

   =CALCULATE(
         COUNTROWS(Plays),
        
Plays[PlayTypeName]="RUN-Run",
         Plays[PrimaryRoleName]="Runner",
         Plays[PtsScoredOnPlay]=6
    )

Dissecting the Formula

I’ve broken the formula into separate lines above.  Let’s go line by line.

  1. The first line is just the CALCULATE function.  I have previously described CALCULATE as a supercharged version of SUMIF.  That bears repeating.  Think “improved SUMIF.”
  2. The second line is the expression to be aggregated.  You are not limited to SUM.  In fact you can place many custom expressions here.  In this case I am using the COUNTROWS function.  I will explain that below.
  3. The remaining 3 lines are just conditional filters, like the “if” part of SUMIF, or more accurately, SUMIFS, since there are more than one.  Notice that the last one filters down to just plays that scored 6 pts, which are touchdowns.  The other two filters insure that this was a Rushing play, and the current player was indeed the one carrying the ball.

COUNTROWS is another good (new) friend

Longtime PivotTable users are familiar with a common trick.  When you want to count the number of rows from your source data that meet various criteria (in a PivotTable), you find a column in your data that is guaranteed to be unique, and then you add that field to your Values area, and change the “Summarize By” to count.

And if you didn’t have a column that contained unique values, well, you created one.

With COUNTROWS, you no longer have to do that.  COUNTROWS(<TableName>) works every time.

Tying it all together

OK, then, the formula above says:  “In my Plays table, count the number of rows that are rushing plays, where the current player is the one carrying the ball, that resulted in 6 pts.”

Does it work?  You bet.  PivotTable on left, ESPN on right.  (Priest Holmes, 2004).

PowerPivot RushTD Measure Priest Holmes PowerPivot RushTD ESPN Priest Holmes

OK, back to Sexy!

In the next post, I can now return to what I was originally trying to do, which was something semi-mind blowing…  if you’re an Excel geek anyway :)

Next Football Post:  Introducing the Anti-Pivot >>


Give me good data or give me… um, good data

January 5, 2010

Kevin-Pollak-A-Few-Good-Men_5 Lt. Weinberg: Doing what? Kaffee will have this finished in about four days.
Capt. Whitaker: Doing various administrative things. Backup. Whatever.
Lt. Weinberg: In other words I have no responsibilities whatsoever.
Capt. Whitaker: Right.

 

Collectively we’ve spent a lot of digital ink on the topic of the relative roles of IT and BI professionals on one hand and the Excel pros on the other – here and here for instance.

In those comment threads, some IT and DB pros were wondering whether PowerPivot marginalizes their roles, and the consensus has been “absolutely not, you might even be more important now.”

If you have any doubts about that, check out this fiasco.

In the last football post, I created a spiffy new measure for Rush Yards.  Since then, I’ve created similar measures for Passing and Receiving Yards.  And now I want to create measures for Touchdowns – Rush, Pass, and Rec.  Trouble is…

PowerPivot - Results ColumnProblem #1:  No Touchdown Column

Yep, whereas my Plays table contains a [Yards] column, it does not contain any columns remotely related to touchdowns.

Awesome.  So Where’s the touchdown column???  Well, in another table (FactPlays), I find a [Result] column, and one of the values of that column is “Touchdown” – Neat.

I filter to [Result] to “Touchdown” – and the [PointScored] column in the same table shows me nothing but 6’s, which is good news since 6 is the number of points in a touchdown :)

Problem #2:  Not all 6-pt plays are touchdowns?

But then to make sure, I clear the filter on [Result] and then filter [PointScored] = 6, and guess what?  Sometimes when [PointScored] = 6, [Result] = <Blank>…

            PowerPivot - 6 Pts But no TD.

…which is NOT good because the only way to score 6 pts is to score a touchdown.  So that [Result] column is basically worthless.

But hey, no big deal, I can work around this by just using [PointScored] = 6 as my “Is Touchdown” test, either by creating a new calc column or just doing this directly in a measure.

All I need to do is relate this FactPlays table to my Plays table…

Problem #3:  These two tables speak completely different languages

What columns can I use to link these two tables?  Given that the relevant entity here is a Play, I start looking for things related to PlayID…  and I find a trainwreck.

The Plays table contains [GameCode], [DriveId], [Period], [PlayUniqueId],[SeasonNumber], and [PlayGUID] – the last of which is a calc column I created awhile back by concatenating [PlayUniqueID] and [SeasonNumber] – I had determined that combination to be globally unique (the db lacked this to begin with – ugh).

PowerPivot - Plays PlayID Columns

The FactPlays table contains [GameDate], [GameCode], [Time], and [Quarter].

                  PowerPivot - FactPlays PlayID Columns

Hey look – NOTHING MATCHES UP.  FactPlays contains nothing resembling a Play ID.  It doesn’t even have a GameCode.  Nope, games in FactPlays are uniquely identified by [GameDate] combined with [GameNumber], and I assume I can identify Plays by somehow combining those two columns with [Time], which is the time on the game clock.  Oh wait, that’s not quite right.  I have to then combine that with [Quarter], since the clock starts over at 15:00 in each quarter.

This is gonna take me a little while.

Griping with a Purpose

I was actually working on a much sexier blog post when I ran into this problem.  I stopped to share it because this is real-world data.  EXPENSIVE data at that!  STATS charges six figures (or more) for subscriptions to this stuff.

IT/BI/DB Pros:  Please don’t do this to us :)

OK, that’s obvious.  And I am pretty sure that no IT/BI/DB pros reading this would ever design a db like this in a million years.  But things like this manage to happen anyway – after 2 months of following a number of SQL MVP’s on Twitter, I can say that one common theme is “oh my god I just got a new project and this is the worst db I have ever seen – how am I supposed to clean this up???”

I think we know how it happens.  Without being told, I can say with certainty that it happened like this:  When STATS got started as a company, their value proposition was in the collection of data, data that was far more detailed than anywhere else.  How the data got stored and shared was an afterthought.  And boom, they had customers immediately, clamoring for that data.  “Here, take our money!  Send us the data however you’ve got it, we need it!”

Collect data, get paid huge sums of money, repeat.  No normal human being would interrupt that process to clean up the storage format.  I know I wouldn’t.  Years later, they surely realize that this format is terrible.  But customers’ apps are now tightly bound with this format, so any investment in a new format would have minimal impact, at first anyway.

Price of Entry, or Welcome Forcing Function?

Hey, it’s one thing when you’re selling data to, say, ESPN.com, and the cost of understanding the data is just a small piece of the application that is being built.  But with PowerPivot, bad schema is at best an expensive time sink, and at worst, a source of user error.

So…  IT/BI/DB pros, I’d like to hear from you – how far do we have to go in order to be ready for broad PowerPivot adoption?  And somewhat alternatively, is PowerPivot perhaps a reason why data quality will be taken more seriously in your organization?  I (mostly) come from the Excel side of things and would love to know what your experience tells you.

Next Football Post:  Solving the Touchdowns Problem >>


DAX CALCULATE, and Rapid Iteration

December 16, 2009

Ok, in the last football post, I had written the following measure:

          PowerPivot DAX Calculate Zoomed

Which basically means, “sum up the [Yards] column but only those rows with [PlayTypeName] = “RUN-run” “

Now we get to find out if it works :)

I need some real-world data that I can validate against.  Out on NFL.com I can find historical player stats.  Let’s look at one of my favorite players from recent years, Priest Holmes.  He amassed a lot of Rushing Yards and should be a good sample.  Here are his statistics by Game for 2004:

          Priest Holmes 2004 Rush Yards

OK, so let’s make a PivotTable that just shows Priest’s 2004 Rush Yards by Game, and compare that to the Rush Yards column from above:

         PowerPivot Says Same Numbers as NFL          Priest Holmes 2004 Rush Yards Zoomed

                           My Pivot Table                                      From NFL.com

Bingo!

“You know sometimes I even impress myself?”

-Han Solo

An exact match!  That might seem a bit bland to you folks out there, but to me, it is VERY exciting.  I’ve got 40+ tables, a Plays table that is loaded with crazy complexity, no database training whatsoever, and yet…  I now have a measure that agrees, DOWN TO THE YARD, with NFL.com!

Wahoo!  In all honesty, when I started this project, I had no idea how far I could go.  I intentionally chose something that *might* defeat me.

I’m feeling pretty darn optimistic now, though :)

I’m suspicious, however…

I recall that my Plays table contains multiple rows per play, so that, for instance, it can capture data about the *defensive* players involved in a play:

Single Rushing Play

Right there, a single play, three rows.  One for the runner himself, one for the player who tackled him, and another for the player who assisted the tackle.  That will come in handy when I get started looking at defensive stats.

But for now, I suspect that means defensive players are getting credited with rushing yards, too.  When I filter to Antoine Winfield, the Assister from above, my PivotTable confirms my suspicions:

         Antoine Winfield Rushing Yards

What we are seeing there is the total net yards of running plays in which Antoine Walker was involved in tackling the runner.  I don’t want that.

But all I have to do, then, is add another clause to my CALCULATE function.

Calculate Function Fixed

And now the pivot table shows:

Antoine Winfield After Fix    Priest Holmes After Fix

Priest Holmes is unchanged.  Antoine Winfield now has no rushing yards.  Perfect!

CALCULATE is good.  CALCULATE is your friend.

“OK Rob, a whole post just so you can make ONE change??”

Yes.  I spent more time than usual on this.  Here’s why:  Everything above took me less than 10 minutes in real time.  It took far longer to capture the screen shots than simply to blaze through it.

But when I worked with a BI consultant, a few years back, the same exact iteration took about a week.

PowerPivot Compared to Traditional BI Development

How do we account for the difference?  Is it because the consultant produced better results?  Was the Rushing Yards measure more accurate or robust than mine?  Was it somehow more formalized, more robust?  Or was the consultant not very good?

The answers are no, no, no, and an emphatic “no.”  (The consultant was fabulous, akin to godlike.  There’s that word again – “akin.”  Why do I keep saying that?)

The real difference, as I’ve said before, is that with PowerPivot, the “modeler” and the “business user” are the same person.  I’m the one writing the expressions, and the one who knows the most about what I want, because I know the “business” (football, in this case) inside and out.  Iteration in one person’s head is blazingly fast.

  1. Finding the comparison stats on NFL.com – Only the business user knows where the best validation data sets are.
  2. Creating the pivot for comparison purposes – even just choosing my player for comparison reflected business knowledge. 
  3. Realizing that I likely was incorrectly counting defensive players in my measure – because I had access to the source tables and the “business rules” in my head, I spotted this problem before it ever made it into a report.

Seriously, this was like a trip down memory lane, on hyper fast forward.  I’d get a cube from the consultant, build some pivots, see that things were not accurately reflecting football rules, point out the problem, wait for the next version, repeat.

Not anymore :)

“Are you saying we don’t need BI Pros anymore?”

No, I am NOT saying that.  Even in this football example, I am cheating.  The original data from STATS arrived as a jumble of text files.  The schema was terrible.  Many of the required attributes (like the score of the game on a particular play) were completely missing.

There was a TON of work, done by the BI professional, to get from that horrible mess to the 40+ tables that I am working with now in PowerPivot.  And there is no way, no way at all, that I could do that myself – not back then and not today.

In terms that an MS BI Pro understands, the Integration Services work remains.  In fact, it becomes even more important, since you need to make the resulting schema not just work for people like you, but also for people like me :)

But the Analysis Services work – you can start sharing that with the Excel business users.

Next Football Post:  The Horrors of Bad Data Sources >>


DAX’s CALCULATE() function – Pivots will never be the same

December 8, 2009

“It’s been a long time since I rock-‘n-rolled…”

-Robert Plant

THE GREAT FOOTBALL PROJECT RETURNS!  Oh yes, it has been a long time indeed.

When I last worked on the football project, I had designed my first report and started the process of better understanding my source data, primarily using the =RELATED() function.  I mentioned a couple of times that the yardage totals being displayed were not yet trustworthy, and that they needed a lot of work before they were accurate.

Let’s get started on making them accurate, because, well, accurate is good.  We like accurate.

A Modest Proposal:  Rushing Yards First

Rather than boil the ocean, let’s start with the simplest type of play in football:  the running play.  Someone takes the football and just runs with it, and hopefully, makes positive progress down the field (measured in yards).  This is often called a “rushing” play, and it generates “rushing yards.”

So ultimately, I want a PivotTable that shows me a list of players, and their Rushing Yards in various situations.

My Source Table Looks Like WHAT??

So far I have just been adding the Yards field to my reports, yielding a Sum of Yards column:

                      PowerPivot Yards by Player

But my source table (the Plays table) typically contains multiple records for a single play, with each record detailing a different player involved in the play, and their role.  Check THIS out:

PowerPivot Multiple Records per Play

Um…  yeah.  There are a multiple rows per play AND a bajillion types of plays.  And they are all mixed in there in one table.  Scanning the screenshot above and applying my knowledge of football, I can say that only ONE row should actually count toward Rushing Yards.

I believe the technical database schema term for this sort of thing is “icky.”  But I don’t think we can blame anyone for this.  Really, football is pretty complex – for a given event, the amount of data that we want to capture can vary tremendously, simply based on what type of play it was, and even based on what HAPPENED on the play.

That’s pretty complex.  But PowerPivot has a secret weapon for this sort of thing.

Und now’s the time on Sprockets when we Calculate!

In traditional Excel, I would solve this problem like this:  I’d create a new column in the Plays table, name it [Rushing Yards], and then use =IF() to give that column a value only when it indeed supposed to count as Rushing Yards.  Then I’d add the Sum of that column to my Pivot.

But as I repeat that process for every other type of yardage – passing, receiving, etc., I’m going to make an already unwieldy table even larger, which makes my life harder (more scrolling) AND increases file size.

In PowerPivot, I don’t have to do that.  I just go straight to the Pivot Table itself and add a new DAX measure:

PowerPivot DAX Measure Using Calculate Function

Let’s zoom in on that formula:

PowerPivot DAX Calculate Function

That’s pretty simple.  The first param is the numerical quantity you are trying to measure – Sum of Yards in this case.  All subsequent parameters are filters/conditions that you want to apply while evaluating that quantity.  Which in this case, is Play Type = “RUN-run”

In the next post, I’ll tell you whether that works :)     And explain in more detail what’s going on here.  If my voice is feeling better, I will do it as a video.  But for now the quiet masses who prefer text and pics may rejoice :)


DAX: The =RELATED() Function

November 10, 2009

A quick update here on the football project (not really warranting a video).  The source db is awfully complex, and I’m in the process of wrapping my Excel-centric head around it.

For instance, in the Plays table, I’m trying to understand how many row constitute a single NFL play.  It’s not one row per play – no, that would be too simple.

Here, for instance, is a field that claims to be a unique play ID, but when I sort by it, it clearly isn’t:

                       PowerPivot PlayID Sorted  

With the table sorted, though, I notice that there are multiple SeasonNumber values corresponding to PlayUniqueID = 1:

                       PowerPivot Season Number 

…so I add a calc column concatenating the two, with renewed hopes for uniqueness:

PowerPivot New UniqueID

And…  curses, no such luck:

                     PowerPivot PlayGUID

At this point I realize that there really just are multiple rows per real event.  There are other columns in there that I suspect are crucial:  PlayerRole, PrimaryRole, etc. – all with integer values, sadly.

The good news, though, is that those integers are ID’s, and they reference into other tables that I are related to the Plays table.  Once those relationships are set up, I can exploit a new function added by PowerPivot.

To gain some more understanding about how this table works, I decide to lean on a familiar Excel trick and just add some more columns, VLOOKUP-style, but using the new DAX function named =RELATED()

PowerPivot =RELATED 1

            PowerPivot =RELATED 2

                           PowerPivot =RELATED 3

Be gone, VLOOKUP!

Check that out – it’s a single-parameter function!  I just say, “hey, go get me this column from this related table,” and off it goes to fetch the values that match the row from the current table, using the relationship.

The equivalent VLOOKUP would be something like:

    =VLOOKUP([PlayerID, CleanPlayers, 2, FALSE)

…and if the PlayerID column wasn’t the first column in the CleanPlayers table, well, it flat-out wouldn’t work.

Those three =RELATED() formulas yield:

PowerPivot =RELATED results

Ok, this gives me some hope of figuring things out.  (Steve Martin’s presence confuses me, though…)

I may or may not keep these columns in this table when I am done, since they are NOT required – I can build reports using the original fields in those other three tables, combined with fields from the Plays table, as demonstrated in previous posts.  This is just a temporary convenience for exploring this table.

Note that Excel users work like this all the time.  I kinda doubt DBA’s frequently add columns like this, expecting to just remove them shortly thereafter.  But here I am, working with an environment that conveys real database advantages, but I’m still doing my informal, explore-and-experiment Excel shtick.  I love it.

Next Football Post:  The Greatest Function in all of PowerPivot >>


Last night’s video, attempt #2

November 6, 2009

OK, uploaded the full 287 MB file to YouTube.  Much better than last night, although I’d still like something about 50% better.  Anyone have tips for me?  Drop me a comment or email :)

And still very interested in feedback on video vs. text/screenshot posts.

Next Football Post:  The RELATED() Function >>


PowerPivot DAX & Relationships Payoff, Part Two

November 6, 2009

(Continuing the series on the Great Football Project…)

OK, remember in the previous step, we saw how a relationship between Plays and CleanPlayers suddenly let me use a single PivotTable to slice Plays data by ANY column in CleanPlayers (and there was much rejoicing).  But wait, there’s more!

And this time, I’m gonna try my hand at a video post.  Here goes…

Would love feedback on this method vs. text-and-images.  Strong preference for one or the other?  Hybrid?

Is the video resolution sufficient for everyone?  Windows Movie Maker was giving me any size video I wanted, as long as it was 30 MB :P   Might need another tool :)

Update:  OMG that resolution is terribad.  Gonna try again in the morning with a different toolset, it was better on my desktop even at 30 MB.

So I’m taking the vid down for now.