0.5.3 (April 16, 2021)#


  • Ability to define an aggregated measure by combining multiple store columns. For example:

    - m["Quantity.SUM"] * m["Unit price.SUM"],
    + store["Quantity"] * store["Unit price"], # More efficient
      scope=tt.scope.origin(l["Sale ID"])
  • atoti.Session.security to configure roles and restrictions on a running session.

  • Glob pattern support in atoti.Session.read_parquet() and atoti.store.Store.load_parquet() methods.

  • atoti.config.create_logging_config to set the path of the file where the session logs are written.

User interface#

  • Tree table widget.

    tree table widget

    The tree table is like a pivot table where the row headers are squashed into a single column displayed as a tree.#

  • The Drillthrough context menu item already available in the app is also supported in JupyterLab.

    opening a drillthrough in JupyterLab

    Triggering the context menu of tables or charts from a selection with a single element allows to create a drillthrough widget that can be used to know the facts contributing to this aggregate.#

  • The Convert to Widget Below JupyterLab command is also available on DataFrames returned by atoti.Session.query_mdx() and atoti_query.QuerySession.query_mdx().

  • Query editor drawer in the app to manipulate the MDX query of the selected widget.


  • DocSearch has been integrated to the docs to provide faster and better search results (issue #168).

  • The atoti-plus package has been restructured from a standalone package that could be installed instead of the atoti package to a plugin that can be installed alongside the atoti package.

  • Performance of atoti.store.Store.append() has been improved (issue #255).

  • Stores are no longer automatically partitioned.


  • Creating roles with atoti.config.create_role().

  • Creating Basic authentication users with atoti.config.create_basic_user().

  • Creating Kerberos users with atoti.config.create_kerberos_user().

  • Displaying part of the logs with atoti.Session.logs_tail(). !tail -n 10 $session.logs_path can be used instead in Jupyter on Unix for example.


  • Issue where uploading a file from the project root via the source simulation widget would cause it to be deleted when restarting the session (issue #253).

  • Issue with date columns when using SQL sources (issue #263).

  • atoti.value() correctly differentiates None due to different values and None due to missing data.