LogicBlox 4.4.8

Executive Summary

The measure service will now provide more info when reporting parse errors.

The lb measure-service install command now provides error messages with
respect to the source files.

Modeler-js

Modeler-js is now able to import data from Excel files with the new 'Data Import' menu option
in the navigation tree. Users can now also export an Excel template containing just the headers of the
grid using the existing 'Export to Excel' functionality.

Modeler-js has a new internal service to delete user-specific view state.

Modeler-js will now render a view even when it contains non-existent measures in the view configuration.

Users can now quickly apply value filters in Modeler-js by pressing ENTER in input fields of the filter panel.

Tools and Services

The LogicBlox systemd services have all been updated to use systemd socket activation.

The cloud-store utility now allows multiple encryption keys to be associated
with a file.

lb config now supports generating ScalaDoc from Scala sources.

Makefiles generated by lb config now explicitly set bash as the shell.

Exception messages from lb web-client now include the URL that caused the exception.

The GetPredicateInfoBulk command has been removed from the ConnectBlox interface.

What's New

Measure Service

The measure service will now provide a context line from the source file when
reporting CubiQL and Measure Language parse errors.

The lb measure-service install command now parses rule files individually
before sending them to the server to provide errors with respect to the source files.

Modeler-js

The new navigation menu item Data Import will appear in all applications. It allows users to
import Excel files into the workspace by binding columns in the file to Levels and Measures in the
application.

Importing only level member labels

It is possible to import just the labels of a level instead of the "id". However, there is additional
configuration need to allow this as well as some limitations. First, you'll need to define a predicate
that maps all labels to an id. If you have duplicate labels, be sure to apply some kind of aggregation
to prevent functional dependency violations. The predicate must have one string key and a string value.

Once this is done, the Is Label checkbox on the data import screen will be available for the Level.

A limitation of importing only a level's label without its id is that level creation is not allowed,
nor is updating the label. The reason for this is that since the id is not present in the file, we must
look it up by the label. It is therefore impossible to know if an unknown label is a new level member or an
update to an existing level member.

Limitations

byMetric validations are not supported

Import works only at base intersection

Every row must have a unique key

Level member creation by labels is not supported

Nested column headers or slices are not supported for Excel files

A new internal service has been added to allow for deleting a user-specific view state.
The service is supported on the existing /viewstate URI with DELETE as the
HTTP method.

The username and view ID should be passed in as data in the HTTP request.

Example 17.

Here is the data layout for deleting the view state of 'product-analysis-subclass-bottom' for 'user1':

{
"userName": "user1",
"viewId": "product-analysis-subclass-bottom"
}

Modeler-js now renders a view that contains non-existent measures in the view configuration. Any
measures that don't exist will be removed automatically from the view during render. Modeler-js will
write a warning message to the console to alert the user.

The Export To Excel function now allows the users to only export the headers of the grid. This file can serve
as a template for importing new data into the same grid.

Users can now quickly apply value filters in Modeler-js by pressing ENTER in input fields of the filter
panel.

Tools and Services

The LogicBlox systemd services (lb-server, lb-web-server, and lb-compiler) have all been
updated to use systemd socket activation, dynamically starting the services the first time
a request is made. The main advantage of this is robustness with respect to service start up
sequence. The socket activation changes allow systemd to manage the service dependencies and
start them in the correct order as needed. Details on how LogicBlox services work with the
systemd framework have been added as a new chapter in the LogicBlox Administrative Guide.

The cloud-store utility now allows multiple encryption keys to be associated
with a file. Use the add-encryption-key command to add a new encryption key
to a file and use the remove-encryption-key command to remove an existing
encryption key from a file. Encryption keys cannot be added to a file that was not uploaded
initially with a key. Likewise, the last encryption key for a file cannot be removed. A
file is marked as either encrypted or not encrypted when it is uploaded and it cannot
change after that without deleting and uploading the file again. Example command usage:

Makefiles generated by lb config now explicitly set bash as the shell.

Exception messages from lb web-client now include the URL that caused the exception.

The GetPredicateInfoBulk command has been removed from the ConnectBlox interface.

Corrected Issues

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

Validation of decimal values in TDX services is now more robust. If the service definition uses
">=", ">", "<=" or "<" in the format and the value is not a floating point,
the system will return HTTP 500.

All lb commands were reviewed to make sure read-only requests are made to a
workspace whenever possible. The list-blocks, print-block, and
print-rules commands were corrected to use read-only access.

Fixed the string:decimal:convert function, used by TDX decimal format, to support
E notation. For example, string:decimal:convert["1E-05"] will now return a decimal
value instead of evaluating to nothing.

Resolved an issue in the measure service with parsing negative scalars in CubiQL literal expressions.

Resolved an issue in the measure service involving desugaring some expressions in CubiQL inverses.

Fixed long level labels from overlapping the list of level members from the child level in the "Assign" popup in
Modeler-js.

Fixed issue in Modeler-js that prevented the user from editing headers (labels) with multiple levels on the axis.

Fixed caching issues with Export to Excel in Modeler-js.

Resolved behavior in Modeler-js where on violation of a cell's type (e.g. entering letters into a number field)
synchronous validation would empty the value entered by the user.

Copy/paste in Modeler-js now respects the display format (LABEL, ID, LABEL_ID, and ID_LABEL) under "Pivot settings".

Fixed unexpected resizing of all columns in Modeler-js when an entire data row was selected.

Fixed some situations where Modeler-js would not render views correctly for IE11.

Fixed an issue in Chart Mode where Modeler-js would unexpectedly move the 'Measure Values' pill to another axis
when the slice value was changed via
a synchronized slice on another sheet.

NOTE: this script will set all the necessary
environment variables. You might want to add this command to your
.bashrc.

Upgrade Information

The library containing the modeler migration tool is included in the
distribution under 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 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: