Other enhancements
Board Engine
Unbalanced hierarchies - Various use cases involving Unbalanced hierarchies have been examined and several improvements have been implemented.
In detail:
- Applying a selection to parent and child items using the "Apply selection" Procedure step results in all involved parents to be displayed as selected
- When you extract an Unbalanced hierarchy using the "EXTRACT" feature from the Entities section of the Data model or the "Extract Entity" Procedure step, the resulting CSV file now has a new "Parent" column specifying the parent member of each child member. In case the "Extract Entity" Procedure step is used, the new column is generated only when the "Tab delimited" option is enabled
- The Layout now correctly handles various cases in which Unbalanced hierarchies are set By Row or By Column and they are nested (i.e. they are set together with other Entities and they are in the rightmost position in the axes fields). Now row totals and down totals are calculated considering only ancestors (i.e. root members of the hierarchy that don't have parents). The new behavior only works if the "Summary" property for the Block is set to "Total"
- Since the value of Parent members is calculated on the fly in the Layout, the "Refer To" option set on a Parent member was not supported.
Now the "Refer To" option is also supported by Unbalanced Hierarchies and works as follows:- If the Unbalanced hierarchy is not in the axes of the Layout, the result displayed is the sum of all descendants in the active branch of the tree
- If the Unbalanced hierarchy is set By Row or By Column, the value of the selected member is correctly replicated to all items in the active branch of the tree down to the deepest member. All the usual on the fly calculations along the tree, in this case, are not executed and the "Refer To" option works just as it does for "regular" Entities
Diagnostic log - The Diagnostic log launched in the 2021 Winter release has been enhanced to include more system-level information, more configuration-related events, and a much richer level of detail regarding Data model elements.
The following improvements have been implemented:
- The default verbosity level has been changed from "Warning" to "Information"
- The log filename now has the following format: diagnosticYYYYMM_tsv.log
After the "diagnostic" prefix, the two timestamps indicate the year (yyyy) and the month(MM), respectively - Rolled log files now have the following format: diagnosticYYYYMM_tsv.archive###.log
After the "diagnostic" prefix, the two timestamps indicate the year (yyyy) and the month(MM), respectively. After "archive", an incremental value is added as files are rolled (001, 002, etc.) - The format of the logged information has been changed from JSON to TSV (tab-separated values) with column headers in the first row
- Logging verbosity levels for each event have been reviewed so that each level provides an appropriate set of information
- All requests that can be received by the engine have been reviewed and, where possible, additional information has been added
-
The event start and event end log entries now include more information about the logged event. In particular, the event end log entry includes a specific "Elapsed (ms)" column whose value indicates the processing time after which the engine sent the response
- If a request received by the engine is not from the Board web client - as it is the case with Board's Office Add-ins -, the corresponding entry now includes a specific property (application_ID) next to the triggered engine event.
Example
2022-12-07 11:02:54.129 +01:00 INFO Administrator 5761e6aa-e6ae-4078-bbd2-53c36067d81a NET_Connect [OFFICE_ADDIN] Starting action. - Log entries regarding the Layout now include additional information, as described below:
- The Layout start event entry now includes client filters (Active selection, Pagers definitions), the Layout definition (Blocks and Entities in the axes), and Block and Axes Properties. Block and Axes Properties are logged only if their settings are different from the default settings.
Example
2022-12-02 12:12:20.361 +01:00 INFO Administrator 3a43b5b9-a022-4a8a-b29a-268ccce078d9 NET_LayoutToSpread DataEntry Log.bcps Home {"ClientFilters":{"Selections":[{"Entity":"E_000201 D011 Customer", "Members":["1 C1","2 C2","3 C3"], "Mode":"Keep"},{"Entity":"E_000007 A007 Day", "Members":["1 20200101","2 20200102","3 20200103","4 20200104","5 20200105","6 20200106","7 20200107","8 20200108","9 20200109","10 20200110","11 20200111","12 20200112","13 20200113","14 20200114","15 20200115","16 20200116"], "Mode":"Keep"},{"Entity":"E_000206 D016 Custom Sort", "Members":["3 c","4 d"], "Mode":"Exclude"}], "Pages":[{"Entity":"E_000202 D012 Product", "Members":["3 P3"], "Mode":"Keep"}]}, "CoreLayout":{"ByRow":["E_000001 A001 Month","E_000204 D014 Country","E_000201 D011 Customer"], "ByCol":["E_000202 D012 Product"], "Blocks":[{"Letter":"a", "Cube":"V0001 Gross Sales", "DataEntry":{"SplitSplat":false}},{"Letter":"b", "Cube":"V0009 Gross Sales V4", "ReferTo":[{"Entity":"E_000006 A006 Year", "Members":["2020"], "Mode":"Keep"}], "TotalByEntities":"E_000203 D013 City, E_000006 A006 Year"},{"Letter":"c", "Cube":"V0001 Gross Sales", "TimeFunction":{"BlockFunction":"Value", "PreviousYear":true, "PeriodOffset":100, "PeriodCycle":200}},{"Letter":"d", "Cube":"V0009 Gross Sales V4", "Rule":{"Title":"N.A. 1"}, "RollupCube":true},{"Letter":"e", "Algo":"a + 100", "Summary":"Calculated"},{"Letter":"f", "RowTotals":false, "Rule":{"Title":"N.A. 1"}},{"Letter":"g", "Entity":"E_000006 A006 Year", "RowTotals":false, "TooltipBy":"a", "DetailBy":{"Entity":"E_000001 A001 Month", "KeepTop":12, "Sort":"Descending"}},{"Letter":"h", "RankingFunction":"Counter", "Summary":"Calculated", "RowTotals":false, "Aggregation":{"Mode":"AVG", "Entity":"E_000008 A008 Week"}},{"Letter":"i", "Cube":"V0001 Gross Sales", "AnalyticalFunction":{"Function":"Nascency", "TimeEntity":"E_000001 A001 Month", "From":0, "To":0, "IgnoreLastPeriod":false}},{"Letter":"j", "Cube":"V0001 Gross Sales", "DataEntry":{"SplitSplat":false, "PatternBasedAllocation":{"Cube":"V0009 Gross Sales V4", "PreviousYear":true}, "LockedByBlock":{"LockerBlock":"c", "LockIsZeroMode":true}, "LockByCube":{"LockerCube":"V0002 Rolap Single", "DisplayBothLockAndFree":true, "LockNotZeroMode":true}}},{"Letter":"k", "Cube":"V0001 Gross Sales", "AlertBy":"a", "DataEntry":{"SplitSplat":false}, "Nexel":{"Mode":"SingleRule", "Formula":"=100", "TotalFormula":"=10000"}}], "DifferentiateZeroNull":true}} Layout started. - The Layout end event entry now includes the number of rows, columns, and cells generated as a response to the Layout query.
Example
2022-12-02 12:12:21.954 +01:00 INFO Administrator 3a43b5b9-a022-4a8a-b29a-268ccce078d9 NET_LayoutToSpread DataEntry Log.bcps Home {"Rows":9, "Columns":20, "Quota":180} Layout completed.
- The Layout start event entry now includes client filters (Active selection, Pagers definitions), the Layout definition (Blocks and Entities in the axes), and Block and Axes Properties. Block and Axes Properties are logged only if their settings are different from the default settings.
- Log entries regarding data entry events now include additional information, such as client filters (Active selection, Pagers definitions), the Layout definition (Blocks and Entities in the axes), and Block and Axes Properties. These entries also include the following details specific to data entry actions:
- Position of the cell where the data entry action occurred (row number, column number, cell coordinates)
- Entered value
- Previous value
- The header of the Block affected by the data entry action, as shown in the Layout editor (i.e. "a", "b", "c", etc.)
Example
2022-11-30 11:20:15.892 +01:00 INFO Administrator 6aab0bfb-4bb9-4cef-95d7-6f19cb9a28e4 NET_DataEntry DataEntry Log.bcps Dataentry {"ClientFilters":{"Selections":[], "Pages":[]}, "CoreLayout":{"ByRow":["E_000001 A001 Month","E_000202 D012 Product","E_000201 D011 Customer"], "Blocks":[{"Letter":"a", "Cube":"V0001 Gross Sales", "DataEntry":{"SplitSplat":true}, "Nexel":{"Mode":"SingleRule"}}], "RowShowAll":true}, "CellChanged":[{"Row":11, "Col":2, "OldValue":300, "NewValue":3000, "Coordinates":"1 202001, 2 P2, 2 C2", "Block":"a"}]}
- Log entries regarding Data readers now include additional information, as described below:
- The Data reader start event entry now includes the protocol name and the path to the file that should be read (only for text file Data readers)
Example
2022-12-02 11:38:32.933 +01:00 INFO 537bd1ed-e8be-40a6-b6aa-92e185571ad0 d8a4898d-1ac4-440c-ae03-b9940afb5996 DataRead sync {"ClientFilters":{"Selections":[], "Pages":[]}, "DataReader":{"Title":"SyncToDataModelTemporary", "Path":"C:\\Windows\\TEMP\\tmp2117.tmp"}} Data reader started. - The Data reader end event entry now includes the number of successfully processed rows, discarded rows, and the error message (if any)
Example
2022-10-25 12:40:18.241 +02:00 INFO Administrator 537bd1ed-e8be-40a6-b6aa-92e185571ad0 DataRead ce788c9f-bf3d-48ef-938f-12253ae40704 ASCII Data Read Echo {"Stats":{"ReadRecords":2, "DiscardedRecords":5, "ErrorMessage":"Error : RBT1825 New Item Found on column 1 [Joan \"the bone\", Anne]"}} Data reader ended.
- The Data reader start event entry now includes the protocol name and the path to the file that should be read (only for text file Data readers)
- Log entries regarding Dataflows now include additional information, as described below:
- The Dataflow start event entry now includes the client filters (Active selection, Pagers definitions) sent with the Procedure step.
Example
2022-11-25 17:47:03.887 +01:00 INFO Administrator e03b5b6a-d11e-4cb2-b2f9-26d1862a8a82 dataflow 68dea0cd-a9cc-4fa7-8fc7-d3b0037f4530 3. Data flow Echo {"ClientFilters":{"Selections":[{"Entity":"E_000001 A001 Month", "Members":["1 201001"], "Mode":"Keep"}], "Pages":[]}} Dataflow started. - The Dataflow end event entry now includes various additional information about its configuration, such as the target Cube, the algorithm used for the calculation, the details of the "extend" option configured by the user, the details of the "extend" option applied by the system, and others.
Example
2022-11-25 17:47:06.140 +01:00 INFO Administrator e03b5b6a-d11e-4cb2-b2f9-26d1862a8a82 dataflow 68dea0cd-a9cc-4fa7-8fc7-d3b0037f4530 3. Data flow Echo {"DataFlow":{"Target":"V156 Sales pacl", "ContainingPlus":true, "Algo":"Tuples.[Union].InnerOuter", "UserExtend":"E_000001 A001 Month, E_000011 D011 Customer", "InternalExtend":"E_000017 D017 Product", "RollOver":"V226 Gross Sales", "BackCompatible":false}} Dataflow ended. - If a Cube configured in the "Limit calculation to tuples of the Cube" option is not found when the step is executed, the Procedure will fail and a specific error message will be displayed. This may happen, for example, when the Cube is configured in the "Limit calculation to tuples of the Cube" option and that same Cube is later deleted from the Data model.
Example
2023-03-22 10:47:03.058 +01:00 WARN Administrator f04dfa9d-4e0f-427e-856b-eeb527813ea2 Rollover 7d6e289a-f71a-4094-aa00-81f3952d3e6b 3. Data flow Echo Unable to find rollover cube. Rollover cube will be ignored. Dataflow revert to default calculation domain option
- The Dataflow start event entry now includes the client filters (Active selection, Pagers definitions) sent with the Procedure step.
- Log entries regarding Procedure steps (start event, end event, additional action events), now include the step number as it is displayed in the Procedure designer.
Example
2022-12-02 10:38:28.011 +01:00 INFO Administrator 1e4b6e48-0672-4cb4-a7f2-69901d767b42 select based on 27b14850-6886-4110-bf79-8f8a09fb70ea 5. Data flow DP {"ClientFilters":{"Selections":[{"Entity":"E_000036 D036 Currency", "Members":[], "Mode":"Invalid"},{"Entity":"E_000027 D027 Merch_Zone", "Members":["10 10","11 11"], "Mode":"Keep"}], "Pages":[]}} Dataflow started. (bold added) - If one or more dimensions of a Cube are missing in the Data reader mapping configuration, a new specific log entry is created for each missing dimension in the Diagnostic Log set to verbosity level "Warning". The Log entry would look like the following example:
2023-03-16 12:44:12.931 +01:00 WARN Administrator d6f45ad2-4359-4963-9467-6892b8b8bf9f Import in Gross Sales a8db4810-f525-4993-b369-3a4ea12e2d5a 2. ASCII Data Read Echo {"Cube":"V001 Gross Sales", "MissingEntityIdx":3} Cube dimension is missing in mappings
If a log entry mentions a Data model resource (Entities, Entity members, Cubes, and Sparsities), the reference to the corresponding resource is now presented as described below:
- Entities → "{Physical name} {Internal identifier} {Extended Name}". Example: "E_000036 D036 Currency"
- Entity members → "{Internal identifier} {Code}". Example: "10 202212"
- Cubes → "{Physical name} {Name}". Example: "V156 Sales EMEA"
- Sparsities → "{Sparsity code} {Internal identifier}", Example: "SP001 D0014#"
If one of the resources mentioned above cannot be found, the related information in the corresponding entry is logged as follows: "N.A. {Internal identifier}". Example: "N.A. 13"
(bold added)
Diagnostic log verbosity level - The verbosity level of the Diagnostics log now can be changed on the fly. You can check and change the current verbosity level through a new dropdown menu in the "Log Settings" section under "System Administration". Thanks to this improvement, it is no longer necessary to restart the Board engine service to change the verbosity level of the Diagnostic log.
Temporary Cubes in Data readers - Temporary Cubes are now supported in Data readers, giving Makers a lot more flexibility in terms of Procedure design and reducing the need for Cube maintenance and possible concurrency issues, for example when multiple users update the same Cube via multiple instances of the same Procedure.
The configuration of a Data reader with Temporary Cubes is the same, except for the mapping phase.
To map a Temporary Cube to your data sources, proceed as follows:
- From the left-hand side of the Mapping page, drag the new "Temporary Cube" object from the "More" group to the center area outlined in blue
- Enter the Temporary Cube name in the "Temporary Cube name" placeholder. The name must match exactly the name you chose during the creation of Temporary Cube
- Drag the code placeholder (and the description placeholder, if needed) for each dimension of the Temporary Cube structure from the "Entities" group to the center area outlined in blue. For regular Cubes, those Entities are automatically added when you drag the Cube in the mapping area, but this is not the case for Temporary Cubes: you must add the code placeholder (and the description placeholder, if needed) by hand for each dimension, which must match the dimensions in the structure of the Temporary Cube.
If the Temporary Cube name and/or the dimensions entered in the Data reader mapping page do not match the actual name and the dimensions of the Temporary Cube, no data will be imported, but the Data reader won't fail.
If a manually entered Temporary Cube name does not match the actual Temporary Cube name in the Procedure, in the Diagnostic Log set to verbosity level "Warning" a new specific log entry will be created. The Log entry would look like the following example:
2023-03-16 12:35:59.053 +01:00 WARN Administrator 491b04bb-6b4e-4c3a-9b36-88e2cc1d9405 DataRead 15affa90-7e50-4a7b-93f8-7343753a78ad 2. ASCII Data Read Echo No virtual cube defined. A required virtual cube definition was not found by name: Gross Sales Temporary. DR mapping removed
If one or more dimensions of a Temporary Cube are missing in the mapping configuration, a new specific log entry will be created for each missing dimension in the Diagnostic Log set to verbosity level "Warning". The Log entry would look like the following example:
2023-03-16 12:44:12.931 +01:00 WARN Administrator d6f45ad2-4359-4963-9467-6892b8b8bf9f Import in Gross Sales Temporary a8db4810-f525-4993-b369-3a4ea12e2d5a 2. ASCII Data Read Echo {"Cube":"T001", "MissingEntityIdx":3} Cube dimension is missing in mappings
Since Temporary Cubes are created and used only as part of the Procedure in which they are defined, manually running a Data reader that imports data in Temporary Cubes from the Data reader home page will not produce any results (on Temporary Cubes). These new Data readers should be used only in the Procedure in which the Temporary Cubes were created.
Example
In a Procedure, the following Temporary Cube definition has been defined:
If you wanted to use that Cube in a Data reader, the configuration would be as follows:
Temporary Cubes in Procedure steps - The use of Temporary Cubes has been extended to all Procedure steps whose configuration includes a Layout or other cube-based options.
Please note that:
- In the Dataflow step, if a Temporary Cube used in the Layout is not found when the step is executed, the Dataflow will fail. This may happen, for example, when a Cube is configured in a Dataflow Layout and that same Cube is later deleted from the Procedure.
- In the Dataflow step, if a Temporary Cube configured in the "Limit calculation to tuples of the Cube" option is not found when the step is executed, the Procedure will fail and a specific error message will be displayed. This may happen, for example, when the Temporary Cube is configured in the "Limit calculation to tuples of the Cube" option and that same Cube is later deleted from the Procedure.
- In all steps affected by this implementation, if a Temporary Cube used in the Layout or in a cube-based setting is not found when the step is executed, the Procedure will fail and a specific error message will be displayed. This may happen, for example, when a Cube is configured in a setting and that same Cube is later deleted from the Procedure
- In the "Export Data View to file" step, the Yearly Cumulated Value function is not supported when applied to a Temporary Cube in the Layout
- When a Temporary Cube holds data, it is treated as a regular Cube in terms of logging, selections, and all other features available for regular Cubes
- A Procedure where Temporary Cubes are configured as per the new implementation cannot be executed in previous versions of Board
- Temporary Cubes are not considered in the Impact Analysis section
- As a consequence of this new implementation, we have removed the Dataflow Analysis feature from the Dataflow configuration (the cog icon in the "CALCULATION DOMAIN" menu) and the "SCAN DATAFLOW ACTIONS" button in the OPTIONS tab in the Procedure configuration panel
Data reader - Board standard Time Entities now natively accept the following date formats for time periods loaded through a Data reader.
Entity | Width | Format | Example |
Day | 6 | YYMMDD | 221222 |
Day | 8 | DDMMYYYY | 31122022 |
Day | 8 | YYYYMMDD | 20221231 (recommended) |
Week | 4 | YYWW | 2248 |
Week | 5 | YY?WW | 22-48 |
Week | 6 | YYYYWW | 202248 (recommended) |
Month | 4 | MMYY | 1222 |
Month | 4 | YYMM | 2212 |
Month | 5 | MM?YY | 12-22 |
Month | 5 | YY?MM | 22-12 |
Month | 6 | MMYYYY | 122022 |
Month | 6 | YYYYMM | 202212 (recommended) |
Quarter | 4 | QQYY | 0322 |
Quarter | 4 | YYQQ | 2203 |
Quarter | 5 | QYYYY | 32022 |
Quarter | 5 | YYYYQ | 20223 |
Quarter | 6 | QQYYYY | 032022 |
Quarter | 6 | YYYYQQ | 202203 (recommended) |
Year | 2 | YY | 22 |
Year | 4 | YYYY | 2022 (recommended) |
Performance improvements - In previous versions of Board, updating a Database security profile or a row style template required the Data model to be unloaded and reloaded in memory to apply changes: this could freeze the system and cause other service reliability issues. Now administrators can update Database security profiles and row style templates without causing stability or performance problems.
Various
Smart Import Object enhancements - The following column sources have been added to the Smart Import object:
- Fixed values. This option allows you to write a custom fixed value to a target Cube or Entity code/description for each row of data submitted
- Formulas. This option allows you to map the result of a formula to a target Cube or Entity code/description for each row of data submitted
Read more on the Smart Import Object documentation page.
Customizable Session Expiration Timeout - In previous versions, the session expiration timeout was set to a default value (1 hour) that could not be modified. Now the session expiration is disabled by default and, when the session expiration is enabled, the timeout can be modified.
The following rules apply to this new feature:
- The timeout value represents the number of seconds before the session expiration
- The default timeout value is 3600 seconds (which equals 1 hour)
- The highest timeout value allowed is 3600 seconds. If you set it to a higher value, it will be automatically reduced to 3600
- When a session expires, the log-out process may take a few moments to complete
If you need to customize the Session Expiration Timeout for your Board Platforms, please submit a ticket through the Board Support site: the ticket must contain your Platform name (e.g. customer1-s1.board.com). The Board Cloud Operations team will then handle your request.
Sparsity management & optimization - Due to misconfigurations of calculation steps in Procedures (for example in Dataflows with the “Extend calculation” option set on the sparse dimensions of the target Cube), the sparsity of Cubes could increase enormously and that made interaction with said Cubes in the administrative area of Data models very difficult.
In previous versions, administrators could only spot this malfunction by looking into sparsity files in the mapping folders of each Data model and in Board there was no indication about the sparse combinations in use by the Cube.
To solve this problem, administrators had to eliminate the unnecessary combinations in all Cubes by clearing and reloading all Cubes in bulk, even those that had nothing to do with the sparsity problem.
The new update of the Sparsity details page under the Analysis tab in the Cube details panel, allows administrators to;
• Easily spot sparsities that contain huge amounts of combinations
• Easily identify which Cubes use huge sparsities
• Easily delete the unused sparse combinations in huge sparsities to optimize hard disk space usage and speed up the interaction with the affected Cubes
When the user clicks on the “Sparsity” element of the graph, the details about the sparsity in use now include the following info and features:
• The number of combinations of the sparsity used by each Cube
• A dedicate button next to the total combination of the sparsity which launches the optimize function
The new page allows to easily spot those Cubes that are responsible for the abnormal sparsity growth, so that an administrator can clear and reload them before launching the reduction function.
The optimize function can be launched from any Cube analysis page, provided the selected Cube is using the sparsity that needs to be optimized: when the function is launched, it searches for unused combinations of the sparsity in all Cubes which are using it and deletes them.
During the optimize function execution, the Data model is put into maintenance mode. Depending on the sparsity usage, the execution may take a few minutes or more.
Broadcasting emails - The Broadcasting emails now can also be sent from the European Union (EU), whereas previously they could only be sent from the United States.
If you would like to configure a preferred zone for sending Broadcasting emails, for example for GDPR compliance, you can raise a ticket through the Board Support site.
Board PowerPoint add-in - Previously, the Board PowerPoint add-in had some performance issues when handling Presentations with more than 5 Slides. This has been fixed along with other performance optimization issues so that the Add-in now runs faster and consumes fewer resources.
Board Excel add-in - The Board Excel add-in now includes a new option that manages all cases where two or more Layouts overlap on the same origin cell. This happens, for example, when the user applies the format of a table over another table using the Format Painter tool, or when the user copies and pastes an entire cell range to another cell range which already has values coming from another Layout definition.
In these cases, Layouts are “stacked” one on top of the other and, over time, this can lead to potential performance issues, unexpected results and extensive waiting times, as the Layout execution becomes very taxing on the connected Board Platform.
The new “Remove overlapping layouts” option allows the user to decide which Layout should be retained when the worksheet or workbook gets refreshed via the “Refresh Sheet” or the “Refresh Workbook” buttons respectively.
The option offers the following settings:
- Keep last. This option removes all Layouts and keeps only the most recent one, based on its creation date. The removed Layouts are deleted upon refreshing and cannot be recovered
- Keep first. This option removes all Layouts and keeps only the least recent one of all, based on its creation date. The removed Layouts are deleted upon refreshing and cannot be recovered
- Disabled (default). In this case, all Layouts in the worksheet or workbook are kept and refreshed, even the overlapping ones.
Please note that this setting applies only when two or more Layouts overlap in the Excel sheet or workbook.