A Power BI Technique Mined from the Power Pivot Archives
Below, you will find one of our all-time favorite Power BI techniques. In the ten (yes ten) years we’ve been operating this site, we’ve written over 1,000 articles on Power BI. Hard to imagine - even for us - but true.
Years ago, we first wrote up this technique in the context of Power Pivot – Power BI’s cousin and predecessor, which we like to call “Power BI in Excel.”
Since the two products share the same brains (DAX and M), this technique is more relevant today than ever. Everything below is 100% legit for Power BI – the same data model “shape,” the same DAX, etc. – but now you can use it to power up your Power BI visuals, and not just PivotTables. Enjoy!
Play Write the greatest song formula in the world, or I’ll eat your souls.”
-From “Tribute,” by Tenacious DAX
A Do-It-Yourself Time Machine
You remember the Great Precedence Project? Well, I have shelved it for now, for two reasons:
Creating an exhaustive list of all the precedence rules in PowerPivot formulas was going to be… exhausting.
I didn’t really need to boil the philosophical ocean in search of deep underlying meaning, because on further inspection, I already had the Greatest Formula in the World, and needed no other.
So what is the GFITW about? It’s about time navigation. It’s useful when you have a custom calendar and the time intelligence functions are therefore not so helpful.
The GFITW is a do-it-yourself time machine.
Year on Year Sales With a Custom Calendar? Yes We Can!
In that post linked above, which happened to be the last installment of the precedence project, I was calculating a running total, and doing so without benefit of the fancier functions like DATESYTD etc. (which rely on the “real” calendar, not your business calendar).
OK, so now let’s do a “Year on Year” sales measure, sometimes called a “Year over Year” measure. And again, our “calendar” table isn’t a true calendar at all:
A Table of Periods (Not Dates) Means You Cannot Use the Built-In
Time Intelligence Functions to Calculate Year-on-Year Sales
And the Sales table is very simple:
Sales Table is Linked to the Periods Table by the Period Num Column
And I have this basic pivot already set up:
Year and MerchPeriod on Rows
So, how do I write a measure that “fetches” the sales from last year?
Let’s Skip Some Steps
I am going to be honest with you: it took me a very long time to figure this out. The formula looks reasonably simple, and it is, but I had to try a million variations before I got it right. Literally, it took me about a week to refine it.
So rather than walk you through that painful process, let’s skip ahead and show you the GFITW in all its glory. Then in the next post I can show you what NOT to do, and we can also fine tune it. OK? OK.
So here it is, the Greatest Formula. In the World:
And its results:
No, it’s not perfect yet. We will need to calculate percentage growth of course, rather than merely fetching last year’s sales. And that given that 2011 is not yet complete, I’m a little squeamish about Last Year Sales returning ALL of 2010’s sales (the $5.9M number).
But for now, let’s count our blessings. This formula DOES fetch the sales from last year, and it works (mostly) both at the year level and the MerchPeriod (aka Month) level.
Dissecting the Formula
Here is the formula again:
But really, the GFITW is not a formula. It is a pattern that you can re-use and modify. So let’s look at it that way:
ALL(Your Custom Calendar Table),
FILTER(ALL(Your Custom Calendar Table),
Year Column Or Similar =
Expression that “moves” the Year Column
VALUES(Time Column That is More Granular
Than Year, Like Month or MerchPeriod
Where everything in blue is “fixed” as part of the pattern, and everything in italics is something you can change.
Like I said, this is running a bit long for one post. Come back Thursday for the rest