July 2024 - Dashboard Release Notes

 

Table of Content Key

  • Customer Requested tickets are highlighted with this icon

 

Notifications

Below are key notifications to be aware of before upgrading your dashboard.;

  • Aug 28, 2024 - we issued a Patch release (2024_07.1) to address pi#2594

  • This release contains x2 Schema changes.

 


NEW FEATURES

 

Organisations - Sorting By Position (Rather Than Alphabetically)

pi#2435

30519

Organisations - Sorting By Position (Rather Than Alphabetically)

pi#2435

30519

Prior to this release, Organisations were sorted alphabetically. In this release we have introduced a new field ‘position’ to the Organisations Editor Screen, which allows the users to define the display position of the Organisation. All organisations will have a ‘position’ field and will be sorted by this field, with the lowest number having the highest priority.

If multiple Organisations have the same position, they will be displayed alphabetically in the system; otherwise, the defined position will be respected. From this release forward, all existing Organisations will have their position set to 1 by default.

Organisation Editor Screen:

Screenshot from 2024-06-10 14-36-46.png

 

Below is a working example of how the position drives the ordering display;

The ‘Accounts’ Organisation has 4 children Organisations; Test, Marketing, Sales and Dev.

Screenshot from 2024-06-10 14-41-20.png

Ordering explained:

  • ‘Test’ Organisation is first in the list, with Organisation position=1

  • ‘Marketing’ and ‘Sales’ both have Organisation position set to 2, therefore, they are sorted alphabetically; i.e. Marketing comes before Sales

  • ‘Dev’ Organisation comes last in the list, as the Organisation was set as position=10

 

 

Sankey & Chord Charts - Add Numeric Weight Column

pi#2375

30595

Charts

Sankey & Chord Charts - Add Numeric Weight Column

pi#2375

30595

Charts

Prior to this release, the width of the links between the nodes in a Sankey Chart or Chord Diagram were determined by the number of times that link occurs. For example, a link between ‘A' and 'B’ would be given a weight of 100 only if there were 100 instances of that link in the data.

From this release, an additional ‘weight’ data object can be configured for these chart types. It is the value specified by this object that will be used to calculate the weight of each link rather than the count.

In the earlier example, a link with a weight of 100 might be comprised of a few rows of data rather than 100 - it could even be representative of a single row of data that has 100 weight associated with it.

This is best demonstrated in the video below, note that prior to the ‘Weight’ being added the “Coal” node had equally weighted links to the nodes of the next ‘State’ but afterwards their weights and therefore their widths diverge. The video also shows:

  • The original behaviour of the count being used to generate the weight (“Oil” has 4 outgoing connections to “Direct Fuel Use”)

  • The removal of the previous restriction that meant you could only define Colour Rules for one Data Object

  • Changing the colour of the connections based upon their weight

 

Play the video below to see this in action;

 

For more information on Sankey Charts, please see our Creating & Formatting pages.

 

 

Multilingual - i18n Support - Additional Items Included

pi#2498

-

Multilingual - i18n Support - Additional Items Included

pi#2498

-

New key-value entries have been added to the messagesStatic.properties file, to enable translations for some previously untranslated items in the dashboard. These change will affect the following areas of the dashboard, but may not be limited to

  • Error handling in the UI

  • User Access

  • Category Access

  • Data Connection Table

  • Object Creation Panels

For a full list of all the items added, please expand the list below;

default.button.reload.discard.title=Reload data and discard changes
default.button.reload.content.title=Do you want to reload and discard all the changes?
default.term.remove.custom.item=Remove Custom Item
default.term.user.is.subscription=Sub
default.errors.hide.details=Hide Details
default.errors.show.details=Show Details

default.errors.licence.capacity.id=ID
default.errors.licence.capacity.id.help.text=ID
default.errors.licence.capacity.topic=Topic
default.errors.licence.capacity.topic.help.text=Topic
default.errors.licence.capacity.error.message=Error Message
default.errors.licence.capacity.error.message.help.text=Error Message
default.errors.panel.show.errors.button=Show Errors
default.errors.panel.clear.errors.and.close.button=Clear All Errors and Close
default.errors.panel.error.count={0} new errors
default.errors.panel.error.new.errors=New Errors
default.errors.panel.error.previous.errors=Previous Errors
default.errors.panel.delete.button=Delete
default.errors.panel.delete.button.help.text=Delete this error
default.errors.dependency.usage.name=Name
default.errors.dependency.usage.name.help.text=Name
default.errors.dependency.usage.used.by=Used By
default.errors.dependency.usage.used.by.help.text=Used By
default.errors.dependency.usage.description=Description
default.errors.dependency.usage.description.help.text=Description
default.errors.validation.domain=Domain
default.errors.validation.domain.help.text=Domain
default.errors.validation.field=Field
default.errors.validation.field.help.text=Field
default.errors.validation.rejected.value=Rejected Value
default.errors.validation.rejected.value.help.text=Rejected Value
default.errors.validation.message=Message
default.errors.validation.message.help.text=Message
schedule.editor.schedule.error.message.title.required=Schedule title is required
schedule.editor.schedule.error.message.title.used=Schedule title has been used by another schedule
categories.editor.error.message.name.required=Category title is required
categories.editor.error.message.name.used=Category title has been used by another category
category.access.category.contains.items.label=This category contains items
chart.editor.html.card.tool.bar.chart.column.id=ID: {0}
chart.temp.filter.save.filters=Save Filters
role.editor.role.error.message.title.required=Role title is required
role.editor.role.error.message.title.used=Role title has been used by another role
api.editor.error.message.request.title.required=Api request title is required
api.editor.error.message.request.title.used=Api request title has been used by another request
org.editor.org.error.message.name.required=Org name is required
org.editor.org.error.message.name.used=Org name has been used by another org
org.subs.editor.users.add.subscriptions.enter.usercode=Enter usercode
report.editor.select.category.label=Category:
user.access.panel.instructions.header=The below shows how to interact with the panels
user.access.panel.instructions.master.column=Master Column
user.access.panel.instructions.associated.columns=Associated Items Column(s)
user.access.panel.instructions.result.columns=Result Column(s)
user.access.panel.instructions.master.column.description=This panel allows you to select an item to manage what it can have
user.access.panel.instructions.associated.columns.description=Tick the checkboxes in this panel to relate items to the master item
user.access.panel.instructions.result.columns.description=This panel displays the overall result of the relationship
user.access.reload.data.refresh.button.help.text=Reload data and discard changes
user.access.reload.data.discard.changes.button.help.text=Reload and discard changes
user.access.cancel.and.close.dialog.button.help.text=Cancel to close this dialog
user.access.panel.manage.by.user.overall.permissions.header=Overall Granted Permissions
user.access.panel.manage.by.user.overall.permissions.help.text=All the permissions granted to the selected user. They are set on this user directly or via roles
user.access.panel.manage.by.user.permissions.by.roles.help.text=This permission is granted only via roles, not from the user
data.connection.status.error.message.title.required=Data connection title is required
data.connection.status.error.message.title.used=Data connection title has been used by another data connection
data.connection.data.table.generation.select.table.name.label=Select Table Name
data.connection.import.table.panel.display.sample.data=Display sample data of this table
data.connection.import.table.panel.preview.table.generation=Preview of table generation
data.connection.import.table.panel.no.columns.selected=No Columns Selected
data.connection.import.table.panel.generate.tables.and.objects=Generate tables and objects
data.connection.import.table.panel.peek.background=Peek the background
data.connection.import.table.invalid.table.alias.empty=This value cannot be empty
data.connection.import.table.invalid.table.alias.used=This name has been used
data.connection.import.table.invalid.column.display.name.empty=This value cannot be empty
data.connection.import.table.invalid.column.display.name.used=This name has been used
data.connection.import.table.generation.message.new.object=Creating a new object
data.connection.import.table.generation.message.new.table=Creating a new table
data.connection.import.table.generation.message.object.count=Generating {0} objects
data.connection.import.table.generation.message.table.and.object.count=Generating {0} tables with {1} objects
data.connection.import.table.generation.message.error.enter.all.fields=Enter all the required fields
data.connection.import.table.generation.message.error.invalid.objects={0} invalid objects
data.connection.import.table.generation.message.error.invalid.tables.and.objects={0} invalid tables and {1} invalid objects
data.connection.column.style.value.help.text=Value
data.connection.column.style.colour.help.text=Colour
data.connection.column.select.name.label=Select Name
data.connection.table.column.prefix.help.text=Prefix
data.connection.table.column.suffix.help.text=Suffix
data.connection.table.column.decimals.help.text=Decimal Places
data.connection.table.column.decimal.separator.help.text=Decimal Separator
data.connection.table.column.display.sample.data=Display sample data
data.connection.table.column.thousand.separator.help.text=Thousand Separator
data.connection.table.column.label.help.text=Label
data.connection.table.column.helpText.help.text=Help Text
data.connection.table.index.field.type.label=Index Field Type:
data.connection.table.column.fields.not.valid.or.complete=Some of the fields are not valid or complete
data.connection.table.column.hide.details=Hide Details
data.connection.table.column.show.details=Show Details
data.connection.table.join.go.to.joined.table.button.title=Go to Joined Table
data.connection.table.join.expand.button.title=Expand
data.connection.table.join.select.tables=Select Tables to Join
data.connection.import.select.all.columns.button.label=Select All Columns

 

 

PDF Export - Performance Improvement For Single Chart PDF Export (BETA)

pi#2420

29822

PDF Export

PDF Export - Performance Improvement For Single Chart PDF Export (BETA)

pi#2420

29822

PDF Export

We’re excited to offer a completely rebuilt PDF export functionality which is almost instant, and reflects any changes you make to charts on your screen. You can try it out by enabling the BETA feature BROWSER_PDF_EXPORT (within pancredit_parameters) and we’d love to hear your feedback and incorporate this into our upcoming releases.

 

 

CHANGES

 

OWASP HTML Sanitizer - Upgraded

pi#2481

-

Sanitizer

OWASP HTML Sanitizer - Upgraded

pi#2481

-

Sanitizer

The OWASP HTML Sanitizer has been upgraded to resolve a reported Guava security vulnerability.

 

 

Multilingual - Multiple Improvements To i18n Translation Keys - Card Charts

pi#2408

30255

Multilingual / Card Charts

Multilingual - Multiple Improvements To i18n Translation Keys - Card Charts

pi#2408

30255

Multilingual / Card Charts

We have improved the presentation of i18n keys for Card Charts in the language translation files (i.e.messagesUserEntered_en_GB.properties).

Prior to this release, the keys included HTML code and styling tags applied directly to the Card Chart key.

From this release, we have introduced the following changes:

  1. The Key for Card Charts has been simplified by removing unnecessary HTML code

  2. When generating a new language file, all the content related to the Card Charts will be put at the bottom of the file

  3. Each Card Chart will have its own block of key value pairs, each separated by a comment that includes the Chart Title

  4. Each Card Chart block will include the content from all hierarchies within the chart

  5. Only Card Chart related keys will have Chart Title prefixed to it

 

Example of the output with multiple card charts:

 

Below are two examples of the new structure of the key, one without and the other with styles:

  1. Example without styles:

Card+Three.Dev+and+Test=<div>Dev and Test</div>

  • Card+Three - Encoded chart title

  • Dev+and+Test - Encoded text value forming part of the key.

 

  1. Example with styles applied:

New+Card.Styles+Test=<div style="text-align: center;"><span style="font-size: 26px; font-weight: bold; background-color: rgb(243, 144, 29); color: rgb(0, 0, 0);">Styles Test</span></div>

 

Newly generated language files will now include Card Chart Keys in the updated structure.

When upgrading, the existing files (with keys in the old format) will continue to work until a new language file is generated.

 

 

User ‘About’ Screen - Date Format Change

pi#2264

-

Library / Users About Page

User ‘About’ Screen - Date Format Change

pi#2264

-

Library / Users About Page

The Java 11 upgrade delivered in the June 24 release, brought with it an update to some of the default Java date formatting, therefore changes in the format of the dates presented in a User’s About page are present. The exact change, is dependentt upon your locale but as an example the en_GB format used previously now displays as:

But now the formatting appears like this:

 

 

Multilingual - Language String Name Format Change

pi#2503

31248

Multilingual - Language String Name Format Change

pi#2503

31248

Introduced automatic generated language strings for i18n files. We have tweaked the string format to a slightly improve the format of the Language (locale), for example English (United Kingdom)

 

 

Incompatibility - Amazon ElastiCache For Redis

pi#2434

29803

Redis

Incompatibility - Amazon ElastiCache For Redis

pi#2434

29803

Redis

Amazon’s ElastiCache for Redis does not allow the use of the CONFIG command which was causing an inability to use it alongside the Dashboard. This incompatibility has been resolved by disabling Keyspace Event Notifications which were previously being set to “Ex” through that restricted command.

Should you wish to mimic the past behaviour (it was being set to “Ex”) or indeed configure different behaviour, you are able to achieve this elsewhere in your infastructure - for example, it can be configured in the Redis configuration file or within the ElastiCache settings.

 

 

Table Chart Sorting - When Clicking 2nd Column Heading

pi#2488

31473

Table Sorting

Table Chart Sorting - When Clicking 2nd Column Heading

pi#2488

31473

Table Sorting

It was possible for the dynamic sorting of the second column in a table, to produce unexpected sorting results . It previously sorted by a different column entirely, one with an ‘order by’ in its object definition, which has been addressed.

 

 

Browser Debug Tool - Invalid Post Message Error Handling

pi#2503

31248

Embedding / Browser Debug Tool

Browser Debug Tool - Invalid Post Message Error Handling

pi#2503

31248

Embedding / Browser Debug Tool

Some 3rd parties (such as browser extensions) can send invalid post messages to the pi application. Prior to this release,, these were flagged as an error on the browser console. The severity level of these messages has now been downgraded to INFO and the messages has been amended to provide more relevant information.

 

 

Chart Editor Screen (Preview Mode) - Unable to Drill Down On A Table

pi#2500

-

Drill Down / Chart Editor

Chart Editor Screen (Preview Mode) - Unable to Drill Down On A Table

pi#2500

-

Drill Down / Chart Editor

Users were being prevented from being able to drill down whilst previewing a Table Chart (in the Chart Editor).

 

 

Schedule Editor Screen - Filter Values Not Showing

pi#2487

-

Schedule Editor

Schedule Editor Screen - Filter Values Not Showing

pi#2487

-

Schedule Editor

In a very specific case, when using the Scheduler Editor Screen with a report that included filters, the filter values would not populate when trying to edit them.

 

 

Gold Dashboard - Spelling Mistake Corrections

migrations#55

-

Gold Repository

Gold Dashboard - Spelling Mistake Corrections

migrations#55

-

Gold Repository

Minor spelling corrections in the Gold Repository

 

 

Performance of Chart Displays - Patch Item for 2024_07.1

pi#2594

32555

Performance

Performance of Chart Displays - Patch Item for 2024_07.1

pi#2594

32555

Performance

A performance issue was identified with the original July 24 release, specifically when displaying charts in the dashboard. To address this, the user access verification step has been optimized by enhancing the SQL query for improved efficiency.

 

 

SCHEMA CHANGES

 

Description

GitLab

ZenDesk

Column

Description

GitLab

ZenDesk

Column

Column ‘position’

  • added to mis_organisations table

pi#2435

30519

position

Column ‘data_source_item_id’

  • added to mis_category_objects, mis_report_filters, mis_user_restrictions, mis_role_restrictions, mis_filter_columns, pi_schedule_attachment_filter_values tables

PI#2459

-

data_source_item_id