Known Limitations
This document provides a list of limitations of AtScale's support for DAX Tabular. It also lists unsupported and non-applicable functions.
Limitations
Differences in CALCULATE behavior between AtScale and SSAS
The DAX CALCULATE
function performs the calculation of a measure by applying some filter modifications over the query. As an example, consider the following DAX query for SSAS, which projects the Internet Sales Amount Local (ISA) for each of the product subcategories, filtering by the Accessories
category. It also projects a measure that uses the CALCULATE
function to calculate only the ISA when the category is Bikes
.
DEFINE
VAR catFilter = TREATAS({"Accessories"}, 'DimProduct'[ProductCategoryName])
MEASURE 'DimProduct'[BikeSales] = CALCULATE(SUM(FactInternetSales[salesamount]), DimProduct[ProductCategoryName] = "Bikes")
EVALUATE
SUMMARIZECOLUMNS(
ROLLUPADDISSUBTOTAL('DimProduct'[ProductSubcategoryName], "total"),
catFilter,
"Sales", SUM(FactInternetSales[salesamount]),
"BikeSales", 'DimProduct'[BikeSales]
)
order by'DimProduct'[ProductSubcategoryName], [total]
All rows but the last one contain blank values for the BikeSales
measure. That happens because CALCULATE
only filters the sales of Bikes
. However, since Bike
is a Category
and the query shows only Subcategories
, it calculates only for the subcategories from the Bikes
category. Additionally, in the last row, at the totals, all of the Bikes
subcategories' total sales are shown (even though they do not appear in the table).
The following DAX query is the same example, but adapted for AtScale. You can see that AtScale produces the same total for the query, but the other rows are different. This is because AtScale currently handles CALCULATE
(for some of the expressions, like the =
operator) in the same way as MDX static tuples. Therefore, since the query projects Subcategory
, which is part of the same hierarchy, the grouping is ignored and the measure value is all the Bikes
sales.
DEFINE
VAR catFilter = TREATAS({"Accessories"}, 'Product'[Category])
MEASURE 'CubeMeasures'[BikeSales] = CALCULATE([Internet Sales Amount Local], Product[Category] = "Bikes")
EVALUATE
SUMMARIZECOLUMNS(
ROLLUPADDISSUBTOTAL('Product'[Subcategory], "total"),
catFilter,
"Sales", [Internet Sales Amount Local],
"BikeSales", 'CubeMeasures'[BikeSales]
)
order by [total], 'Product'[Subcategory]
Although this example shows a small difference between AtScale and SSAS, it may have more problematic use cases. The CALCULATE
function should, indeed, overwrite the query filters only when they conflict with the calculated expression, not always.
Using CALCULATE
with context modification functions (ALL
, ALLSELECTED
, ALLEXCEPT
, REMOVEFILTERS
, etc.) works the same in AtScale as SSAS.
ATSCALE-18276
Filters on measures
Filters on Measures are not supported.
Quick measures
- Quick Measures using Time Intelligence calculations work only with date hierarchies provided by Power BI.
- Quick Measure - Sales from new customers work only with PBI-provided date hierarchy.
SELECTEDVALUE
The SELECTEDVALUE function will always return a blank result for Totals unless the filters end up with a single value on the visualization.
IF / SWITCH
For the IF and SWITCH functions, comparing dimensions to measures is not supported. (ATSCALE-14804)
ADDCOLUMNS
The ADDCOLUMNS function will not work if you attempt to create a calculation using it like this:
VAR tab0 = ADDCOLUMNS('Customer',"customerCount", COUNT('Customer'[Customer.Key0]))
VAR tab1 = FILTER(tab0, [customerCount]>100)
VAR sumTab0 = CALCULATE([Internet Sales Amount Local],tab1)
In this example, we count on a dimensional attribute and then filter it. This isn't supported.
It is expected to work if you want to perform aggregations over Measures, like in the examples below:
129_ATSCALE-14859-AddColumnsPostAggFilterMeasures_AND = VAR tab0 = ADDCOLUMNS('CubeMeasures', "rsales", [Reseller Sales Amount Local], "isales", [Internet Sales Amount Local])
VAR tab1 = FILTER(tab0, AND([rsales] > 500000, [isales] > 1000000))
VAR sumTab0 = CALCULATE('CubeMeasures' [Internet Sales Amount Local], tab1)
RETURN sumTab0
129_ATSCALE-14859-AddColumnsPostAggFilterMeasures_OR = VAR tab0 = ADDCOLUMNS('CubeMeasures', "rsales", [Reseller Sales Amount Local], "isales", [Internet Sales Amount Local])
VAR tab1 = FILTER(tab0, OR([rsales] < 600000, [isales] > 1000000))
VAR sumTab0 = CALCULATE('CubeMeasures' [Internet Sales Amount Local], tab1)
RETURN sumTab0
130_ATSCALE-14859-AddColumnsWithPostFilterUsingAggAndGroupColumn = var x = ADDCOLUMNS('Product', "isgood", IF ([Color] = "Blue", "Good", "Not good"))
var y = FILTER(x, OR([isgood] = "Good", 'Product'[Category] = "Bikes"))
return calculate([Internet Sales Amount Local] , y)
KEEPFILTERS / REMOVEFILTERS
The KEEPFILTERS and REMOVEFILTERS functions can only reference secondary attributes.
RANKX
Results of expressions using RANKX can only be grouped by attributes included in the expressions.
Additionally, RANKX always returns a blank result for Grand Totals.
ALLEXCEPT
The ALLEXCEPT function can only be used to control the filter context on either model measures or specific measures.
For example:
ALLEXCEPT(CubeMeasures, DateCustom[Reporting Day2])
ALLEXCEPT([Internet Sales Amount Local], DateCustom[Reporting Day2])
ALLEXCEPT cannot be used on hierarchies.
SUBSTITUTE
For the SUBSTITUTE function, AtScale does not support the instance_num
parameter.
ATSCALE-14867
Unsupported Functions
If a function is not explicitly listed as supported, then it should be considered unsupported.
Some unsupported functions have server-side analogues that should be used instead:
- MEDIAN - Use AtScale's Percentile Measure functions.
- PERCENTILE - Use AtScale's Percentile Measure functions.
- STDEV - Use AtScale's Sample or Population Standard Deviation Measure functions.
Non-Applicable Functions
The following functions are not applicable to Tabular connections to AtScale because all relationship definitions and navigation direction are defined in the AtScale Model.
Table relationship functions:
- CROSSFILTER
- RELATED
- RELATEDTABLE
- USERELATIONSHIP