Cost Risk Software · Documentation
Quantik User Guide
A section-by-section guide to Quantik 0.8.0: install it, build a model, run it, read the results and issue the report.
00 · Before you start
- Windows with 64-bit Microsoft 365 Excel (Excel 2016 or later).
- The .NET 10 Desktop Runtime (x64). If it is missing, the installer says so and tells you where to get it from Microsoft.
- No administrator rights. Quantik installs for your Windows account only.
- No internet connection. Licence checks happen on your PC and Quantik sends nothing anywhere.
If your organisation only allows signed add-ins, ask IT to trust the signed release, or to add %LOCALAPPDATA%\Programs\Quantik as a trusted location.
01 · Install and uninstall
- Download and unzip the release folder. download link
- Close every Excel window.
- Double-click Install.cmd.
- Start Excel. A Quantik tab appears on the ribbon.
The installer checks for 64-bit Excel and the .NET runtime, copies the add-in to %LOCALAPPDATA%\Programs\Quantik\, clears the "downloaded from the internet" mark and registers the add-in so Excel loads it at start-up. To preview the changes without making them, run this in PowerShell from the release folder:
.\Install-Quantik.ps1 -WhatIf
To uninstall, close Excel and double-click Uninstall.cmd. It removes the files and the registry entry. Your workbooks are not touched.
The release folder also contains INSTALL.md, the example workbooks, the four authority templates and SHA-256 checksums.
02 · Your first run
- Open
examples\Example QRA - Bayview.xlsx. - On the Quantik tab, set Iterations to 10,000 and Sampling to Latin Hypercube.
- Click Run Simulation. It takes about 15–25 seconds; progress shows on the status bar.
- The Quantik Results sheet opens with statistics, the P1–P99 table, contingency, the top drivers, an S-curve, a histogram and a tornado.
- Click Export PDF for the three-page client report.
Then open Example QRA - BOQ Risk Model.xlsx, run it, and try Contingency, Sensitivity and Browse Results. Both examples are explained in Worked examples.
03 · The Quantik ribbon
| Group | Button | What it does |
|---|---|---|
| Synthetik | Quantik, | About box (version, last run, licence, Machine ID). The Licence button shows "Trial: n d", "Licensed", "Renew licence" or "Enter licence". |
| Model | Dialog for the selected cell: choose a distribution, enter values or % of the cell's own value, see the shape and P10/P50/P90 update live, then insert the formula. | |
Wraps the selected total in SYN.OUTPUT("name", …). | ||
| Goes to the Risk Register sheet, or adds a ready-to-fill one. | ||
| Puts the selected inputs in one correlation group at ρ, or removes them. | ||
| Lists every input, output and invalid cell on a Quantik Model sheet, without running. | ||
| What cells show outside a run (mean, most likely or P50); the four-tab Settings dialog. | ||
| Simulation | Iterations from a list (1,000 to 100,000, or Auto) or typed (100 to 1,000,000; "10k" works). Latin Hypercube or Monte Carlo. Fixed seed. | |
| Analysis | The Quantik Results sheet. | |
| Jump to that chart on the Results sheet. | ||
| Floating distribution window for any input or output cell. | ||
| The GN3A ρ = 0 / ρ = 1 test, and named what-ifs on common random numbers. | ||
| Fits Normal, Lognormal, Uniform, Triangular and PERT to selected data, ranked by AIC with KS and AD checks, and gives the formula to paste. | ||
| Output P50/P90 with each input in its best or worst 10%; and the replication pack of every input, seed and setting. | ||
| Reports | One-page contingency sheet. | |
| Builds the A4 client report sheet for review; exports it to PDF. | ||
| Stores this run (P50, P90, base and every component's contribution); keeps 12 revisions. | ||
| Waterfall of what moved P90 (and P50) since the last saved revision. |
04 · Defining inputs
The quickest way: select a cell holding a single-point cost and click Define Input. Pick a distribution (Range, PERT, PERT P10/P90, Triangular, Uniform, Normal or Risk event), enter the values or percentages of the cell's own value, optionally name it and give it a correlation group, and insert. Select an existing Quantik formula and Define Input reads it back for editing.
Or type the functions directly:
| You want | Put in the cell |
|---|---|
| A cost range (min, most likely, max) | =SYN.PERT(min, ml, max, SYN.NAME("Earthworks")) |
| A range whose reading (min/max or P10/P90) follows Settings | =SYN.RANGE(low, ml, high, SYN.NAME("Asphalt rate")) |
| A range given as P10 / most likely / P90 | =SYN.PERTALT(0.1, p10, "m. likely", ml, 0.9, p90) |
| A percentage range on the cell's base | =SYN.PERT(C5*0.9, C5, C5*1.25, SYN.NAME(B5)) |
| A risk event | =SYN.EVENT(0.375, SYN.PERT(8000, 20000, 45000), SYN.NAME("Rock in cut")) |
| A shared risk driver | =SYN.DRIVER("Ground conditions", 0.95, 1, 1.25) |
| Related items that move together | add SYN.CORR("Civil", 0.6) to each item's formula |
| Different correlations between particular items | enter a correlation matrix on the sheet and add SYN.CORRMAT($K$2:$M$4, 1), …, 2), …, 3) to the items, by position |
| Past data (rates, actual ÷ estimate ratios) | select it and click Fit Distribution; paste the formula of the best fit |
Use SYN.RANGE for BOQ quantities and rates. One setting then moves the whole model between min/max and P10/P90 ranges, which is the biggest single choice in most QRAs (see Risk modelling).
Names matter. The name appears in the tornado, the contingency breakdown and the run log, and with identity streams it decides the input's random numbers. Give every input a short, unique name.
Invalid arguments (min above max, most likely outside the range) show #VALUE! rather than quietly becoming a constant, and a run will not start until they are fixed.
05 · Outputs and the base estimate
- Wrap each total you want analysed in
=SYN.OUTPUT("Total project cost", <your total>), or select it and click Add Output. You can have several outputs (inherent, contingent, each register section, duration). - Name the base-estimate cell
SYN_BaseEstimate. Contingency is then reported against it at every confidence level. - If there are several outputs, the workbook name
SYN_ReportOutputchooses which one the report covers.
06 · Risk registers
Click Risk Register to add a ready-to-fill register: Include (Y/N), a likelihood table, risk or opportunity type, a SYN.EVENT formula per row, and the total as an output. The BOQ example and authority templates carry a fuller register, in sections (principal's, shared, contractor's, opportunities, unidentified), with:
- cause, consequence, allocation and principal's share;
- before-controls likelihood and low / most likely / high cost, with a rating;
- controls (response, treatment, status, cost, whether already in the base), then residual likelihood, cost and rating;
- treatment action, owner, due date, status and review dates;
- a Programme delay flag (weeks added to the Schedule) and a GN3A screening column (LPHC and minor-risk flags);
- an input check column that explains any problem in words.
The Risk Matrix sheet gives 5 × 5 heat maps before and after controls and for opportunities, with editable likelihood bands, consequence thresholds (% of base) and rating table.
07 · Running a simulation
- Click Model Check. It lists every input and output and flags any invalid cell.
- Choose Iterations. 10,000 is a sound default; GN3A asks for 5,000–10,000. "Auto" runs until P90 is known to within the precision target (default ±2.5% of the P90 contingency), never fewer than 5,000.
- Keep Latin Hypercube sampling and a fixed seed unless you have a reason not to; the seed used is always reported.
- Click Run Simulation. Close other workbooks for speed.
Inputs first reached part-way through a run (inside an IF branch) are sampled from then on and reported. Iterations whose output is an Excel error are excluded and counted.
08 · Reading the results
The Quantik Results sheet
- Statistics: mean, standard deviation, min, max, P95, P99, mean of the worst 10% and 5%.
- P1–P99 table with contingency against
SYN_BaseEstimate, and "P90 ± $X (95%)" precision. - Where the base sits: the probability of not exceeding the base estimate (often low, because ranges are skewed upwards).
- Top drivers: change in P50 and P90, regression and rank correlation, share of variance.
- Charts: S-curve, histogram and tornado as native Excel charts, plus convergence.
Browse Results
Toggle Browse Results, then select any input or output cell: a floating window shows its distribution from the last run, as a histogram or S-curve. Drag the two delimiters, or type the tail percentages, to read any range. The bar above the chart shows the actual share of iterations below, between and above the delimiters, so a risk that is $0 in most iterations reads correctly. Copy chart puts it on the clipboard. Closing the window turns browsing off.

Functions that read the last run
SYN.PERCENTILE("Total project cost", 0.9), SYN.MEAN, SYN.STDDEV, SYN.TARGET, SYN.TAILMEAN, SYN.PRECISION and SYN.JCL put results straight into your own summary sheets.
The run log
Every reported run is appended to the Quantik Run Log sheet: date and time, user, Quantik version, output, iterations, sampling, streams, seed, settings hash, input fingerprint, number of inputs, mean, P50, P90 and P90 precision. If the hashes match between two runs, the model and settings are the same, and the same seed reproduces the result exactly.
09 · Reports and revisions
| Button | Produces |
|---|---|
| Contingency | A one-page Quantik Contingency sheet: recommended contingency (P90 − base), estimate and contingency at each confidence level, contingency vs confidence chart, the tail beyond P90, and the breakdown across the model's other outputs with each component's contribution to P90 (±) and the diversification. |
| Report | The A4 client report on a Quantik Report sheet, to review in Excel. |
| Export PDF | The report as a three-page PDF: (1) headline tiles, confidence table, statistics and S-curve; (2) histogram and method notes; (3) P50 and P90 driver tornados and a top-10 table. Saved to SYN_ReportPath if set, else the workbook's folder. |
| Save Revision | Stores the run (P50, P90, base, each component's contribution) in the workbook, keeping 12 revisions. Later runs overlay its S-curve as a dashed line. |
| Revision Bridge | A waterfall from the last revision's P90 to this run's: the base estimate's change, each component's change, and a small "sampling and interaction" step, so the bars add up exactly. Also a P50 bridge and the revision history. |
Report settings (framework preset, headline tiles, table percentiles, project details, optional pages) are on the Report & framework tab of Settings.

10 · Scenarios, correlation test, stress test and input pack
Scenarios
- Click Scenarios. The first time, it adds a Quantik Scenarios sheet.
- List up to 20 scenarios. Each has a name and up to five changes, either a cell (
Risk Model!B8=Unmitigated) or a setting (Settings.RangeMethod=PertAlt). - Click Scenarios again. Quantik runs the baseline and every scenario on the same seed and random numbers, puts every change back, and writes a comparison table and S-curves.
Because each input keeps its own random numbers, the differences between scenarios are the changes themselves, not sampling noise.
Fit Distribution
Select a column of past data (tendered rates, actual ÷ estimate ratios from closed jobs, durations) and click Fit Distribution (Model group). The Quantik Fit sheet ranks Normal, Lognormal, Uniform, Triangular and PERT by AIC (lower is better), with the Kolmogorov–Smirnov and Anderson–Darling distances, fitted P10/P50/P90 beside the data's, and a chart of the data against the three best fits. Copy the formula of the fit you choose into the input cell. When two fits are within 2 AIC the sheet says they fit equally well: choose on what you know about the quantity. Bounded fits extend one data spacing beyond the observed range, so the next job is not ruled out by the last ones.
Correlation Test
Correlation Test runs the model three times on one seed: every input independent (ρ = 0), as modelled, and fully correlated (ρ = 1). It writes the Quantik Correlation Test sheet: P5–P95 under each, the gap at P50 and P90, where the model sits in the gap, P90 contingency under each, and S-curves. Attach it to a GN3A submission.
Stress Test
Stress Test reads the last run, so nothing is re-run. For each input it shows the output's P50 and P90 in the iterations where that input sits in its best 10% (lowest values) or worst 10% (highest). Risk events are split by does not occur / occurs. The Quantik Stress Test sheet ranks the 15 inputs with the biggest P90 swing and charts the change from the run's P90. Use it to answer "if ground conditions come in at the bad end, where does our P90 go?"
Input Pack
Input Pack (Reports group) lists every uncertain input of the last run: cell, name, function and its arguments, correlation group and ρ, and the sampled mean, P10, P50, P90, minimum and maximum. It also records the seed, iterations, sampling, settings, settings hash and input fingerprint. It writes the Quantik Input Pack sheet and a CSV next to the workbook. A reviewer can audit or rebuild the model from it, and the fingerprints match the Run Log.
11 · Settings
Settings are saved inside the workbook, so they travel with the file; switching workbooks switches settings.
| Tab | Options |
|---|---|
| Simulation | Iterations (100 to 1,000,000) or auto-stop with a precision target and a maximum; Latin Hypercube or Monte Carlo; fixed or random seed; PERT shape λ; how SYN.RANGE reads ranges (PERT or triangular, min/max or P10/P90); cell values; correlation between groups; random streams (by identity or by position). |
| Sensitivity | Method (change-in-statistic tornado, standardised regression, rank correlation, contribution to variance); tornado statistics (Mean or P1–P99); tail size; drivers shown; spider chart. |
| Charts & display | Histogram bars; marked percentiles; base and mean markers; shaded band; colours; statistics box; % bar; comparison overlay. |
| Report & framework | Presets for Cenex, TMR, DITRDCA, RES, VIC or Custom; headline tiles; confidence-table percentiles; project, client, document number, prepared by; optional pages; client PDF extras. |
12 · @RISK workbooks
When @RISK is not loaded, Quantik also registers these functions, so workbooks built with @RISK formulas simulate as they are:
RiskPert RiskPertAlt RiskTriang RiskTrigen RiskUniform RiskNormal RiskLognorm RiskBernoulli RiskBinomial RiskPoisson RiskDiscrete RiskName RiskTruncate RiskTruncate2 RiskShift RiskStatic RiskCorrmat RiskCollect RiskCategory RiskUnits RiskMakeInput RiskOutput
Truncate and Shift follow @RISK's semantics. When @RISK is loaded, Quantik stands aside so the two never conflict. RiskCorrmat correlation matrices work as in @RISK: one triangle or both may be filled, the diagonal is taken as 1, and each matrix is applied exactly as entered (an invalid one is adjusted to the nearest valid matrix and the status line says so). An asymmetric matrix or a position outside it shows #VALUE!.
13 · Licensing and trial
The trial
With no licence key, Quantik runs a 30-day trial from the first day it runs, with every feature. Reports carry a red "QUANTIK TRIAL: evaluation only, not for issue" header.
Entering a licence
- Click the Licence button in the Synthetik group (or open About, or File → Quantik).
- Click Enter licence and paste the key from your email, or open the
.qlicfile. - Quantik checks the key before saving it. An invalid key is refused with a reason (wrong machine, version or signature).
A licence key is a single line starting QK1., signed by Synthetik. Quantik checks the signature on your PC; nothing is sent anywhere. Editions are Named User, Team, Site, Trial and Internal; a key may be bound to one PC by its Machine ID (shown in About).
For IT: deploying a key
Quantik looks for a key in this order, and the first found wins:
- the
QUANTIK_LICENCEenvironment variable (the key, or the path of a.qlicfile); %LOCALAPPDATA%\Quantik\licence.qlic(where Enter licence saves it);%PROGRAMDATA%\Quantik\licence.qlic(one team or site key for every user);licence.qlicnext to the add-in.
When a subscription ends
Quantik keeps running for a 30-day grace period with a warning. After that, Run Simulation, Scenarios and the Correlation Test stop, but your workbooks, results, reports, Browse Results and the SYN functions keep working, so nobody is locked out of their own files.
Licence terms: Licence terms.
14 · Troubleshooting
| Symptom | Fix |
|---|---|
| No Quantik tab | File → Options → Add-ins → Manage Excel Add-ins → Go, and make sure Quantik is ticked. Then check that the .NET Desktop Runtime the installer named is installed, and that Excel is 64-bit. |
| "This add-in has been blocked" | Your organisation only allows signed add-ins. Ask IT to allow the signed release or add %LOCALAPPDATA%\Programs\Quantik as a trusted location. |
Functions show #NAME? | The add-in is not loaded in this Excel session; see the first row. |
A distribution cell shows #VALUE! | Its arguments are invalid, for example min above max, or most likely outside the range. Model Check lists them. |
| Run Simulation will not start | A distribution cell has invalid arguments (run Model Check), or the licence grace period has ended (see Licensing). |
| A run is slow | Close other workbooks: Excel recalculates every open workbook on each iteration. Avoid volatile functions such as OFFSET and INDIRECT in large models. |
| Results are not reproducible | Use a fixed seed. Check for RAND() or RANDBETWEEN in the model; they are not controlled by Quantik. |
| Results moved after inserting a row | Check Settings → Random streams is "By identity" (the default). "By position" gives later inputs new samples when rows move. |
| Reports say "evaluation only" | No licence key is installed. Enter one from the Licence button. |
Still stuck? Contact hello@synthetik.au confirm support contact with the workbook's run log row and your Machine ID.
15 · Function reference
Distributions
| Function | Description |
|---|---|
SYN.PERT(min, ml, max) | Modified PERT on min, most likely, max (λ = 4). |
SYN.RANGE(low, ml, high) | Three-point range (low, most likely, high) read as min/max or P10/P90 according to the workbook's settings. |
SYN.PERTALT(t1, v1, t2, v2, t3, v3) | PERT from percentiles, e.g. SYN.PERTALT(0.1, P10, "m. likely", ML, 0.9, P90). |
SYN.TRIANG(min, ml, max) | Triangular on min, most likely, max. |
SYN.TRIGEN(low, ml, high, [lowP], [highP]) | Triangular from a low and high percentile (default P10 and P90). |
SYN.UNIFORM(min, max) | Uniform between min and max. |
SYN.NORMAL(mean, sd) | Normal. |
SYN.LOGNORM(mean, sd) | Lognormal by its own mean and standard deviation. |
SYN.BERNOULLI(p) | 1 with probability p, else 0. |
SYN.BINOMIAL(n, p), SYN.POISSON(λ) | Counts of events. |
SYN.DISCRETE(values, weights) | Discrete distribution over a range of values with a range of weights. |
SYN.EVENT(p, impact) | Risk event: returns the impact with probability p, otherwise 0. |
SYN.DRIVER(name, low, ml, high, [p]) | Risk driver / risk factor: a shared multiplier (e.g. 0.95, 1.00, 1.25) for every cost it drives; with a probability below 1 it applies only when it occurs, otherwise 1. |
Properties (add inside a distribution)
| Function | Description |
|---|---|
SYN.NAME("name") | Names an input for reports. |
SYN.CORRMAT(matrix, position, [name]) | Correlates this input with the others that use the same matrix, by its row/column in it. One triangle is enough. RiskCorrmat is the same. |
SYN.CORR("group", ρ) | Rank-correlates this input with every other input in the same group, e.g. SYN.CORR("Civil", 0.6). |
SYN.TRUNCATE(min, max) | Limits a distribution to [min, max]. |
SYN.STATIC(value) | The value shown when no simulation is running. |
Outputs and results
| Function | Description |
|---|---|
SYN.OUTPUT("name", value) | Marks a value as a simulation output and returns it. |
SYN.PERCENTILE("output", p) | Percentile of an output from the last simulation, e.g. SYN.PERCENTILE("Total cost", 0.9). |
SYN.MEAN("output"), SYN.STDDEV("output") | Mean and standard deviation of an output from the last simulation. |
SYN.TARGET("output", value) | Probability the output is at or below a value in the last simulation. |
SYN.TAILMEAN("output", p) | Mean of the worst outcomes: SYN.TAILMEAN("Total cost", 0.9) is the average of the worst 10% (CVaR). |
SYN.PRECISION("output", p) | Sampling precision of a percentile: the 95% half-width, e.g. ± dollars on P90. |
SYN.JCL(cost, costValue, duration, durationValue) | Joint confidence: the probability that cost is at or below costValue and duration is at or below durationValue. |
SYN.STATUS() | Status of the last simulation. |
16 · Workbook names and automation
| Workbook name | Effect |
|---|---|
SYN_BaseEstimate | The base estimate that contingency is measured from. |
SYN_Iterations, SYN_Seed, SYN_Sampling | Override the ribbon (LHS or MC). |
SYN_CrossGroupRho | Correlation between groups (default 0.3). |
SYN_ReportOutput, SYN_ReportPath | Which output the report covers; where the PDF is saved. |
SYN_WriteData | TRUE also writes every iteration to a Quantik Data sheet. |
SYN_SettingsJson | Points at a cell holding JSON that overrides any saved setting. |
For VBA or scripted runs, use Application.Run with SynthetikRun, SynthetikModelCheck, SynthetikContingency, SynthetikReport, SynthetikExportPdf, SynthetikRiskRegister, SynthetikBrowse, SynthetikSaveComparison, SynthetikBridge or SynthetikShowTab.