LogicBlox 4.3.10

Release Date: May 3rd 2016

What's New

See what's new in this release in our LogicBlox 4.3.10 - New Features playlist!

modeler-js User Interface Components
  • Revised Filtering and Slicing Experience: Filtering and slicing on headers has been revised such that users can easily see in one place all the members that can be filtered, and their relationship to one another.

    Filter and slice windows are easily accessible through the filter icon on every column or row header pill, or through the dropdown for slice pills, respectively. The color coding on members creates a visual indication for the effect of the filter/slice selections:

    • Members that have been directly selected to be in the filter, through user clicks, are displayed as blue.
    • Members that participate in no (hierarchical) relationship to directly selected members, and are thus implicitly excluded from the filter, are displayed in grey. Directly selecting a grey member would invalidate all current choices, as it will necessitate some current selections to be excluded.
    • Members whose siblings (in the same level) are included in the current selection, and whose selection does not require invalidation of current choices, are displayed in green.
    • And finally, members that have not been included or excluded from the filter, directly or indirectly, are displayed in white.

    Filter/slice windows also come with other usability features such as:

    • Keyboard navigation: UP/DOWN, LEFT/RIGHT keys can be used to change focus between the items in the filter window; TAB selects the item in focus, ENTER allows for quick application of changes and closing the window, while ESCAPE closes the window without applying any change.
    • The "Undo" icon allows a user to undo his changes in a single session.
    • The "Pin" icon allows a user to pin the filter/slice window in place as he applies different filtering conditions.

    Example 21. 

    As illustrated in the figure below, when the users selects a state, the filter panel clearly indicates which cities belong to the selected state, so that he can decide to either select one, multiple or all of the stores rolling up to the state:


    Due to the redesign of the slice pill, the slice panel now takes up less vertical space. To take advantage of this extra space, you can reduce the height of your slice panel in each sheet configuration. The ideal height is now 39px (in earlier releases we recommended a height of 62px).

    You can run the command below to automatically replace <SLICE_HEIGHT> with "39px" in all of your sheet configuration files (that are stored under src/config/sheets). Most applications use 62px as the <SLICE_HEIGHT>, but it can be different per application. We advise you to carefully review the changes caused by running this script, as the command simply replaces every occurence of <SLICE_HEIGHT> with 39px and could potentially lead to unwanted changes.

    $ cd <PROJECT_DIR>
    $ find src/config/sheets/ -type f -name "*sheet.json" -exec sed -i '' 's/<SLICE_HEIGHT>/39px/g' {} +

  • Improved Axis Configuration: Adding new levels to Rows, Columns or Slice has never been this easy and quick! You can now add new levels directly from the grid, without the need to switch to configuration mode. You can either search for a level or navigate through the Dimension Browser that is being displayed in a pop-up window.

    Example 22. 

    The figure below illustrates how the new pop-up window helps users in selecting a level to be added to the rows. Levels that cannot be added (for example due to the fact that levels from the same dimension but a different hierarchy are already displayed on the grid) are indicated with a grey background color and cannot be selected.
  • Support for displaying view titles: Views of the type SheetView can now have a title that is being displayed at the top of the view.

    Example 23. 

    In the example below the title AdHoc View is configured via the title entry of the view configuration:
    "adhoc-sheet": {
      "id": "adhoc-sheet",
      "title": "AdHoc View",
      "module": "SheetView"

  • Configuration of sorting of levels: It is now possible for developers to configure the default sorting of levels on a view. To do this, add the sort option inside the pivotCofig setting of the sheet.

    Example 24. 

    In the example below, the level Product:SKU is sorted descending, using it's label:

    "pivotConfig": {
     "sort": {
      "Product:SKU": {
       "qualifiedName": "Product:SKU",
       "sortAttr": "label",
       "sortType": "desc"

  • Bulk User View Preferences Backup and Restore: Two sets of services are now available to support the bulk backup and restoration of user view preferences:

    • /<APPPREFIX>/user_preferences_sheets: the GET version of this service exports all user sheets in TDX format, and the POST version of this service can be used to import back user sheets in the same TDX format.

    • /<APPPREFIX>/user_preferences_canvases: the GET version of this service exports all user canvases in TDX format, and the POST version of this service can be used to import back user canvases in the same TDX format.

    If used with the workbook framework, these services are only available in the master workspace.

    These services are useful when backing up data in a workspace in preparation for an application or platform upgrade, where the workspace would need to be rebuilt. These services should most likely be invoked together unless there is a specific reason to only back up sheets and not the canvas, or vice versa.

Measure Service
  • RelationBinding messages can now associate a parameter (ParamExpr) with an arbitrary CubiQL expression (MeasureExpr):

    {param: P, expr: E}

    The previous association of a parameter with a literal relation (LiteralTypedRelation):

    {param: P, relation: {intersection: I, type: T, column: C}}

    is deprecated in favor of using a literal expression (LiteralExpr):

    {param: P,
    expr: {kind: LITERAL,
     literal: {kind: GENERAL,
      signature: {intersection: I,
       type: {kind: SINGLETON, type: T}},
      column: C}}}

  • Update syntax: It is now possible to express updates in a textual syntax. This will help make it easier to experiment with spreading, etc. in the REPL directly or via scripts.

    Example 25. 

    In the following example, we simultaneously update M1 at intersections {A2,B2,C0} and {A1,B1A,C0}, and remove at intersection {A2,B2,C2A}:

    do spread
      {("A2_1", "B2_0", "C0_0_C1A_0_C2A_0", 333.0)} : {A.A2, B.B2, C.C0} => decimal
      via ratio into M1
    and spread
      {("A1_1_A2_0", "B1A_0_B2_1", "C0_1_C1A_1_C2A_1", 73.0),
     ("A1_0_A2_1", "B1A_0_B2_0", "C0_0_C1A_0_C2A_0", 60.0)} : {A.A1, B.B1A, C.C0} => decimal
      via ratio into M1
    and remove
      {("A2_0", "B2_0", "C2A_0"),
      ("A2_1", "B2_1", "C2A_1")} : {A.A2, B.B2, C.C2A}
      from M1 

  • Promote expression: promote converts the value of a CubiQL expression into a dimension, leaving the expression position-only:

    promote label in expr

    It isn’t quite the inverse of demote, as the result of demote will always be considered to be set valued, so if a functional expression is promoted that information is lost.


  • lb-workflow does not print timestamps in logs anymore under systemd, because systemd already prints a timestamp.

Corrected Issues

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

  • Fixed a correctness problem in decimal max aggregations.

  • Fixed an issue that was resulting in the following error message: "Request for reclaimed pageid".

  • Fixed an issue that prevented submitting concurrent write transactions and branching operations.

  • Fixed a problem in frame rule domain parallelism that caused the following error message: "predicate cardinality does not match that recorded in internal SIP state".

  • modeler-js User Interface Components:
    • When exporting data directly to Microsoft Excel, the id of a level was exported instead of its label.

    • Attempting to copy / export for a second time in a row when there was an existing broken query failed to complete.

    • The automatically generated measures representing hierarchy mappings now have more informative names by following the form "child to parent".

    • When a measure was sorted, the user could face an error when trying to move a level from the Rows to the Slice panel.

    • In-line only roll-ups did not respect the configured sort attribute.

    • Pasting a large number of rows than what fit on the grid resulted in a query that did not terminate.

    • The measure filter panel did not behave correctly with % formatted measures.

    • The measure filter panel did not filter correctly on 0 values for measures that had 0 as their default value.

    • Resolved an issue where min/max input fields of the measure filter panel were not updated correctly for decimal numbers.

    • If more than one level from the same dimension was visible on either the Rows or Columns, the filter dialog failed to show.

    • Resolved an issue where conditional formatting did not work when comparing = 0 for measures with default value 0.

    • The is in range option in conditional formatting now behaves as expected.

    • Resolved an issue where the logout notification did not show show up anymore when a user was idle for a certain amount of time.

Installation and Upgrade information

Installation Instructions

Installing LogicBlox 4.3.10 is as simple as 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.10/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.

Release Information

Server requirements
Operating System: 64 bit Linux; OSX 10.10+ is supported for local development.
Java Runtime Environment 7, update 11 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.