LogicBlox 4.27


LogicBlox 4.27.3

Release Date: November 5, 2020

Corrected Issues

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

  • Tools, Database, and Services
    • Fixed a bug in the incremental maintenance of linear recursion rules that could cause incorrect results to be calculated when the start week is not the same for each group in the linear recursion.

Known Issues

The issues listed below are known to exist in the 4.27.3 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.

  • Notice for macOS 10.15 Catalina users
    • LogicBlox builds are not signed with an Apple developer certificate. This may result in error messages stating that LogicBlox originates from an "unidentified developer". To ensure the LogicBlox services will run on your system, apply the following command on the distribution tarball you downloaded from this website:

      $ xattr -d com.apple.quarantine logicblox-osx-<VERSION>.tar.gz

      Additionally, LogicBlox services will not function correctly when using a signed/notarized Java Runtime Environment. For instance, AdoptOpenJDK version 1.8.0_242 is the latest version that works with LogicBlox without causing signing issues.

      For more information about running apps from an unidentified developer, see Apple's macOS User Guide.

LogicBlox 4.27.2

Release Date: October 5, 2020

What's New

LogicBlox 4.27.2 introduces the following enhancements:

  • Tools, Database, and Services
    • A new lang:nonProjective pragma has been introduced to LogiQL. This can be used to annotate a derived-only predicate to tell the runtime that the rule defining the predicate is not a real projection, allowing the runtime to optimize evaluation of aggregation rules that use the predicate. A rule may appear to be a projection based on its definition, but constraints in the application data may mean that the rule really acts as if it is not a projection. Knowing this allows the runtime to optimize evaluation of such rules.

      This pragma is a short term feature to work around some immediate performance problems with some applications and should only be used under advice of the LogicBlox runtime team. Future releases will contain a more general and long term fix for these kinds of performance problems.

Corrected Issues

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

  • Modeler
    • Cells for measures with composite spreads are now correctly hashed at the ALL level for first and last.

  • Tools, Database, and Services
    • Fixed an internal error with no funnel writers for sensitivity indices.

Known Issues

The issues listed below are known to exist in the 4.27.2 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.

  • Notice for macOS 10.15 Catalina users
    • LogicBlox builds are not signed with an Apple developer certificate. This may result in error messages stating that LogicBlox originates from an "unidentified developer". To ensure the LogicBlox services will run on your system, apply the following command on the distribution tarball you downloaded from this website:

      $ xattr -d com.apple.quarantine logicblox-osx-<VERSION>.tar.gz

      Additionally, LogicBlox services will not function correctly when using a signed/notarized Java Runtime Environment. For instance, AdoptOpenJDK version 1.8.0_242 is the latest version that works with LogicBlox without causing signing issues.

      For more information about running apps from an unidentified developer, see Apple's macOS User Guide.

LogicBlox 4.27.1

Release Date: September 24, 2020

Corrected Issues

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

  • Modeler
    • Removed underline styling for links in the Modeler (i.e. URLs in the navigation tree, workbook selection, and image and link formatted cells).

  • Tools, Database, and Services
    • Fixed a segmentation fault that could occur during workbook template instantiation.

Known Issues

The issues listed below are known to exist in the 4.27.1 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.

  • Notice for macOS 10.15 Catalina users
    • LogicBlox builds are not signed with an Apple developer certificate. This may result in error messages stating that LogicBlox originates from an "unidentified developer". To ensure the LogicBlox services will run on your system, apply the following command on the distribution tarball you downloaded from this website:

      $ xattr -d com.apple.quarantine logicblox-osx-<VERSION>.tar.gz

      Additionally, LogicBlox services will not function correctly when using a signed/notarized Java Runtime Environment. For instance, AdoptOpenJDK version 1.8.0_242 is the latest version that works with LogicBlox without causing signing issues.

      For more information about running apps from an unidentified developer, see Apple's macOS User Guide.

LogicBlox 4.27.0

Release Date: September 10, 2020

What's New

LogicBlox 4.27.0 introduces the following enhancements:

  • Modeler
    • Users can now share their Modeler view configurations with other users via a shareable link (URL).

      Shared views can be previewed in all available workbooks and can be saved as a new user-defined view under "My Views" allowing other users to make their own changes to the view configuration. View configuration changes to these saved views will not be visible to other users of the Modeler application.

      Example 1. 

      To share a predefined or user-defined view in your Modeler application, select the "Share" option under the ••• button next to the name of the view in the navigation tree.

      Modeler generates a shareable link for the view which can be shared with other users of the Modeler application (e.g. via email).

      When a user opens the shareable link, Modeler will show a read-only version of the current view configuration of the shared view.

      Select the "Save" button to save this shared view as a new user-defined view. This copy of the shared view will become available under "My Views" in the navigation tree.

      The data shown in the preview of the shared view depends on the available data in the current workbook. Select the "Open In A Different Workbook" option to open the shared view in another workbook. This option is also shown when users try to open a shared view originating from a workbook they don't have access to.

      The following example shows the same shared view in another workbook partitioned by Class. In this case, there are fewer Subclass positions visible in the view because of this partitioning.

    • The up_on_some setting can now be set when installing target locks for a Modeler application when you're not using the Modeler IDE. For more information about the semantics of the new up_on_some setting for target locks, see the list of new Measure service features.

      Example 2. 

      +pivot:config:lock:installed_target_locks(target_name, expr_string, convertible, up_on_some) <-
        (
            target_name = "Sales_U_TY_PLN", // Sales measure keyed at Sku, Store, Week
            expr_string = "ElapsedWeek",    // Locking measure keyed at Week
            convertible = false,
            up_on_some = true
            ;
            target_name = "Sales_U_TY_MGR", // Sales measure keyed at Sku, Store, Month
            target_name = "ElapsedWeek",    // Locking measure keyed at Week
            convertible = false,
            up_on_some = true               // Aggregate the lock expression to the target intersection using collect
        ).

      Please note that the changed semantics of target locks allows you to simplify your lock expressions. If you were using a lock expression such as collect (ElapsedWeek @ {Sku, Store, Month}) @ {Sku, Store, Month}, you can now just write ElapsedWeek and set up_on_some to true.

  • Modeler IDE
    • Improved the usability of the "Measures" view in the Modeler IDE with a redesigned searchable navigation tree for quick access to measures and measure variants. Measures and measure variants that are often accessed can be bookmarked by the user.

      Example 3. 

      On the left-hand side of the "Measures" view, the Modeler IDE shows a browser that contains all the measures and their measure variants:

      The following user actions are supported in the new measures browser:

      • Expand or collapse the list of measure variants for a measure in the browser by using the expand/collapse icon in front of the measure name.
      • Restrict the number of visible measures and measure variants in the browser by searching for specific measures and/or measure variants using the "Search" box. The Modeler IDE will highlight search terms within the search results in the browser.
      • Manage the configuration of an existing measure or measure variant by clicking on its row in the table.
      • Reveal additional options for an existing measure or measure variant by clicking on the ••• button on its row.
      • Bookmark a measure or measure variant by clicking on the bookmark icon on its row. For measures with measure variants, this user action will automatically bookmark all measure variants of the measure.

      Bookmarked measures and measure variants can be found in the "Bookmarks" tab of the browser for quick access:

    • The "Locks" view of the Modeler IDE now has a new "Up On Some" setting that allows you to specify how to aggregate the lock expression to the target intersection. For more information about the semantics of this new up_on_some setting for target locks, see the list of new Measure service features.

      Please note that the changed semantics of target locks allows you to simplify your lock expressions.

      Example 4. 

      If you were using a lock expression such as

      collect( ElapsedWeek @ $$BASE ) @ $$BASE

      you can now just write ElapsedWeek and check the Up On Some setting to make sure the measure service uses collect to aggregate the expression to the base intersection of the measure to lock.

    • Sheet, canvas, and navigation configurations now have a "Name" and "Label" setting. The "Name" is used as a reference to the configuration and the "Label" is used as the display name in the navigation tree and sheet headers of your Modeler application. These settings replace the "Title" setting found in previous LogicBlox releases.

  • Tools, Database, and Services
    • Exposed max and driver meta properties to the lb.wb.util.CreateWorkbook lb-workflow task.

    • Optimized an internal operation in recursive rule evaluation which checks whether the fixpoint computation converges. This improves the performance of incrementally maintained recursive rules.

    • Improved parallelism of rule evaluation for rules that include a predicate with a single key joined with a predicate with multiple keys.

    • Implemented new mean and median P2P functions to calculate moving averages with a user-specified window size.

      Here is an example using mean with a window size of 5:

      salesAvg[sku, week] = avg <-
         average<< avg = mean<`week_first,`week_next>[week](sales) window 5 >>
            sales = slsData[sku, week].

      Here is an example using median with a window size of 3:

      salesMedian[sku, week] = avg <-
         average<< avg = median<`week_first,`week_next>[week](sales) window 3 >>
            sales = slsData[sku, week].

  • Measure service
    • The CubiQL widen expression, which was deprecated in 4.19, has been removed since the functionality of widen is a subset of the refine expression. For more information, see the Upgrade Information section.

    • A new intersection operator, pure, has been added. The pure operator strips hierarchy annotations hints from its argument. For example, pure({Product.First.sku}) will normalize to {Product.sku}, dropping the First hierarchy annotation. This operator is useful in situations where hierarchy annotation hints are not allowed or would affect behavior in an undesired fashion.

    • The semantics of target locks has been revised slightly. Previously it was required that a target lock always be at an intersection equal to or above the base intersection of the target. This could make it difficult to specify a generic CubiQL expression that could be used to lock many targets. To simplify your lock expressions, you no longer have to manually refine a target lock expression with an intersection such as Week or Store,Week when the intersection of the lock target is Sku,Store,Week.

      Additionally, the TargetLock message has been given an up_on_some field, much like the one DimensionLock already has. This field defaults to false. The up_on_some flag is used to indicate whether all positions below a position at a higher intersection must be present for the target to be considered locked (e.g. every Week of a Month should be present in the lock expression to lock that Month for the target), or only some positions (e.g. a Month should be locked for the target when at least one Week is present in the lock expression). This only has an effect in the dimension or dimensions of the target measure's base intersections which are above the base intersection of the lock expression.

      Now, when for one or more dimensions the lock expression is at an intersection below the base intersection of the lock target, the expression will be aggregated to the target intersection. If up_on_some is true, it will be aggregated using collect. If it is false it will be aggregated with cover. If in the Modeler IDE you have been writing something like cover (ElapsedWeek @ $$BASE) @ $$BASE for your lock expressions, this means you can just write ElapsedWeek.

    • The spread-by-query syntax for updates has been revised to avoid confusion. Previously one might write do spread 5.0f via query ((New / Old) * Target) with type float into Sales. But if the optional with type float type annotation was accidentally omitted, the measure service would produce a very unhelpful error message. The syntax has been changed so that it is required to pass along a full signature for the result of spread-by-query: do spread 5.0f via query ((New / Old) * Target) with {sku, store, week} => float into Sales

      This may be relaxed again in the future when there are improvements to signature inference.

      At the protocol level, the UpdateExpr.Query message has been given a new signature field, and the old type field is deprecated for removal in 4.30.

    • The code field in the measure service protocol Problem message was removed. It was not being used by any clients and not proving to be as informative as hoped.

    • A new severity level, BUG, has been added to the Problem.Severity enum. This can sometimes be helpful in diagnosing an error response, as a BUG problem indicates an internal failure rather than any problem with the request or configuration.

    • The notifications watcher code has been refactored for improved reliability.

    • Response formatting in the CubiQL REPL has changed to allow distinguishing between empty and non-empty position-only results at the top intersection.

    • There is now a progress spinner when waiting on long running requests or post-processing in the CubiQL REPL.

    • There is now support for using CubiQL constraints from within the REPL. Four new REPL commands have been added: :add-constraint, :remove-constraint, :remove-all-constraints, :print-constraint. For example, if you wish to ensure that Sales values remain non-negative, you might issue the command :add-constraint (nonNeg = filter Sales by < 0.0d). The constraint will be checked on any queries or updates, so the constraint will trigger even if there is some out-of-band modification to the data.

Corrected Issues

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

  • Modeler
    • Added CORS rule for the asynchronous measure service. This rule solves an issue where users were not able to open workbooks in the Modeler application.

    • Resolved an issue with level filtering that could occur when searching for a non-existent level member.

  • Modeler IDE
    • The spread by metric functionality could cause inconsistent edits and errors in the Modeler application when "Spread By" metric was using measure variants. This has been fixed.

    • Resolved an issue where the configuration of the "Base Metric" for percent-parent measures would not be saved by the Modeler IDE. This fix only applies to concrete measures, the configuration of percent-parent measures worked correctly for measure variants.

  • Tools, Database, and Services
    • Fixed a pointer reference counting issue in lb-server that could cause the process to crash in some circumstances.

    • Fixed an issue where the measure service notifications thread could release a mutex on its internal state too early.

    • Fixed a syntax warning generated when running the lb command when using Python 3.8.

    • Fixed an incorrect behavior of an iterator of a default-valued predicate that caused incorrect query cost estimations, which might consequently cause bad performance due to a suboptimal key ordering.

    • Fixed a bug in incremental evaluation of linear recursion where a fatal error would be raised if the group-by values of the first and next predicates were different.

    • Changed the behavior of the linear regression P2P function to handle infinity and nan values in p-value computation in the same way they were handled in LB 3 releases.

  • Measure service
    • Fixed an issue that would cause queries involving some primitive dimensions to loop in the CubiQL REPL.

    • Color terminal output in the CubiQL REPL has been restored after a bug inadvertently disabled it. As before, this can be disabled with the --nocolor command line option.

    • Tuple-valued responses will now be formatted correctly in the CubiQL REPL.

Known Issues

The issues listed below are known to exist in the 4.27.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.

  • Notice for macOS 10.15 Catalina users
    • LogicBlox builds are not signed with an Apple developer certificate. This may result in error messages stating that LogicBlox originates from an "unidentified developer". To ensure the LogicBlox services will run on your system, apply the following command on the distribution tarball you downloaded from the LogicBlox Developer website:

      $ xattr -d com.apple.quarantine logicblox-osx-<VERSION>.tar.gz

      Additionally, LogicBlox services will not function correctly when using a signed/notarized Java Runtime Environment. For instance, AdoptOpenJDK version 1.8.0_242 is the latest version that works with LogicBlox without causing signing issues.

      For more information about running apps from an unidentified developer, see Apple's macOS User Guide.

Installation Information

Install LogicBlox 4.27.0 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
    • The up_on_some setting must now be provided when installing target locks for a Modeler application when you're not using the Modeler IDE:

        +pivot:config:lock:installed_target_locks(target_name, expr_string, convertible, up_on_some) <-
          (
              target_name = "Sales_U_TY_PLN", // Sales measure keyed at Sku, Store, Week
              expr_string = "ElapsedWeek",    // Locking measure keyed at Week
              convertible = false,
              up_on_some = false              // Aggregate the lock expression to the target intersection using cover (default behavior)
              ;
              target_name = "Sales_U_TY_MGR", // Sales measure keyed at Sku, Store, Month
              target_name = "ElapsedWeek",    // Locking measure keyed at Week
              convertible = false,
              up_on_some = true               // Aggregate the lock expression to the target intersection using collect
          ).

    • 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 --no-save <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.27.0).

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

  • Measure service
    • The CubiQL widen expression, which was deprecated in 4.19, has been removed since the functionality of widen is a subset of the refine expression.

      The old CubiQL expression E @ I is exactly the same as refine E @ (I & interof(E)) . However, in most cases E @ I was used when I == (I & interof(E)), in which case it behaves identically to refine E @ I.

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 3.5 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.