What’s New in Atoti Python 0.7.3?

Python 3.11 Compatibility, an Updated Way to Define Joins, Telemetry Changes Ahead.

Hey Atoti Community! We’re super excited to announce our Atoti Python 0.7.3 release. Wondering what we have in store for you? While breaking nothing this release, we have some great updates ahead. Read on to see some of the changes we’ve implemented, or check out our changelog for the full list of updates.


Python Compatibility

Excited by the promising performance improvements in Python 3.11, but bummed Atoti wasn’t compatible with it? Well, fret no more! With 0.7.3, Atoti is now compatible with Python 3.11.

First and Last

Sometimes need to know the first value of a measure along a given level? Same, TBH. That’s why we’ve added atoti.function.first(). For example, if we wanted to see how price changed since the launch of a product, we can easily do so using first()

table demonstrating atoti.function.first()

Note: we have added last() as well.


We collect telemetry data to help us understand the usage and performance of Atoti CE. This is non-personally identifiable information which details things like error messages, stack traces, and when and where (based on IP) sessions are create. Details regarding our telemetry capture are outlined in our EULA available on our website. Going forward, this feature can be disabled for paid users by installing the atoti-plus plugin.


Table Join Mappings

You know we love to take full advantage of Atoti’s intelligence on table joins in our use cases: if two tables have columns with the same name, Atoti infers that the join ought to occur along those columns. We can also specify on what columns to join using mapping as can be seen from this snippet of our Intraday Liquidity notebook:

payment_tbl.join(time_tbl, mapping={"Settlement_Time": "Time"})

While you can still do so for now, going forward, set it as a condition like so:

payment_tbl.join(time_tbl, (payment_tbl[“Settlement_Time”] == time_tbl[“Time”]))

Roles in Security Implementation

Security features are available for paid Atoti users. Previously, we would use the roles parameter of atoti_plus.BasicSecurity.create_user() to define our roles, as can be seen from this example inspired by our Security Implementation notebook:

Inspire_manager = usc.basic.create_user("Inspire_manager", password="Password", roles=("ROLE_SHARE"))

While you can still do so for now, going forward, we’ll be dropping the role parameter and we can update the applicable roles like so: 


Note: the same is true for atoti_plus.KerberosSecurity.create_user().


Thank you for reading. As always, we’re constantly improving Atoti. This was a highlight of some of the changes in our Atoti 0.7.3 release. Have an idea or a question? Join the conversation on GitHub. For a complete list of changes, please visit our changelog.

Latest posts

Understanding Logs in Atoti
From the default log to how to configure additional logging Application logs are extremely important in any system! Most commonly, they are used to troubleshoot any issue that users may encounter while using an application. For instance, developers use them for debugging and the production support crew uses them to investigate outages. Not just that, in production, they are used to monitor an application’s performance and health. For instance, monitoring tools can pick up certain keywords to identify events such as “server down” or “system out of memory”. It can also serve as an audit trail to track user activity...
Atoti: Working with dates in Python
What is the most problematic data type you have ever dealt with when working with data? I would say dates! Depending on the locale, dates come in different formats such as YYYY-mm-dd, d/m/YYYY, d-mmm-yy etc. Not to mention, sometimes it comes with timestamps and time zones! We can let programs infer the date format or explicitly cast the data to date with a specific format e.g. in Python with Pandas DataFrame: What if we open the CSV file in Microsoft Excel, update it, and try to read it again? The above code snippet will throw out exceptions such as this:...
Understanding conditional statements in Atoti
When do we use filter, where and switch statements? We know that we can perform aggregations and multi-dimensional analysis with Atoti. Aggregation is not always as simple as 1 + 2. Sometimes we end up in an “if…else” situation, and that is where conditional statements come in. Let’s explore some examples with the XVA use case from the Atoti CE Notebook Gallery. Some definitions before moving on: Measures – we refer to metrics or quantifiable data that measure certain aspects of our goals. In the code snippets below, they are represented by measure[<name of metrics>]. Members of a level –...

Join our Community

    Like this post ? Please share

    Follow Us

    atoti Free Community Edition is developed and brought to you by ActiveViam. Learn more about ActiveViam at activeviam.com.