# Designer release notes 2025

## Q4 2025

*9 December, 2025*

### FIPS compliant virtual package processing

Virtual package processing in Designer now supports FIPS compliance by using SHA256 hashing instead of MD5. When you enable FIPS mode on your server, Designer automatically uses FIPS-compliant SHA256 hashing for virtual package operations.

### External browser for Salesforce OAuth

You can now obtain Salesforce OAuth refresh tokens using an external browser. This update adds support for the OAuth Client Credentials flow.

When you configure OAuth credentials, you can choose between refresh token authentication and client credentials flow.

> [!NOTE]
>
> For refresh token authentication, configure your Salesforce Connected App with a redirect URI set to `http://localhost:portno/`. For Client Credentials flow, enable the flow in your Connected App settings and configure the Run As user.

### OAuth for SMTP connections

Designer now supports OAuth authentication for Simple Mail Transfer Protocol (SMTP) connections, providing an alternative to basic authentication. Microsoft is deprecating basic authentication in Exchange Online services in April 2026.

This enhancement ensures continued email functionality for pre-load notifications, post-load notifications, and build error alerts.

> [!NOTE]
>
> OAuth refresh tokens expire after 90 days of inactivity but remain valid longer when actively used. You must configure your OAuth credentials in Azure Entra before setting up the connection in Designer.

### Microsoft.Data.SqlClient provider

Designer now includes the Microsoft.Data.SqlClient ADO.Net provider as a new built-in plugin called **Microsoft.Data**. This provider supports modern authentication methods such as OAuth, which enables connections to Microsoft Fabric and other cloud-based data sources.

### Optional extraction for dynamic data sources

You can now control whether the rebuild process extracts dynamic database sources. If the underlying data hasn't changed, you can manually prevent extraction and use previously extracted data instead.

> [!NOTE]
>
> This feature applies only to dynamic database sources.

### For administrators

#### .NET Framework 4.8 required

FastStats Designer now requires .NET Framework 4.8. The installer validates that .NET Framework 4.8 is present on your system before proceeding with installation.

> [!NOTE]
>
> Windows Server 2008 (non-R2) is no longer supported. Windows Server 2008 R2 and later versions remain supported.

See [Technical update](<https://help.apteco.com/en/release-notes/technical-updates/#net-framework-48-requirement>) for more information.

### Bug fixes

- Removed invalid currency values from the currency symbol drop-down list in Designer.
- The FastStats Designer Refresh Package no longer incorrectly marks some definitions as impossible to refresh when handling complex dependency chains that include delete definitions.
- Fixed an issue preventing you from removing the Response property from a table.
- The variable scanner now correctly displays only the date in the creation date column.
- Resolved an issue that caused an exception when opening a design after copying a table and adding it to the table relationships diagram.
- Systems with tables containing more than 4.3 billion records now return correct counts when you define a primary selector.

---

## Q3 2025

*25 September, 2025*

### Time zone customisation for date time fields

FastStats Designer now handles DateTime formats that include time zone information. You can choose a TimeZone for each DateTime variable:

- If the input data contains a specified time zone, such as `2009-06-15T13:45:30-07:00` or `2009-06-15 13:45:30Z`, Designer converts the timestamp into the specified time zone
- If the input data doesn't contain a specified time zone, Designer assumes the data is in the build machine's time zone and converts it into the specified time zone
- If you change the time zone conversion to 'None', Designer performs no conversion

This feature is especially useful for data sources such as Salesforce and MS Dynamics, which store timestamps as Coordinated Universal Time (UTC). It helps when your users are in a different time zone.

### Leading and trailing currency character

Input data can sometimes contain currency characters either leading or trailing in the field itself.

This feature removes non-numeric characters from your data before parsing numeric fields in the enhanced build process.

> [!NOTE]
>
> This improvement is for enhanced build process only.

### Single-digit date format

This feature expands upon existing accepted date formats to include single digit day and month sections for date variables.

For example, both `3/2/2025` and `03/02/2025` are now supported, while previously `3/2/2025` wouldn't have been.

These single digit formats are already supported for datetime variables.

> [!NOTE]
>
> This improvement is for enhanced build process only.

### Scientific 'e' notation for numeric types in enhanced build

Designer already supports the scientific 'e' notation for floating point and double numeric types.

This feature adds further support for this notation when also using standard numeric variable types.

Enhanced build process only.

### Nested folders in dynamic database sources

The existing dynamic database data source feature lets you create a single level of folder structure.

For example: Folder1\\Variable

This feature adds the ability to nest folders within other folders when defining dynamic database sources. It gives you greater organisation and flexibility in the folder structure you produce.

For example: Folder1\\folder2\\variable

### Sort by data source order in define variables

The define variables panel lets you sort by various properties, such as name and type.

This feature lets you sort the variables into the same order as your data source.

Right-click in the define variables panel to find the new option:

### OAuth for Snowflake

This feature provides a more seamless experience when using Snowflake data sources in Designer.

Designer now authenticates directly with Snowflake's OAuth mechanism, rather than relying on MS Entra as an external OAuth provider for Snowflake.

### System Summary HTML

The System Summary HTML now presents all variables in a single, consolidated table. A dedicated column makes it easy to see which table each variable belongs to.

The variable reference is now included in the folder structure section of the report.

### Bug fixes

> [!NOTE]
>
> **Known issue**
>
> Incorrect counts on systems with primary selectors and large tables. Systems with a primary selector defined and tables with more than 4.3 billion records may generate incorrect counts in your results.
>
> **Workaround**: Rebuild your FastStats system without defining a primary selector.

**Exclude orbitresource paths from virtual package**

On systems that can access Orbit and FastStats, Virtual Package .zip files are now built up correctly, as expected.

Previously, the .zip file packaging failed with an 'invalid characters in path' message.

**Salesforce custom query error in Designer**

Fixed an error generated when using a custom Salesforce Object Query Language (SOQL) query whilst retrieving data from a Salesforce data source.

With this issue, when using a custom SOQL query in FastStats Designer, including a field from a different table, for example: `SELECT Id,Account.Id FROM Contact`, Designer generated an error.

**Unclassified code goes missing**

Fixed an issue causing the single field delimited array variable to lose unclassified code on its second build.

With this issue, clearing the codes meant that the next build added the unclassified code back.

**Attributes: unclassified category for selector variables**

Boolean dynamic variable properties, such as ‘AddUnclassified’ or ‘Selectable’, in Dynamic Data Sources now accept additional true values. Previously, only ‘1’ counted as true. If the first character is any of ‘1TtYyXx’, Designer sets the property to true.

**Combine categories pla has incorrect instant counts**

Fixed an issue with the Combine categories post-load action causing incorrect instant counts when summary codes were incorrectly specified.

---

## Q2 2025

*16 May, 2025*

### User-defined primary selectors in enhanced build process

A ‘user-defined primary selector’ is a Selector variable located on the master table of a FastStats system. Queries that have an 'and' clause with the primary selector run faster than other types of queries.

The enhanced build process now supports user-defined primary selectors.

### People table specification

When building ‘Core’ and linked systems, this feature lets you choose a table from the linked system for licensing purposes. This can override what you already specified in the Core system.

### Palantir Foundry connections

Designer now supports connections to Palantir Foundry using Open Database Connectivity (ODBC), via the ‘ODBC for Foundry’ data provider.

### Override Salesforce version number

Salesforce versions its APIs and regularly releases new versions. This new Salesforce data source functionality lets a system Designer choose which API version to use when exporting data from Salesforce. Setting this version number to the latest Salesforce API version retrieves the most recent data layout.

### Additional options for default unclassified codes

You can now set unclassified code settings (the Code, Description, and Alignment) to the System Default. Configure this default on the **Advanced** tab of the system configuration.

These properties are now exposed in the define variable property grid, making it easier to change these properties for multiple variables at once.

### KeepAlive for ODP.Net connections

The connection string parameter ‘KeepAlive=true’ is now added automatically for all Oracle [ODP.Net](<http://odp.net/>) connections. This setting improves extract reliability when connecting to Oracle using ODP.Net.

### Combine files pre-load action

You now have the optional action to shift multiple incremental extract files.

This pre-load action has 2 optional sub actions:

- Shift files
- Combine files

> [!NOTE]
>
> **Example**
>
> The intended scenario for this enhancement is where you define a number of incremental extract data sources containing monthly transactions.
>
> Daily incremental extracts are appended to the end of Month01, but the other Month?? data sources are static.
>
> At the end of the month, Month01 becomes Month02, Month02 becomes Month03, etc.
>
> This pre-load action performs the required file moves (including the .info.xml files that hold the extract metadata), to avoid re-extraction of all the data sources.
>
> In this example, Month04.txt then becomes Month04.bak, and Month04.bak is overwritten on future runs of the pre-load action.
>
> This enhancement saves re-extraction of the Month?? data when it has already previously been extracted.

### For administrators

Systems built with Q2 2025 Designer are no longer backwards compatible with earlier versions.

### Bug fixes

> [!NOTE]
>
> **Known issue**
>
> Incorrect counts on systems with primary selectors and large tables.
>
> Systems with a primary selector defined and tables with more than 4.3 billion records may generate incorrect counts in your results.
>
> **Workaround**: Rebuild your FastStats system without defining a primary selector.

**Linked system fails to connect to core system**

Fixed an issue that occurred when you tried to create a new linked system. This generated an error connecting to the core system when using the linked system dialog.

**Writing build log to Oracle gives a warning**

Writing the build log to Oracle isn't supported. Fixed an issue that caused the following warning message when attempting to write the build log to Oracle.

> [!WARNING]
>
> Could not write Build Statistics Log to database: ORA-00911: invalid character

This warning appeared but didn't stop the build. If you now choose an Oracle provider for your database, this error or warning no longer appears.

**Input values longer than 255 characters cause missing decodes**

Fixed a missing decodes issue introduced in Q4 2024.

This bug prevented the AutoDiscovery process from finding new decodes once a value longer than 255 characters appeared.

**Process priority not overridden when run as a scheduled task**

Fixed an issue preventing process priority from being overridden when run as a scheduled task. Now, if you select the option, Designer overrides process priority and sets itself back to **Normal** priority, with log messages to indicate this.

**Virtual package doesn’t refresh all variables if folders specified in design XML**

Changing a virtual package post-load action from ‘Refresh variables by folder’ to **All variables** didn't clear the folders setting. Designer kept refreshing only the folder's variables instead of all variables.

**Error if key sizes are longer than 255 bytes**

Some users with unsupported key sizes greater than 255 bytes reported a crash when building a system. Designer now generates an error message in this case and limits the key size to 255 to avoid a crash.

**Combine categories from database uses unclassified description as the code**

Some users reported that the combine categories post-load action from a database used the unclassified description as the code. For example, if you specified the code as ‘!’ and the description as ‘Unclassified’, the code table was incorrect (see below). This issue is now fixed.

**Extract dependency waits forever**

Fixed an issue that caused Designer to wait forever for an extract dependency to complete, even if that extract wasn't specified for extraction.

**Combine categories unc path issue (.dat file doesn't get created)**

Fixed an issue when building a Combine Categories virtual variable with the virtual directory on a UNC path. Designer didn't create the .dat file, only the .val files.

**Load statistics always zero for lookups when using the enhanced build process**

Fixed an issue when using the enhanced build process, causing load statistics to always display as zero for lookups. This issue occurred when using the enhanced data builder.

**Database log credential reverts to default even if cleared**

Fixed an issue causing the database log credential to revert to default, even when cleared.

Although you specified the credential as default, it now stays blank, as expected.

---

## Q1 2025

*13 February, 2025*

### Query support for extended text fields

FastStats now supports storing and querying text data up to 32,000 characters, which is a significant increase from the previous 255-character limit. This improves data handling and also enables more comprehensive text analysis.

**Key enhancements**:

- **Increased text storage capacity**

  FastStats text fields can now store up to 32,767 bytes.

  - For ASCII systems, this corresponds to 32,767 characters
  - For UTF8 systems, characters may consume between 1 &amp; 4 bytes
- **Text block size increased**

  To support extended text fields and improve text field compression, the text block size now reaches 1MB, up from 32,760 bytes. As a result:

  - Removed the configuration option for virtual text block size and compression type from the FastStats Configurator
  - Applied overrides in the FastStats Service and Designer Virtual Package
  - Removed the configuration option in Designer and set it to 1MB
- **Improved performance for text variable processing**

  Extended text blocks improve compression ratios and reduce I/O operations, leading to better performance, particularly on file systems with high latency. Testing has shown reduced compressed text `.dat` file sizes and fewer I/O calls.
- **User interface and build process updates**

  - AutoDiscovery now automatically detects extended text fields
  - The standard and enhanced build processes now support extended text fields

### DuckDB data provider

This release introduces support for the DuckDB data provider in Designer. You can browse tables, use the `'` placeholder, choose tables or views, and run custom queries on a DuckDB database.

This update also supports reading the following file types directly via custom queries, alongside DuckDB's native functionality:

- `JSON`
- `JSON.gz`
- `Parquet`

For more detail, see [Reading Parquet and JSON files with DuckDB](<https://help.apteco.com/en/designer/data-source/duckdb/index.md>) and [DuckDB’s documentation](<https://duckdb.org/docs/>).

### Generate partial index

Designer now generates partial indexes in parallel, offering a significant reduction in generation time for large systems. You can generate up to ten partial indexes simultaneously, alongside the existing sequential option.

**Key updates**:

- Added UI to support generating multiple partial indexes at once
- Designer can now generate up to ten partial indexes in parallel, reducing generation time on large systems
- Partial Indexes help speed up multi-table queries and optimise system performance

### Environment variables in FastStats scripts

You can now use environment variables in the post-load action ‘Run Script’ in Designer. This makes it easier to set up duplicate systems by allowing scripts to use parameterised values rather than fixed ones.

### UInt join key type

The enhanced build process in FastStats Designer now supports a 32-bit UInt (unsigned integer) join key type. This is useful for systems with keys between 2.1 billion and 4.2 billion, letting you use efficient non-hashable join logic. This expands on the existing Int64 and GUID join key types and lets parent tables support larger datasets.

### Hide sensitive data in build logs

Build logs in Designer now have an option to hide sensitive data, such as environment variable values and full directory paths. Designer enables this option by default on Apteco Cloud servers, improving security by preventing exposure of sensitive information.

### Delete .dat files during sort

Designer now includes an option to delete .dat files during the sort phase of the build process. This can free up significant temporary disk space during the build on large systems, particularly once the merge processing has started.

However, if the build uses a delta strategy and an error occurs, you need a full rebuild. The deleted .dat files are no longer available.

### Bug fixes

- Fixed a bug that caused a crash when creating a Dynamic Virtual Variable while applying Global Filters. Previously, this left behind invalid `.val` and `.dat` files that could cause the service to crash on start-up.
- Running a post-load action from the command line now correctly finds and executes actions located within groups.
- The standard build process no longer creates invalid `$ftoSORTED$` files with `NUL` characters when you clear *Use Optimised Temporary Sort Files*.
- Improved the efficiency of retrieving large job results from the FastStats Web Service. Previously, the full compressed results were repeatedly retrieved and decompressed for each chunk request, causing high resource usage. Now, Designer optimises retrieval to reduce unnecessary processing and improve performance.
- The *Preview Categories* query in *Combine Categories* post-load actions now correctly applies environment variables, preventing errors when resolving table names.
- Environment variables are now correctly applied to the **Answers** query in Dynamic Database Data Sources.
- When copying a lookup table in Designer, array field names now retain their original references and don't revert when added to the Relationships page. This prevents unintended renaming issues across copies.
