0.4.3 (2020-09-01)


  • agg.sum_product() return a measure equal to the product and sum of two measures or fields.

  • The modulo % operation between measures (#48).

  • Support reading Parquet files from AWS S3 (#27).

  • store.Store.drop() remove rows from a store by specifying column names and values.

  • atoti widgets are snapshotted as SVG images in the notebook on save. These images will appear in HTML exports or in GitHub previews of the notebook.

  • Context menu actions for widgets of the atoti JupyterLab extension:

    • Undo and Redo (#71).

    • Convert to atoti Widget Below available in DataFrames returned by session.Session.query_mdx() and cube.Cube.query() to start an interactive exploration from the same MDX query (#49).

    • Open state editor to navigate to the notebook cell metadata editor (#104).


  • Java is no longer required in the pip installation since the atoti Python wheel now relies on jdk4py.

  • The Measure simulations and Source simulation editors have been redesigned. They now both have their dedicated page instead of being widgets embeddable in dashboards. The Measure simulations editor also issue more minimal updates to the underlying store (#70).

  • Upgraded from ActiveUI SDK 4.3.8 to 4.3.11 (#30, #59, #74, #79, #84, #87 and #110).

  • Upgraded from ActivePivot 5.9.1 to 5.9.2 (#98 and #99).

  • session.Session.query_mdx(), cube.Cube.query(), query.session.QuerySession.query_mdx(), and query.cube.QueryCube.query() return DataFrames displaying formatted values and providing a style attribute reflecting the potential styling properties of the corresponding cell set (#91).

  • The first MDX query ran by an atoti widget in JupyterLab is now executed in Python and its resulting cell set is outputted to the corresponding notebook cell. It allows to ensure that the data displayed by the widget reflects the expected state of the cube without having to block the IPython kernel in a fragile way.

  • Added ability to append rows in all scenarios of a store with store.Store.append().


  • The constructors of config.SessionConfiguration, config.BasicAuthentication, config.BasicUser and config.OidcAuthentication have been made private and using them is deprecated. They have been replaced by factory functions: config.create_config(), config.create_basic_authentication(), config.create_basic_user() and config.create_oidc_authentication().

  • query.basic_auth.BasicAuthentication, replaced by query.create_basic_authentication().


  • The creation of calculated measures and the action to add a measure computing the difference between to table columns have been disabled in the JupyterLab widget extension to incentivize creating these measures in Python instead. These features are still available in the app (#21).


  • Issue with dates not correctly converted to Python datetime in store.Store.head() (#97).

  • Issue getting vector element with a measure containing long (#115).

  • Issue with aggregation function not preserved when creating a simulated measure (#121).