Press enter to see results or esc to cancel.

SSAS Multidimensional and Super DAX

An interesting question came up during a recent engagement involving Power BI reporting against a Multidimensional data source. The client wanted to know if there was any benefit for them in upgrading from SSAS 2014 Multidimensional to SSAS 2016 Multidimensional.

My initial response was “no, there would be little benefit in carrying out that upgrade… other than a few more years of support and a couple of random hotfixes. That time and effort would be better spent migrating to Tabular 2016+”

Update 20170825: some enhancements between SSAS MD 2014 to 2016/2016 worth mentioning… improved locking/blocking, memory allocation, heap fragmentation, database consistency checking (DBCC), and xEvents GUI.

As the meeting carried on, I started thinking a bit more about that question. For folks using Power BI reporting, there’s a pretty significant benefit in reporting against Tabular 1200+ models deployed to a SSAS 2016+ instance as opposed to a Tabular 1103 (and below) model deployed to a SSAS 2014 (and below) instance. That benefit is “Super DAX” (more info).

What I wasn’t sure of (and just finished testing) is whether or not the same was true for Multidimensional cubes. In other words, would Power BI generate “Super DAX” against 2016/2017 multidimensional instances? Can 2016/2017 multidimensional models even handle “Super DAX”?

Long story short: Not only does Power BI generate the same DAX queries regardless of the SSAS Multidimensional version… “Super DAX” is NOT supported by any version of Multidimensional instance. Read on for more details.

Testing Setup

To test this out, I installed SSAS 2014 Tabular & Multidimensional instances along side the existing SSAS 2017 Tabular & Multidimensional instances and deployed an equivalent SSAS database to each instance.

image

Next, I used a very simple Power BI report with a single visual (showing sales amount by day of month) and captured the DAX queries via profiler.

image

 

Results

Against a 1103-level model deployed to a SSAS 2014 Tabular instance, we get the following query captured in profiler:

EVALUATE
  TOPN(
    1001,
    ADDCOLUMNS(
      KEEPFILTERS(
        ADDCOLUMNS(
          KEEPFILTERS(
            FILTER(
              KEEPFILTERS(VALUES('Date'[Day])),
              NOT(ISBLANK('Sale'[Sales Amount]))
            )
          ),
          "Sales_Amount_Day", 'Sale'[Sales Amount]
        )
      ),
      "Sales_Amount", [Sales_Amount_Day]
    ),
    [Sales_Amount_Day],
    0,
    'Date'[Day],
    1
  )

ORDER BY
  [Sales_Amount_Day] DESC, 'Date'[Day]

 

Against a 1400-level model deployed to a SSAS 2017 Tabular instance, we get the following query captured in profiler:

EVALUATE
  TOPN(
    1001,
    SUMMARIZECOLUMNS('Date'[Day], "Sales_Amount", 'Sale'[Sales Amount]),
    [Sales_Amount],
    0,
    'Date'[Day],
    1
  )

ORDER BY
  [Sales_Amount] DESC, 'Date'[Day]

 

As you can see, Power BI detected the model compatibility level and generated different DAX queries accordingly. Better yet… the first version of the query (against the 2014 tabular model) results in 3 storage engine queries…

image

…where as the second version of the query (against the 2017 tabular model) results in only 1 storage engine query…

image

That, my friends, why Super DAX is such a big deal!

Against an equivalent SSAS cube deployed to a SSAS 2014 Multidimensional instance, we get the following query captured in profiler:

EVALUATE
  TOPN(
    1001,
    ADDCOLUMNS(
      KEEPFILTERS(
        ADDCOLUMNS(
          KEEPFILTERS(
            FILTER(
              KEEPFILTERS(SUMMARIZE(VALUES('Date'), 'Date'[Day.UniqueName], 'Date'[Day])),
              NOT(ISBLANK('Sale'[Sales Amount]))
            )
          ),
          "Sales_Amount_Day_UniqueName", 'Sale'[Sales Amount]
        )
      ),
      "Sales_Amount", [Sales_Amount_Day_UniqueName]
    ),
    [Sales_Amount_Day_UniqueName],
    0,
    'Date'[Day],
    1,
    'Date'[Day.UniqueName],
    1
  )

ORDER BY
  [Sales_Amount_Day_UniqueName] DESC, 'Date'[Day], 'Date'[Day.UniqueName]

Against an equivalent SSAS cube deployed to a SSAS 2017 Multidimensional instance, the same query was generated…which means Power BI did not try to generate Super DAX for the SSAS 2017 Multidimensional instance.

I then tried to take the Super DAX query generated for the SSAS 2017 Tabular instance and run it via SSMS against the SSAS 2017 Multidimensional instance and got the following error message:

Executing the query ...
Query (4, 5) The function 'SUMMARIZECOLUMNS' is not available for Multidimensional models.
Run complete
image

What this tells me is that DAXMD (the feature added to SSAS Multidimensional instances allowing them to process DAX queries) has not been updated to handle Super DAX.

Take Away

  • Power BI is awesome!
  • Super DAX is awesome!
  • If you’re using Tabular, I hope you’re using 2016+ (if not, it’s time to upgrade)
  • If you’re using Multidimensional, I hope an migration to Tabular is on your road map (cause it should be)