Nanoseconds, Complex Queries, Custom Workspaces, and More

Summary


We’re kicking off 2019 with some exciting new features and performance improvements in AMI. First, we’re speeding things up by supporting nanosecond and microsecond granularity. Most charting tools only offer one-second granularity, so this feature is incredibly important to brokers who now measure latency in nanoseconds. For our enterprise clients, users can now save custom workspaces that load on login to enhance user experience and workflow efficiency. Additionally, relationships are now even more configurable with cascading abilities for audit trails and multivariable support. See below for all of the new features and enhancements we’ve added this month.

Highlights


NEAREST in JOIN query clauses

The Nearest function is now available for cross-database analysis. Join the two database tables by Nearest on the timestamp columns and AMI will figure out the nearest events.

Nanosecond and Microsecond support

AMI’s real-time speed is now granular to the nanosecond and microsecond. Users can utilize nanosecond and microsecond timestamps for real-time analysis and charting.

Complex query workflows

AMI now allows for the use of multiple variables in dynamic relationships. This is very useful for complex data audit trails across systems.

Cascading relationships and queries

New expressions manage the timing and order of relationship queries between multiple panels, which allows users to configure cascading relationships.

User properties

Users can now save custom workspaces with the option ami.web.user.preferences.plugin.class. This will make the user’s properties load on login. This feature comes with security additions (see Encrypting properties in the security improvements section).

New Features


Function autocomplete

AMI now supports autocomplete for nested functions. Ex. typing session.log(session.now().<spacebar> will generate an autocompleted function.

timezoneOffset(…)

A new function setting the time zone offset.

rand(number)

A new function generating a random number.

percentileCont(…) and percentileDisc(…)

New continuous and discrete functions for finding data within a certain percentile.

diffSequence(…)

A new function for comparing two series of data.

Datamodel::process() and datamodel::getParameters()

Two new functions that allow walking audit trails to be a programmatic process rather than a manual one.

FormButtonField click()

A new click method for form fields.

Session.execute()

A new method to register an event and schedule when it will execute.

getPanel()

A new menu item class that allows users to design their own right-click menus.

ALTER TABLE … ADD = expression

A new expression to add columns to a table and populate them with data

CREATE TABLE mytable = <some_java_expression>

This java function can now generate a table

GROUP BY … ORDER BY

Users can now order underlying groups. Example: group by symbol, order by time.

runOnStartup

This new expression ensures replaying persistent data fires the appropriate triggers again.

Scroll lock option

AMI tables now support the option to lock the scroll bar to the bottom of the table when new rows are appended.

Filter subrange slider

New subrange slider for filters with minimum and maximum options.

Datapoint limits

Users can now configure the maximum number of data points to display in a chart. If the limit is reached, the chart does not display data.

Arrange column search field

Added a new search field to arrange columns.

Multiline=on option for console

Command console now supports running multiple lines at once with the multiline=on option.

Enhancements and Improvements


Smarter temporary index generation

Indexing is more efficient when querying large sets of data.

Faster join search

Faster lookup times on left/right joins.

More trigger capabilities

Event triggers can now return false for onUpdating, onDeleting, and onInserting. When this happens, the update, delete, or insert that triggered the event can be prevented from taking place.

Smarter line drawing

Graphs lines are sharper and no longer rely on antialiasing. Overlapping lines and areas are now properly layered.

Faster ellipses

AMI supports faster ellipse drawing using the new canvas ellipse functionality.

Better divider styling

Global divider style changes are now faster to take effect. Additionally, double-clicking on dividers will now minimize or maximize them.

Better hierarchy in column arrange panel

Aggregate columns are now bolded in the column arrange menu for better distinction.

Improved column naming

Column renaming is faster and now supports non-standard variable names.

Smarter data source wizard

AMI now recognizes price, date, and other common data types in the data source wizard and automatically formats that data accordingly. Ex. price data is autoformatted with two decimal points.

Copying relationships

Copying and pasting multiple panels now copies their relationships too (rather than having to recreate them).

Expanded Support


Adapter for DBVisualizer

AMI now works with DBVisualizer, a tool for looking at the data inside the database.

Special characters support

When importing or exporting Excel files, SOH and other special characters are now supported. Additionally, table names now support special characters.

Security Improvements


Encrypting properties

Added AES Encryptor and associated command line tool for encrypting properties: f1.properties.secret.key.files.option and f1.global.password.substitute.global.property.

New Shortcuts


Table copy shortcuts

Ctrl + CC (on a single cell) = copy cell

Ctrl + CC (on multiple columns) = copy selected columns

Ctrl + CR (on a single row) = copy row

Ctrl + CR (on multiple rows) = copy selected rows

Ctrl + CA = advanced copy options

Scrolling through table columns with arrow keys

When a cell or multiple rows in a column are selected, use the right and left arrow keys to scroll through the columns

Form field traversing with the tab key

Pressing the tab key focuses on fields top to bottom, left to right (previously, the tab key traversed form fields in the order in which they were created).