The behavior of certain calculation functions is slightly different in Polaris compared to the Classic Engine. Additionally, you can't use some functions in Polaris.

Calculation functionDifference
ALL aggregation functionIn Polaris, the calculated result for unmapped cells is FALSE. In the Classic Engine, the default value is TRUE.
ADDMONTHSIn Polaris, if you use NaN (Not a Number) for the Number argument, the ADDMONTHS function returns a blank value. In the Classic Engine, NaN used with ADDMONTHS is equivalent to 0.
ADDYEARSIn Polaris, if you use NaN for the Number argument, the ADDYEARS function returns a blank value. In the Classic Engine, NaN used with ADDYEARS is equivalent to 0.
AVERAGE aggregation functionIn Polaris, you can't use the bracketed aggregation function AVERAGE in formulas of line items with the Formula summary method. In the Classic Engine, you can.
CODE

In Polaris, if you use a time period value for the Item argument, the CODE function returns a blank text result. In the Classic Engine, it returns the time period value as text.

In Polaris, you can't use this function for line items that have the Formula or Ratio summary methods. In the Classic Engine, you can.

CUMPRINCIn the Classic Engine, if you use a Timing argument, and its value is neither 0 nor 1, the formula isn't calculated correctly. In Polaris, if you do this, the formula is calculated as expected.
CUMULATE

In Polaris, you can't use CUMULATE in formulas of line items with the Formula summary method. In the Classic Engine, you can.

In Polaris, the List argument can be any list related to a dimension of the line item the formula is used on.

In the Classic Engine, for example, if you specify a subset as the List argument, it runs over the entire list. However, in Polaris, the function applies only within the subset. If a different level of hierarchy is used, the argument aligns and matches with the corresponding level in the target's dimensional hierarchy.

In Polaris, the order of a List argument follows the correct hierarchical ordering instead of the order of the list in General lists.

DECUMULATE

In Polaris, you can't use the DECUMULATE function for line items that have the Formula summary method. In the Classic Engine, you can.

In Polaris, you can use the DECUMULATE function over any dimension, by including an additional argument. In the Classic Engine, you can't. Where, if the additional argument isn't included, the function defaults to time as the dimension.

FIND

In Polaris, the FIND function considers the length of all Unicode characters to be one. This means that the FIND function returns the correct starting character. In the Classic Engine, the FIND function considers the length of:

  • Unicode characters from within the Basic Multilingual Plane (BMP) to be 1
  • Unicode characters from outside the BMP to be 2
  • The length of composite characters (such as those with accents or diacritic marks) to be equal to the number of components
FINDITEM

In Polaris, you can't use the FINDITEM function on time dimension. In the Classic Engine, you can.

In Polaris, you can't use this function for line items that have the Formula or Ratio summary methods. In the Classic Engine, you can.

HALFYEARTODATE

In Polaris, you can use the HALFYEARTODATE function with line items with a time scale of Half-Year. In the Classic Engine, you can't.

In Polaris, you can't use HALFYEARTODATE in formulas of line items with the Formula summary method. In the Classic Engine, you can.

HALFYEARVALUE

In Polaris, you must enable Half-year Totals in the Model Calendar to use the HALFYEARVALUE function. In the Classic Engine, you can use the HALFYEARVALUE function regardless of if Half-year Totals is enabled in the Model Calendar.

In Polaris, you can't use the HALFYEARVALUE function in a result line item with a time scale greater than the function. The Classic Engine returns 0 in this case.

IRR

In the Classic Engine, if the cash flows are out of order with respect to the Transaction list dimension, it can associate the wrong index to some cash flows, which leads to unreliable results. Polaris always gives you the right result regardless of the order of transactions.

In the Classic Engine, the scaling factor is determined entirely by the time scale of the time dimension of Cash flows, regardless of the actual structure of that time dimension. In Polaris, the scaling factor is the average number of leaf periods (of the time dimension of Cash flows) in a fiscal year. To note, when using the general weeks calendar type, that is, when there are no fiscal years, weekly transactions are converted to daily transactions and a fixed 365 scaling factor is used, the same as in the Classic Engine.

In the Classic Engine, when the Estimate is NaN, the result is undefined. ‌Polaris returns NaN.

The Classic Engine returns NaN if all the Cash flows values are exactly zero. Polaris returns 0 if these values are tolerantly equal to zero.

When there are blank values in Dates, the Classic Engine treats it as 12/31/1899 (one day before Anaplan era). Polaris returns NaN, regardless of cash flow values.

In the Classic Engine, the target line item can be dimensioned by Transaction list. In Polaris, it can't be dimensioned by Transaction list. For the time dimension variant, the target line item can't have a time dimension.

When the Transaction list is empty, the Classic Engine returns NaN. In Polaris, this always returns 0 unless the Estimate is NaN, in that case, the function returns NaN instead.

ISANCESTORIn Polaris, the ISANCESTOR function returns FALSE when given a top-level item coupled with an orphan entity. In the Classic Engine, this'll return TRUE.
ISBLANKIn Polaris, the ISBLANK function considers a text value that consists exclusively of carriage return characters to be a blank value. In the Classic Engine, the ISBLANK function considers a carriage return to be a non-blank value.
ISFIRSTOCCURRENCE

Note: Performance of ISFIRSTOCCURRENCE is known to be poor in Polaris for high dimensionality. It's strongly advised to avoid ISFIRSTOCCURRENCE in Polaris.

In Polaris, you can use the ISFIRSTOCCURRENCE function with the time list. In the Classic Engine, you can't.

Also in Polaris, the ISFIRSTOCCURRENCE function doesn't have a 50 million-cell limit as it does in the Classic Engine.

ISNOTBLANKIn Polaris, the ISNOTBLANK function considers a text value that consists exclusively of carriage return characters to be a blank value. In the Classic Engine, the ISNOTBLANK function considers a carriage return to be a non-blank value.
ITEM

In Polaris, you can't use the ITEM function for line items that have the Ratio summary method. In the Classic Engine, you can.

In Polaris, you can't use this function with a two-argument variant of time, for example ITEM(Time, "Feb 10"). In the Classic Engine, you can.

LAG

In Polaris, any number used for the Offset amount argument is rounded to the nearest integer. NaN for the Offset amount argument returns the Substitute value argument.

In Polaris, you can use LAG with any dimension except Versions. In the Classic Engine, you can use this function only with a time dimension.

In the Classic Engine:

  • You can use non-numeric Value to offset arguments, but only when the Offset amount is a constant. Otherwise, an error message displays.
  • Any number used for the Offset amount argument is rounded toward zero. NaN is equivalent to 0.
LEAD

In Polaris:

  • Any number used for the Offset amount argument is rounded to the nearest integer. NaN for the Offset amount argument returns the Substitute value argument.
  • You can use LEAD with any dimension except Versions. In the Classic Engine, you can use this function only with a time dimension.

In the Classic Engine:

  • You can use non-numeric Value to offset arguments, but only when the Offset amount is a constant. Otherwise, an error message displays.
  • Any number used for the Offset amount argument is rounded toward zero. NaN is equivalent to 0.
LEFT

In Polaris, the LEFT function behaves as expected with all text values, including those that contain composite characters or characters from outside the BMP. In the Classic Engine, the LEFT function considers the length of:

  • Unicode characters from within the BMP to be 1
  • Unicode characters from outside the BMP to be 2
  • The length of composite characters (such as those with accents or diacritic marks) to be equal to the number of components
LENGTH

In Polaris, the LENGTH function behaves as expected with all text values, including those that contain composite characters or characters from outside the BMP. In the Classic Engine, the LENGTH function considers the length of:

  • Unicode characters from within the BMP to be 1
  • Unicode characters from outside the BNP to be 2
  • The length of composite characters (such as those with accents or diacritic marks) to be equal to the number of components
LOGIn Polaris, the LOG function returns NaN if you use positive infinity for the Base argument. In the Classic Engine, the LOG function returns 0 if you use positive infinity for the Base argument.
LOOKUP

In Polaris, the LOOKUP function returns the value of the aggregate item in composite and non-composite hierarchies. The Classic Engine returns the value of the aggregate item in a composite hierarchy, and the default value for the line item in a non-composite hierarchy. 

In Polaris, you can't use the LOOKUP function in a result line item with a time scale greater than the values you look up. The Classic Engine returns 0 in this case. 

In Polaris, if the target line item can't reference the mapping line item, then the LOOKUP is invalid.

In Polaris, a LOOKUP will be invalid if the mapping line item has a dimension that is not related to a dimension of the target line item. This includes cases where the mapping line item is dimensioned by a line item subset.

LOWERIn Polaris, you can't use the Locale argument with the LOWER function. In the Classic Engine, you can use the Locale argument.
MAX aggregation functionIn Polaris, you can't use the bracketed aggregation function MAX in formulas of line items with the Formula summary method. In the Classic Engine, you can.
MID

In Polaris, the MID function behaves as expected with all text values, including those that contain composite characters or characters from outside the BMP. In the Classic Engine, the MID function considers the length of:

  • Unicode characters from within the BMP to be 1
  • Unicode characters from outside the BNP to be 2
  • The length of composite characters (such as those with accents or diacritic marks) to be equal to the number of components
MINIn Polaris, when comparing a blank date value to a non-blank date value, the MIN function returns the non-blank value. In the Classic Engine, it returns the blank value in this case.
MIN aggregation function

In Polaris, when comparing a blank date value to a non-blank date value, the MIN function returns the non-blank value. In the Classic Engine, when comparing a blank date value to a non-blank date value, the MIN function returns the blank value.

For dates, blank cells calculate to blank for Polaris and 2399-12-31 for the Classic Engine. For numbers, blank cells calculate to 0 for Polaris and positive infinity for the Classic Engine.

In Polaris, you can't use the bracketed aggregation function MIN in formulas of line items with the Formula summary method. In the Classic Engine, you can.

MODIn Polaris, the MOD(0, NaN) returns NaN. In the Classic Engine, MOD(0, NaN) returns 0.
MONTHTODATE

In Polaris, you can use the MONTHTODATE function with line items with a time scale of Month. In the Classic Engine, you can't.

In Polaris, you can't use MONTHTODATE in formulas of line items with the Formula summary method. In the Classic Engine, you can.

MONTHVALUEIn Polaris, you can't use the MONTHVALUE function in a result line item with a time scale greater than the function. The Classic Engine returns 0 in this case.
MOVINGSUMIn Polaris, you can't use MOVINGSUM in formulas of line items with the Formula summary method. In the Classic Engine, you can.
MROUNDIn Polaris, if Number of decimal places resolves to NaN or 0, then the MROUND function returns 0. In the Classic Engine, this returns NaN.
NEXT

In Polaris, you can't use NEXT for line items that have the Formula summary method. In the Classic Engine, you can.

In Polaris, you can use NEXT with any dimension compatible with a dimension of the target, except Versions. For example, you can use a list or its subset as the second argument when the target line item is dimensioned by a list. For Versions, use NEXTVERSION. In the Classic Engine, you can use NEXT only with a time dimension.

In Polaris, for time outside the time range hierarchy, NEXT returns 0 or blank values.

NPV

In the Classic Engine, if the cash flows are out of order with respect to the Transaction list dimension, it can associate the wrong index to cash flows, which leads to unreliable results. Polaris always gives the expected result regardless of the order of transactions.

In the Classic Engine, the scaling factor is determined entirely by the time scale of the time dimension of Cash flows, regardless of the actual structure of that time dimension. In Polaris, the scaling factor is the average number of leaf periods (of the time dimension of Cash flows) in a fiscal year. To note, when using the general weeks calendar type, that is, when there are no fiscal years, weekly transactions are converted to daily transactions and a fixed 365 scaling factor is used, the same as in the Classic Engine.

In the Classic Engine, when the Discount rate is NaN, the result is undefined. ‌Polaris returns NaN.

When there are blank values in Dates, the Classic Engine treats it as 12/31/1899 (one day before Anaplan era). Polaris returns NaN, regardless of cash flow values.

In the Classic Engine, the target line item can be dimensioned by Transaction list. In Polaris, for the time dimension variant, the target line item can't have a time dimension.

When the Transaction list is empty, the Classic Engine rejects the formula and gives an error message. In Polaris, this always returns 0 unless the Discount rate is NaN, in that case, the function returns NaN instead.

OFFSET

In Polaris, NaN for the Offset amount argument returns the Substitute value argument. ‌In the Classic Engine, NaN is equivalent to 0.

In Polaris, you can use OFFSET with any dimension except Versions. In the Classic Engine, you can use this function only with a time dimension.

Operators and constants

In Polaris, operators such as >, <, and = return FALSE when used with blank date or time period values. In the Classic Engine, a non-blank date or time period value is greater than a blank date or time period value.

In Polaris, operators such as >, <, and = are tolerant of small differences to 1E-14. In the Classic Engine, the operators are exact.

For arithmetic operators + and -, Polaris returns a blank date when any date operands are blank. In the Classic Engine, a blank date assumes the minimum possible value.

For the arithmetic operator *, Polaris returns 0 when any operands are NaN. The Classic Engine returns NaN.

PARENT

In Polaris, the parent of Years within the time list is All Periods. In the Classic Engine, All Periods has a time scale of Years, which means Years is the parent of Years.

In Polaris, the results of formulas aren't coerced into different timescales. For example, if a formula returns a result with a Months timescale in a line item with the Years timescale, the formula is invalid. In the Classic Engine, the results of formulas are coerced into different timescales. For example, if a formula returns a result with a Months timescale in a line item with the Years timescale, the Months value automatically converts to display in the Years line item.

PERIODIn Polaris, you can only use PERIOD in a line item that has a Type of Time Period. The result has the same timescale as the line item type.
POST

In Polaris, you can't use the POST function for line items that have the Formula summary method. In the Classic Engine, you can.

In Polaris, you can use the POST function over any dimension, by including an additional argument. In the Classic Engine, you can't. Where, if the additional argument isn't included, the function defaults to time as the dimension.

POWERIn Polaris, POWER(0,0) returns 0. In the Classic Engine, POWER(0,0) returns 1.
PREVIOUS

In Polaris, you can't use PREVIOUS for line items that have the Formula summary method. In the Classic Engine, you can.

In Polaris, you can use PREVIOUS with any dimension compatible with a dimension of the target, except Versions. For example you can use a list or its subset as the second argument when the target line item is dimensioned by a list. For Versions, use PREVIOUSVERSION. In the Classic Engine, you can use PREVIOUS only with a time dimension.

In Polaris, for time outside the time range hierarchy, PREVIOUS returns zero or blank values.

PROFILE

In Polaris, the lookup dimension of the Profile line item can't be related to any of the dimensions of the target line item to which the formula is applied.

In Polaris, you can't use the PROFILE function for line items that have the Formula summary method. In the Classic Engine, you can.

In Polaris, you can use the PROFILE function over any dimension, by including an additional argument. In the Classic Engine, you can't. Where, if the additional argument isn't included, the function defaults to time as the dimension.

QUARTERTODATE

In Polaris, you can use the QUARTERTODATE function with line items with a time scale of Quarter. In the Classic Engine, you can't.

In Polaris, you can't use QUARTERTODATE in formulas of line items with the Formula summary method. In the Classic Engine, you can.

QUARTERVALUE

In Polaris, you must enable Quarter Totals in the Model Calendar to use the QUARTERVALUE function. In the Classic Engine, you can use the QUARTERVALUE function regardless of if Quarter Totals is enabled in the Model Calendar.

In Polaris, you can't use the QUARTERVALUE function in a result line item with a time scale greater than the function. The Classic Engine returns 0 in this case.

RANK

You can't use RANK in Polaris, if:

  • The target is dimensioned by a line item subset.
  • Any of the arguments reference a line item dimensioned by a line item subset.

In the Classic Engine, FALSE for the Include value argument omits a value from the ranking and returns NaN. In Polaris it returns 0.

In the Classic Engine, you can use a text data type for the Ranking groups argument. In Polaris, you can't.

In Polaris you don't have a cell limit. In the Classic Engine, it's 50 million cells.

In the Classic Engine, infinities and NaN are automatically excluded from the RANK function, and it returns NaN. In Polaris, NaN values are automatically excluded from the RANK function and return 0. Infinities have also been removed.

RANKCUMULATE

In Polaris, RANKCUMULATE can't be used when the target is dimensioned by a line item subset, or the function makes a reference to a line item subset.

In Polaris, you don't have a cell limit. In the Classic Engine, it's 50 million cells.

Polaris doesn't support infinities. In the Classic Engine it does.

In the Classic Engine, if a cumulation source contains an infinity, then the result from then on until the end of the cumulation is that infinity. However, if an opposite infinity follows it, the result becomes NaN. In Polaris it'll return NaN instead of infinity.

In Polaris, the blank is unordered, so it's unrankable. For RANKCUMULATE, if the ranking value is blank, the function returns zero.

In Polaris, the ranking values can be the BLANK literal, this is, RANKCUMULATE(1, BLANK) is valid (although the function will always return zero in this case).

RIGHT

In Polaris, the RIGHT function behaves as expected with all text values, including those that contain composite characters or characters from outside the BMP.

In the Classic Engine, the RIGHT function considers the length of:

  • Unicode characters from within the BMP to be 1
  • Unicode characters from outside the BMP to be 2
  • The length of composite characters (such as those with accents or diacritic marks) to be equal to the number of components
ROUND

In Polaris, the ROUND function always uses the EXACT rounding method. As such, you can't provide the Rounding method argument. In the Classic Engine, the ROUND function uses the NORMAL rounding method unless you provide EXACT for the Rounding method argument.

In Polaris, if Number to round is 0 and Number of decimal places is NaN, then the ROUND function returns 0. In the Classic Engine, this returns NaN.

In Polaris, if Number to round isn't 0 and Number of decimal places is NaN, then the ROUND function returns NaN. In the Classic Engine, this returns NaN.

In Polaris, if Number of decimal places isn't a whole number, then Number of decimal places rounds to the nearest whole number. The Classic Engine doesn't support the NORMAL Rounding method  in this case, and with the EXACT Rounding method, ROUND rounds towards zero.

In Polaris, if Number of decimal places is -infinity or less than -308.5, then ROUND returns 0, -infinity, or Infinity, as expected. If Number of decimal places is infinity or greater than 308.5, then ROUND returns Number to round. In the Classic Engine, all these return NaN.

In Polaris, if Rounding direction is UP, DOWN, AWAYFROMZERO, or TOWARDSZERO, and the result is too small to represent, then ROUND returns the smallest possible number. In the Classic Engine, these cases, with a Rounding method of EXACT, return 0.

In Polaris, if Number to round is negative, Rounding direction is NEAREST, and Number of decimal places is negative, then ROUND rounds away from zero. The Classic Engine rounds this toward zero.

SELECTIn Polaris, the reference in SELECT must be literal, rather than an expression. In the Classic Engine, SELECT allows expressions only on the time axis, for Time.'Current Period' and literal offsets.
SPREAD

In Polaris, you can't use the SPREAD function for line items that have the Formula summary method. In the Classic Engine, you can.

In Polaris, you can use the SPREAD function over any dimension, by including an additional argument. In the Classic Engine, you can't. Where, if the additional argument isn't included, the function defaults to time as the dimension.

SUBSTITUTEIn Polaris, the SUBSTITUTE function doesn't match the base characters of a composite character. For example, the SUBSTITUTE function doesn't consider â to contain a or が to contain か. In the Classic Engine, the SUBSTITUTE function matches the base characters of composite characters. For example, the SUBSTITUTE function considers â to contain a or が to contain か.
SUM aggregation functionIn Polaris, you can't use the bracketed aggregation function SUM in formulas of line items with the Formula summary method. In the Classic Engine, you can.
TEXTIn Polaris, the TEXT function returns a text value of NaN when used with the numerical value NaN. In the Classic Engine, the TEXT function returns a blank value when you use it with the numerical value NaN.
TIMESUM

In Polaris you can only use a number or Boolean type for the Line item to aggregate argument. In the Classic Engine, you can use number, Boolean, date, list, and text type line items.

In Polaris, if you only provide a value for the Start period argument and not the End period argument, the TIMESUM function aggregates all values from the Start period through to the end of the applicable time range. In the Classic Engine it'll return the value from the Start period.

In Polaris, when you use date values for the Start period and End period arguments, they behave as expected. In the Classic Engine, the date for the Start period should be in the period where aggregation ends and the date for the End period should be in the period where aggregation begins.

In Polaris, if Start period or End period are outside the range of the time dimension, then the formula using TIMESUM  is invalid.

TRIMIn the Classic Engine, the TRIM function removes all leading and trailing spaces, and extra spaces between words in a text string. You can't currently use the TRIM function in Polaris. 
UPPERIn Polaris, you can't use the Locale argument with the UPPER function. In the Classic Engine, you can use the Locale argument.
VALUEIn Polaris, the VALUE function returns NaN for non-decimal representations of numbers (for example, "0x11.11p0"). In the Classic Engine, non decimal representations of numbers don't necessarily return NaN.
WEEKDAYIn Polaris, you can use a decimal value for the Day offset argument and it rounds to the nearest whole number. If you use a value outside of 1 to 7, the function returns 0. In the Classic Engine, you must use a whole number for the Day offset argument.
WEEKTODATE

In Polaris, you can use the WEEKTODATE function with line items having the Week time scale. In the Classic Engine, you can't.

In Polaris, you can't use WEEKTODATE in formulas of line items with the Formula summary method. In the Classic Engine, you can.

WEEKVALUEIn Polaris, you can't use the WEEKVALUE function in a result line item with a time scale greater than the function. The Classic Engine returns 0 in this case.
YEARTODATE

In Polaris, you can use the YEARTODATE function with line items with a time scale of Year. In the Classic Engine, you can't.

In Polaris, you can't use YEARTODATE in formulas of line items with the Formula summary method. In the Classic Engine, you can.

YEARVALUE

In Polaris, you can't use the YEARVALUE function in a result line item with a time scale greater than the function. The Classic Engine returns 0 in this case.

In Polaris, you can't use YEARVALUE in formulas of line items with the Formula summary method. In the Classic Engine, you can.

In the Polaris engine, resolved values for whole-number arguments round to the nearest integer. Values with a 0.5 fraction round away from zero. For example, 0.5 rounds up, and -0.5 rounds down. In the Classic Engine, the rounding policy depends on the function.

Functions that are only available in Polaris and not in the Classic Engine include:

Functions, including most of the call centre planning and financial functions, that aren't available in Polaris include: