Issue Filter Formula

Variables

A variable is one number. It is produced by running one query and aggregating one field - or just counting the results.

Configuring a Variable

SettingWhat It Does
EnabledWhether the variable is fetched at all. Only a is enabled by default
LabelA human-readable name shown in the config UI, so a is not just a letter
Data sourceProjects, Board, Saved Filter, Custom JQL, or Dynamic Filter Controller
AggregationHow the matching issues are reduced to one number
FieldWhich field to aggregate - not needed for Count

Aggregations

AggregationReturnsTypical Use
Count of work items (default)Number of matching issuesCounts, rates, ratios
Sum of a fieldTotal of a numeric fieldTotal story points, total time spent
Average of a fieldMean of a numeric fieldAverage estimate, average story size
Minimum of a fieldSmallest valueEarliest or lowest bound
Maximum of a fieldLargest valueWorst case, most recent

Time Fields

For time-tracking aggregations, three sub-values are available: Time spent, Remaining estimate, and Original estimate. Values are read in seconds, so divide in the formula to display hours or days - for example a / 3600 for hours.

Naming Variables

Give every enabled variable a label. Six months later, a / b * 100 is unreadable but "Production bugs / All bugs x 100" is obvious - and the labels are what your successor will rely on.

Practical Notes

  • Enable only the variables you use. Each enabled variable is a separate query, so nine enabled variables means nine queries on every refresh
  • A variable whose query matches nothing returns 0 for Count, and no value for Sum, Average, Minimum, and Maximum - which will make a formula dividing by it return NaN
  • Variables scoped to the Dynamic Filter Controller re-resolve when the shared filter bar changes, so one formula can respond to dashboard-wide filtering