0.5.2 (2021-03-04)


User interface

  • Convert to Widget Below JupyterLab command available on (unmutated) DataFrames returned by the atoti.cube.Cube.query() and atoti.query.cube.QueryCube.query() methods (#49).

    convert query result to interactive widget

    This command provides a bridge from queries run from the Python API to widgets offering more interactivity. It can be executed by:

    • right-clicking on the DataFrame and selecting the corresponding context menu item.

    • selecting it in the command palette when the DataFrame cell is the active one.

  • Defer updates checkbox in the JupyterLab extension sidebar (#25).

    deferring updates in the JupyterLab extension

    Deferring updates reduces the load on the server by avoiding intermediate queries.

  • Pivot table columns can be resized (#206).

    • resizing a pivot table column manually

      Dragging the left border of a column resize the column to the desired width.

    • resizing a pivot table column automatically

      Double clicking on the left border resize the column to fit its content.

    • resizing all the columns of a pivot table automatically

      Selecting all the cells and double clicking on the left border of any column.

  • Pivot tables support expansion by another hierarchy.

    expanding a pivot table cell by another hierarchy

    Drag and drop a hierarchy to a pivot table cell to expand it.



  • Improve atoti.where() performance when either:

    • no false_measure is passed.

    • the passed condition on levels is made only of == or != comparisons to None and at most one == or != comparison to a non-None value.


  • Issue when accessing query session hierarchies and levels (#202).

  • Issue where switching to an incompatible widget type would crash the JupyterLab extension (#211).

  • Issue with glob path on Windows.

  • Prevent redefining special roles such as ROLE_USER and ROLE_ADMIN by raising an error in atoti.config.create_role().

  • Respect sampling mode when adding rows with atoti.store.Store.append() and the += operator.