LogicBlox 4.14

Table of Contents

LogicBlox 4.14.0

LogicBlox 4.14.0

Release Date: July 10, 2019

What's New

LogicBlox 4.14.0 introduces the following enhancements:

  • Modeler
    • Support for the measure language has been removed from Modeler.

    • Dropdown filters are now configured using CubiQL expressions instead of defining potentially large mapping measures. For more information, see the Upgrade Information section.

    • In addition to the existing English and Russian translation files, Modeler now also ships with a Spanish translation file.

    • Modeler now automatically generates slides and operators for ordered levels which can be used in CubiQL rules.

      For an ordered level such as Calendar:Week, we've added the following:

      • Two slides named Calendar_Week_prev and Calendar_Week_next.
      • Two operators named OP_Calendar_Week_prev and OP_Calendar_Week_next.

  • Modeler IDE
    • Project creation now includes a workflow for loading test users. This allows the configuration of users for logging in to the Modeler IDE project you're developing.

    • The workflow for measure creation has been improved and now defaults to creating measure variants.

    • Added the ability to copy/duplicate a variant and all of its rules/overrides.

    • Adding a quick search feature to allow quickly switching between measures.

    • Nix files and install.sh for your Modeler IDE project are now generated on project creation rather than on every build.

  • Tools, Database, and Services
    • Constant variables that occur in the body of a rule are now handled better by the rule optimizer, leading to a better performance for the rule evaluation.

  • Measure service
    • Support for the measure language has been disabled in the Measure service.

    • Improvements were made to the LogiQL emitted from the measure service to avoid poor query plans. Backported to 4.13.1 and later releases.

    • Improved the error message reported when attempting to use a CubiQL operator on a position-only expression.

    • The internal representation of intersections in the measure service has been split to not include hierarchy information, as is the case for qualified levels in the protobuf protocol. The hierarchy information is now stored separately in what we call a "path hint" to guide aggregations and spreads. In a future release, we'll begin exposing "path hints" in the protocol and migrate away from including hierarchies in qualified levels. We do not expect this to have any visible impact to users other than some changes to error messages and warnings.

Corrected Issues

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

  • Modeler
    • The Deferred Calc notification message has been improved to prevent confusion with workbook commit functionality.

    • Modeler now shows correctly shows the text "No items to filter" in all supported languages when there are no measures configured on the axes.

    • Optimized filter performance to prevent Modeler's UI from becoming unresponsive when applying or changing a filter on a large level.

    • Improved drag and drop behavior in Modeler. This fixed an issue where a field could re-appear on an axis after dragging it off.

    • The Measures panel now stays open after using the expand icon to expand it. Additionally, the Filter panel invoked from a measure field on an axis now stays open if the mouse is released outside of the panel.

  • Modeler IDE
    • Fixed an issue with automatically detecting the LogicBlox installation (LOGICBLOX_HOME).

    • Drag and drop behavior improvements in Modeler are also available in the Modeler IDE.

    • Keyboard shortcuts such as copy and paste now work as expected in the Modeler IDE.

  • Tools, Database, and Services
    • Fixed a problem with the lb archive command that could potentially cause workspace modification events, like import of a protobuf descriptor, to be excluded in the workspace archive. This could cause miscellaneous errors in a workspace restored from the archive, such as internal lb-web services not working correctly.

    • Rules with scalar predicates like datetime:now[] in the body were not handled correctly by the optimizer, resulting in execution plans that could be inefficient.

    • Corrected an error that could cause lb-server to crash when maintaining some aggregation rules.

  • Measure service
    • Fixed some optimizations that could cause aggregations with slides to be incorrectly commuted with other operations.

    • Fixed some problems with how filter expressions are validated that could cause incorrect LogiQL to be generated rather producing a useful error message.

    • Fixed a limitation in the completer that would prevent it from supporting levels where the id is defined in terms of a predicate other than a constructor or refmode.

    • Fixed an issue that could cause the logic for a metric bound to a predicate, but defined by a CubiQL expression, from being installed more than once.

    • Fixed many small issues with how locking and simultaneous edits are processed when editing metrics defined by CubiQL expressions. While these issues prevented CubiQL-based applications from having complete parity with the measure language in earlier releases, we now properly support more editing scenarios for CubiQL than ever worked for the measure language.

Known Issues

The issues listed below are known to exist in the 4.14.0 release.

  • Tools, Database, and Services
    • This release contains changes to some lb-workflow tasks related to workbook creation. These fixes have not been applied yet to lb.wb.CreateWorkbook, which means errors related to recent changes in the LB runtime that imposes restrictions on string lengths can still occur. Please note that this known issue does apply to lb.wb.util.CreateWorkbook.

Installation Information

Install LogicBlox 4.14 by following the steps outlined below:

  1. Download the LogicBlox installation package for Linux or macOS from the LogicBlox developer website.
  2. Extract the tarball into a directory, which we refer to as <LOGICBLOX_HOME>.
  3. Run the following commands:
    source <LOGICBLOX_HOME>/etc/profile.d/logicblox.sh
    source <LOGICBLOX_HOME>/etc/bash_completion.d/logicblox.sh
    NOTE: these scripts automatically set all the necessary environment variables (please be aware that this script only works if you use bash as your shell). You might want to add these commands to your .bashrc.

Upgrade Information

  • Modeler
    • Support for the measure language has been removed from Modeler. Modeler applications should now be using CubiQL instead of measure language rules. If you're new to CubiQL, make sure to take a look at the exercises in the Introduction to CubiQL chapter of the new Getting Started with CubiQL tutorial.

    • Dropdown filters are now configured using CubiQL expressions. The configuration of dropdown filters is explained in detail in the Filtered Dropdowns chapter of the new Getting Started with CubiQL tutorial.

      Summary of the changes:

      • The dropdownMeasureFilter object in the pivotConfig part of the JSON view configuration has changed. The configuration in previous releases looks like this:

        "dropdownMeasureFilter": [
                "qualifiedName": "SkuColor",
                "filterMeasure": "ValidSkuColor",
                "valueLabel": "Label2"
                "qualifiedName": "SimilarSku",
                "filterMeasure": "ValidSku",
                "valueLabel": "Label2"

        Here's the configuration which has been introduced in this release:

        "dropdownMeasureFilter": [
                "qualifiedName": "SkuColor",
                "filterName": "VALID_SKU_COLOR"
                "qualifiedName": "SimilarSku",
                "filterName": "VALID_SKU"

        As you see, filterMeasure and valueLabel are gone. Instead, there's filterName and you define dropdown filters as CubiQL expressions.

      • Here's the filters definition for the example above:

        ^modeler_config:metamodel:cubiql:dropdown_filter_expr["VALID_SKU_COLOR"] = """
            relabel Label2 to Product in (demote Product in (dice #(filter ValidSkuColor by = true) by CURRENT_POS))
        ^modeler_config:metamodel:cubiql:dropdown_filter_expr["VALID_SKU"] = """
            Product.sku.id \ CURRENT_POS

        Where ValidSkuColor[sku, color] = boolean and sku labeled as Product and color as Label2 in the ValidSkuColor's intersection defined in Intersections.csv.

        In general, Modeler issues the following query when determining which positions to filter from the dropdown:


        In our example, the expression will dice Product.color.id by the result of the VALID_SKU_COLOR filter, where Product.color.id is labeled as Product, so that's the reason to do relabel Label2 to Product in ... in the expression.

        Let's take a look at VALID_SKU, so we have modeler_config:metamodel:cubiql:dropdown_filter_expr predicate in the modeler_config LogiQL library. VALID_SKU is obviously the filterName. The expression itself is a difference expression, where we have CURRENT_POS variable on the right side. dropdown_filter_expr wraps the given expression into an abstraction expression with a single expression argument called CURRENT_POS. The abstraction expression is saved into var_binding part of the measure model. Then, the Modeler uses the var_binding as a filter to query the dropdown measure members and provides the current position on the grid as CURRENT_POS expression argument.

        You don't have to use the current position variable in your expression. For example, you just want to filter out some colors, you could use the following expression:

        ^modeler_config:metamodel:cubiql:dropdown_filter_expr["AVAILABLE_COLOR"] = """
            filter ColorMask by = true

        where ColorMask[color] = boolean.

      • Level Member Creation configuration has been changed to reflect the dropdown filter changes.

        +pivot:config:level_creation:filterName[l,m] = "AVAILABLE_COLOR"
        // instead of
        +pivot:config:level_creation:filterMeasure[l,m] = "ColorMask"

    • The library containing the Modeler migration tool is included in the distribution under <LOGICBLOX_HOME>/lib/npm/modeler-migrations-<VERSION>.tgz and contains a command line tool for doing various transformations/migrations of modeler configurations.

      To use the npm module, you first need to install it by running npm install <LOGICBLOX_HOME>/lib/npm/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 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 releases (e.g. 4.14.0).

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

  • Measure service
    • Support for the old measure language has been disabled in the Measure service. Attempts to install measure language rules will result in errors.

Release Information

  • Server requirements
    • Operating System: 64-bit Linux; Apple macOS 10.10+ is supported for local development
    • Java Runtime Environment 8, update 101 or higher
    • Python 2.7 or higher
  • Client requirements
    • Applications using LogicBlox Modeler: Modeler supports major browsers not older than 1 year. Google Chrome provides the best performance.
    • Requirements for applications using non-LogicBlox Modeler components may vary per application.