LogicBlox 4.3.15

Release Date: October 4th 2016

Executive Summary

LogicBlox 4.3.15 introduces database performance improvements through new evaluation strategies and a new primitive type (int128) that can be more effectively used in place of string values. Modeler-js based applications should see expanded support for end-user data discovery, through dimension splitting and attributes, as well as other usability improvements. Check LogicBlox 4.3.15 - New Features for video highlights of these new features.

What's New

  • A new evaluation strategy is introduced with this release: prefix join. Prefix-join applies to rules in which the key ordering selected by the optimizer for every body atom form a prefix. Our benchmarks show that rules where prefix-join strategy can be applied see up to a 4x performance improvement. The overall improvement to an entire application workload will vary depending on the rule characteristics of the application.

    The following are a couple of examples of rules where prefix-join evaluation would typically apply:

    • Rule with prefix (sku,store,week):

      		netsales[sku, store, week] = v <-
      	      v = sales[sku,store,week] - returns[sku,store,week].

    • Rule with prefix (sku):

      		Sales_by_brand[brand, store, week] = tv <-
      		agg<< tv = total(v) >>
      		sales[sku,store,week] = v,
      	      brand[sku] = brand.

    These patterns are ubiquitous in LogicBlox applications, either as LogiQL written by developers, or those generated by services such as Measure Service. The prefix join evaluation strategy is applicable to both the full and incremental evaluation of IDB rules. It currently does not apply to rules that involve negation.

  • A new primitive type int128 is now available for signed 128-bit integer values. The existing primitive type int supports signed 64-bit integer values and should be sufficient for virtually all applications. The int128 primitive type is particularly useful for storing UUIDs, which previously would typically be stored as string values. string values have some significant performance overhead associated with them for very large data sets, which can be avoided through the use of int128.

    The UUID usage of int128 is supported by the new built-ins int128:from_uuid_string and int128:to_uuid_string.


    We currently do not support constants for int128 (use string:int128:convert) and some overloaded infix operators, such as < and >.

  • Optimized handling of min/max aggregations of default valued predicates, using the new min_default and max_default aggregations. Please refer to the Aggregations chapter in the Reference Manual for an extensive overview of all the supported aggregations and their usage.

  • Dimension Splitting: Dimension-splitting refers to viewing a measure's values by aggregating a key along two different hierarchies of the same dimension. It is a common data discovery activity and we are very pleased to finally bring it to LogicBlox users!

    Example 7. 

    Given Sales measured at the base intersection of Sku, dimension splitting allows a user to view Sales for each SubClass and Vendor combination, produced by aggregating the Sales values along the Vendor hierarchy, as well as the SubClass hierarchy.

    Note the following restrictions

    • Measures are not editable when they are placed on a view that is using dimension splitting.

    • Dimension splitting is currently only supported for non-recalc measures.

  • Attributes: Measures can now be put directly on a row or column axis, to be displayed as attributes. This allows users to configure views where some measures are shown at a different intersection than others.

    Example 8. 

    For instance, users can configure on the same view, the measure Sku to Color to be shown for each Sku, whereas the measures Sales, Returns and Net Sales shown for each Sku and Year. To do this, the user simply needs to drag the measure Sku to Color directly onto the axis where the Measures pill is already displayed or by clicking on the Plus (+) button on that axis and checking the Attribute checkbox when selecting the measure.

  • Improved links and mouseover cells: We have added an editor and link box for link and mouseover cell types. Clicking a link or mouseover cell now shows the link in a popup box along with an edit button. The edit button will bring up the editor, allowing both the URL and the caption for the cell to be changed.

  • Usability improvements for configuring rollups: Users can now quickly configure a rollup level by adding that level to an axis with the Plus (+) button on the axis. As the rollup level is represented as a pill on the axis, users can easily change the way the level is displayed.

    • Display vs. Hide Outline: The outline mode creates a new column (or row) for the respective level member, where as hiding it provides more screen real estate, especially when rollup is configured on the level.
    • Display vs. Hide Rollup: The rollup mode creates an additional row (or column) for rollup values.

    The following image demonstrates the difference between various combinations of outline vs. rollup configuration, using Subclass as an example level:

  • Usability improvements for adding measures: Adding measures to a view has never been this easy. Users can now simply click on the Plus (+) button on the axis that contains the Measures pill to directly add a measure to the grid. The user has the option to choose between displaying it as a Measure or as an Attribute.

  • Changed behavior of Filters: Measure filters now get reset when a new level is added to or removed from one of the axis panels.

  • Vega Plugin: Vega plugin configurations now have the ability to refer to either .id or .label in labeling the axis, this needs to be specified in the configuration. Previously, .id was automatically shown as label. To preserve the old behavior and display the label, .id needs to be updated to .label.

Services Framework
  • The lb-web TXN Service now allows downloading .csv files directly from an URL, without the need to send a Header in the request. This allows the result of individual parts to be listed in HTML so that the browser can download the resulting files.

  • lb-web's broadcast service has been extended to support dynamically defined channels. This feature allows clients to connect to channels determined by the URL. This enables applications, such as the Modeler, to dynamically define channels for relevant concepts: in the case of Modeler, a channel for each workbook.

    Example 9. 

    For example, if the broadcast service is hosted on "/broadcast/*", a client connecting to "/broadcast/my_channel" is connecting to the "my_channel" channel.

Measure Service
  • When the measure service fails to find a requested metric, dimension, level, etc. in the model it will now look for close matches and report them in the error message.

    Example 10. 

    When trying to aggregate the metric Sale, which does not exist, the Measure Service will now suggest to aggregate over the existing metric Sales.

Corrected Issues

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

  • Fixed a bug in the InsideOut query optimization for float aggregations that involve integer values in the body of the rule.

  • The sorting of the lb web-server list -s command has been enhanced to consistently sort the results.

  • Resolved an issue that prevented the usage of non-negative and positive decimal formats for TDX columns.

  • Resolved an issue which occurred when installing a workbook template with a custom default group in a workspace where other templates were already installed.

  • Measure Service:
    • The negate operator will now compile to the appropriate LogiQL type:negate predicate instead of multiplication by negative -1.

    • Resolved an issue where a hierarchy could be chosen non-deterministically for some operations if there is no default hierarchy for a dimension.

  • modeler-js User Interface Components:
    • Resolved an issue with slice synching when opening a view for the first time.

    • Resolved an issue where the updated value of an entity typed measure was not displayed correctly while editing it in deferred calc mode.

    • Resolved an issue where double-clicking on the Navigation button failed to bring back the navigation pane.

    • The level members in the slice drop-down are now sorted by their label instead of their ID.

    • Resolved an issue where an exception occurred when adding a level to the grid that is incompatible with the filter mask.

    • Resolved an issue where under certain conditions an exception occurred when moving a level from the Rows to the Slice panel.

    • It is now possible to re-size a column when there is no level or measure on the x-axis.

Installation and Upgrade information

Installation Instructions

Install LogicBlox 4.3.15 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.15/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 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.