LogicBlox 4.3


LogicBlox 4.3.17

Release Date: December 1st 2016

Executive Summary

LogicBlox 4.3.17 introduces the following enhancements:

  • The measure service includes a number of robustness and feature enhancements to support the expanded usage of CubiQL expressions.

  • The workbook framework now supports a new merge method for merging workbooks with the master workspace, which only transfers data that changed in the source since the last merge was performed.

  • Workbook template instantiations can now be tagged, to support querying of only a subset of all the possible instantiations of a template.

  • Modeler-js based applications should see performance improvements to various features, as well as a lower memory usage due to some bug fixes.

  • Additionally, the shortcut button functionality was extended to support overriding existing pivot configurations.

What's New

Database
  • We enhanced the perf logging level to additionally log the total duration of request (next to the existing transaction duration). For transaction requests, the logging includes information on whether a transaction is read or write. For all request, high-level information on the type of request is logged. The logging of request durations now also logs operations like creating or exporting a workspace, adding a mirror etc.

Measure Service
  • It is now possible to use entities defined by constructors in many places within the measure model and queries. If it is not possible to unambiguously infer the constructor predicate to use, it must be supplied via the conversion_pred field of the TypeDefinition message.

    Note

    Note that there is currently no support for sorting (along with header sort, key sort, etc.) on entities defined by constructors.

  • String length is now a built-in CubiQL operator.

  • Various robustness and developer support improvements:

    • The measure service now can continue to load even if there are syntax errors in CubiQL expressions defining metrics or inverses.

    • Improved the logging of exceptions during measure service initialization.

    • Performance improvements to certain CubiQL optimizations.

    • Improved error checking in the REPL.

    • Improved the checking of valid aggregation types with regard to measure types.

    • The measure:config / schema translation is more robust in the presence of dynamic changes to the config predicates.

Workbook Services
  • Delta Merge: Workbooks can now be committed/refreshed using the DELTA merge method. When using this method, only data changes in the source since the last merge (commit or refresh) are being sent, as opposed to the default behavior, where all the data in a workbook is refreshed/committed.

    The default merge_method is FULL, where all data that is refreshable/committable is updated using cross-branch logic. This behavior is the same as in earlier releases.

    Developers can configure the merge_method in either the handler config, the template configuration file or in the workbook message.

    Please refer to the chapter on Merge Methods in the Reference Manual for a more detailed overview of this feature.

    Example 1. 

    In a workbook using the DELTA merge method, on commit, only data (new/removed positions and updated measures) that changed since the last commit or refresh between the master and the workbook will be sent back to the master. Any changes in the master for data that was also changed in the workbook will be overwritten, but data that was not changed in the workbook is kept intact. Let's take a look at a concrete example:

    • The following shows the initial values for the Sales predicate in both the workbook and the master:

      SKU    | STORE   | WEEK   | Sales
      apples | atlanta | week-1 | 50
      apples | atlanta | week-2 | 0 

    • In the workbook the user makes the following update:

      SKU    | STORE   | WEEK   | Sales
      apples | atlanta | week-1 | 100 

    • In the meanwhile, the data in the master is also updated:

      SKU    | STORE   | WEEK   | Sales
      apples | atlanta | week-1 | 75
      apples | atlanta | week-2 | 200 

    • When the user commits the workbook, only Sales at the intersection that was updated in the workbook will be transferred to the master, resulting in the following:

      SKU    | STORE   | WEEK   | Sales
      apples | atlanta | week-1 | 100
      apples | atlanta | week-2 | 200 

      Notice how the value for week-1 was replaced by the value from the workbook, while the value for week-2 was left intact.

    • As a comparison, the values in the master after the commit would look as follows, if the workbook would have used the default (FULL) merge method:

      SKU    | STORE   | WEEK   | Sales
      apples | atlanta | week-1 | 100
      apples | atlanta | week-2 | 0 

      Notice how the change in the master for week-2 was overwritten by the value from the workbook.

    The behavior is the same for the refresh action. Data that has not been updated within a master since the last commit or refresh does not get refreshed and therefore any changes in the workbook to those metrics will not be overwritten:

    • The following shows the initial values for the Sales predicate in both the workbook and the master:

      SKU    | STORE   | WEEK   | Sales
      apples | atlanta | week-1 | 50
      apples | atlanta | week-2 | 0 

    • In the workbook the user makes the following updates:

      SKU    | STORE   | WEEK   | Sales
      apples | atlanta | week-1 | 100
      apples | atlanta | week-2 | 100 

    • The master gets updated with the following:

      SKU    | STORE   | WEEK   | Sales
      apples | atlanta | week-1 | 200

    • When the workbook is refreshed, only the deltas from the master are being refreshed into the workbook, resulting in the following values within the workbook:

      SKU    | STORE   | WEEK   | Sales
      apples | atlanta | week-1 | 100
      apples | atlanta | week-2 | 200 

      Notice how the value for week-1 was left untouched, while the value for week-2 was updated.

    • In a workbook with the default refresh behavior using the FULL merge method, the values would have been as follows after the refresh:

      SKU    | STORE   | WEEK   | Sales
      apples | atlanta | week-1 | 50
      apples | atlanta | week-2 | 200 

      Notice how the change in the workbook to Sales in week-1 was reverted and replaced by the value from the master.

    Note

    Note that the handler configuration option use_branch_transfer is now deprecated.

  • Tagging: The workbook_util API now allows developers to add logic to set a tag on template instantiations. This allows querying of a subset of all possible instantiations of a template, for instance, to create a workflow that only builds workbooks with a certain tag.

    Please refer to the chapter on Tagged Template Instantiation in the Reference Manual for a more detailed overview of this feature.

Modeler-js
  • Override type for shortcut buttons: The behavior of shortcut buttons is now configurable. While in previous releases a shortcut button's configuration was always merged with the existing pivot configuration, it is now possible to configure the behavior of the button such that it overrides the entire configuration with the one specified in the shortcut button.

    Example 2. 

    Lets assume the following sheet configuration:

    {
      "pivotConfig": {
        "axis": {
          "x": [{ "qualifiedName": "Product:Sku" }],
          "y": [{ "qualifiedName": "-:Measures" }],
          "z": [
            { "qualifiedName": "Sales" },
            { qualifiedName: "Returns" }
          ]
        },
        "filter": {
          "Product:Sku": {
            "sku-2": true,
            "sku-3": true,
            "sku-4": true
          }
        }
      }
    }

    In this configuration, we have defined a filter so that only sku-2, sku-3 and 4 are being displayed. With the following regular shortcut button configuration, we can add two more SKU's to the filter:

    {
      "buttonConfig": {
        "label": "Add sku-1 and sku-3 to the filter",
        "type": "merge",
        "config": {
          "pivotConfig": {
            "filter": {
              "Product:Sku": {
                "sku-1": true,
                "sku-3": false
                }
            }
          }
        }
      }
    }

    Notice the new type property. The default type, which is also the behavior from previous releases, is merge and can be omitted. As result of clicking this button, the existing pivot configuration of the sheet will be merged with the one from the shortcut button, resulting in the following:

    {
      "pivotConfig": {
        "axis": {
          "x": [{ "qualifiedName": "Product:Sku" }],
          "y": [{ "qualifiedName": "-:Measures" }],
          "z": [
            { "qualifiedName": "Sales" },
            { qualifiedName: "Returns" }
          ]
        },
        "filter": {
          "Product:Sku": {
            "sku-2": true,
            "sku-3": false,
            "sku-4": true,
            "sku-1": true
          }
        }
      }
    }

    Instead of merging the configuration, it is now also possible to override the existing pivot configuration by using the new type override. In the example below, we have defined a new shortcut button with the label Reset filter to sku-3, which will override the existing pivot configuration:

    {
      "buttonConfig": {
        "label": "Reset filter to sku-3",
        "type": "override",
        "config": {
          "pivotConfig": {
            "axis": {
              "x": [{ "qualifiedName": "Product:Sku" }],
              "y": [{ "qualifiedName": "-:Measures" }],
              "z": [
                { "qualifiedName": "Sales" },
                { qualifiedName: "Returns" }
              ]
            },
            "filter": {
              "Product:Sku": {
                "sku-3": true
              }
            }
          }
        }
      }
    }

    As result of clicking this shortcut button, only sku-3 will be displayed in the view and the pivot configuration will be updated to the following:

    {
      "pivotConfig": {
        "axis": {
          "x": [{ "qualifiedName": "Product:Sku" }],
          "y": [{ "qualifiedName": "-:Measures" }],
          "z": [
            { "qualifiedName": "Sales" },
            { qualifiedName: "Returns" }
          ]
        },
        "filter": {
          "Product:Sku": {
            "sku-3": true
          }
        }
      }
    }

Corrected Issues

The issues listed below have been corrected since the 4.3.16 release.

  • Fixed an evaluation problem that resulted in an incorrect functional dependency violation error.

  • Fixed an internal error in aggregation rules that effectively do not aggregate anything, e.g. p[]=a <- agg<<a = total(x)>> x = 13.0f.

  • Fixed an internal error "object of type ScalarPredicate cannot be cast to SplittableInterface" that occurred while evaluating some aggregations into scalar predicates when parallel evaluation is used.

  • Fixed an internal error "Unexpected missing versions for 'f$2_0_1'" that occurred in rules involving default values when the query optimizer incorrectly attempted to create an index on the value of the default value predicate.

  • Fixed an issue where delta rules involving default values and predicates on different branches would not be evaluated correctly.

  • Resolved an issue where it was not possible to create a workbook template when there were multiple intersections defined with the same levels, but in a different order.

  • Measure Service:
    • For dimensions of primitive type (e.g. string), the hierarchy now has the same name as the dimension.

    • The timeout on acquiring the measure state has been bumped to five minutes.

  • Modeler-js:
    • Resolved a scrolling related performance problem.

    • The performance of both scrolling as well as filtering using the filter panel has drastically improved for large header values.

    • Resolved an issue where data updates that were entered at a certain speed were reverted in the UI, even though the changes were sent correctly to the database.

    • It is now possible to paste into a cell of type wrapped-text.

    • HTML in the label of levels is now correctly escaped.

    • Resolved an issue that could cause an exception when clicking outside of the color picker window in the conditional formatting screen.

    • Resolved an issue where the axis configuration menu closed with no input under certain circumstances.

    • Resolved an issue where the measure filter window did not query higher levels correctly.

    • Resolved an issue where opening the measure filter panel more than 2 times resulted in an exception.

Installation and Upgrade information

Installation Instructions

Install LogicBlox 4.3.17 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.3.17/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

  • The lb-web handler configuration option use_branch_transfer is now deprecated in favor the new merge_method option that can be used at either the handler, the workbook template or the workbook level.

Release Information

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