Skip to main content

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 results of the above query.

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]

The results of the AtScale-adapted query.

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.

note

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