What it does
Two column behaviours configured in the classic column editor. A calculated column derives its value from other columns on the same row or its parent row, evaluated when the row is read. A rollup column aggregates values across related rows using SUM, COUNT, MIN, MAX or AVG, and is populated by scheduled background jobs.
Key facts
- Calculated columns support Text, Choice, Yes/No, Whole Number, Decimal Number, Currency and Date Time. Built-in functions cover date arithmetic (ADDDAYS, DIFFINDAYS and friends) plus CONCAT, TRIMLEFT and TRIMRIGHT.
- A calculated column can span two tables only — the current row and a parent row reached through a lookup. Three levels isn't allowed, and multi-table lookups like Customer can't be used.
- Chained calculated columns max out at five, and a saved query, chart or visualisation can carry at most 50 unique calculated columns.
- Rollups are calculated by two async system jobs. Mass Calculate Rollup Field runs once per column, by default 12 hours after you create or change it. Calculate Rollup Field is one recurring incremental job per table, with a default minimum recurrence of one hour.
- The manual Recalculate button on the form is capped at 50,000 related rows and a hierarchy depth of 10. Those two limits don't apply to the system jobs.
- Default ceilings are 200 rollup columns per environment and 50 per table, adjustable through
MaxRollupFieldsPerOrgandMaxRollupFieldsPerEntity. Microsoft warns that more than 100 per environment can degrade performance and inflate storage. - Rollups work over 1:N relationships only. Not N:N, and not over the 1:N relationship for the Activity or Activity Party tables. A rollup over a rollup isn't supported.
- Each rollup column quietly creates two extra columns,
<name>_dateand<name>_state, where the state value tells you whether the last calculation succeeded, overflowed, hit a recursion limit or found a loop. - Neither type triggers workflows, plug-ins or duplicate detection rules. A workflow wait condition can't use a rollup either.
When to use / skip
Reach for a rollup when the client wants a number on a parent record and can live with it being up to an hour stale — total open opportunity value on an account is the textbook case, and it's genuinely fine. Reach for a calculated column only if formula columns can't produce the type you need, because Power Fx is a better language than the classic expression builder in every respect. Stop using both the moment the requirement involves N:N relationships, more than two tables, or a number that has to be correct at the instant someone looks at it — that's a plug-in or a real-time aggregation in the report layer.
Configuration decisions
- Whether "roughly right within the hour" is acceptable, because it's the whole bargain with rollups.
- What time the Mass Calculate job should run — Microsoft's own advice is to move it to a quiet period rather than accept the default 12-hour offset.
- Whether the number needs to be visible to everyone, since rollups are aggregated in the system user context and every user sees the same value unless you apply column security.
- Whether to secure a calculated column that reads secured columns, because column security is ignored on the related table.
- Whether the rollup should filter by status, and whether that filter will still make sense after the client changes their status reasons.
Gotchas
- A rollup counts only the relationship you explicitly named. The Cases subgrid on an account form can show more rows than the account's case rollup counts, because the grid also picks up cases related through the primary contact. Users read that as a bug.
- Precision is rounded down to the rollup column's precision before aggregation, so summing four-decimal currency into a two-decimal rollup loses money on every row.
- You can't convert an existing plain column into a calculated one. If a client currently populates a field with JavaScript or a plug-in, you're creating a new column and migrating.
- Nulls behave differently between the two eras of this feature: a calculated column returns null if any input is null, whereas a formula column treats a null number as zero. Mixing them produces results nobody can explain in a workshop.
- If a rollup column stops updating and nobody has touched the underlying columns, that's by design — the Mass Calculate job won't run again for ten years.
Consultant notes
- Set expectations on latency in the first design session, in writing. "Why is this number wrong?" raised at UAT is a much worse conversation than "we agreed hourly" raised in design.
- Treat the 200-per-environment rollup ceiling as a soft budget of about 100 and track it. Environments that drift past it get slow in ways that are hard to attribute.
- For new builds, default to formula columns and use calculated columns only where the data type forces your hand. The classic editor is in maintenance and the skills to maintain it are thinning out.
- If a client asks for a real-time total on a form, the honest answer is usually a plug-in or a chart, not a rollup. Say so before they see the calculator icon and assume it refreshes itself.
Revisit if formula columns pick up currency support, or if the environment starts creeping past a hundred rollups.