FastStats release notes 2025
Q4 2025¶
9 December, 2025
Analysis¶
Improved Numeric pattern match: Relative to Nth transaction¶
The relative or percentage difference in a numeric pattern range can now reference any previous transaction, not just the immediately preceding one.
See Expressions: Aggregations on the fly - Pattern Match numeric ranges.
Improved Pattern match ordering values: Relative dates¶
The introduction of relative dates and datetimes as ordering values within pattern match aggregations means you can now automate tasks without manual intervention. For example, you can run scheduled tasks, automate campaigns, examine a person's behaviour around an event, or update date values automatically.
The UI for entering order values is also updated for improved usability.
See Expressions: Aggregations on the fly - Pattern Match ordering values.
Improved Pattern match: Minimum days between transactions¶
Pattern match has long supported a maximum number of days between transactions, so any gap isn't too long. You can now also choose a minimum number of days between transactions, making it possible to:
- Define regularity, for example, to search for transactions which are approximately equally spaced.
- Match the minimum and maximum number of days, for example, to guarantee exactly 30 days between transactions.
- Set minimum gaps between transactions, for example, not on the same day (Min = 1), or at least 90 days after the previous (Min = 90).
See Expressions: Aggregations on the fly - Pattern Match minimum / maximum number of days.
New Linear trend as a value aggregation function¶
The linear trend calculation is now a function you can add when creating a value on the fly aggregation expression. It lets you measure a person's transaction value changes over time. This offers greater refinement than the existing rank coefficient function which simply looks at any increase, regardless of size. The linear trend calculation requires both a numeric and an ordering variable. It returns the slope of the best fit line through the transaction values as a positive or negative value.
See Expressions: Aggregations on the fly - Value.
Improved Relative aggregations: Grouping variable¶
Instead of optionally using a 3rd transaction variable as a secondary sorting variable, you can now use it as a grouping variable. This returns the relative aggregation from within each group.
See Expressions: Aggregations on the fly - Relative Transaction.
Improved Running and rolling aggregations: Grouping variable¶
Running and rolling on the fly aggregations now let you optionally group a person's transactions by the categories within a selector variable. For example, display the running total cost spent by an individual, grouped by the different destinations they have visited.
Running, rolling across a fixed number of transactions, and rolling over time all support grouping. The results within each group start from the first transaction.
See Expressions: Aggregations on the fly - Running and Rolling.
Improved Transaction Analysis wizard: Improved drag-off¶
The Transaction Analysis wizard helps you find sequences of transactions in your data, from which you can drag results to create a FastStats selection. Relative aggregations historically powered this process. Pattern match aggregations now power it, running selections up to N times faster, where N equals the number of elements in your transaction analysis.
New expression functions¶
Two new functions let you convert a string into a date or datetime data type: StringToDate and StringToDateTime.
Improved Expression return type improvements¶
When you create an expression, FastStats looks at the expression syntax by default. It automatically detects and returns the type of expression: decimal, integer, text, date, or datetime. The 'auto' capabilities now offer even greater accuracy, while still giving you the option to override and choose the type manually when needed.
New Customisable expression colours¶
There are six default colours used to distinguish the constituent parts of an expression. You can now customise these colours to suit your own preferences. Simply head to File → Tools → Options → Expression to choose your palette.
Once set, the personalised colours apply to any new expressions you create.
System improvements¶
Improved query engine optimisation¶
Query optimisations introduced in Q3 2025 stay off by default in this release (optimisation level 0). To enable them, change the Query optimisation level in FastStats Service Configuration.
Improved cache refresh: Cube entries supported¶
The FastStats Service now automatically refreshes both query and cube cache entries in the background. The service processes multiple cache entries simultaneously on a low-priority thread, ensuring your cache remains up to date regardless of system load.
Note
FastStats enables the multi-threaded refresh mode by default. You can revert to the legacy single-threaded, query-only mode if needed.
Configurator improvements¶
Improved Automatic crash dump configuration¶
The FastStats Configurator now automatically configures crash dumps for the FastStats Service when it starts. If crash dumps aren't already configured, the Configurator creates default registry settings to collect up to 10 mini-dumps.
Note
The Configurator only creates crash dump settings if they don't already exist for the FastStats Service and global crash dumps aren't enabled. If you've already configured crash dumps, your existing settings remain unchanged.
Improved Machine-level default install location¶
The default FastStats Service installation location is now stored at machine level in %ProgramData%, ensuring all administrators share the same default installation path.
Bug fixes¶
- Wizards and virtual variables
- Fixed issues related to the Transaction Analysis wizard
- Bug relating to the drag-off of multiple values
- Disallow dedupe and days between transactions
- Disallow option for dedupe and occurrences in the UI
- Incorrect drag-off from occurrences
- Fixed issues related to the Transaction Analysis wizard
- Expressions
- RankCoefficient: fixed an issue of incorrect calculation when there are missing date values.
- Running/Rolling aggregation - fixed:
- A UI issue on particular numeric controls in the on the fly dialogue window
- Rolling count didn't persist after editing.
- Fixed a parser issue with DateDiff and If expressions.
Q3 2025¶
25 September, 2025
Analysis¶
New Ordering values in pattern match¶
This extension to on the fly Pattern Match aggregation lets you search and return transactions. Particular parts of a pattern can now fall into particular time periods. This analysis is useful for selecting people based on their behaviour in time windows leading up to an event, such as a campaign. You can also base selections on behaviour after such a campaign, or on behaviour within specific time points.
The new development supports selector, numeric, and selector/numeric pattern types. You enter a date, datetime, or numeric value as an ordering value within the pattern. All existing pattern matching functionality still works, including wildcards, return values, filter selections, and include/exclude lists.
See Expressions: Aggregations on the fly - Pattern Match ordering values.
New Pattern match: Longest all different¶
When creating pattern match aggregations using selector variables, a predefined pattern match type lets you search for the 'longest all different' sequence of categories.
See Expressions: Aggregations on the fly - Pattern Match.
New New rolling count function¶
When creating rolling on the fly aggregations, you can now return a 'rolling count' of transactions going backwards within a time window. This lets you answer questions such as, for a particular transaction, how many transactions occurred in the previous year.
See Expressions: Aggregations on the fly - Running and Rolling.
New LinearTrend list expression function¶
Linear trends let you examine increases and decreases over time. For example, see which of your products are becoming more or less popular, or gaining or losing value.
The LinearTrend list function calculates the linear trend across two lists of numbers. It's particularly useful with cube derived expressions and lists of values. You'll often use it to look across a date dimension and individual product categories in a cube.
The cube below demonstrates the LinearTrend function, examining increases or decreases in the average cost of bookings to different destinations over six years. Highlighted in red, Latvia and Jamaica are the only two destinations that show a decrease in average cost over time. In green, New Zealand and Mongolia are the highest increasing destinations.
See Expressions: List Functions.
Improved Expression-to-selection drag¶
Adding an expression into a new selection is now simpler. Right-drag the expression onto your FastStats workspace and select 'Add expression to new selection' from the context menu.
New Profile model wizard: Custom codes and descriptions¶
In the PWE wizard, FastStats has always determined category descriptions automatically. Whilst this remains the default, you can now choose your own custom codes and descriptions when the created variable has *N* bands. This is impossible if you choose the size of each band.
See Profile model wizard: Codes and descriptions.
Improved Point to Point wizard: Description override¶
For the Point to Point wizard, you can create a single variable from multiple centre points using a file with optional descriptions. Those descriptions now appear.
The example demonstrates this for a 'nearest drivetime' virtual variable with 8 centre points. It's generated from a file containing the latitude and longitude co-ordinates for the location and name of eight UK airports. The airport name is now used in each variable category description instead of the location.
Modelling¶
New Behavioural modelling templates¶
Preparatory work has begun for behavioural modelling templates to become available and usable in Apteco Orbit. In the interim, confident users of behavioural modelling can access and benefit from this work through the FastStats Modelling Environment. The functionality and user interface in this first release remain under ongoing development. Future software releases will make more available.
See Behavioural modelling: templates.
System improvements¶
New query engine optimisation¶
This is a long-term project to optimise the performance of the FastStats query engine. The Q3 2025 release includes the first batch of these optimisations.
FastStats optimises the following selection types under certain conditions:
- Selector based (including Primary selectors) queries on single and multiple table queries including support for queries using base and Global Filters
- Numeric variable (stored as 4 bytes) queries on single table queries and multiple table queries including support for queries using base and Global Filters
- Single table select all records queries including support for base and Global Filters
- String selections on single table queries and multiple table queries including support for queries using base or global filters
These optimisations apply to queries that don't have a left join between tables and aren't Nper, TopN, or RFV queries. They also don't apply to queries with implicit Single Parent Lookups.
Example performance improvements over Q2 2025:
- Selections: 40% improvement for Selector based selections on single tables; 30% improvement for Selector based selections on multiple table queries
- Numeric: 60% improvement on single table queries that use a numeric selection
- Text: 50% on 'Begins with'; 25% on other text comparisons on single tables
Note
These optimisations stay off by default in the Q3 2025 release. To enable them, change the Query optimisation level to 1 in FastStats Service Configuration.
Bug fixes¶
- Data Grid
- Data grid right-click option for array variables, selected codes only didn't produce a valid expression.
- Expressions
- Parser error message for aggregation of Longest Particular wrong.
- Edit an expression column from right-drag flag array isn't valid.
- Pattern Match Aggregations: shouldn't be able to pin columns in pattern.
- FastStats shouldn't let you turn an expression of integer type into a selector VV.
- Pattern Match Manual pattern UI: no tooltips on buttons.
- Wizards and virtual variables
- P2P wizard: Description override doesn't work for single variable case.
- Nonsensical currency options in create VV.
- Selections
- Can save an uncountable query: warn user in this case.
For administrators¶
The new query engine optimisations introduced in this release stay off by default. To enable them, change the Query optimisation level to 1 in FastStats Service Configuration. See Query engine optimisation for details on which selection types benefit and the expected performance improvements.
Q2 2025¶
16 May, 2025
Analysis¶
New penetration maps: Statistically significant results¶
Based on the capabilities of the Profile tool, penetration mapping provides valuable insight. It lets you compare two groups of people on a map using an analysis to base index measure. Now it's possible to refine your analysis further and display results which, based on their Z-score, are statistically significant. You can choose to:
- Display only statistically significant categories when applying shading based on the Index measure.
- Configure your penetration map to display statistically significant areas based on actual Z-scores.
- Apply Z-score thematic shading to the map.
See Bing Maps: Penetration Mapping with Z-Scores.
New Pattern match: Category grouping¶
Pattern matching provides a powerful way to analyse sequences of transactions. When discerning patterns at the transaction level is impossible or undesirable, you can combine Category Grouping and Pattern Match aggregation techniques to:
- Use an ordinal selector variable, such as booking or donation year, to group transactions.
- Apply a numeric function, such as the sum of the cost or gift, to all the transactions in each group.
- Use the resultant list of years and numeric values as the input for pattern matching where you might then, for example, look for the longest sequence of years where a person's holiday costs or donation values have increased.
You can carry out this analysis by creating an on the fly aggregation directly within the Expression editor. Alternatively, follow the steps of the Sequence Analysis wizard to generate the expression.
See Expressions: Aggregations on the fly - Category Grouping with Pattern Match.
New Pattern match: Start and end wildcards¶
Understanding how a new customer started transacting, or examining someone's latest purchases, is valuable insight. Though previously possible, such analysis is now much simpler, thanks to [ and ] as new wildcards for manually defining patterns of interest. They let you anchor a pattern to the start or end of the transactions you're analysing. Sometimes you might choose to use both, to identify people whose whole sequence of transactions matches the specified pattern.
See Expressions: Aggregations on the fly - Pattern Match positional wildcards.
New Transaction Analysis wizard: De-duplication¶
The Transaction Analysis wizard lets you examine patterns of transactional data. It helps identify common sequences of transactions, such as the most popular patterns of holiday destinations visited. A new option in the Pick Transaction Variable step means you can de-duplicate and remove all repetitions, reducing a pattern to a single sequence. This makes it easier, for example, to see switches between products.
See Transaction Analysis wizard.
New Relative aggregations: De-duplication¶
Two new features are available for Next aggregations when creating Relative Transaction on the fly expressions, providing the ability to de-duplicate and remove repetitions. You can select:
- No deduping (default): Next N returns the Nth record after this one.
- Different: Next N returns the Nth record after this one once direct repeats are deduplicated and removed.
- Distinctly Different: Next N returns the Nth distinctly different record after this one.
See Expressions: Aggregations on the fly - Relative Transaction.
New Date banding by decade¶
You can now band date and datetime variables and expressions into decades for use in a:
- Cube: As a dimension
- Data grids: As a column
- Selection: As an ad hoc date option
This new option is useful when working with a date variable that has a large range. Support also extends to the PeriodToDate and Comparison functions within calculated measures, and to the equivalent expressions for derived cubes and PeriodToDateCubeRange. These now all support decade banding.
Improved N% per expression support¶
The ability to sample N% of records whilst maintaining distribution across a selected variable now also covers distribution across a selected expression.
See Selection: How do I make an N% per variable or expression selection?
Improved time zone updates¶
FastStats now aligns time zones across the server and user locations. This means the time zone shown for a date or datetime selection now reflects the server or system location, rather than your location.
Bug fixes¶
- Expressions
- Fixed an issue in numeric Pattern Match where the Include List/Exclude List button is visible but has no effect.
- Fixed an issue when the right drag of a flag array to a data grid column results in an error in the size of the expression.
- Fixed an issue on German systems where an expression with a decimal separator comma fails to build when dragged onto a cube.
- Cubes
- Fixed an issue on German systems where expressions used as measures have decimal errors.
- Fixed an issue with calculated measures where the periodtodate form has invalid entries in the date period list.
- Fixed a bug with switching to the Index thematic when the data isn't suitable.
- Date / DateTime variables
- Fixed an issue where the pen/edit icon is visible within the date rule dialogue.
- Wizards
- Fixed an issue where Transaction Analysis drag-offs returned incorrect First/Last selections and results.
For administrators¶
File format change in FastStats Service¶
FastStats now includes a header in the format of the .fsDat files (full and partial).
This change improves the FastStats service start up speed when there are many partial indexes. It also links the .fsDat files to the .vie file for improved safety.
Note
This change means that:
- You'll not be able to open FastStats systems built with 2025 Q2 in earlier versions of FastStats.
- You'll still be able to open FastStats systems built with earlier versions in 2025 Q2.
Automatic maintenance for the job queue¶
FastStats now includes automatic maintenance options for the job queue. This improvement to the FastStats Service minimises the data stored in the web server database. Apteco systems use a central job queue database that stores the questions and results from user activity within the system, which builds up over time.
Administrators can now set retention policies for items in the job queue directly, without creating custom maintenance mechanisms.
Q1 2025¶
13 February, 2025
Analysis¶
Improved Support for extended text fields¶
The maximum size of a text field is now 32767 characters, up from 255. This means you can now load larger amounts of text into your Apteco system via Designer. Existing FastStats analytics also now accommodate strings up to the new limit. This includes, for example, selections using text variables, and text or shredded text analysis in cubes and cube-based visualisations. It also includes the ability to display large text fields in a data grid, and expressions which take string parameters or return strings.
Examples of extended text fields include data from customer reviews and feedback, and social media posts.
Your system administrator must determine the maximum text field size in Designer.
See the Designer Q1 2025 software release.
New Data grid: Cell contents preview¶
With support for extended text fields, you can now preview such content via a new, right-click menu option in the data grid tool.
If you have permission, you can also copy the text from the preview window.
Key benefits include the ability to:
- Read large text fields, such as customer reviews or complaints.
- Extract sections of text if preparing a response email.
- Copy out and summarise content in ChatGPT.
- Copy out and include examples in a report.
The enhanced build process in Designer removes characters used for formatting the original text, for performance reasons. Pre-processing the data is possible, and the user interface provides formatting options to make the text more readable by inserting line breaks, if necessary.
See Data grid - how do I preview cell contents?
New cube measures¶
Three new statistics are now available for cube-based analysis using cubes, trees, segmentations, Venn diagrams, variables, and expressions.
- Range(variable or expression): returns the difference between the maximum and minimum values of the variable.
- NthBiggest(variable or expression): takes all the values in a cell in the cube, sorts them into order, and returns a particular Nth value from the top of the list.
- NthSmallest(variable or expression): takes all the values in a cell in the cube, sorts them into order and returns a particular Nth value from the bottom of the list.
The introduction of the Range statistic removes the previous need to create a calculated measure to display this information. NthBiggest and NthSmallest are useful when a small number of outliers would skew a maximum statistic. They're also useful when a cell has only a small number of values and a percentile measure isn't adequate.
See How do I include statistics on a cube?
Improved Numeric pattern match extensions¶
This release adds to the range and power of numeric pattern match analysis with three new capabilities:
- Longest Particular (Range)
You can search for a 'longest particular' sequence where the particular value is a numeric range. This makes it possible to answer questions about the longest sequence of transactions within a cost range. For example, what's the longest sequence of transactions a person has made between £500 and £1000?
- Include/Exclude ranges
You now have the ability to select a set of numeric ranges for an include or exclude list. For example, find the longest sequence of transactions a person has made, excluding any that cost less than £1000 or more than £2000.
- New sum and mean properties of numeric sequences
You can choose a return value as the sum or mean of the numeric values in the matched pattern. For example, find the total cost of transactions captured by your defined sequence.
The new settings are available in the user interface through the numeric Pattern Match aggregation dialogue, or the relevant Sequence Analysis wizard steps.
See Aggregations on the fly: Pattern Match Numeric Longest Particular and Pattern Match Include or Exclude list
New Copy expression into another¶
You can now drag one expression into another using its drag handle. This copies all the expression text to the insertion position of the new expression, including any embedded queries, aggregations, and cube lookups. Validation checks that you aren't adding too many queries or cubes for the expression. This development supports the creation of complex expressions and lets you test part of an expression before adding it into another.
Modelling¶
Improved Behavioural modelling: Selector variables for recency¶
Behavioural models let you select a lookalike audience using time-based behavioural data. You can aggregate a person's recent transactions and identify behavioural features that indicate the target audience. These features are typically RFV-based aggregations such as the "count of purchases in the last year" or the "most recent donation value".
You could already create recency features from numeric variables, such as cost of last booking. This new development means you can also use selector variables, such as destination of last booking. As a result, you can create more powerful models and more targeted campaigns, since a person's recent behaviour category is often predictive.
See Behavioural modelling - creating recency dimensions using selector variables
System improvements¶
Improved Legacy admin pages removed from web service¶
FastStats has removed the legacy 'admin' pages, including FileUpload.aspx, from the Web Service. This improves security and reduces maintenance of outdated functionality.
Improved FastStats backup count reduced to 3¶
The default number of backups for new systems in the FastStats Service has changed from 10 to 3. This reduces storage usage and minimises the need for administrators to adjust the setting when creating new systems.
Improved Optimised distributed processing for cached cubes¶
Distributed processing now efficiently detects and utilises cached cube objects, improving query performance. If a cube is already cached, the system no longer slices it, retrieving the cached version instead for faster results.
Additionally, requests now include a new currentTime parameter. This provides a reference time for slicing queries and cubes, reducing reliance on the todayAt parameter and improving consistency.
Improved Faster directory listing on high-latency systems¶
FastStats and PeopleStage now scan files in parallel when retrieving a directory listing, significantly reducing load times. This improvement is especially beneficial for systems with many files stored on high-latency network drives.
Bug fixes¶
- Expressions
- Fixed a bug related to ?N wildcards with pattern match numeric values when they're missing.
- Fixed a bug related to pattern match numeric values with * elements.
- Fixed an issue where saved pattern match aggregations of the Longest Particular type behave incorrectly after reload.
- Fixed a crash issue with pattern match numeric sequences returning start/Nth/end transaction values.
- Fixed a bug related to order span and transactional table for pattern match numerics containing *.
- Fixed an issue where the percentile parameter wasn't sent to the server for expressions statistics.
- Fixed an issue where the TrimList function returns empty if trimming 0 items.
- Fixed a crash issue with ZScore expressions when the test and control are both 1.
- Fixed an issue relating to an incorrect error message displaying for DaysInMonth.
- Fixed a typo in the expression help for the StrStreak function.
- Venn
- Fixed an issue where irrelevant statistics appear.
- Fixed an issue where you can't define a percentile statistic on an expression.
- Segmentation
- Fixed an issue where irrelevant statistics appear.
- Map
- Fixed an issue where right-dragging a statistic results in a crash.
- Cube
- Fixed an issue where selecting custom colours before creating a cube causes a crash.






























