Daily DAX : Day 238 RUNINGSUM
The RUNNINGSUM function in Power BI's DAX (Data Analysis Expressions) language is used to calculate a running total (or cumulative sum) of a specified expression across a table, typically ordered by a column such as a date or index. It is particularly useful for analyzing trends over time or sequential data, such as cumulative sales, inventory levels, or account balances.
Syntax
dax
RUNNINGSUM(<table>, <expression>, <order_by_column>[, <direction>])
table: The table over which the running sum is calculated.
expression: The numeric expression to sum, such as a column (e.g., Sales[Amount]) or a calculation.
order_by_column: The column used to determine the order of rows for the running sum (e.g., Sales[Date]).
direction (optional): Specifies the sort direction, either "ASC" (ascending, default) or "DESC" (descending).
How It Works
RUNNINGSUM evaluates the <expression> for each row in the <table>, accumulating the sum based on the order specified by <order_by_column>.
The running total resets when the context changes (e.g., in a new group if used with a grouping function) unless otherwise specified.
It processes rows sequentially, adding each row’s value to the sum of all previous rows in the defined order.
Use Case
Scenario: A retail company wants to track cumulative sales over time to analyze revenue trends.
Example
Suppose you have a table Sales with columns Date and Amount:
Date Amount
2025-01-01 100
2025-01-02 150
2025-01-03 200
DAX Formula:
dax
CumulativeSales =
RUNNINGSUM(
Sales,
Sales[Amount],
Sales[Date]
)
Result (assuming ascending order by Date):
Date Amount CumulativeSales
2025-01-01 100 100
2025-01-02 150 250
2025-01-03 200 450
The CumulativeSales column shows the running total of Amount, adding each day’s sales to the previous total in chronological order.
Common Use Cases
Financial Reporting: Calculate cumulative revenue, expenses, or profit over time for dashboards or reports.
Inventory Management: Track cumulative stock levels to monitor inventory trends.
Performance Analysis: Measure cumulative performance metrics, like total website visits or user sign-ups.
Time-Based Trends: Visualize how values accumulate over days, months, or years in line charts or tables.
Key Notes
Order Matters: Ensure the order_by_column is meaningful (e.g., a date or sequence column) to get accurate results.
Performance: For large datasets, optimize by filtering the table (e.g., using FILTER or a calculated table) to reduce processing time.
Context Sensitivity: If used in a visual or with slicers, the running sum respects the filter context, so test thoroughly to ensure expected behavior.
Alternative: Before RUNNINGSUM was introduced, cumulative totals were often calculated using CALCULATE, FILTER, and SUM, which was more complex. For example:
dax
CumulativeSalesAlt =
CALCULATE(
SUM(Sales[Amount]),
FILTER(
ALL(Sales[Date]),
Sales[Date] <= EARLIER(Sales[Date])
)
)
RUNNINGSUM simplifies this process.
Practical Example in Power BI
Create a table or import data with columns like Date and SalesAmount.
Add a new measure or calculated column:
dax
TotalRunningSales =
RUNNINGSUM(
Sales,
Sales[SalesAmount],
Sales[Date],
"ASC"
)
Use this measure in a visual (e.g., a line chart) to show cumulative sales over time.
Limitations
Single Table: RUNNINGSUM operates on a single table; for complex relationships, you may need to preprocess data.
Sort Direction: If you need a reverse running sum (e.g., from newest to oldest), use "DESC".
No Grouping by Default: To calculate running sums within groups (e.g., per product), use GROUPBY or FILTER to preprocess the table.
Comments
Post a Comment