LogicBlox 4.4.1

Release Date: February 1st 2017

Executive Summary

LogicBlox 4.4.1 introduces the following enhancements:

  • Database includes various performance enhancements, in particular with regard to min and max aggregations for decimal types, as well as optimizations that eliminates redundant atoms in logic.

  • The measure service includes a number of bug fixes, performance improvements, and new annotation syntax to the CubiQL surface language.

  • The workbookutils API has been improved to support the creation of unpartitioned workbooks.

  • The modeler-js framework has been enhanced with the ability to restrict visible levels and dimensions from end users, the support for configuring the display labels of levels, and usability improvements to axis configuration.

  • Workflow framework includes support for simple lb-workflow notifiers.

Please refer to LogicBlox 4.4.1 - New Features Playlist for video highlights of the new Modeler-js features.

What's New


  • Further performance improvements of min/max aggregations for decimals.

  • The dlbatch command language now supports default-valued predicates when using addIndex sub-command.

  • The new lang:oneToOne pragma generates a constraint to ensure that the property holds. The guarantee that these constraints would hold allows the runtime to infer more functional dependencies, which are in turn used to more aggressively determine whether a P2P needs to be materialized, whether InsideOut can be applied, or logic simplifications.

Services Framework

  • The LoginHandler now returns a friendly message when user authentication fails. It's possible to tell if authentication failed due to invalid credentials, the user being inactive, or a generic error. The inactive user message is only displayed if the credentials are correct.

    Example 61. 

    The example below shows the info message that is now being logged when authentication failed due to invalid credentials:

    INFO BloxWebAuth-BCrypt - The user does not exist
    INFO BloxWebAuth-StatefulRealm - Error while attempting login (status 401): Invalid user/password.
    INFO Login              - Error while attempting login (status 401): Invalid user/password.

    For inactive users trying to log in, the info message below is being logged:

    INFO BloxWebAuth-BCrypt - login attempt for inactive user 'user1'
    INFO BloxWebAuth-StatefulRealm - Error while attempting login (status 401): User is inactive.
    INFO Login              - Error while attempting login (status 401): User is inactive.

Workbook Services

  • Improved workbookutil services and workflows to support the creation of unpartitioned workbooks.

Measure Service

  • CubiQL now supports a syntax for annotations.

    Example 62. 

    In the example below we set the functional property of an expression:

            total ({{ functional=true }} collect Sales by slide ThisWeek_NextYear)
            @ { year } 

  • The measure service optimizer will now take advantage of the lang:oneToOne property when making optimization decisions. This can for example allow for more CubiQL expressions to be inferred to have functional dependencies or have default values.

  • The measure service will always set emit_comments to true if the log level is set to debug or debug2.

  • The new measure service configuration option fatal_deprecations allows making deprecation warning messages errors independent of other warnings.

  • The Target message for UpdateRequests now includes a field unique to indicate whether a constraint violation should be reported if the client attempts to create a level that already exists.

  • Improved error reporting when literal expressions are not functional as declared.


  • Restricting displayable levels and dimensions: It is now possible to restrict which levels or dimensions can be added by users manually to an axis. The configuration can be done either at the sheet or at the canvas level, where the sheet configuration precedes the canvas configuration.

    Example 63. 

    The configuration below states the following:

    • From the Product dimension, only the levels Brand and Sku should be available.

    • The complete Calendar dimension should be hidden from the user.

    • All levels except the level State should be hidden from the Location dimension.

    "id": "example-canvas",
    "dimensionsConfig": [
          "dimension": "Product",
          "include": true,
          "levels": ["Brand", "Sku"]
          "dimension": "Calendar",
          "exclude": true
          "dimension": "Location",
          "include": false,
          "levels": ["State"]

  • Label Display Options: A new option is now available in the Pivot Settings pop-up window that is available via the cogwheel, that allows users to change the display label of level members as well as measures. Users can choose to display either the label, ID, or a combination of them.

    It is also possible to configure this via the sheet configuration files. The possible options for the labelDisplayOption are:

    • LABEL: default behavior, the label of all entities as well as measures is displayed.

    • ID: the id of all entities and the measures is displayed.

    • ID_LABEL: a combination of id and label is displayed, where the id is displayed first, followed by the label between brackets.

    • LABEL_ID: a combination of id and label is displayed, where the label is displayed first, followed by the id between brackets.

    Example 64. 

    The configuration below states that all labels should be displayed as ID(label), thus the id of the entity / measure first, and the label between brackets.

    "id": "example-sheet",
    "pivotConfig": {
        "axis": {
            "x": [
        "labelDisplayOption": "ID_LABEL"

  • Users can now obtain the FullStory session URL via right-clicking on the FullStory action button. This can be helpful when filing an issue.

  • Revised behavior for empty strings: Starting from this release, when the user removes the value from a string-typed cell in the grid or from a text field in a form, the change will be treated as a delete operation. The request sent to the server will now delete the value instead of saving an empty string, which was the behavior in earlier releases.

  • Revised configuration of displayableMeasures: displayableMeasures are now configured in the same way as the new displayableDimensions. In previous releases it was configured as part of the ModelBrowser view.

    Note that similarly to the options of the displayableDimensions, it is possible to indicate whether the list of measures should be explicitly included or excluded. If include is set to true, then only those measures will appear. If set to false, all measures except the ones listed will be available. Sheets inherit the configuration from the canvas unless they have their own, in which case the sheet configuration takes precedence.

    Example 65. 

    The snippet below shows the configuration of displayableMeasures before this release:

    "id": "example-canvas",
    "views": {
        "browser-tabs-view": {
            "module": "ModelBrowser",
            "config": {
                "displayableMeasures": [{"qualifiedName": "Sales"}, {"qualifiedName": "Returns"}]

    The same configuration, which states that only the measures Sales and Returns should be available to users to add to the views, would look as follows starting this release:

    "id": "example-canvas",
    "displayableMeasures": {
        "include": true,
        "measures": ["Sales", "Returns"]


    This update can be done automatically by using the modeler-migrations npm module (see the Upgrade Information section for more details) to automatically convert a project's canvases.


  • Added support for declaring lb workflow notifiers without binding to an event-filter. These notifiers can then be used by the lb.log.Notify task to perform notifications explicitly.

Developer Tools

  • The workbook command line now auto-completes workspace names, workbook and template ids, as well as user ids when possible. Auto completion assumes that lb-web services are loaded locally on the standard prefixes.

  • When a loglevel is specified on the lb command-line, the return-log option is now automatically is set to true.

Corrected Issues

The issues listed below have been corrected since the 4.4.0 release:

  • Fixed an issue in lb-web's JSON parser that prevented non-ascii characters to be used in service requests.

  • Fixed an issue in JSON import and export handlers that prevented the ongoing transaction from being aborted when the client connection is closed. This only affected the extension handlers used to store JSON in a workspace. Other services using JSON were not affected.

  • Fixed an issue in the asynchronous handling of the decompression of TDX import files. The issue prevented more files to be concurrently imported than there are cores in the server.

  • When the connection to the LoginHandler is closed, an abort request will now be submitted to try to abort the authentication processing.

  • Measure Service:

    • The measure service won't fail if there are predicates using int128 values in the workspace (using int128 values in the measure service is not yet supported).

    • Fixed an issue where a predicate name collision could occur when multiple updates were made to the same metric.

    • Fixed an issue with entity ids being returned instead of entity refmodes in some cases.

    • Resolved issues where measure language formulas referencing transaction lifetime predicates and data might be installed rather than executed.

    • Problems with reducing complicated abstractions have been resolved.

  • Modeler-js:
    • Resolved an issue where Form Mode was unavailable when the ALL level was visible on the grid.

    • Resolved an issue where the content of measures of the Link cell type was not shown when the cell was read-only or protected.

    • Resolved an issue where under certain circumstances it was not possible to change the slice selection when the Measures pill was on the slice.

    • Resolved an issue with the sorting of repeated measure columns.

    • If displayableMeasures are configured at either the canvas or the sheet level, then only those measures are available to users in both the model browser and the axis configuration menu. In previous releases, the axis configuration menu always showed all measures.

Installation and Upgrade information

Installation Instructions

Install LogicBlox 4.4.1 by following the steps outlined below:

  1. Download the installation package.
  2. Extract the tarball in <YourPreferredInstallDirectory>
  3. Run the following command:
    source <YourPreferredInstallDirectory>/logicblox-4.4.1/etc/profile.d/logicblox.sh
    NOTE: this script will set all the necessary environment variables. You might want to add this command to your .bashrc.

Upgrade Information

  • We now ship a library in the distribution (in lib/npm/modeler-migrations-<version>.tgz) that contains a command line tool for doing various transformations/migrations of modeler configurations. In previous releases we shipped these as a python script.

    To use the npm module, you first need to install it by running npm install path/to/modeler-migrations-<version>.tgz. You will then be able to use the command line tool. The module contains a README.md file that lists all available transformations as well as detailed instructions for use.

    To automatically upgrade a Modeler-js based application from one version to another, run the upgrade script to upgrade between versions:
    ./node_modules/.bin/migrate-modeler --fromVersion <prevVer> --toVersion <toVer> /path/to/my/modelerapp
    where the version numbers refer to LogicBlox releaeses (e.g. 4.4.1 or 4.3.17).


    If you installed the npm module globally, you won't need the ./node_modules/.bin prefix on the command.

    Example 66. 

    To upgrade a Modeler-js based application from LogicBlox 4.3.16 to 4.4.1, you can run the following command:

    ./node_modules/.bin/migrate-modeler --fromVersion 4.3.16 --toVersion 4.4.1 /path/to/my/modelerapp

Release Information

Server requirements
Operating System: 64 bit Linux; OSX 10.10+ is supported for local development.
Java Runtime Environment 8
Python 2.7 or higher
Client requirements
Applications using modeler-js User Interface Components: Google Chrome
Requirements for applications using non-modeler-js components may vary per application.