LogicBlox 4.29


Table of Contents

LogicBlox 4.29.0

LogicBlox 4.29.0

Release Date: November 12, 2020

What's New

LogicBlox 4.29.0 introduces the following enhancements:

  • Modeler
    • Icons shown on the toolbar of Modeler's sheet views have been redesigned to follow Infor's design guidelines. To help users understand the meaning and purpose of each icon, the Modeler now shows a tooltip when the mouse hovers over an icon.

    • The Modeler now allows a more fine-grained configuration of schema editing functionality.

      The existing modeling feature setting editSchema has been split into two settings:

      • levelsCreation - Allows all users to create new level members.
      • editSchema - Allows all users to rename existing level members and modify level mappings.

    • Modeler will now notify users when a workbook commit or refresh action has finished. An information message is shown when the action has succeeded and an error message is shown when the action has failed.

  • Modeler IDE
    • The performance of the measure export functionality of the "Measures" view has been improved significantly.

    • The title of the "Composite Aggregations" and "Composite Spreads" view has been updated for consistency.

    • The Modeler IDE now contains copy functionality for both "Displayable Measures" and "Dimensions Groups". You can copy an existing displayable measures configuration or dimensions groups configuration by clicking on the new copy icon in its row in the view.

    • The Modeler IDE supports the more fine-grained configuration of Modeler's schema editing functionality. For Modeler applications that use workbooks, it's now also possible to configure schema editing policies per workbook template using dimensions groups configurations.

      Configuration of schema editing functionality for Modeler application without workbooks can be found on the tab "Modeling Features" of the "Settings" view. For Modeler application with workbooks, schema editing abilities can now be controlled per workbook template by selecting a dimensions groups configuration for the new "Level Creation Policy" and "Level Editing Policy" setting. The default value for these policies is based on the "Enable Level Creation" and "Enable Level Editing" settings found in the "Modeling Features" tab of the "Settings" view.

      Please note that the "Displayable Dimensions" view has been renamed to "Dimensions Groups". Dimensions groups configurations are now used to configure the "Displayable Dimensions" setting for sheets and workbook templates.

    • The Modeler IDE now uses a Switch component that follows Infor's design guidelines. This new UI component is used to toggle settings. For example in the "Dimensions" view, this component can be used to indicate whether a hierarchy is the default hierarchy.

    • Improved mouse pointer behavior when editing intersections by dragging and dropping levels in the "Intersections" view.

    • The Modeler IDE now shows a confirmation dialog when the user navigates away from an open sidebar in the "Navigation" view while auto-save has been paused due to form validation errors. This prevents the user from accidentally discarding unsaved changes.

    • The "Navigations" view now highlights the selected row when the user opens the sidebar to edit the settings of a navigation item.

    • When the user creates a new sheet in the "Sheets" view, the "Fields Configuration" tab now contains the Measures field on the Columns axis by default. This change reflects the default behavior when creating a user-defined view in a Modeler application.

    • We have redesigned the dropdown and multiselect input fields in the Modeler IDE to follow Infor's design guidelines.

    • The "Build" view now has a "Cancel" button that allows the user to cancel a running build.

    • The "Measures" view now has a "Derivation Type" setting for concrete measures which allows the user to override the default derivation type. For measure variants, it's possible to configure this override using the new "Derivation Type" override. This override can be added to measure component items and/or the measure variant itself.

      By default, the Modeler IDE assumes "DerivedAndStored" if there is a CubiQL rule, and "Extensional" if not. This override is typically used to specify the "DerivedAndStored" derivation type for measures that have a LogiQL rule (IDB).

      Additionally, the "Order By" setting for levels in the "Dimensions" view now has two options to define a custom sort order. In previous LogicBlox releases, you could only select the "Custom" option. You should now either select "Imported Values" if you use a TDX service to import the custom sort data, or "LogiQL Rule" if the custom sort data is defined by a LogiQL rule (IDB). This setting makes sure the Modeler IDE sets the correct derivation type for the generated order predicate (e.g. Product:Sku_index).

  • Tools, Database, and Services
    • This LogicBlox release requires Open Java Development Kit (OpenJDK) version 11 to be the default Java version. For more information, see the Upgrade Information section.

    • The protobuf PredicateInfo messages and various messages describing compiled LogiQL have had many obsolete fields removed. The file format version numbers of LogiQL bytecode and project summary files have been incremented to prevent compatibility issues.

    • The LogiQL compiler will now infer the derivation type of more predicates:

      • Pulse predicates will be inferred to be EDB/Extensional predicates.

      • File predicate will be inferred to be EDB/Extensional predicates.

      • The derivation type of a refmode predicate can be inferred from its associated entity and vice versa.

      • The derivation type of a constructor predicate can be inferred from its entity.

    • The workbook framework codebase has been converted to Scala and significant portions have been completely rewritten to make use of the more efficient code generation libraries developed as part of the measure service.

      At this point, the protocol and definitions of the workbook framework remain identical. There is one addition and a new caveat. Due to the expense, the service will not eagerly reload predicate information from the workspace. So if the predicate definitions have changed since the service was first started, it may be necessary to use a new /clear-cache service endpoint to refresh the service's view of the workspace. Send the empty JSON message {} to the /clear-cache service endpoint.

      In order to facilitate performance and error reporting improvements as well as new features, it is expected that there will be a major revision to the workbook service protocol in a forthcoming release.

    • Implemented a general framework for handling parameters for P2P functions, reducing the effort needed for P2P function implementations and unifying parameterization of these functions. This framework includes utilities for parsing any P2P arguments and also defines a general "parameters" object, a key-value map that should be used by all future P2P functions to store parameters. Using this framework will also maintain workspace compatibility across releases when P2P function parameters are changed.

    • Updated the bloxoptimize P2P function in LogiQL to allow whitespace for the function's parameters.

    • New fields have been added to the protocol buffer definitions for rules and predicates to allow for annotations. An annotation is a string key with some associated sequence of LogiQL constants. These can be used to attach additional information to rules and predicates that may be used and interpreted by the LogiQL compiler, the LogicBlox runtime, or other tools that interact via protobuf.

      Experimental support for writing these annotations in LogiQL source code has been added as well. We are making this support available for developers to experiment with and provide us feedback, particularly on the choice of annotation names and whether camel case (i.e. fooBar) versus snake case (i.e. foo_bar) is preferred. The initial release uses camel case since that matches the existing LogiQL predicate properties, but annotations may eventually supersede them so there is no reason to necessarily continue with that convention.

      In LogiQL syntax, an annotation is a valid LogiQL identifier possibly followed by a comma-separated list of constants enclosed in parentheses. For example, both foo and bar(1d, "x") are annotations. Currently, foo and foo() are treated as identical.

      Annotations can be written before a predicate declaration, an integrity constraint, or other rules by prefixing the rule with a hash ( # ) symbol. For example, a rule with an annotation could look like #foo p(x) <- q(x).. A predicate p could have a default value annotation by writing #defaultValue(0) p[x]=y -> string(x), int(y).. If multiple annotations are desired, they can be written inside of parentheses, as in #(pulse, edb) q(x) -> string(x). Annotations can also be used with predicates declared in the export and sealed sections of modules.

      The LogiQL compiler currently recognizes the following annotations (subject to change in a future release):

      • inlined sets the derivation type of a predicate to "Derived".
      • edb sets the derivation type of a predicate to "Extensional".
      • idb sets the derivation type of a predicate to "DerivedAndStored".
      • constructor flags a predicate as being a constructor.
      • pulse flags a predicate as being pulse.
      • defaultValue(...) can be used to set the default value of a predicate.
      • oneToOne flags a predicate as being one-to-one.

      Both recognized and unrecognized annotations are passed through compilation for interpretation by the runtime or other tools.

  • Measure service
    • The deprecated field attribute of the AttributeExpr protobuf message has been removed. The field name should now be used instead.

    • The Location, Region, and Problem protobuf messages have been abstracted out into a separate protocol file and library to facilitate reuse by other services. This should not affect any tools or clients that interact with the measure service solely through JSON.

    • CubiQL annotations may now be abbreviated to use their implied natural default. For example, it is now allowed to write {{ functional }} Expr instead of having to write out {{ functional = true }} Expr. Similarly, the default value annotation if written as {{ defaultValue }} Expr will now expand to a value appropriate to the type of the expression. For example, for decimal valued expressions it will expand to {{ defaultValue = 0d }} Expr.

    • Level map expressions have been added to CubiQL. These new expressions provide a way to query the mappings between levels. In protobuf they are specified via the new LevelMapExpr message. In the textual syntax they can be written as SourceLevel |-> TargetLevel or SourceLevel |-[hierarchy]-> TargetLevel to query the level map belonging to a specific hierarchy edge.

      By default they have the signature {Source: SourceLevel, Target: TargetLevel}, but axis specifiers can be used on the expression. So Foo: SourceLevel |-> Bar: TargetLevel will have the signature {Foo: SourceLevel, Bar: TargetLevel}.

      For consistency, the syntax for updating level maps has been adjusted to match.

    • A new CubiQL REPL command :props <expr> has been added. It was previously possible to use :sig <expr> to obtain the signature of a CubiQL expression, but there are many properties of a CubiQL expression that will be inferred that could not be previously determined without looking at the optimized CubiQL or generated LogiQL. This new command will list all the properties of interest known about the expression including things like inferred default value, whether it is installed or executed, the physical key order, etc.

    • When generating a LogiQL project from a model using lb measure-service model generate, most problems with the model will now be treated as errors rather than warnings.

Corrected Issues

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

  • Modeler
    • Resolved LogicBlox compiler errors for predicates in generated_schema that have a derivation type that is not inferable.

      Please note that this change requires an update in both Levels.csv and Measures.csv. For more information, see the Upgrade Information section.

    • The "Create <levelName>" option no longer appears in the right-click context menu for ALL levels.

    • Fixed the "Display Workbook List" link that is displayed to the user when a view is shared with a user who does not have permissions to the source workbook.

  • Modeler IDE
    • The "Actions" view now displays a tooltip when hovering over a truncated measure name. These tooltips show the entire measure name. This makes it easier to identify measures with long names while configuring measure mappings for copy actions.

    • Resolved an error that occurred when the user deleted a measure that was still part of a Displayable Measures filter. Deleted measures are now correctly removed from existing Displayable Measures filters.

    • The ••• option displayed next to the name of a measure or measure variant in the measures browser now stays visible when the user has clicked on this option.

    • The Modeler IDE now shows a confirmation dialog when the user navigates away from the "Workflows" view while adding a new workflow without having selected the "Create" option.

    • Resolved an issue in the "Sheets" view which prevented users from configuring conditional formatting rules for measures with a non-numeric value type.

    • An open sidebar in the "Navigations" view can be closed by clicking outside the table that contains the navigation items. It's now also possible to close an open sidebar using the new "Close" button.

    • Resolved an issue that prevented users from using uppercase characters while searching for levels in the "Intersections" view.

    • Fixed an issue in copy functionality of the "Navigations" view of the Modeler IDE. The IDE no longer displays an input field for the "Label" setting when copying the copy of a navigation configuration.

    • Improved responsiveness of views in the Modeler IDE. This resolves rendering issues that could occur when opening the validation console or resizing the application window.

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

    • Fixed several issues with tracing support in the LogicBlox workflow driver. These fixes should make it possible to use the LogicBlox tracing infrastructure to analyze performance of batch processes implemented with LogicBlox workflows. Fixes and improvements include:

      • Tracing span names did not follow conventions for other LogicBlox components, making it difficult to identify traces associated with the workflow driver. All spans created by the driver should now start with "lb-workflow-".

      • Some of the driver span names contained information like the path of a task in a workflow and source file locations. This information has been moved to span labels now.

      • The top-level span created when the driver starts was never closed when the driver exits. This is now corrected.

      • Span colors in the tracing UI were undefined for workflow driver spans. These spans are now colored in shades of red to match other top-level tracing clients like the LogicBlox Modeler and Relax user interface components.

      • Spans in lb-web-server and lb-server components that are associated with TDX operations or with some ConnectBlox operations (Exec, ExecInactiveBlock, ListPredicates, AddBlock, RemoveBlock, CreateWorkspace, ImportWorkpace, ExportWorkspace, DeleteWorkspace, PredicateInfo, CreateBranch, CloseBranch, ReplaceDefaultBranch, and GetBranchNames) are now properly connected to the workflow task spans generated by the driver.

      • The trace=true setting in the [global] section of the lb-workflow-driver.config file and the -trace command line option were both ignored by the lb workflow run command. This now works correctly.

  • Measure service
    • A bug has been fixed so that the measure service will correctly use the kind field of the Predicate message when generating logic for level entities, refmodes, and constructors.

Known Issues

The issues listed below are known to exist in the 4.29.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 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 11.0.6 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.29.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
    • We've resolved LogicBlox compiler errors for predicates in generated_schema that have a derivation type that is not inferable. This change requires an update in both Levels.csv and Measures.csv:

      • Levels.csv - a new column TransformDerivationType has been added for specifying the derivation type for the OrderTransform predicates. The value "Extensional" is assumed if this column is left blank.

        Example 1. 

         
        Level,Label,Dimension,ElementType,IsOrdered,OrderAttribute,OrderTransform,TransformedType,TransformDerivationType
        Month,Month,Calendar,string,true,Calendar:Month_index,MonthOrder,int,Extensional
        Color,Color,Product,string,true,Product:Color_index,ColorOrder,int,

        In this example, the MonthOrder and ColorOrder predicates will end up with "Extensional" as the derivation type in the generated LogiQL.

      • Measures.csv - "DerivedAndStored" is now accepted for the DerivationType column in addition to "Extensional". The value "Extensional" is assumed if this column is left blank.

        Example 2. 

         
        Measure,Label,Intersection,DataType,DefaultValue,DefaultAgg,DefaultSpread,PercentBase,PercentParentDimension,Format,HAlignment,Readonly,SpreadByMetric,DerivationType,EmptyValue,BaseAmbiguous
        Sales,Sales,sku_store_day,decimal,,total,ratioEven,,,,right,,,Extensional,,
        Returns,Returns,sku_store_day,decimal,,total,ratioEven,,,,right,,,,,
        Netsales,Netsales,sku_store_day,decimal,,total,ratioEven,,,,,,,DerivedAndStored,,

        In this example, the measures Sales and Returns will have derivation type set to "Extensional". The derivation type of Netsales will be "DerivedAndStored".

    • 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.29.0).

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

  • Modeler IDE

    We've resolved LogicBlox compiler errors for predicates in generated_schema that have a derivation type that is not inferable. For measures and measure variants that don't have a CubiQL rule, the Modeler IDE will assume that the derivation type is "Extensional". To correctly set the derivation type for a measure that has a LogiQL rule (IDB), you should set the "Derivation Type" setting to "DerivedAndStored".

    Additionally, when a level has a custom sort order and the generated ordering predicate has a LogiQL rule (IDB), you should set the "Order By" setting to "LogiQL Rule" instead of "Imported Values". This allows the Modeler IDE to set the correct derivation type for generated ordering predicates.

    • Tools, Database, and Services
      • This LogicBlox release requires Open Java Development Kit (OpenJDK) version 11 to be the default Java version. Users can determine the default Java version on their system by running:

        $ java -version
        
        openjdk version "11.0.6" 2020-01-14
        OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.6+10)
        OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.6+10, mixed mode)

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

    Release Information

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