A formula calculates a result from other numbers instead of having someone type it in: an estimated 1RM from the weight and reps of a set, a relative strength score from a 1RM and body weight, or one readiness score from a survey's answers. This guide covers where formulas live, how to write one, converting units, and when results are calculated.
Where formulas live
There are three places to build a formula, and what it can reference depends on which one you use:
A metric — turn on Calculated metric. The formula works from the numbers logged in the set that tests the metric (its reps, weight, time, and so on). It can't reference other metrics.
An assessment — turn on Custom formula. The formula works from the metrics inside the assessment, and the result becomes the assessment's headline value. See Assessments.
A survey — turn on Custom formula. The formula works from the survey's questions and rolls the answers into one score. See Surveys.
To combine two metrics, use an assessment
A metric's formula can only see its own test. For something like relative strength (Back Squat 1RM ÷ body weight), create an assessment that holds both metrics and build the formula there.
A formula works on one date's results, so it can't total a week of training or compare this week with the last month. For a rolling total or a workload ratio (ACWR), create a Training load metric instead.
For creating metrics and the rest of their settings, see Metrics.
Calculated metrics
A calculated metric is the way to track a result you derive from a single test, such as an estimated max from a rep-max set.
On the Metrics tab, click Add metric and choose Metric.
Set the Measurement type to the kind of result the formula returns, such as Weight for an estimated 1RM.
Under Measurement specifications, tick every parameter the formula uses besides the result, such as Reps.
Open Advanced settings and turn on Calculated metric (1).
Build the formula in Formula (2), then click Create metric.
The variables reps, weight, time, distance, speed, height, power, energy, and heart rate stand for what the athlete logs in the set. A parameter the set doesn't log falls back to the value in the metric's measurement specifications, so a 40-yard sprint metric can use distance from its specification and time from the test.
Common calculated maxes:
Epley:
weight × ( 1 + reps ÷ 30 )Brzycki:
weight ÷ ( 1.0278 - 0.0278 × reps )
A calculated metric gets its results from workouts: a Testing set on a prescribed exercise, or a metric test block (see Blocks). With more than one attempt, the formula runs on each attempt and Calculation under Advanced settings decides how the attempts combine into one value. Calculation is not the formula.
Formulas in assessments and surveys
Open the assessment or survey from the Metrics tab. Its Formula section only unlocks once the assessment has metrics (1) or the survey has questions. Turn on Custom formula (2) and build the formula in Expression (3). The dropdown lists each of the assessment's metrics, or each of the survey's questions, by name.
When a formula is on, the assessment's What this assessment reports section reads "Derived by formula from" its metrics, and Measurement type and its unit describe the formula's result.
Writing formulas
The formula field takes one item at a time: a variable, a metric, an operator, or a number. Pick each item from the dropdown, or type it and press Enter. Typing a whole equation at once, like weight x reps, creates one item the formula doesn't recognize.
The field colours each item by what it is: metrics and variables sit in grey boxes, operators and brackets stand on their own, and numbers are blue. An item the formula doesn't recognize shows in red, struck through with a warning sign. To remove an item, click it and press Delete, or press Backspace in the empty field to remove the last one.
The operators are:
+ and - to add and subtract
× to multiply (type
xto find it)÷ to divide (type
/to find it)^ for an exponent
( and ) to group
To add a number, type it and press Enter. Write it plainly, like 0.5 or 30: a number with a leading decimal point (.5) or a trailing zero (1.50) is rejected.
÷ divides by the next item only
a ÷ b ^ 2 squares the whole quotient. When you divide by anything longer than one item, wrap it in its own parentheses: a ÷ ( b ^ 2 ).
The formula has to return a number. When you save, FYTT checks it with sample values and rejects it if it "contains invalid variables or operators", "contains syntax errors", or its "result must be a number".
Units and unit conversion
A formula doesn't convert units. Each metric comes in as the number it's recorded in, in that metric's unit, and the result is saved in the unit of the metric or assessment holding the formula. Height and Weight are recorded in feet or centimeters and pounds or kilograms, depending on your measurement system.
To convert, multiply by the factor in the formula. For a skeletal muscle index in kg/m², with muscle mass in kilograms and height in feet:
Skeletal Muscle Mass ÷ ( ( Height × 0.3048 ) ^ 2 )
Useful factors: feet to meters x 0.3048, inches to meters x 0.0254, centimeters to meters x 0.01, pounds to kilograms x 0.4536.
Special operators
The formula builder has operators for working with lists of values. The syntax follows the Ruby programming language, with a few added methods.
Arrays
An array is a list of values between [ and ], separated by ,:
[1, 2, 3, 4, 5, 6]
In an assessment or survey, the values can be metrics or questions:
[Sleep, Stress, Fatigue]
Arrays must be followed by an array operator
An array isn't a number, so an array on its own isn't a valid formula. Chain an array operator to the end to turn it into one.
Array operators
Chain an operator to the end of an array, like [1, 2, 3, 4].max.
.max returns the largest value in the array.
.min returns the smallest value.
.mean returns the average of the values, or 0 for an empty array.
.abs returns the absolute value of a number, or of an expression in parentheses:
(5 - 7).abs => 2
.count_if_between(start, stop, inclusive) counts the values greater than start and less than stop. Add 1 as the third value to count values equal to either end too:
[1, 2, 3, 4].count_if_between(1, 4) => 2[1, 2, 3, 4].count_if_between(1, 4, 1) => 4
.count_if_greater_than(value, inclusive) counts the values greater than value, or greater than or equal to it with 1 as the second value:
[1, 2, 3, 4].count_if_greater_than(1) => 3
.count_if_less_than(value, inclusive) counts the values less than value, or less than or equal to it with 1 as the second value:
[1, 2, 3, 4].count_if_less_than(4) => 3
Array index
These operators return a position in the array rather than a value. Positions start at 0, so the first item is at position 0.
.max_index returns the position of the largest value:
[3, 1, 4, 2].max_index => 2
.min_index returns the position of the smallest value:
[3, 1, 4, 2].min_index => 1
.inclusion_index(value) returns the position of the first range in the array that contains value, or 0 if none does. Use it to sort a result into bands:
[...3, 3...6, 6...10, 10...].inclusion_index(7) => 2
Range
A range is written with ... and leaves out its last number: 0...10 holds every value from 0 up to, but not including, 10, so it holds 9.99 but not 10.
...10holds every value below 10.10...holds 10 and every value above it.
When results are calculated
An assessment or survey formula runs for one athlete on one date, whenever one of its metrics gets a result for that athlete that day: typed on the metrics grid or a metric's page, recorded through the assessment, logged in a completed workout, or imported. For each metric, it uses the athlete's most recent result on or before that date, or the athlete's override if the metric has one. The result is dated that day and shows on the grid and the assessment's page, where it's read-only.
A calculated metric's result is calculated when the athlete completes the workout that tests it.
Changing a formula doesn't recalculate results already saved. It applies from the next time an input is recorded.


