Microsoft Learn

SQL Server Analysis Services > Multidimensional Modeling > MDX Functions

MDX Numeric Functions

Introduction

Multidimensional Expressions (MDX) provides a rich set of built-in functions for performing mathematical and statistical operations on data within your Analysis Services cubes. Numeric functions are essential for calculating metrics, performing comparisons, and manipulating numerical data to derive meaningful insights.

These functions operate on numeric values, sets of numeric values, or members that resolve to numeric values. Understanding and effectively using these functions is crucial for creating powerful MDX queries and calculations.

Key Numeric Functions

Here are some of the most commonly used MDX numeric functions:

Mathematical Functions

  • ABS(number): Returns the absolute value of a number.
  • CEILING(number): Returns the smallest integer greater than or equal to the specified number.
  • EXP(number): Returns e raised to the power of the specified number.
  • FLOOR(number): Returns the largest integer less than or equal to the specified number.
  • LN(number): Returns the natural logarithm of a number.
  • LOG(number, [base]): Returns the logarithm of a number to a specified base.
  • MOD(dividend, divisor): Returns the remainder of a division.
  • POWER(base, exponent): Returns the result of a number raised to a power.
  • ROUND(number, [decimal_places]): Rounds a number to a specified number of decimal places.
  • SIGN(number): Returns the sign of a number (-1 if negative, 0 if zero, 1 if positive).
  • SQRT(number): Returns the square root of a number.

Statistical Functions

  • AVG(set): Returns the average value of a set of numbers.
  • COUNT(set): Returns the number of members in a set.
  • MAX(set): Returns the maximum value of a set of numbers.
  • MIN(set): Returns the minimum value of a set of numbers.
  • SUM(set): Returns the sum of a set of numbers.

Aggregate Functions (often used with numeric context)

While aggregate functions are a distinct category, many numeric operations rely on them. For instance, calculating the average of a measure over a set:

  • AGGREGATE(set, [numeric_expression]): Evaluates a numeric expression over a set.

Other Useful Numeric Functions

  • COALESCE(value1, value2, ...): Returns the first non-null expression.
  • IIF(condition, value_if_true, value_if_false): Returns one of two values depending on whether a condition is true or false.
  • ISERROR(expression): Returns TRUE if the expression evaluates to an error.

Examples

Calculating Average Sales per Product Category

This example calculates the average sales for each product category.


WITH MEMBER [Measures].[Avg Sales] AS
    Avg([Product].[Category].Children, [Measures].[Internet Sales Amount])
SELECT
    [Measures].[Avg Sales] ON COLUMNS,
    [Product].[Category].Children ON ROWS
FROM [Adventure Works DW]
                

Finding the Maximum Order Date

This example finds the latest order date in the entire dataset.


SELECT
    MAX([Date].[Date].Members) AS [Latest Order Date]
FROM [Adventure Works DW]
                

Calculating Percentage of Total Sales

Using numeric and set functions to determine a product's contribution to total sales.


WITH MEMBER [Measures].[% of Total Sales] AS
    [Measures].[Internet Sales Amount] /
    SUM(
        [Product].[Product].[Product].MEMBERS,
        [Measures].[Internet Sales Amount]
    )
SELECT
    [Measures].[% of Total Sales] ON COLUMNS,
    [Product].[Product].[Product].Members
        ON ROWS
FROM [Adventure Works DW]
WHERE ([Date].[Calendar Year].&[2004])
                

Note: The MEMBERS keyword is often used to represent all members of a dimension level for aggregation purposes. [Product].[Product].[Product].MEMBERS refers to all products at the Product level.

Best Practices

  • Understand Data Types: Ensure you are applying numeric functions to appropriate data types. MDX is generally forgiving, but explicit conversions can prevent unexpected results.
  • Use WITH MEMBER: For complex calculations, define intermediate or final measures using the WITH MEMBER clause for readability and maintainability.
  • Performance Considerations: Be mindful of the scope of your aggregations. Functions like SUM, AVG, MAX, and MIN can be computationally intensive on large datasets. Optimize your cube design and queries where possible.
  • Error Handling: Use functions like ISERROR and COALESCE to gracefully handle potential errors or null values in your calculations.
  • Test Thoroughly: Always test your MDX calculations with various scenarios and data subsets to ensure accuracy.