https://wiki.onqpr.com/pa/api.php?action=feedcontributions&user=Ollvihe&feedformat=atomQPR ProcessAnalyzer Wiki - User contributions [en]2024-03-29T15:53:05ZUser contributionsMediaWiki 1.39.1https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Objects_in_Expression_Language&diff=24506QPR ProcessAnalyzer Objects in Expression Language2024-03-28T15:15:08Z<p>Ollvihe: /* Script */</p>
<hr />
<div>==Filter==<br />
Filters contain a set of filter rules used to filter cases and events in models. Filters are objects located in the models. Filters are owned by the creator user, and when a filter publish mode is private, only the creator can use it.<br />
<br />
{| class="wikitable"<br />
!'''Filter properties'''<br />
! '''Description'''<br />
|-<br />
||CreatedBy (User)<br />
||Returns the user who created the filter.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Returns date when the filter created date.<br />
|-<br />
||Description (String)<br />
||Returns description of the filter.<br />
|-<br />
||Id (Integer)<br />
||Returns id of the filter.<br />
|-<br />
||LastModifiedBy (User)<br />
||Returns user who modified the filter.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Returns date when the filter last modified.<br />
|-<br />
||Model<br />
||Returns model where the filter belongs to.<br />
|-<br />
||ModelId (Integer)<br />
||Returns model where the filter belongs to.<br />
|-<br />
||Name (String)<br />
||Returns the name of the filter.<br />
|-<br />
||Project<br />
||Returns project where the filter belongs to.<br />
|-<br />
||ProjectId (Integer)<br />
||Returns project id where the filter belongs to.<br />
|-<br />
||PublishMode (String)<br />
||Returns publish mode of the filter, one of the following: '''Private''', '''Public''', or '''Default'''.<br />
|-<br />
||Rules (Dictionary)<br />
||Returns a dictionary containing the filter rules in the filter.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Filter Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||<br />
Deletes the filter permanently. To delete own filters, the '''Filtering''' permission is needed, and to delete any filters the '''ManageViews''' permission is needed.<br />
|-<br />
||Modify<br />
||Dictionary<br />
||<br />
Modifies filter properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: ''Name'', ''Description'', ''PublishMode'', and ''Rules''.<br />
<br />
The function returns the updated filter object. Requires ''GenericWrite'' permission for the Project and global ''CreateModel'' permission.<br />
<br />
Example:<br />
<pre><br />
FilterById(1)<br />
.Modify(#{<br />
"Name": "My filter",<br />
"Description": "My description",<br />
"PublishMode": "Public",<br />
"Rules": #{<br />
"Items": [<br />
#{<br />
"Type": "IncludeCases",<br />
"Items": [<br />
#{<br />
"Type": "CaseAttributeValue",<br />
"Attribute": "Account Manager",<br />
"StringifiedValues": [<br />
"0Mary Wilson"<br />
]<br />
}<br />
]<br />
}<br />
]<br />
}<br />
}<br />
)<br />
</pre><br />
|}<br />
<br />
Function to get filter id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||FilterById<br />
||<br />
* Filter id (Integer)<br />
||<br />
Returns Filter object corresponding to the provided filter id.<br />
|}<br />
<br />
==Model==<br />
Notes:<br />
* For in-memory models that are offline, the object counts represent the situation when the model was last time online (loaded into the memory). ''null'' is returned if the model has never been loaded into the memory.<br />
* If [[Case_Level_Permissions|Case permissions]] are used for the model, and user doesn't have '''GenericWrite''' permission for the model, ''null'' is returned for data security reasons. Users that have the '''GenericWrite''' permission, see null when the model is offline, and when online, they see counts where the case level permissions settings are applied.<br />
* Properties ''CaseAttributes'', ''EventAttributes'' and ''Eventlog'' work only for the in-memory models and they require the model to be loaded into the memory. If the model is not in the memory, it is loaded when these properties is used. Other model properties down require the model to be in the memory.<br />
<br />
{| class="wikitable"<br />
!'''Model properties'''<br />
! '''Description'''<br />
|-<br />
||Calendars (BusinessCalendar*)<br />
||<br />
Returns all [[Business_Calendar|business calendars]] stored to the Model as an array. Returns an empty array, if there are no business calendars stored to the model. Note: UI allows to set only one business calendar for a Model.<br />
|-<br />
||CaseAttributes (AttributeType*)<br />
||[[#AttributeType|CaseAttributes]] in the model returned in the alphabetical order. Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||CasesDatatable (Datatable)<br />
||Returns the Datatable the model uses as a datasource for cases. Returns ''null'' if the cases Datatable is not defined or if model uses other than the Datatable datasource.<br />
|-<br />
||Configuration (Dictionary)<br />
||Returns the Model configuration as dictionary. Example:<br />
<pre><br />
ModelById(123).Configuration.DataSource.Events.DataTableName<br />
</pre><br />
|-<br />
||ConfigurationJson (String)<br />
||Returns the Model configuration as JSON string.<br />
|-<br />
||CreatedBy (User)<br />
||User who created the model.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the model was created.<br />
|-<br />
||DefaultCalendar (BusinessCalendar)<br />
||Returns the default [[Business_Calendar|business calendar]] of the Model. Returns ''null'', if there are no calendars in the Model or no calendar has been set as a default calendar. Note: UI allows to set only one business calendar for a Model, which is also the default calendar.<br />
|-<br />
||DefaultFilter (Filter)<br />
||Default filter of the model. Returns ''null'' if the model does not have a default filter.<br />
|-<br />
||DefaultFilterId (Integer)<br />
||Default filter id of the model. Returns ''null'' if the model does not have a default filter.<br />
|-<br />
||Description (String)<br />
||Model description. The model description may contain line breaks.<br />
|-<br />
||DeletedDate (DateTime)<br />
||Timestamp when Model was deleted (moved to the recycle bin).<br />
|-<br />
||DeletedBy (User)<br />
||User how deleted the Model.<br />
|-<br />
||Diagrams (Diagram*)<br />
||Returns an array of all [[Diagram_in_Expression_Language|diagrams]] in the model.<br />
|-<br />
||EstimatedMemory (Integer)<br />
||Returns an estimation of how much memory in bytes the model requires.<br />
|-<br />
||EventsDatatable (Datatable)<br />
||Returns the Datatable the model uses as a datasource for events. Returns ''null'' if the events Datatable is not defined or if model uses other than the Datatable datasource.<br />
|-<br />
||EventAttributes (AttributeType*)<br />
||[[#AttributeType|EventAttributes]] in the model returned in the alphabetical order. Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||EventLog (EventLog)<br />
||EventLog containing the entire model (i.e. event log where no filters have been applied). Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||Filters (Filter*)<br />
||Returns an array of all [[#Filter|filters]] in the model.<br />
|-<br />
||Id (Integer)<br />
||Model Id. Model Id is generated by QPR ProcessAnalyzer when the model is created.<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last time modified the model properties. Note that datatables containing the eventlog data are separate objects having similar fields to track the last modification and last data import.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the model was modified the last time.<br />
|-<br />
||Name (String)<br />
||Model name.<br />
|-<br />
||NCache (Integer)<br />
||Number of objects related to the model when the model is loaded into the memory.<br />
|-<br />
||NCaseAttributes (Integer)<br />
||Number of [[#AttributeType|CaseAttributes]] in model. Works only for in-memory models.<br />
|-<br />
||NCases (Integer)<br />
||Number of [[#Case|Cases]] in the model. Works only for in-memory models.<br />
|-<br />
||NEventAttributes (Integer)<br />
||Number of [[#AttributeType|EventAttributes]] in model. Works only for in-memory models.<br />
|-<br />
||NEvents (Integer)<br />
||Number of [[#Event|Events]] in model. Works only for in-memory models.<br />
|-<br />
||NEventTypes (Integer)<br />
||Number of [[#EventType|EventTypes]] in the model. Works only for in-memory models.<br />
|-<br />
||NOpens (Integer)<br />
||Number of times analysis has been requested from the model.<br />
|-<br />
||Project (Project)<br />
||[[#Project|Project]] where the model belongs to.<br />
|-<br />
||ProjectId (Integer)<br />
||[[#Project|Project]] id where the model belongs to.<br />
|-<br />
||Status (String)<br />
||<br />
Memory availability status of the model. There are the following statuses:<br />
* '''Loading''': The model is currently loading into the memory. When the loading is ready, the status changes to ''online''. If the loading fails, the status changes to ''offline''.<br />
* '''Offline''': The model is currently not loaded into the memory. The model needs to be loaded into the memory, so that analyses can be calculated from the model (occurs automatically when an analysis is requested).<br />
* '''Online''': The model is in the memory and ready for analysis calculation. If the model is dropped from the memory, its status changes to ''offline''.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Model Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||CalendarByName (BusinessCalendar)<br />
||<br />
name (String)<br />
||<br />
Returns a [[Business_Calendar|business calendar]] stored to the Model by the name of the calendar. Business calendars can be stored to models in the model properties. Returns ''null'', if a calendar with the provided name is not stored to the model.<br />
<br />
Examples:<br />
<pre><br />
ModelById(123).CalendarByName("MyCalendar")<br />
</pre><br />
|-<br />
||CreateDiagram (Diagram)<br />
||Parameters dictionary<br />
||<br />
Creates a [[Diagram_in_Expression_Language|diagram]] to the model. Parameters is a dictionary containing diagram properties. Following properties are available:<br />
* '''Name''' (string): Diagram name that distinguishes diagrams in a model.<br />
* '''Description''' (string): Diagram description text.<br />
* '''Content''' (dictionary): Diagram content as dictionary.<br />
<br />
Example:<br />
<pre><br />
ModelById(1)<br />
.CreateDiagram(#{<br />
"Name": "My diagram",<br />
"Description": "This is my new diagram",<br />
"Content": #{ ... },<br />
})<br />
</pre><br />
|-<br />
||CreateFilter (Filter)<br />
||Parameters dictionary<br />
||Creates a filter to a model. Requires ''GenericWrite'' permission for the project and global ''CreateModel'' permission. If a filter with that name already exists in the model, an exception is thrown.<br />
The parameters dictionary may have the following properties:<br />
* '''Name''': Name of the filter. This property is mandatory.<br />
* '''Description''': Description of the filter. This property is optional.<br />
* '''Rules''': Filter rules for the filter defined as a dictionary according to the [[Filtering_in_QPR_ProcessAnalyzer_Queries|filter json format]]. This property is mandatory.<br />
* '''PublishMode''': Publish mode of the filter which is one of the following: ''Private'', ''Public'' or ''Default''. This property is optional, and the default value is ''Private''.<br />
<br />
Example:<br />
<pre><br />
let newFilter = modelById(1).CreateFilter(#{ <br />
"Name": "My Filter",<br />
"Rules": #{<br />
"Items": [#{<br />
"Type": "IncludeCases",<br />
"Items": [#{<br />
"Type": "CaseAttributeValue",<br />
"Attribute": "Account Manager",<br />
"StringifiedValues": [ "0Robert Miller" ]<br />
}]<br />
}]<br />
},<br />
"PublishMode": "Public"<br />
});<br />
}<br />
</pre><br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||Deletes the Model permanently. The model doesn't need to be in the recycle bin to be able to delete it permanently.<br />
|-<br />
||Modify (Model)<br />
||Dictionary<br />
||<br />
Modifies model properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: ''Name'', ''Description'', ''ProjectId'', and ''Configuration''.<br />
<br />
The function returns the updated model object. Requires the ''GenericWrite'' permission for the project and the global ''CreateModel'' permission.<br />
<br />
Example:<br />
<pre><br />
ModelById(1)<br />
.Modify(#{<br />
"Name": "My model",<br />
"Description": "My description",<br />
"ProjectId": 2,<br />
"Configuration": #{<br />
"DataSource": #{<br />
"Cases": #{<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My cases datatable",<br />
"Columns": #{<br />
"CaseId": "Case Name"<br />
}<br />
},<br />
"Events": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My events datatable",<br />
"Columns": #{<br />
"CaseId": "Case Name",<br />
"EventType": "Event Type",<br />
"Timestamp": "Start Time"<br />
}<br />
}<br />
}<br />
}<br />
}<br />
)<br />
</pre><br />
|-<br />
||ResetPreprocessings<br />
||(none)<br />
||<br />
Removes all cached items related to the Model, e.g. preprocessings and calculation results. In practice, the Model is reset to a state where it was right after the model was loaded into memory.<br />
|-<br />
||Restore<br />
||(none)<br />
||Restores the Model from the recycle bin back to the original location.<br />
|-<br />
||<span id="ToSqlDataFrame">ToSqlDataFrame</span><br />
||In-memory dataframe<br />
||Converts an in-memory dataframe to an SQL dataframe. In practice, an SQL query is created from the in-memory dataframe and the query is executed in the datasource so that the data is available in the datasource for further SQL operations. This function is intended only to small amounts of data which is less than 16384 rows.<br />
<br />
Example: Select matching cases from events data using in-memory dataframe:<br />
<pre><br />
let model = ModelById(1);<br />
let dfEvents = model.EventsDatatable.SqlDataFrame;<br />
let inMemoryDf = ToDataFrame(<br />
[["1"], ["2"], ["3"]],<br />
[#{"Name": "id", "DataType": "String"}]<br />
);<br />
model.ToSqlDataFrame(inMemoryDf)<br />
.Join(dfEvents, ["id": "CaseId"])<br />
.SelectDistinct(["CaseId"])<br />
.Collect();<br />
</pre><br />
|-<br />
||<span id="TriggerNotifications">TriggerNotifications</span> (Boolean)<br />
||Notification names (String*)<br />
||Triggers the given notifications for the Model. Notifications are given by their names. Triggering means that the configured rules are run and notification emails are sent as defined by the rules. If the notification names parameter is not provided, all notifications in the Model are triggered.<br />
<br />
The function return ''true'' if any notification were triggered, otherwise ''false''.<br />
<pre><br />
ModelById(123).TriggerNotifications(["Notification 1", "Notification 2"]);<br />
Triggers notifications Notification 1 and Notification 2 in model id 123.<br />
<br />
ModelById(123).TriggerNotifications();<br />
Triggers all notifications in model id 123.<br />
</pre><br />
|}<br />
<br />
Function to get Model by model id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ModelById<br />
||<br />
* Model id (Integer)<br />
||<br />
Returns [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Model|Model]] object corresponding to the provided model id.<br />
|}<br />
<br />
== Project ==<br />
{| class="wikitable"<br />
!'''Project properties'''<br />
! '''Description'''<br />
|-<br />
||CreatedBy (User)<br />
||User who created the Project.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the Project was created.<br />
|-<br />
||Dashboards (Dashboard*)<br />
||Returns all [[Dashboard_in_Expression_Language|dashboards]] in the project.<br />
|-<br />
||Datatables (Datatable*)<br />
||Returns all Datatables in the project.<br />
|-<br />
||DeletedDate (DateTime)<br />
||Timestamp when the Project was deleted (moved to the recycle bin).<br />
|-<br />
||Description (String)<br />
||Project description. The project description may contain line breaks.<br />
|-<br />
||DeletedBy (User)<br />
||User who deleted the Project (moved to the recycle bin).<br />
|-<br />
||Id (Integer)<br />
||Id of the Project.<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last modified the Project.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the Project was last modified (refers to the project name, description and parent, not the contents of the project).<br />
|-<br />
||Name (String)<br />
||Name of the Project.<br />
|-<br />
||Models (Model*)<br />
||Models that are in the Project.<br />
|-<br />
||Parent (Project)<br />
||Parent project, i.e. a Project where the Project is located in the hierarchy of Projects. Returns ''null'' for root level Projects. Throws an error if user doesn't have access to the parent project.<br />
|-<br />
||ParentProjectId (Integer)<br />
||Parent project id. Returns ''null'' for root level Projects. The parent project id is returned even if user doesn't have access to the parent project.<br />
|-<br />
||Scripts (Script*)<br />
||Scripts that are in the Project.<br />
|-<br />
||Secrets (Dictionary*)<br />
||Returns array of all [[Storing_Secrets_for_Scripts|secrets]] in the project as Dictionary with following properties:<br />
* '''Name''' (string): Name of the secret.<br />
* '''Type''' (string): Type of the secret which is one of the following: "odbc", "sap", "salesforce".<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Project functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||CreateDashboard (Dashboard)<br />
||Parameters dictionary<br />
||Creates a dashboard to the project. ''EditDashboards'' permission to the project is required. The parameter is dictionary with following supported dashboard properties:<br />
* '''Name''' (String): Name of the dashboard.<br />
* '''Identifier''' (String): Identifier of the dashboard.<br />
* '''Description''' (String): Description of the dashboard.<br />
* '''Content''' (Dictionary): Content of the dashboard.<br />
<br />
Example: Create empty dashboard.<br />
<pre><br />
ProjectById(1)<br />
.CreateDashboard(#{<br />
"Name": "My dashboard",<br />
"Identifier": "MyDashboard"<br />
});<br />
</pre><br />
<br />
Example: Create dashboard with a chart.<br />
<pre><br />
ProjectById(1)<br />
.CreateDashboard(#{<br />
"Name": "My dashboard",<br />
"Content": #{<br />
"version": 4,<br />
"typeName": "View",<br />
"name": "My dashboard",<br />
"subElements": [<br />
#{<br />
"position": #{<br />
"x": 0,<br />
"y": 0,<br />
"width": 0.5,<br />
"height": 0.5,<br />
"zOrder": 0<br />
},<br />
"element": #{<br />
"typeName": "Chart",<br />
"configuration": #{<br />
"root": #{<br />
"expressionType": "Cases",<br />
"expressionParameters": #{}<br />
},<br />
"measures": [#{<br />
"expressionType": "Count",<br />
"expressionParameters": #{}<br />
}]<br />
}<br />
}<br />
}<br />
]<br />
}<br />
});<br />
</pre><br />
|-<br />
||<span id="CreateDatatable">CreateDatatable</span> (Datatable)<br />
||<br />
* Parameters dictionary<br />
||Creates datatable to the project. After creation, there are no columns or rows in the datatable. The function returns the created datatable entity. Following properties can be set for the datatable:<br />
* '''Name''' (string): Name of the datatable. This parameter is mandatory.<br />
* '''Description''' (string): Description for the datatable. This parameter is optional.<br />
* '''NameInDataSource''' (string): Table name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''SchemaNameInDataSource''' (string): Schema name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''DatabaseNameInDataSource''' (string): Database name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''Type''' (string): Defines where the data for the datatable is located. Available values are '''Snowflake''', '''SqlServer''', and '''Local'''. This parameter is optional and default value is defined by the [[PA_Configuration_database_table#General_Settings|DefaultDataSource]] setting.<br />
* '''Connection''': Connection object for the datatable. This parameter is optional.<br />
<br />
Example: Create a new datatable:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable"<br />
});<br />
</pre><br />
<br />
Example: Create Snowflake datatable linked to a custom table:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable",<br />
"Description": "My description",<br />
"NameInDataSource": "MyTable",<br />
"SchemaNameInDataSource": "MySchema",<br />
"DatabaseNameInDataSource": "MyDatabase",<br />
"Type": "Snowflake"<br />
});<br />
</pre><br />
<br />
Example: Create Snowflake datatable where connection string is stored as a [[Storing_Secrets_for_Scripts|secret]]:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable",<br />
"Type": "Snowflake",<br />
"Connection": ProjectById(1).CreateSnowflakeConnection(#{ "OdbcConnectionStringKey": "MyKey" })<br />
});<br />
</pre><br />
|-<br />
||CreateModel (Model)<br />
||<br />
* Parameters dictionary<br />
||Creates a model to a project. Requires ''GenericWrite'' permission for the Project and global ''CreateModel'' permission. If a model with that name already exists, an exception is thrown.<br />
<br />
Parameters dictionary has the following properties:<br />
* '''Name''': Name of the model. This property is mandatory.<br />
* '''Description''': Description of the model. This property is optional.<br />
* '''Configuration''': Configuration dictionary for the model. This property is technically optional, but a working model requires at least datasource settings to be defined.<br />
<br />
Example:<br />
<pre><br />
ProjectById(1).CreateModel(#{ <br />
"Name": "My model",<br />
"Description": "My description",<br />
"Configuration": {<br />
"DataSource": {<br />
"Cases": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My cases datatable",<br />
"Columns": {<br />
"CaseId": "Case Name"<br />
}<br />
},<br />
"Events": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My events datatable",<br />
"Columns": {<br />
"CaseId": "Case Name",<br />
"EventType": "Event Type",<br />
"Timestamp": "Start Time"<br />
}<br />
}<br />
}<br />
}<br />
});<br />
</pre><br />
|-<br />
||DatatableByName (Datatable)<br />
||Datatable name (String)<br />
||<br />
Returns Datatable by its name located in the project. Returns null, if Datatable with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).DatatableByName("MyDatatable1")<br />
</pre><br />
<br />
Example: Get datatable by name, and create it if it doesn't exist:<br />
<pre><br />
let project = ProjectById(123);<br />
let datatableName = "MyDatatable1";<br />
let datatable = project.DatatableByName(datatableName);<br />
if (datatable == null) {<br />
datatable = project.CreateDatatable(datatableName);<br />
}<br />
</pre><br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||Deletes the Project permanently. Note that the Project doesn't need to be in the recycle bin to be able to delete it permanently.<br />
|-<br />
||Restore<br />
||(none)<br />
||Restores the Project from the recycle bin back to the original location.<br />
|-<br />
||ModelByName (Model)<br />
||Model name (String)<br />
||<br />
Returns Model by its name located in the project. Returns null, if Model with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).ModelByName("My Model 1")<br />
</pre><br />
|-<br />
||ScriptByName (Script)<br />
||Script name (String)<br />
||<br />
Returns Script by its name located in the project. Returns null, if Script with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).ScriptByName("MyScript1")<br />
</pre><br />
|-<br />
||<span id="SetSecret">SetSecret</span><br />
||<br />
# Secret type (string)<br />
# Secret name (string)<br />
# Secret value (string)<br />
||Sets or adds a [[Storing_Secrets_for_Scripts|secret]] for the project. Setting the secret value to ''null'' removes the secret. There can be several secrets with the same name in the same project if the type of the secret is different. Setting secrets requires the project specific ''ManageProject'' permission.<br />
<br />
Parameters:<br />
# '''Type''' (string): Secret type which is one of the following:<br />
#* "odbc": ODBC connection string (e.g., to extract data, or load a model directly)<br />
#* "externaldatatableconnection": ODBC connection string used for a datatable<br />
#* "sap": SAP password<br />
#* "salesforce": Salesforce password<br />
# '''Name''' (string): Secret name, used to refer to the secret in the commands.<br />
# '''Value''' (string): Secret value which contains the confidential information.<br />
<br />
Example: Set SAP password:<br />
<pre><br />
ProjectById(1).SetSecret("sap", "MySapPassword", "I l0ve 5AP!");<br />
</pre><br />
<br />
Example: Remove SAP password:<br />
<pre><br />
ProjectById(1).SetSecret("sap", "MySapPassword", null);<br />
</pre><br />
|}<br />
<br />
Function to get Project by id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ProjectById<br />
||Project id (Integer)<br />
||<br />
Returns project object corresponding to the provided project id.<br />
|-<br />
||ProjectByName<br />
||Project name (String)<br />
||<br />
Returns project object by given project name. If there is no such project or user doesn't have access to it, ''null'' value is returned. If there are multiple projects with the same name, one of them is returned.<br />
<br />
Example:<br />
<pre><br />
let project = ProjectByName("My Project");<br />
</pre><br />
|}<br />
<br />
== Script ==<br />
Scripts are entities that contain executable code, that can be run. Usually scripts contains ETL routines but also other kind of tasks are possible.<br />
<br />
{| class="wikitable"<br />
!'''Script properties'''<br />
! '''Description'''<br />
|-<br />
||Code (String)<br />
||Script code.<br />
|-<br />
||CreatedBy (User)<br />
||User who created the Script.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the Script was created.<br />
|-<br />
||CurrentRunStart (DateTime)<br />
||Timestamp of the current run start. Null if the script is currently not running.<br />
|-<br />
||Description (String)<br />
||Description of the Script.<br />
|-<br />
||Id (Integer)<br />
||Id of the Script.<br />
|-<br />
||Language (String)<br />
||Either of the following scripting language: '''Expression''' or '''SQL'''. When language is Expression, the script is run as an expression script, and when language is SQL, the script is run as an SQL script (using the sandbox database).<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last modified the Script.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the Script was last modified.<br />
|-<br />
||LastRunEnd (DateTime)<br />
||Timestamp of the last completed script run end (either successful completion or failure). Null if the Script hasn't been run yet.<br />
|-<br />
||LastRunResult (String)<br />
||Result of the last run. Options are:<br />
* '''Completed''': The last run was completed successfully.<br />
* '''Failed''': An error occurred during the last run, so likely the script did not complete as intended.<br />
* '''Aborted''': Script run was manually stopped prematurely by a user, so the script did not proceeded in the end.<br />
<br />
Null if the Script hasn't been run yet.<br />
|-<br />
||LastRunStart (DateTime)<br />
||Timestamp of the last completed script run start time. Null if the Script hasn't been run yet.<br />
|-<br />
||Name (String)<br />
||Name of the Script.<br />
|-<br />
||OperationId (Integer)<br />
||Id of the operation which runs the Script. Null if the script is currently not running.<br />
|-<br />
||Project (Project)<br />
||Project where the Script is located. Null if the script is in the global context.<br />
|-<br />
||ProjectId (Integer)<br />
||Id of the project where the Script is located. Null if the script is in the global context.<br />
|-<br />
||Status (String)<br />
||Current status of the script. Options are:<br />
* '''Ready''': Script is not running. In this status, the script can be started (changing the status to ''Running'').<br />
* '''Running''': Script is running. In this status, the script can be stopped (changing the status to ''Stopping''). Calling stop just requests a script to stop, and the actual stopping occurs some time later.<br />
* '''Stopping''': Script has been requested to be stopped, but it's still running. In this status, neither start nor stop can be called for the script. When the script eventually stops, its status changes to ''Ready''.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Script functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||Run (Object)<br />
||Dictionary of parameters<br />
||<br />
Runs the script using the provided parameters. The parameters are available in the script as variables (see the example). Any type of variables can be passed to the script. Note that if the script assumes certain variables, but that they are not passed to the script, the script run will throw an error. <br />
<br />
For SQL scripts, the passed parameters are available in the script as variables in format '''@_parameter_<ParameterName>''' where <ParameterName> is the name of the parameter, e.g. ''parameter_myParameter1''. Only string type of parameters can be used, so any other type of data in parameter values is converted into strings.<br />
<br />
The return value of the script is returned by the Run function. Expression scripts return a value with the ''return'' statement or alternatively the result of the last line of the script is the return value. If the script does not return any value, the Run function returns ''_empty''. For SQL scripts, the return value is the last dataset produced by the script (returned as a DataFrame) (SQL scripts might create several datasets using the ''--#ShowReport'' command or the ''Show'' parameter).<br />
<br />
When a script is called using the Run function, the called script status does not change, because it's the parent script that is ''Running''. Also the called script log is not filled, but instead the logging goes to the calling script.<br />
<br />
It's possible to call a script using the Run function several times simultaneously.<br />
<br />
If there is an error when running the called script, the Run function throws the error to the calling script.<br />
<br />
Scripts are run in the script entity context, so for example the following properties are available:<br />
* Id: Script id<br />
* Name: Script name<br />
* Project.Id: Project id where the script is located<br />
* Project.Name: Name of the project where the script is located<br />
<br />
Example: Following script (id 123) raises a specified number to a specified power:<br />
<pre><br />
return Pow(numberToRaise, exponent);<br />
</pre><br />
<br />
The script can be called as follows (returning 16):<br />
<pre><br />
let runResult = ScriptById(123).Run(#{<br />
"numberToRaise": 4,<br />
"exponent": 2<br />
})<br />
</pre><br />
|-<br />
||Start<br />
||Dictionary of parameters<br />
||Starts the script. The function call doesn't wait for the script run to complete (i.e., asynchronous behavior) which is sane as starting the script in the [[Managing_Scripts#Starting_Script|Workspace]].<br />
<br />
Parameters to the script can be provided as a dictionary of name-value pairs (which is not possible when script is started in the Workspace). Return value is the script run id (integer) if the script was started. If the script is already running, return value is ''null''.<br />
<br />
Example: Start script (without parameters) and store the script run id:<br />
<pre><br />
let runId = ScriptById(1).Start();<br />
</pre><br />
<br />
Example: Start script with passing parameters:<br />
<pre><br />
ScriptById(1).Start(#{<br />
"variable1": "val1",<br />
"variable2": 5<br />
});<br />
</pre><br />
|-<br />
||Stop<br />
||<br />
||Stops the script. The operation doesn't wait for the stopping to complete (i.e., asynchronous behavior) which is same as stopping the script in the [[Managing_Scripts#Stopping_Script|Workspace]]. Depending on the operation that the script is performing, the stopping might take some time.<br />
<br />
Return value is the script run id (integer) if the script was running. If the script isn't running, the return value is ''null''.<br />
<br />
Example:<br />
<pre><br />
let runId = ScriptById(1).Stop();<br />
</pre><br />
|}<br />
<br />
Function to get a script by the script id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ScriptById<br />
||<br />
* Script id (Integer)<br />
||<br />
Returns Script object corresponding to the given script id. If script with the given id doesn't exist or user doesn't have permissions to it, an error is given.<br />
|}<br />
<br />
== User/Group ==<br />
User objects represents users and user groups. Note that some properties can only be used for users and some for groups.<br />
<br />
{| class="wikitable"<br />
!'''User/group properties'''<br />
! '''Description'''<br />
|-<br />
||Description (String)<br />
||Description of the user.<br />
|-<br />
||Email (String)<br />
||Email address of the user.<br />
|-<br />
||FullName (String)<br />
||Full name of the user or group name.<br />
|-<br />
||GlobalPermissions (String*)<br />
||Array of global [[Roles and Permissions#Global_and_Project_Roles|permissions]] of the user. Global permissions come from the global roles assigned to the user and groups that the user belongs to. Note that to get the effective permissions for certain objects, also project specific permissions need to be taken into account.<br />
|-<br />
||GroupMemberNames (String*)<br />
||Array of names of members of a user group. This property is available for groups.<br />
|-<br />
||GroupMembers (User*)<br />
||Array of members of a user group. This property is available for groups.<br />
|-<br />
||GroupNames (String*)<br />
||Array of names of user groups the user belongs to. This property is available for users.<br />
|-<br />
||Groups (User*)<br />
||Array of user groups the user belongs to. This property is available for users.<br />
|-<br />
||HasPassword (Boolean)<br />
||Returns true if user has a password defined in QPR ProcessAnalyzer and thus user can authenticate using the password. If user doesn't have a password, the SAML authentication is the only way to log in. ''ManageUsers'' permission is needed to access this property for other users.<br />
|-<br />
||Id (Integer)<br />
||Id of the user, which is unique for every user.<br />
|-<br />
||IsActive (Boolean)<br />
||Returns true only if the user is active (not disabled).<br />
|-<br />
||IsGroup (Boolean)<br />
||Returns true if the user is a user group.<br />
|-<br />
||IsLocked (Boolean)<br />
||Returns true if user account is currently [[User_Session_Management#Preventing_password_guessing_attacks|locked]]. ''ManageUsers'' permission is needed to access this property.<br />
|-<br />
||LastLockedDate (DateTime)<br />
||Returns date when user account was locked the last time. Returns ''null'' if the user account has never been locked. ''ManageUsers'' permission is needed to access this property.<br />
|-<br />
||LastLoginDate (DateTime)<br />
||Returns date when the user made last successful login. ''ManageUsers'' permission is needed to access this property for other users.<br />
|-<br />
||Name (String)<br />
||Login name of the user or group.<br />
|-<br />
||Roles (Object**)<br />
||<br />
Returns all roles of the user (both global and project roles) as a nested array structure.<br />
<br />
Example:<br />
<pre><br />
ToJson(Users.Where(name == "qpr").Roles)<br />
Returns (for example):<br />
[<br />
[{"calcId": "Project:1"}, "Administrator"],<br />
[{"calcId": "Project:2"}, "Analyzer"],<br />
[{"calcId": "Project:3"}, "Viewer"],<br />
[null, "RunScripts"],<br />
[null, "Administrator"]<br />
]<br />
</pre><br />
|}<br />
<br />
{| class="wikitable"<br />
!'''User/group functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||EffectivePermissionsFor (String Array)<br />
||<br />
* Project to get permissions<br />
||<br />
Returns effective (actual) permission of the user to the given project. Project is given as a [[#Project|project object]] (not as a project id). Effective permissions determine the actual permissions that the user has, i.e. a combination of all permissions assigned to the user and groups the user belong to, including both project specific and global roles.<br />
<br />
Permissions for the EffectivePermissionsFor function are as follows:<br />
* All users can query their own permissions<br />
* To get permissions for any user, the user needs to have [[Roles_and_Permissions|ManageUsers permission]].<br />
<br />
Note that ''inactive'' users don't have any effective permissions, so the EffectivePermissionsFor function does not return any permissions for those users.<br />
<br />
Examples:<br />
<pre><br />
EffectivePermissionsFor(ModelById(1234).Project)<br />
Returns (for example): ["EditDashboards", "Filtering", "GenericRead"]<br />
</pre><br />
|-<br />
||GetAttribute<br />
||<br />
||<br />
Returns user attribute value by given attribute name and optionally by the model/project/dashboard context. Supported data types are String, Integer, Float, and DateTime. To store more complex data types, data can be converted into json and stored as string. If the attribute doesn't exist, null is returned.<br />
<br />
For example, if using dashboard as context, the attributes are effectively bound to each user and each dashboard separately. Thus, there can be several attributes with the same name as long as the dashboard is different.<br />
<br />
Parameters:<br />
# '''Attribute name''' (String): Name of the attribute.<br />
# '''Attribute context''' (Project/Model/Dashboard): Optional context object the attribute is linked to.<br />
<br />
Users have permissions to get attributes for themselves, and also (administrator) users with global ''ManageUsers'' permission can get attributes for all users. In addition, if using the context object, the ''GenericRead'' permission is required for the context object.<br />
<br />
Example: Get user attribute MyDataValue for myself:<br />
<pre><br />
CurrentUser<br />
.GetAttribute("MyDataValue");<br />
</pre><br />
<br />
Example: Get user attribute MyDataValue for user John:<br />
<pre><br />
Users<br />
.Where(Name=="John")<br />
.GetAttribute("MyDataValue");<br />
</pre><br />
<br />
Example: Get user attribute MyDataValue for user 1 related to dashboard id 1:<br />
<pre><br />
UserById(1)<br />
.GetAttribute("MyDataValue", DashboardById(1));<br />
</pre><br />
|-<br />
||SetAttribute<br />
||<br />
||<br />
Sets user attribute value for given attribute name and optionally for the model/project/dashboard context. Supported data types are String, Integer, Float, and DateTime. To store more complex data types, data can be converted into json and stored as string. If setting value ''null'', the user attribute is removed. Required permissions are same as in the GetAttribute function.<br />
<br />
Parameters:<br />
# '''Attribute name''' (String): Name of the attribute.<br />
# '''Attribute value''' (String/Integer/Float/DateTime): Attribute value to be stored.<br />
# '''Attribute context''' (Project/Model/Dashboard): Optional context object the attribute value is linked to.<br />
<br />
Example: Set user attribute MyDataValue for myself:<br />
<pre><br />
CurrentUser<br />
.SetAttribute("MyDataValue ", "value");<br />
</pre><br />
<br />
Example: Set value 123 as user attribute MyDataValue for user John:<br />
<pre><br />
Users<br />
.Where(Name=="John")<br />
.SetAttribute("MyDataValue", 123);<br />
</pre><br />
<br />
Example: Set current time as user attribute MyDataValue for user 1 related to dashboard id 1:<br />
<pre><br />
UserById(1)<br />
.GetAttribute("MyDataValue", Now, DashboardById(1));<br />
</pre><br />
|}<br />
<br />
Function to get User by user id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||UserById<br />
||<br />
* User id (Integer)<br />
||<br />
Returns User object corresponding to the provided user id.<br />
|}</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Objects_in_Expression_Language&diff=24505QPR ProcessAnalyzer Objects in Expression Language2024-03-28T15:14:19Z<p>Ollvihe: /* Script */</p>
<hr />
<div>==Filter==<br />
Filters contain a set of filter rules used to filter cases and events in models. Filters are objects located in the models. Filters are owned by the creator user, and when a filter publish mode is private, only the creator can use it.<br />
<br />
{| class="wikitable"<br />
!'''Filter properties'''<br />
! '''Description'''<br />
|-<br />
||CreatedBy (User)<br />
||Returns the user who created the filter.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Returns date when the filter created date.<br />
|-<br />
||Description (String)<br />
||Returns description of the filter.<br />
|-<br />
||Id (Integer)<br />
||Returns id of the filter.<br />
|-<br />
||LastModifiedBy (User)<br />
||Returns user who modified the filter.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Returns date when the filter last modified.<br />
|-<br />
||Model<br />
||Returns model where the filter belongs to.<br />
|-<br />
||ModelId (Integer)<br />
||Returns model where the filter belongs to.<br />
|-<br />
||Name (String)<br />
||Returns the name of the filter.<br />
|-<br />
||Project<br />
||Returns project where the filter belongs to.<br />
|-<br />
||ProjectId (Integer)<br />
||Returns project id where the filter belongs to.<br />
|-<br />
||PublishMode (String)<br />
||Returns publish mode of the filter, one of the following: '''Private''', '''Public''', or '''Default'''.<br />
|-<br />
||Rules (Dictionary)<br />
||Returns a dictionary containing the filter rules in the filter.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Filter Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||<br />
Deletes the filter permanently. To delete own filters, the '''Filtering''' permission is needed, and to delete any filters the '''ManageViews''' permission is needed.<br />
|-<br />
||Modify<br />
||Dictionary<br />
||<br />
Modifies filter properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: ''Name'', ''Description'', ''PublishMode'', and ''Rules''.<br />
<br />
The function returns the updated filter object. Requires ''GenericWrite'' permission for the Project and global ''CreateModel'' permission.<br />
<br />
Example:<br />
<pre><br />
FilterById(1)<br />
.Modify(#{<br />
"Name": "My filter",<br />
"Description": "My description",<br />
"PublishMode": "Public",<br />
"Rules": #{<br />
"Items": [<br />
#{<br />
"Type": "IncludeCases",<br />
"Items": [<br />
#{<br />
"Type": "CaseAttributeValue",<br />
"Attribute": "Account Manager",<br />
"StringifiedValues": [<br />
"0Mary Wilson"<br />
]<br />
}<br />
]<br />
}<br />
]<br />
}<br />
}<br />
)<br />
</pre><br />
|}<br />
<br />
Function to get filter id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||FilterById<br />
||<br />
* Filter id (Integer)<br />
||<br />
Returns Filter object corresponding to the provided filter id.<br />
|}<br />
<br />
==Model==<br />
Notes:<br />
* For in-memory models that are offline, the object counts represent the situation when the model was last time online (loaded into the memory). ''null'' is returned if the model has never been loaded into the memory.<br />
* If [[Case_Level_Permissions|Case permissions]] are used for the model, and user doesn't have '''GenericWrite''' permission for the model, ''null'' is returned for data security reasons. Users that have the '''GenericWrite''' permission, see null when the model is offline, and when online, they see counts where the case level permissions settings are applied.<br />
* Properties ''CaseAttributes'', ''EventAttributes'' and ''Eventlog'' work only for the in-memory models and they require the model to be loaded into the memory. If the model is not in the memory, it is loaded when these properties is used. Other model properties down require the model to be in the memory.<br />
<br />
{| class="wikitable"<br />
!'''Model properties'''<br />
! '''Description'''<br />
|-<br />
||Calendars (BusinessCalendar*)<br />
||<br />
Returns all [[Business_Calendar|business calendars]] stored to the Model as an array. Returns an empty array, if there are no business calendars stored to the model. Note: UI allows to set only one business calendar for a Model.<br />
|-<br />
||CaseAttributes (AttributeType*)<br />
||[[#AttributeType|CaseAttributes]] in the model returned in the alphabetical order. Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||CasesDatatable (Datatable)<br />
||Returns the Datatable the model uses as a datasource for cases. Returns ''null'' if the cases Datatable is not defined or if model uses other than the Datatable datasource.<br />
|-<br />
||Configuration (Dictionary)<br />
||Returns the Model configuration as dictionary. Example:<br />
<pre><br />
ModelById(123).Configuration.DataSource.Events.DataTableName<br />
</pre><br />
|-<br />
||ConfigurationJson (String)<br />
||Returns the Model configuration as JSON string.<br />
|-<br />
||CreatedBy (User)<br />
||User who created the model.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the model was created.<br />
|-<br />
||DefaultCalendar (BusinessCalendar)<br />
||Returns the default [[Business_Calendar|business calendar]] of the Model. Returns ''null'', if there are no calendars in the Model or no calendar has been set as a default calendar. Note: UI allows to set only one business calendar for a Model, which is also the default calendar.<br />
|-<br />
||DefaultFilter (Filter)<br />
||Default filter of the model. Returns ''null'' if the model does not have a default filter.<br />
|-<br />
||DefaultFilterId (Integer)<br />
||Default filter id of the model. Returns ''null'' if the model does not have a default filter.<br />
|-<br />
||Description (String)<br />
||Model description. The model description may contain line breaks.<br />
|-<br />
||DeletedDate (DateTime)<br />
||Timestamp when Model was deleted (moved to the recycle bin).<br />
|-<br />
||DeletedBy (User)<br />
||User how deleted the Model.<br />
|-<br />
||Diagrams (Diagram*)<br />
||Returns an array of all [[Diagram_in_Expression_Language|diagrams]] in the model.<br />
|-<br />
||EstimatedMemory (Integer)<br />
||Returns an estimation of how much memory in bytes the model requires.<br />
|-<br />
||EventsDatatable (Datatable)<br />
||Returns the Datatable the model uses as a datasource for events. Returns ''null'' if the events Datatable is not defined or if model uses other than the Datatable datasource.<br />
|-<br />
||EventAttributes (AttributeType*)<br />
||[[#AttributeType|EventAttributes]] in the model returned in the alphabetical order. Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||EventLog (EventLog)<br />
||EventLog containing the entire model (i.e. event log where no filters have been applied). Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||Filters (Filter*)<br />
||Returns an array of all [[#Filter|filters]] in the model.<br />
|-<br />
||Id (Integer)<br />
||Model Id. Model Id is generated by QPR ProcessAnalyzer when the model is created.<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last time modified the model properties. Note that datatables containing the eventlog data are separate objects having similar fields to track the last modification and last data import.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the model was modified the last time.<br />
|-<br />
||Name (String)<br />
||Model name.<br />
|-<br />
||NCache (Integer)<br />
||Number of objects related to the model when the model is loaded into the memory.<br />
|-<br />
||NCaseAttributes (Integer)<br />
||Number of [[#AttributeType|CaseAttributes]] in model. Works only for in-memory models.<br />
|-<br />
||NCases (Integer)<br />
||Number of [[#Case|Cases]] in the model. Works only for in-memory models.<br />
|-<br />
||NEventAttributes (Integer)<br />
||Number of [[#AttributeType|EventAttributes]] in model. Works only for in-memory models.<br />
|-<br />
||NEvents (Integer)<br />
||Number of [[#Event|Events]] in model. Works only for in-memory models.<br />
|-<br />
||NEventTypes (Integer)<br />
||Number of [[#EventType|EventTypes]] in the model. Works only for in-memory models.<br />
|-<br />
||NOpens (Integer)<br />
||Number of times analysis has been requested from the model.<br />
|-<br />
||Project (Project)<br />
||[[#Project|Project]] where the model belongs to.<br />
|-<br />
||ProjectId (Integer)<br />
||[[#Project|Project]] id where the model belongs to.<br />
|-<br />
||Status (String)<br />
||<br />
Memory availability status of the model. There are the following statuses:<br />
* '''Loading''': The model is currently loading into the memory. When the loading is ready, the status changes to ''online''. If the loading fails, the status changes to ''offline''.<br />
* '''Offline''': The model is currently not loaded into the memory. The model needs to be loaded into the memory, so that analyses can be calculated from the model (occurs automatically when an analysis is requested).<br />
* '''Online''': The model is in the memory and ready for analysis calculation. If the model is dropped from the memory, its status changes to ''offline''.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Model Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||CalendarByName (BusinessCalendar)<br />
||<br />
name (String)<br />
||<br />
Returns a [[Business_Calendar|business calendar]] stored to the Model by the name of the calendar. Business calendars can be stored to models in the model properties. Returns ''null'', if a calendar with the provided name is not stored to the model.<br />
<br />
Examples:<br />
<pre><br />
ModelById(123).CalendarByName("MyCalendar")<br />
</pre><br />
|-<br />
||CreateDiagram (Diagram)<br />
||Parameters dictionary<br />
||<br />
Creates a [[Diagram_in_Expression_Language|diagram]] to the model. Parameters is a dictionary containing diagram properties. Following properties are available:<br />
* '''Name''' (string): Diagram name that distinguishes diagrams in a model.<br />
* '''Description''' (string): Diagram description text.<br />
* '''Content''' (dictionary): Diagram content as dictionary.<br />
<br />
Example:<br />
<pre><br />
ModelById(1)<br />
.CreateDiagram(#{<br />
"Name": "My diagram",<br />
"Description": "This is my new diagram",<br />
"Content": #{ ... },<br />
})<br />
</pre><br />
|-<br />
||CreateFilter (Filter)<br />
||Parameters dictionary<br />
||Creates a filter to a model. Requires ''GenericWrite'' permission for the project and global ''CreateModel'' permission. If a filter with that name already exists in the model, an exception is thrown.<br />
The parameters dictionary may have the following properties:<br />
* '''Name''': Name of the filter. This property is mandatory.<br />
* '''Description''': Description of the filter. This property is optional.<br />
* '''Rules''': Filter rules for the filter defined as a dictionary according to the [[Filtering_in_QPR_ProcessAnalyzer_Queries|filter json format]]. This property is mandatory.<br />
* '''PublishMode''': Publish mode of the filter which is one of the following: ''Private'', ''Public'' or ''Default''. This property is optional, and the default value is ''Private''.<br />
<br />
Example:<br />
<pre><br />
let newFilter = modelById(1).CreateFilter(#{ <br />
"Name": "My Filter",<br />
"Rules": #{<br />
"Items": [#{<br />
"Type": "IncludeCases",<br />
"Items": [#{<br />
"Type": "CaseAttributeValue",<br />
"Attribute": "Account Manager",<br />
"StringifiedValues": [ "0Robert Miller" ]<br />
}]<br />
}]<br />
},<br />
"PublishMode": "Public"<br />
});<br />
}<br />
</pre><br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||Deletes the Model permanently. The model doesn't need to be in the recycle bin to be able to delete it permanently.<br />
|-<br />
||Modify (Model)<br />
||Dictionary<br />
||<br />
Modifies model properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: ''Name'', ''Description'', ''ProjectId'', and ''Configuration''.<br />
<br />
The function returns the updated model object. Requires the ''GenericWrite'' permission for the project and the global ''CreateModel'' permission.<br />
<br />
Example:<br />
<pre><br />
ModelById(1)<br />
.Modify(#{<br />
"Name": "My model",<br />
"Description": "My description",<br />
"ProjectId": 2,<br />
"Configuration": #{<br />
"DataSource": #{<br />
"Cases": #{<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My cases datatable",<br />
"Columns": #{<br />
"CaseId": "Case Name"<br />
}<br />
},<br />
"Events": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My events datatable",<br />
"Columns": #{<br />
"CaseId": "Case Name",<br />
"EventType": "Event Type",<br />
"Timestamp": "Start Time"<br />
}<br />
}<br />
}<br />
}<br />
}<br />
)<br />
</pre><br />
|-<br />
||ResetPreprocessings<br />
||(none)<br />
||<br />
Removes all cached items related to the Model, e.g. preprocessings and calculation results. In practice, the Model is reset to a state where it was right after the model was loaded into memory.<br />
|-<br />
||Restore<br />
||(none)<br />
||Restores the Model from the recycle bin back to the original location.<br />
|-<br />
||<span id="ToSqlDataFrame">ToSqlDataFrame</span><br />
||In-memory dataframe<br />
||Converts an in-memory dataframe to an SQL dataframe. In practice, an SQL query is created from the in-memory dataframe and the query is executed in the datasource so that the data is available in the datasource for further SQL operations. This function is intended only to small amounts of data which is less than 16384 rows.<br />
<br />
Example: Select matching cases from events data using in-memory dataframe:<br />
<pre><br />
let model = ModelById(1);<br />
let dfEvents = model.EventsDatatable.SqlDataFrame;<br />
let inMemoryDf = ToDataFrame(<br />
[["1"], ["2"], ["3"]],<br />
[#{"Name": "id", "DataType": "String"}]<br />
);<br />
model.ToSqlDataFrame(inMemoryDf)<br />
.Join(dfEvents, ["id": "CaseId"])<br />
.SelectDistinct(["CaseId"])<br />
.Collect();<br />
</pre><br />
|-<br />
||<span id="TriggerNotifications">TriggerNotifications</span> (Boolean)<br />
||Notification names (String*)<br />
||Triggers the given notifications for the Model. Notifications are given by their names. Triggering means that the configured rules are run and notification emails are sent as defined by the rules. If the notification names parameter is not provided, all notifications in the Model are triggered.<br />
<br />
The function return ''true'' if any notification were triggered, otherwise ''false''.<br />
<pre><br />
ModelById(123).TriggerNotifications(["Notification 1", "Notification 2"]);<br />
Triggers notifications Notification 1 and Notification 2 in model id 123.<br />
<br />
ModelById(123).TriggerNotifications();<br />
Triggers all notifications in model id 123.<br />
</pre><br />
|}<br />
<br />
Function to get Model by model id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ModelById<br />
||<br />
* Model id (Integer)<br />
||<br />
Returns [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Model|Model]] object corresponding to the provided model id.<br />
|}<br />
<br />
== Project ==<br />
{| class="wikitable"<br />
!'''Project properties'''<br />
! '''Description'''<br />
|-<br />
||CreatedBy (User)<br />
||User who created the Project.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the Project was created.<br />
|-<br />
||Dashboards (Dashboard*)<br />
||Returns all [[Dashboard_in_Expression_Language|dashboards]] in the project.<br />
|-<br />
||Datatables (Datatable*)<br />
||Returns all Datatables in the project.<br />
|-<br />
||DeletedDate (DateTime)<br />
||Timestamp when the Project was deleted (moved to the recycle bin).<br />
|-<br />
||Description (String)<br />
||Project description. The project description may contain line breaks.<br />
|-<br />
||DeletedBy (User)<br />
||User who deleted the Project (moved to the recycle bin).<br />
|-<br />
||Id (Integer)<br />
||Id of the Project.<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last modified the Project.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the Project was last modified (refers to the project name, description and parent, not the contents of the project).<br />
|-<br />
||Name (String)<br />
||Name of the Project.<br />
|-<br />
||Models (Model*)<br />
||Models that are in the Project.<br />
|-<br />
||Parent (Project)<br />
||Parent project, i.e. a Project where the Project is located in the hierarchy of Projects. Returns ''null'' for root level Projects. Throws an error if user doesn't have access to the parent project.<br />
|-<br />
||ParentProjectId (Integer)<br />
||Parent project id. Returns ''null'' for root level Projects. The parent project id is returned even if user doesn't have access to the parent project.<br />
|-<br />
||Scripts (Script*)<br />
||Scripts that are in the Project.<br />
|-<br />
||Secrets (Dictionary*)<br />
||Returns array of all [[Storing_Secrets_for_Scripts|secrets]] in the project as Dictionary with following properties:<br />
* '''Name''' (string): Name of the secret.<br />
* '''Type''' (string): Type of the secret which is one of the following: "odbc", "sap", "salesforce".<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Project functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||CreateDashboard (Dashboard)<br />
||Parameters dictionary<br />
||Creates a dashboard to the project. ''EditDashboards'' permission to the project is required. The parameter is dictionary with following supported dashboard properties:<br />
* '''Name''' (String): Name of the dashboard.<br />
* '''Identifier''' (String): Identifier of the dashboard.<br />
* '''Description''' (String): Description of the dashboard.<br />
* '''Content''' (Dictionary): Content of the dashboard.<br />
<br />
Example: Create empty dashboard.<br />
<pre><br />
ProjectById(1)<br />
.CreateDashboard(#{<br />
"Name": "My dashboard",<br />
"Identifier": "MyDashboard"<br />
});<br />
</pre><br />
<br />
Example: Create dashboard with a chart.<br />
<pre><br />
ProjectById(1)<br />
.CreateDashboard(#{<br />
"Name": "My dashboard",<br />
"Content": #{<br />
"version": 4,<br />
"typeName": "View",<br />
"name": "My dashboard",<br />
"subElements": [<br />
#{<br />
"position": #{<br />
"x": 0,<br />
"y": 0,<br />
"width": 0.5,<br />
"height": 0.5,<br />
"zOrder": 0<br />
},<br />
"element": #{<br />
"typeName": "Chart",<br />
"configuration": #{<br />
"root": #{<br />
"expressionType": "Cases",<br />
"expressionParameters": #{}<br />
},<br />
"measures": [#{<br />
"expressionType": "Count",<br />
"expressionParameters": #{}<br />
}]<br />
}<br />
}<br />
}<br />
]<br />
}<br />
});<br />
</pre><br />
|-<br />
||<span id="CreateDatatable">CreateDatatable</span> (Datatable)<br />
||<br />
* Parameters dictionary<br />
||Creates datatable to the project. After creation, there are no columns or rows in the datatable. The function returns the created datatable entity. Following properties can be set for the datatable:<br />
* '''Name''' (string): Name of the datatable. This parameter is mandatory.<br />
* '''Description''' (string): Description for the datatable. This parameter is optional.<br />
* '''NameInDataSource''' (string): Table name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''SchemaNameInDataSource''' (string): Schema name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''DatabaseNameInDataSource''' (string): Database name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''Type''' (string): Defines where the data for the datatable is located. Available values are '''Snowflake''', '''SqlServer''', and '''Local'''. This parameter is optional and default value is defined by the [[PA_Configuration_database_table#General_Settings|DefaultDataSource]] setting.<br />
* '''Connection''': Connection object for the datatable. This parameter is optional.<br />
<br />
Example: Create a new datatable:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable"<br />
});<br />
</pre><br />
<br />
Example: Create Snowflake datatable linked to a custom table:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable",<br />
"Description": "My description",<br />
"NameInDataSource": "MyTable",<br />
"SchemaNameInDataSource": "MySchema",<br />
"DatabaseNameInDataSource": "MyDatabase",<br />
"Type": "Snowflake"<br />
});<br />
</pre><br />
<br />
Example: Create Snowflake datatable where connection string is stored as a [[Storing_Secrets_for_Scripts|secret]]:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable",<br />
"Type": "Snowflake",<br />
"Connection": ProjectById(1).CreateSnowflakeConnection(#{ "OdbcConnectionStringKey": "MyKey" })<br />
});<br />
</pre><br />
|-<br />
||CreateModel (Model)<br />
||<br />
* Parameters dictionary<br />
||Creates a model to a project. Requires ''GenericWrite'' permission for the Project and global ''CreateModel'' permission. If a model with that name already exists, an exception is thrown.<br />
<br />
Parameters dictionary has the following properties:<br />
* '''Name''': Name of the model. This property is mandatory.<br />
* '''Description''': Description of the model. This property is optional.<br />
* '''Configuration''': Configuration dictionary for the model. This property is technically optional, but a working model requires at least datasource settings to be defined.<br />
<br />
Example:<br />
<pre><br />
ProjectById(1).CreateModel(#{ <br />
"Name": "My model",<br />
"Description": "My description",<br />
"Configuration": {<br />
"DataSource": {<br />
"Cases": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My cases datatable",<br />
"Columns": {<br />
"CaseId": "Case Name"<br />
}<br />
},<br />
"Events": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My events datatable",<br />
"Columns": {<br />
"CaseId": "Case Name",<br />
"EventType": "Event Type",<br />
"Timestamp": "Start Time"<br />
}<br />
}<br />
}<br />
}<br />
});<br />
</pre><br />
|-<br />
||DatatableByName (Datatable)<br />
||Datatable name (String)<br />
||<br />
Returns Datatable by its name located in the project. Returns null, if Datatable with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).DatatableByName("MyDatatable1")<br />
</pre><br />
<br />
Example: Get datatable by name, and create it if it doesn't exist:<br />
<pre><br />
let project = ProjectById(123);<br />
let datatableName = "MyDatatable1";<br />
let datatable = project.DatatableByName(datatableName);<br />
if (datatable == null) {<br />
datatable = project.CreateDatatable(datatableName);<br />
}<br />
</pre><br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||Deletes the Project permanently. Note that the Project doesn't need to be in the recycle bin to be able to delete it permanently.<br />
|-<br />
||Restore<br />
||(none)<br />
||Restores the Project from the recycle bin back to the original location.<br />
|-<br />
||ModelByName (Model)<br />
||Model name (String)<br />
||<br />
Returns Model by its name located in the project. Returns null, if Model with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).ModelByName("My Model 1")<br />
</pre><br />
|-<br />
||ScriptByName (Script)<br />
||Script name (String)<br />
||<br />
Returns Script by its name located in the project. Returns null, if Script with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).ScriptByName("MyScript1")<br />
</pre><br />
|-<br />
||<span id="SetSecret">SetSecret</span><br />
||<br />
# Secret type (string)<br />
# Secret name (string)<br />
# Secret value (string)<br />
||Sets or adds a [[Storing_Secrets_for_Scripts|secret]] for the project. Setting the secret value to ''null'' removes the secret. There can be several secrets with the same name in the same project if the type of the secret is different. Setting secrets requires the project specific ''ManageProject'' permission.<br />
<br />
Parameters:<br />
# '''Type''' (string): Secret type which is one of the following:<br />
#* "odbc": ODBC connection string (e.g., to extract data, or load a model directly)<br />
#* "externaldatatableconnection": ODBC connection string used for a datatable<br />
#* "sap": SAP password<br />
#* "salesforce": Salesforce password<br />
# '''Name''' (string): Secret name, used to refer to the secret in the commands.<br />
# '''Value''' (string): Secret value which contains the confidential information.<br />
<br />
Example: Set SAP password:<br />
<pre><br />
ProjectById(1).SetSecret("sap", "MySapPassword", "I l0ve 5AP!");<br />
</pre><br />
<br />
Example: Remove SAP password:<br />
<pre><br />
ProjectById(1).SetSecret("sap", "MySapPassword", null);<br />
</pre><br />
|}<br />
<br />
Function to get Project by id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ProjectById<br />
||Project id (Integer)<br />
||<br />
Returns project object corresponding to the provided project id.<br />
|-<br />
||ProjectByName<br />
||Project name (String)<br />
||<br />
Returns project object by given project name. If there is no such project or user doesn't have access to it, ''null'' value is returned. If there are multiple projects with the same name, one of them is returned.<br />
<br />
Example:<br />
<pre><br />
let project = ProjectByName("My Project");<br />
</pre><br />
|}<br />
<br />
== Script ==<br />
Scripts are entities that contain executable code, that can be run. Usually scripts contains ETL routines but also other kind of tasks are possible.<br />
<br />
{| class="wikitable"<br />
!'''Script properties'''<br />
! '''Description'''<br />
|-<br />
||Code (String)<br />
||Script code.<br />
|-<br />
||CreatedBy (User)<br />
||User who created the Script.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the Script was created.<br />
|-<br />
||CurrentRunStart (DateTime)<br />
||Timestamp of the current run start. Null if the script is currently not running.<br />
|-<br />
||Description (String)<br />
||Description of the Script.<br />
|-<br />
||Id (Integer)<br />
||Id of the Script.<br />
|-<br />
||Language (String)<br />
||Either of the following scripting language: '''Expression''' or '''SQL'''. When language is Expression, the script is run as an expression script, and when language is SQL, the script is run as an SQL script (using the sandbox database).<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last modified the Script.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the Script was last modified.<br />
|-<br />
||LastRunEnd (DateTime)<br />
||Timestamp of the last completed script run end (either successful completion or failure). Null if the Script hasn't been run yet.<br />
|-<br />
||LastRunResult (String)<br />
||Result of the last run. Options are:<br />
* '''Completed''': The last run was completed successfully.<br />
* '''Failed''': An error occurred during the last run, so likely the script did not complete as intended.<br />
* '''Aborted''': Script run was manually stopped prematurely by a user, so the script did not proceeded in the end.<br />
<br />
Null if the Script hasn't been run yet.<br />
|-<br />
||LastRunStart (DateTime)<br />
||Timestamp of the last completed script run start time. Null if the Script hasn't been run yet.<br />
|-<br />
||Name (String)<br />
||Name of the Script.<br />
|-<br />
||OperationId (Integer)<br />
||Id of the operation which runs the Script. Null if the script is currently not running.<br />
|-<br />
||Project (Project)<br />
||Project where the Script is located. Null if the script is in the global context.<br />
|-<br />
||ProjectId (Integer)<br />
||Id of the project where the Script is located. Null if the script is in the global context.<br />
|-<br />
||Status (String)<br />
||Current status of the script. Options are:<br />
* '''Ready''': Script is not running. In this status, the script can be started (changing the status to ''Running'').<br />
* '''Running''': Script is running. In this status, the script can be stopped (changing the status to ''Stopping''). Calling stop just requests a script to stop, and the actual stopping occurs some time later.<br />
* '''Stopping''': Script has been requested to be stopped, but it's still running. In this status, neither start nor stop can be called for the script. When the script eventually stops, its status changes to ''Ready''.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Script functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||Run (Object)<br />
||Dictionary of parameters<br />
||<br />
Runs the script using the provided parameters. The parameters are available in the script as variables (see the example). Any type of variables can be passed to the script. Note that if the script assumes certain variables, but that they are not passed to the script, the script run will throw an error. <br />
<br />
For SQL scripts, the passed parameters are available in the script as variables in format '''@_parameter_<ParameterName>''' where <ParameterName> is the name of the parameter, e.g. ''parameter_myParameter1''. Only string type of parameters can be used, so any other type of data in parameter values is converted into strings.<br />
<br />
The return value of the script is returned by the Run function. Expression scripts return a value with the ''return'' statement or alternatively the result of the last line of the script is the return value. If the script does not return any value, the Run function returns ''_empty''. For SQL scripts, the return value is the last dataset produced by the script (returned as a DataFrame) (SQL scripts might create several datasets using the ''--#ShowReport'' command or the ''Show'' parameter).<br />
<br />
When a script is called using the Run function, the called script status does not change, because it's the parent script that is ''Running''. Also the called script log is not filled, but instead the logging goes to the calling script.<br />
<br />
It's possible to call a script using the Run function several times simultaneously.<br />
<br />
If there is an error when running the called script, the Run function throws the error to the calling script.<br />
<br />
Scripts are run in the script entity context, so for example the following properties are available:<br />
* Id: Script id<br />
* Name: Script name<br />
* Project.Id: Project id where the script is located<br />
* Project.Name: Name of the project where the script is located<br />
<br />
Example: Following script (id 123) raises a specified number to a specified power:<br />
<pre><br />
return Pow(numberToRaise, exponent);<br />
</pre><br />
<br />
The script can be called as follows (returning 16):<br />
<pre><br />
let runResult = ScriptById(123).Run(#{<br />
"numberToRaise": 4,<br />
"exponent": 2<br />
})<br />
</pre><br />
|-<br />
||Start<br />
||Dictionary of parameters<br />
||Starts the script. The function call doesn't wait for the script run to complete (i.e., asynchronous behavior) which is sane as starting the script in the [[Managing_Scripts#Starting_Script|Workspace]].<br />
<br />
Parameters to the script can be provided as a dictionary of name-value pairs (which is not possible when script is started in the Workspace). Return value is the script run id (integer) if the script was started. If the script was already running, return value is ''null''.<br />
<br />
Example: Start script (without parameters) and store the script run id:<br />
<pre><br />
let runId = ScriptById(1).Start();<br />
</pre><br />
<br />
Example: Start script with passing parameters:<br />
<pre><br />
ScriptById(1).Start(#{<br />
"variable1": "val1",<br />
"variable2": 5<br />
});<br />
</pre><br />
|-<br />
||Stop<br />
||<br />
||Stops the script. The operation doesn't wait for the stopping to complete (i.e., asynchronous behavior) which is same as stopping the script in the [[Managing_Scripts#Stopping_Script|Workspace]]. Depending on the operation that the script is performing, the stopping might take some time.<br />
<br />
Return value is the script run id (integer) if the script was running. If the script wasn't running, the return value is ''null''.<br />
<br />
Example:<br />
<pre><br />
let runId = ScriptById(1).Stop();<br />
</pre><br />
|}<br />
<br />
Function to get a script by the script id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ScriptById<br />
||<br />
* Script id (Integer)<br />
||<br />
Returns Script object corresponding to the given script id. If script with the given id doesn't exist or user doesn't have permissions to it, an error is given.<br />
|}<br />
<br />
== User/Group ==<br />
User objects represents users and user groups. Note that some properties can only be used for users and some for groups.<br />
<br />
{| class="wikitable"<br />
!'''User/group properties'''<br />
! '''Description'''<br />
|-<br />
||Description (String)<br />
||Description of the user.<br />
|-<br />
||Email (String)<br />
||Email address of the user.<br />
|-<br />
||FullName (String)<br />
||Full name of the user or group name.<br />
|-<br />
||GlobalPermissions (String*)<br />
||Array of global [[Roles and Permissions#Global_and_Project_Roles|permissions]] of the user. Global permissions come from the global roles assigned to the user and groups that the user belongs to. Note that to get the effective permissions for certain objects, also project specific permissions need to be taken into account.<br />
|-<br />
||GroupMemberNames (String*)<br />
||Array of names of members of a user group. This property is available for groups.<br />
|-<br />
||GroupMembers (User*)<br />
||Array of members of a user group. This property is available for groups.<br />
|-<br />
||GroupNames (String*)<br />
||Array of names of user groups the user belongs to. This property is available for users.<br />
|-<br />
||Groups (User*)<br />
||Array of user groups the user belongs to. This property is available for users.<br />
|-<br />
||HasPassword (Boolean)<br />
||Returns true if user has a password defined in QPR ProcessAnalyzer and thus user can authenticate using the password. If user doesn't have a password, the SAML authentication is the only way to log in. ''ManageUsers'' permission is needed to access this property for other users.<br />
|-<br />
||Id (Integer)<br />
||Id of the user, which is unique for every user.<br />
|-<br />
||IsActive (Boolean)<br />
||Returns true only if the user is active (not disabled).<br />
|-<br />
||IsGroup (Boolean)<br />
||Returns true if the user is a user group.<br />
|-<br />
||IsLocked (Boolean)<br />
||Returns true if user account is currently [[User_Session_Management#Preventing_password_guessing_attacks|locked]]. ''ManageUsers'' permission is needed to access this property.<br />
|-<br />
||LastLockedDate (DateTime)<br />
||Returns date when user account was locked the last time. Returns ''null'' if the user account has never been locked. ''ManageUsers'' permission is needed to access this property.<br />
|-<br />
||LastLoginDate (DateTime)<br />
||Returns date when the user made last successful login. ''ManageUsers'' permission is needed to access this property for other users.<br />
|-<br />
||Name (String)<br />
||Login name of the user or group.<br />
|-<br />
||Roles (Object**)<br />
||<br />
Returns all roles of the user (both global and project roles) as a nested array structure.<br />
<br />
Example:<br />
<pre><br />
ToJson(Users.Where(name == "qpr").Roles)<br />
Returns (for example):<br />
[<br />
[{"calcId": "Project:1"}, "Administrator"],<br />
[{"calcId": "Project:2"}, "Analyzer"],<br />
[{"calcId": "Project:3"}, "Viewer"],<br />
[null, "RunScripts"],<br />
[null, "Administrator"]<br />
]<br />
</pre><br />
|}<br />
<br />
{| class="wikitable"<br />
!'''User/group functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||EffectivePermissionsFor (String Array)<br />
||<br />
* Project to get permissions<br />
||<br />
Returns effective (actual) permission of the user to the given project. Project is given as a [[#Project|project object]] (not as a project id). Effective permissions determine the actual permissions that the user has, i.e. a combination of all permissions assigned to the user and groups the user belong to, including both project specific and global roles.<br />
<br />
Permissions for the EffectivePermissionsFor function are as follows:<br />
* All users can query their own permissions<br />
* To get permissions for any user, the user needs to have [[Roles_and_Permissions|ManageUsers permission]].<br />
<br />
Note that ''inactive'' users don't have any effective permissions, so the EffectivePermissionsFor function does not return any permissions for those users.<br />
<br />
Examples:<br />
<pre><br />
EffectivePermissionsFor(ModelById(1234).Project)<br />
Returns (for example): ["EditDashboards", "Filtering", "GenericRead"]<br />
</pre><br />
|-<br />
||GetAttribute<br />
||<br />
||<br />
Returns user attribute value by given attribute name and optionally by the model/project/dashboard context. Supported data types are String, Integer, Float, and DateTime. To store more complex data types, data can be converted into json and stored as string. If the attribute doesn't exist, null is returned.<br />
<br />
For example, if using dashboard as context, the attributes are effectively bound to each user and each dashboard separately. Thus, there can be several attributes with the same name as long as the dashboard is different.<br />
<br />
Parameters:<br />
# '''Attribute name''' (String): Name of the attribute.<br />
# '''Attribute context''' (Project/Model/Dashboard): Optional context object the attribute is linked to.<br />
<br />
Users have permissions to get attributes for themselves, and also (administrator) users with global ''ManageUsers'' permission can get attributes for all users. In addition, if using the context object, the ''GenericRead'' permission is required for the context object.<br />
<br />
Example: Get user attribute MyDataValue for myself:<br />
<pre><br />
CurrentUser<br />
.GetAttribute("MyDataValue");<br />
</pre><br />
<br />
Example: Get user attribute MyDataValue for user John:<br />
<pre><br />
Users<br />
.Where(Name=="John")<br />
.GetAttribute("MyDataValue");<br />
</pre><br />
<br />
Example: Get user attribute MyDataValue for user 1 related to dashboard id 1:<br />
<pre><br />
UserById(1)<br />
.GetAttribute("MyDataValue", DashboardById(1));<br />
</pre><br />
|-<br />
||SetAttribute<br />
||<br />
||<br />
Sets user attribute value for given attribute name and optionally for the model/project/dashboard context. Supported data types are String, Integer, Float, and DateTime. To store more complex data types, data can be converted into json and stored as string. If setting value ''null'', the user attribute is removed. Required permissions are same as in the GetAttribute function.<br />
<br />
Parameters:<br />
# '''Attribute name''' (String): Name of the attribute.<br />
# '''Attribute value''' (String/Integer/Float/DateTime): Attribute value to be stored.<br />
# '''Attribute context''' (Project/Model/Dashboard): Optional context object the attribute value is linked to.<br />
<br />
Example: Set user attribute MyDataValue for myself:<br />
<pre><br />
CurrentUser<br />
.SetAttribute("MyDataValue ", "value");<br />
</pre><br />
<br />
Example: Set value 123 as user attribute MyDataValue for user John:<br />
<pre><br />
Users<br />
.Where(Name=="John")<br />
.SetAttribute("MyDataValue", 123);<br />
</pre><br />
<br />
Example: Set current time as user attribute MyDataValue for user 1 related to dashboard id 1:<br />
<pre><br />
UserById(1)<br />
.GetAttribute("MyDataValue", Now, DashboardById(1));<br />
</pre><br />
|}<br />
<br />
Function to get User by user id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||UserById<br />
||<br />
* User id (Integer)<br />
||<br />
Returns User object corresponding to the provided user id.<br />
|}</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=Managing_Scripts&diff=24504Managing Scripts2024-03-28T15:12:35Z<p>Ollvihe: /* Running Script */</p>
<hr />
<div>In QPR ProcessAnalyzer, scripts can be used for ETL tasks and to automate routines. Scripts are managed in the [[QPR_ProcessAnalyzer_Project_Workspace|Project Workspace]].<br />
<br />
=== Running vs. Calling Scripts ===<br />
''Running'' a script means starting executing a stored script, which can be done in the UI or using the ScriptLauncher. A script can also ''call'' other scripts during the run. The differences between the running and calling are:<br />
* Script can run only once at a time, whereas there are no limitations on how many times a script can be called at the same time<br />
* Script log is written to the running script. No script log is written to the called script.<br />
* Script status shows whether the script is being run or not. The status does not change, when a script is called from other script.<br />
<br />
When a script is running, it's not possible to start another run of the same script, so the first run needs to end to start new. Scripts can call other scripts and a called scripts can run multiple times simultaneously. In the stack of called scripts, the script log is generated to the top level script. Also the top level script shows that it's running and the called scripts do not.<br />
<br />
=== Scripts List ===<br />
When selecting a project and opening the '''Scripts''' tab, all scripts in the project can be seen. Scripts list shows following information:<br />
* '''Name''': Name of the script.<br />
* '''Status''': Status of the script, which is one of following: ''Ready'', ''Running'' or ''Stopping''. For more information about script statuses, see below.<br />
* '''Last run duration''': Duration of the last ended run of the script (the last run result can be any).<br />
* '''Last run date''': Date and time when the last run ended. If you need to know the last run start time, subtract the ''Last run duration'' from this time.<br />
* '''Last run result''': Result of the last run of the script. Either of following: ''Completed'', ''Failed'' or ''Aborted''. For more information about last run results, see below.<br />
* '''Id''': Script id that uniquely identifies the script in the system.<br />
<br />
Scrips are in either of following statuses:<br />
* '''Ready''': Script is currently not running, and can be started.<br />
* '''Running''': Script is currently running, and the script can be stopped. When a script is running, another run of the same script cannot be started.<br />
* '''Stopping''': Script is currently being stopped. When a script is in this status, the script cannot be started nor stopped, so you need to wait for the script to stop. There may be a delay in stopping a script, depending on the operation currently performed by the script.<br />
<br />
The last script run result can be either of the following:<br />
* '''Completed''': The last run ended successfully, i.e. without any errors or exceptions. Note that despite of the technically successful run, the script might still not work as intended.<br />
* '''Failed''': The last run ended to an error or exception. To see more information about the reason of the failure, see the [[#Viewing_Script_Log|last run log]].<br />
* '''Aborted''': The last run was stopped by a user, so the script did not run till the end.<br />
<br />
=== Editing Script ===<br />
Open the scripts editor as follows:<br />
# On the left side projects hierarchy, select the project where the script is located.<br />
# Open the '''Scripts''' tab.<br />
# Select the script and in the right-click context menu select '''Edit'''. Alternatively, you can hover the script and click the ''Edit'' button in the end of the row.<br />
<br />
The script editor can show multiple scripts in the tabs, allowing to easily switch between the scrips. The editor remembers all scripts that have been opened during the session.<br />
<br />
In the script editor, you can:<br />
* Run the script by clicking the '''Run''' button.<br />
* Stop a running script by clicking the '''Stop''' button.<br />
* Save a script having unsaved changes by clicking the '''Save''' button.<br />
* To run a script having unsaved changes, click the '''Save and Run''' button. Note that the script needs to be saved to run it.<br />
* To go back to the list of scripts, click the '''Go back''' button. If there are unsaved changes in any of the opened scripts, you need to either save or cancel the changes.<br />
* To close a script, click the ''Close'' button for the tab showing the script. If there are unsaved changes, you need to either save or cancel changes.<br />
<br />
=== Starting Script ===<br />
# On the left side projects hierarchy, select the project where the script is located.<br />
# Open the '''Scripts''' tab.<br />
# Select the script and in the right-click context menu select '''Run'''. Alternatively, you can hover the script and click the ''Run'' button in the end of the row.<br />
<br />
Note that when running a script in the UI, the script must not contain commands where ''ExecuteInClientSide'' is enabled, because that is only supported when running scripts using [[QPR_ProcessAnalyzer_ScriptLauncher|QPR ScriptLauncher]].<br />
<br />
=== Stopping Script ===<br />
# On the left side projects hierarchy, select the project where the script is located.<br />
# Open the '''Scripts''' tab.<br />
# Select the script and from the right-click context menu select '''Stop'''. Alternatively, you can hover the script and click the ''Stop'' button in the end of the row.<br />
<br />
Note that it may take a while for a script to actually stop, depending on what kind of operation the script is executing when it's stopped.<br />
<br />
=== Viewing Script Log ===<br />
It's possible to see the script log of the last run, and monitor the currently running script progress. Logs for older runs are not available in the UI, nut they are stored by the system.<br />
<br />
To see the logs:<br />
# On the left side projects hierarchy, select the project where the script is located.<br />
# Open the '''Scripts''' tab.<br />
# Select the script and in the right-click context menu select either '''View last run log''' or '''View current run log'''. (The script needs to be running to open the current run log.)<br />
# If keeping the current run log open, the latest log entries are updated automatically every two seconds.<br />
<br />
More information about [[QPR_ProcessAnalyzer_Logs#Script_Log|Script Log]].<br />
<br />
=== Creating Script ===<br />
# On the left side projects hierarchy, select the project where you want to create a script.<br />
# Open the '''Scripts''' tab.<br />
# Click the '''New''' button and click '''Script'''. Define a name for the script and the scripting '''Language''' (either '''Expression''' or '''SQL'''), and then click '''Create'''. Note that script names must be unique within a project.<br />
<br />
Note that the scripting language cannot be changed after the script has been created, so a new script needs to be created to change the language.<br />
<br />
=== Deleting Script ===<br />
# Select the project where the script(s) to be deleted are located.<br />
# Open the '''Scripts''' tab.<br />
# Select one or several scripts to be deleted.<br />
# Click the '''Delete''' button and click '''Delete''' to the confirmation message.<br />
<br />
Note that if the script is being run, it cannot be deleted.<br />
<br />
=== Renaming Script ===<br />
# Select the project where the script to be renamed is located.<br />
# Open the '''Scripts''' tab.<br />
# Select the script to be renamed.<br />
# Click the '''Rename''' button.<br />
# Change the script name in the opening dialog and click '''OK'''.<br />
<br />
=== Moving Script ===<br />
Scripts can be moved by dragging them with the left mouse button from the right side list to the target project in the left side hierarchy. Alternatively, you can first select the scripts, then from the right-click context menu select '''Move to''' and finally select the target project.<br />
<br />
=== Duplicating Script ===<br />
# Select the project where the script to be duplicated is located.<br />
# Open the '''Scripts''' tab.<br />
# Select the script to be duplicated.<br />
# Click the '''Duplicate''' button. A duplicate of the script is created.<br />
<br />
=== Viewing Script Run Results ===<br />
Script runs can be [[Managing_Scripts#Running_Script|started]] and [[Managing_Scripts#Stopping_Script|stopped]] in the UI. Note that when running scripts using the UI, return values or results of the script cannot be viewed. If you want to use scripts that return data, there are following options:<br />
* Script can write data to the script log<br />
* Script can write data to a datatable<br />
* Script can be called from a dashboard and use the dashboard to present the returned data (see more below).</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Objects_in_Expression_Language&diff=24503QPR ProcessAnalyzer Objects in Expression Language2024-03-28T15:12:01Z<p>Ollvihe: /* Script */</p>
<hr />
<div>==Filter==<br />
Filters contain a set of filter rules used to filter cases and events in models. Filters are objects located in the models. Filters are owned by the creator user, and when a filter publish mode is private, only the creator can use it.<br />
<br />
{| class="wikitable"<br />
!'''Filter properties'''<br />
! '''Description'''<br />
|-<br />
||CreatedBy (User)<br />
||Returns the user who created the filter.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Returns date when the filter created date.<br />
|-<br />
||Description (String)<br />
||Returns description of the filter.<br />
|-<br />
||Id (Integer)<br />
||Returns id of the filter.<br />
|-<br />
||LastModifiedBy (User)<br />
||Returns user who modified the filter.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Returns date when the filter last modified.<br />
|-<br />
||Model<br />
||Returns model where the filter belongs to.<br />
|-<br />
||ModelId (Integer)<br />
||Returns model where the filter belongs to.<br />
|-<br />
||Name (String)<br />
||Returns the name of the filter.<br />
|-<br />
||Project<br />
||Returns project where the filter belongs to.<br />
|-<br />
||ProjectId (Integer)<br />
||Returns project id where the filter belongs to.<br />
|-<br />
||PublishMode (String)<br />
||Returns publish mode of the filter, one of the following: '''Private''', '''Public''', or '''Default'''.<br />
|-<br />
||Rules (Dictionary)<br />
||Returns a dictionary containing the filter rules in the filter.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Filter Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||<br />
Deletes the filter permanently. To delete own filters, the '''Filtering''' permission is needed, and to delete any filters the '''ManageViews''' permission is needed.<br />
|-<br />
||Modify<br />
||Dictionary<br />
||<br />
Modifies filter properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: ''Name'', ''Description'', ''PublishMode'', and ''Rules''.<br />
<br />
The function returns the updated filter object. Requires ''GenericWrite'' permission for the Project and global ''CreateModel'' permission.<br />
<br />
Example:<br />
<pre><br />
FilterById(1)<br />
.Modify(#{<br />
"Name": "My filter",<br />
"Description": "My description",<br />
"PublishMode": "Public",<br />
"Rules": #{<br />
"Items": [<br />
#{<br />
"Type": "IncludeCases",<br />
"Items": [<br />
#{<br />
"Type": "CaseAttributeValue",<br />
"Attribute": "Account Manager",<br />
"StringifiedValues": [<br />
"0Mary Wilson"<br />
]<br />
}<br />
]<br />
}<br />
]<br />
}<br />
}<br />
)<br />
</pre><br />
|}<br />
<br />
Function to get filter id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||FilterById<br />
||<br />
* Filter id (Integer)<br />
||<br />
Returns Filter object corresponding to the provided filter id.<br />
|}<br />
<br />
==Model==<br />
Notes:<br />
* For in-memory models that are offline, the object counts represent the situation when the model was last time online (loaded into the memory). ''null'' is returned if the model has never been loaded into the memory.<br />
* If [[Case_Level_Permissions|Case permissions]] are used for the model, and user doesn't have '''GenericWrite''' permission for the model, ''null'' is returned for data security reasons. Users that have the '''GenericWrite''' permission, see null when the model is offline, and when online, they see counts where the case level permissions settings are applied.<br />
* Properties ''CaseAttributes'', ''EventAttributes'' and ''Eventlog'' work only for the in-memory models and they require the model to be loaded into the memory. If the model is not in the memory, it is loaded when these properties is used. Other model properties down require the model to be in the memory.<br />
<br />
{| class="wikitable"<br />
!'''Model properties'''<br />
! '''Description'''<br />
|-<br />
||Calendars (BusinessCalendar*)<br />
||<br />
Returns all [[Business_Calendar|business calendars]] stored to the Model as an array. Returns an empty array, if there are no business calendars stored to the model. Note: UI allows to set only one business calendar for a Model.<br />
|-<br />
||CaseAttributes (AttributeType*)<br />
||[[#AttributeType|CaseAttributes]] in the model returned in the alphabetical order. Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||CasesDatatable (Datatable)<br />
||Returns the Datatable the model uses as a datasource for cases. Returns ''null'' if the cases Datatable is not defined or if model uses other than the Datatable datasource.<br />
|-<br />
||Configuration (Dictionary)<br />
||Returns the Model configuration as dictionary. Example:<br />
<pre><br />
ModelById(123).Configuration.DataSource.Events.DataTableName<br />
</pre><br />
|-<br />
||ConfigurationJson (String)<br />
||Returns the Model configuration as JSON string.<br />
|-<br />
||CreatedBy (User)<br />
||User who created the model.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the model was created.<br />
|-<br />
||DefaultCalendar (BusinessCalendar)<br />
||Returns the default [[Business_Calendar|business calendar]] of the Model. Returns ''null'', if there are no calendars in the Model or no calendar has been set as a default calendar. Note: UI allows to set only one business calendar for a Model, which is also the default calendar.<br />
|-<br />
||DefaultFilter (Filter)<br />
||Default filter of the model. Returns ''null'' if the model does not have a default filter.<br />
|-<br />
||DefaultFilterId (Integer)<br />
||Default filter id of the model. Returns ''null'' if the model does not have a default filter.<br />
|-<br />
||Description (String)<br />
||Model description. The model description may contain line breaks.<br />
|-<br />
||DeletedDate (DateTime)<br />
||Timestamp when Model was deleted (moved to the recycle bin).<br />
|-<br />
||DeletedBy (User)<br />
||User how deleted the Model.<br />
|-<br />
||Diagrams (Diagram*)<br />
||Returns an array of all [[Diagram_in_Expression_Language|diagrams]] in the model.<br />
|-<br />
||EstimatedMemory (Integer)<br />
||Returns an estimation of how much memory in bytes the model requires.<br />
|-<br />
||EventsDatatable (Datatable)<br />
||Returns the Datatable the model uses as a datasource for events. Returns ''null'' if the events Datatable is not defined or if model uses other than the Datatable datasource.<br />
|-<br />
||EventAttributes (AttributeType*)<br />
||[[#AttributeType|EventAttributes]] in the model returned in the alphabetical order. Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||EventLog (EventLog)<br />
||EventLog containing the entire model (i.e. event log where no filters have been applied). Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||Filters (Filter*)<br />
||Returns an array of all [[#Filter|filters]] in the model.<br />
|-<br />
||Id (Integer)<br />
||Model Id. Model Id is generated by QPR ProcessAnalyzer when the model is created.<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last time modified the model properties. Note that datatables containing the eventlog data are separate objects having similar fields to track the last modification and last data import.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the model was modified the last time.<br />
|-<br />
||Name (String)<br />
||Model name.<br />
|-<br />
||NCache (Integer)<br />
||Number of objects related to the model when the model is loaded into the memory.<br />
|-<br />
||NCaseAttributes (Integer)<br />
||Number of [[#AttributeType|CaseAttributes]] in model. Works only for in-memory models.<br />
|-<br />
||NCases (Integer)<br />
||Number of [[#Case|Cases]] in the model. Works only for in-memory models.<br />
|-<br />
||NEventAttributes (Integer)<br />
||Number of [[#AttributeType|EventAttributes]] in model. Works only for in-memory models.<br />
|-<br />
||NEvents (Integer)<br />
||Number of [[#Event|Events]] in model. Works only for in-memory models.<br />
|-<br />
||NEventTypes (Integer)<br />
||Number of [[#EventType|EventTypes]] in the model. Works only for in-memory models.<br />
|-<br />
||NOpens (Integer)<br />
||Number of times analysis has been requested from the model.<br />
|-<br />
||Project (Project)<br />
||[[#Project|Project]] where the model belongs to.<br />
|-<br />
||ProjectId (Integer)<br />
||[[#Project|Project]] id where the model belongs to.<br />
|-<br />
||Status (String)<br />
||<br />
Memory availability status of the model. There are the following statuses:<br />
* '''Loading''': The model is currently loading into the memory. When the loading is ready, the status changes to ''online''. If the loading fails, the status changes to ''offline''.<br />
* '''Offline''': The model is currently not loaded into the memory. The model needs to be loaded into the memory, so that analyses can be calculated from the model (occurs automatically when an analysis is requested).<br />
* '''Online''': The model is in the memory and ready for analysis calculation. If the model is dropped from the memory, its status changes to ''offline''.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Model Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||CalendarByName (BusinessCalendar)<br />
||<br />
name (String)<br />
||<br />
Returns a [[Business_Calendar|business calendar]] stored to the Model by the name of the calendar. Business calendars can be stored to models in the model properties. Returns ''null'', if a calendar with the provided name is not stored to the model.<br />
<br />
Examples:<br />
<pre><br />
ModelById(123).CalendarByName("MyCalendar")<br />
</pre><br />
|-<br />
||CreateDiagram (Diagram)<br />
||Parameters dictionary<br />
||<br />
Creates a [[Diagram_in_Expression_Language|diagram]] to the model. Parameters is a dictionary containing diagram properties. Following properties are available:<br />
* '''Name''' (string): Diagram name that distinguishes diagrams in a model.<br />
* '''Description''' (string): Diagram description text.<br />
* '''Content''' (dictionary): Diagram content as dictionary.<br />
<br />
Example:<br />
<pre><br />
ModelById(1)<br />
.CreateDiagram(#{<br />
"Name": "My diagram",<br />
"Description": "This is my new diagram",<br />
"Content": #{ ... },<br />
})<br />
</pre><br />
|-<br />
||CreateFilter (Filter)<br />
||Parameters dictionary<br />
||Creates a filter to a model. Requires ''GenericWrite'' permission for the project and global ''CreateModel'' permission. If a filter with that name already exists in the model, an exception is thrown.<br />
The parameters dictionary may have the following properties:<br />
* '''Name''': Name of the filter. This property is mandatory.<br />
* '''Description''': Description of the filter. This property is optional.<br />
* '''Rules''': Filter rules for the filter defined as a dictionary according to the [[Filtering_in_QPR_ProcessAnalyzer_Queries|filter json format]]. This property is mandatory.<br />
* '''PublishMode''': Publish mode of the filter which is one of the following: ''Private'', ''Public'' or ''Default''. This property is optional, and the default value is ''Private''.<br />
<br />
Example:<br />
<pre><br />
let newFilter = modelById(1).CreateFilter(#{ <br />
"Name": "My Filter",<br />
"Rules": #{<br />
"Items": [#{<br />
"Type": "IncludeCases",<br />
"Items": [#{<br />
"Type": "CaseAttributeValue",<br />
"Attribute": "Account Manager",<br />
"StringifiedValues": [ "0Robert Miller" ]<br />
}]<br />
}]<br />
},<br />
"PublishMode": "Public"<br />
});<br />
}<br />
</pre><br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||Deletes the Model permanently. The model doesn't need to be in the recycle bin to be able to delete it permanently.<br />
|-<br />
||Modify (Model)<br />
||Dictionary<br />
||<br />
Modifies model properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: ''Name'', ''Description'', ''ProjectId'', and ''Configuration''.<br />
<br />
The function returns the updated model object. Requires the ''GenericWrite'' permission for the project and the global ''CreateModel'' permission.<br />
<br />
Example:<br />
<pre><br />
ModelById(1)<br />
.Modify(#{<br />
"Name": "My model",<br />
"Description": "My description",<br />
"ProjectId": 2,<br />
"Configuration": #{<br />
"DataSource": #{<br />
"Cases": #{<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My cases datatable",<br />
"Columns": #{<br />
"CaseId": "Case Name"<br />
}<br />
},<br />
"Events": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My events datatable",<br />
"Columns": #{<br />
"CaseId": "Case Name",<br />
"EventType": "Event Type",<br />
"Timestamp": "Start Time"<br />
}<br />
}<br />
}<br />
}<br />
}<br />
)<br />
</pre><br />
|-<br />
||ResetPreprocessings<br />
||(none)<br />
||<br />
Removes all cached items related to the Model, e.g. preprocessings and calculation results. In practice, the Model is reset to a state where it was right after the model was loaded into memory.<br />
|-<br />
||Restore<br />
||(none)<br />
||Restores the Model from the recycle bin back to the original location.<br />
|-<br />
||<span id="ToSqlDataFrame">ToSqlDataFrame</span><br />
||In-memory dataframe<br />
||Converts an in-memory dataframe to an SQL dataframe. In practice, an SQL query is created from the in-memory dataframe and the query is executed in the datasource so that the data is available in the datasource for further SQL operations. This function is intended only to small amounts of data which is less than 16384 rows.<br />
<br />
Example: Select matching cases from events data using in-memory dataframe:<br />
<pre><br />
let model = ModelById(1);<br />
let dfEvents = model.EventsDatatable.SqlDataFrame;<br />
let inMemoryDf = ToDataFrame(<br />
[["1"], ["2"], ["3"]],<br />
[#{"Name": "id", "DataType": "String"}]<br />
);<br />
model.ToSqlDataFrame(inMemoryDf)<br />
.Join(dfEvents, ["id": "CaseId"])<br />
.SelectDistinct(["CaseId"])<br />
.Collect();<br />
</pre><br />
|-<br />
||<span id="TriggerNotifications">TriggerNotifications</span> (Boolean)<br />
||Notification names (String*)<br />
||Triggers the given notifications for the Model. Notifications are given by their names. Triggering means that the configured rules are run and notification emails are sent as defined by the rules. If the notification names parameter is not provided, all notifications in the Model are triggered.<br />
<br />
The function return ''true'' if any notification were triggered, otherwise ''false''.<br />
<pre><br />
ModelById(123).TriggerNotifications(["Notification 1", "Notification 2"]);<br />
Triggers notifications Notification 1 and Notification 2 in model id 123.<br />
<br />
ModelById(123).TriggerNotifications();<br />
Triggers all notifications in model id 123.<br />
</pre><br />
|}<br />
<br />
Function to get Model by model id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ModelById<br />
||<br />
* Model id (Integer)<br />
||<br />
Returns [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Model|Model]] object corresponding to the provided model id.<br />
|}<br />
<br />
== Project ==<br />
{| class="wikitable"<br />
!'''Project properties'''<br />
! '''Description'''<br />
|-<br />
||CreatedBy (User)<br />
||User who created the Project.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the Project was created.<br />
|-<br />
||Dashboards (Dashboard*)<br />
||Returns all [[Dashboard_in_Expression_Language|dashboards]] in the project.<br />
|-<br />
||Datatables (Datatable*)<br />
||Returns all Datatables in the project.<br />
|-<br />
||DeletedDate (DateTime)<br />
||Timestamp when the Project was deleted (moved to the recycle bin).<br />
|-<br />
||Description (String)<br />
||Project description. The project description may contain line breaks.<br />
|-<br />
||DeletedBy (User)<br />
||User who deleted the Project (moved to the recycle bin).<br />
|-<br />
||Id (Integer)<br />
||Id of the Project.<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last modified the Project.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the Project was last modified (refers to the project name, description and parent, not the contents of the project).<br />
|-<br />
||Name (String)<br />
||Name of the Project.<br />
|-<br />
||Models (Model*)<br />
||Models that are in the Project.<br />
|-<br />
||Parent (Project)<br />
||Parent project, i.e. a Project where the Project is located in the hierarchy of Projects. Returns ''null'' for root level Projects. Throws an error if user doesn't have access to the parent project.<br />
|-<br />
||ParentProjectId (Integer)<br />
||Parent project id. Returns ''null'' for root level Projects. The parent project id is returned even if user doesn't have access to the parent project.<br />
|-<br />
||Scripts (Script*)<br />
||Scripts that are in the Project.<br />
|-<br />
||Secrets (Dictionary*)<br />
||Returns array of all [[Storing_Secrets_for_Scripts|secrets]] in the project as Dictionary with following properties:<br />
* '''Name''' (string): Name of the secret.<br />
* '''Type''' (string): Type of the secret which is one of the following: "odbc", "sap", "salesforce".<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Project functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||CreateDashboard (Dashboard)<br />
||Parameters dictionary<br />
||Creates a dashboard to the project. ''EditDashboards'' permission to the project is required. The parameter is dictionary with following supported dashboard properties:<br />
* '''Name''' (String): Name of the dashboard.<br />
* '''Identifier''' (String): Identifier of the dashboard.<br />
* '''Description''' (String): Description of the dashboard.<br />
* '''Content''' (Dictionary): Content of the dashboard.<br />
<br />
Example: Create empty dashboard.<br />
<pre><br />
ProjectById(1)<br />
.CreateDashboard(#{<br />
"Name": "My dashboard",<br />
"Identifier": "MyDashboard"<br />
});<br />
</pre><br />
<br />
Example: Create dashboard with a chart.<br />
<pre><br />
ProjectById(1)<br />
.CreateDashboard(#{<br />
"Name": "My dashboard",<br />
"Content": #{<br />
"version": 4,<br />
"typeName": "View",<br />
"name": "My dashboard",<br />
"subElements": [<br />
#{<br />
"position": #{<br />
"x": 0,<br />
"y": 0,<br />
"width": 0.5,<br />
"height": 0.5,<br />
"zOrder": 0<br />
},<br />
"element": #{<br />
"typeName": "Chart",<br />
"configuration": #{<br />
"root": #{<br />
"expressionType": "Cases",<br />
"expressionParameters": #{}<br />
},<br />
"measures": [#{<br />
"expressionType": "Count",<br />
"expressionParameters": #{}<br />
}]<br />
}<br />
}<br />
}<br />
]<br />
}<br />
});<br />
</pre><br />
|-<br />
||<span id="CreateDatatable">CreateDatatable</span> (Datatable)<br />
||<br />
* Parameters dictionary<br />
||Creates datatable to the project. After creation, there are no columns or rows in the datatable. The function returns the created datatable entity. Following properties can be set for the datatable:<br />
* '''Name''' (string): Name of the datatable. This parameter is mandatory.<br />
* '''Description''' (string): Description for the datatable. This parameter is optional.<br />
* '''NameInDataSource''' (string): Table name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''SchemaNameInDataSource''' (string): Schema name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''DatabaseNameInDataSource''' (string): Database name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''Type''' (string): Defines where the data for the datatable is located. Available values are '''Snowflake''', '''SqlServer''', and '''Local'''. This parameter is optional and default value is defined by the [[PA_Configuration_database_table#General_Settings|DefaultDataSource]] setting.<br />
* '''Connection''': Connection object for the datatable. This parameter is optional.<br />
<br />
Example: Create a new datatable:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable"<br />
});<br />
</pre><br />
<br />
Example: Create Snowflake datatable linked to a custom table:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable",<br />
"Description": "My description",<br />
"NameInDataSource": "MyTable",<br />
"SchemaNameInDataSource": "MySchema",<br />
"DatabaseNameInDataSource": "MyDatabase",<br />
"Type": "Snowflake"<br />
});<br />
</pre><br />
<br />
Example: Create Snowflake datatable where connection string is stored as a [[Storing_Secrets_for_Scripts|secret]]:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable",<br />
"Type": "Snowflake",<br />
"Connection": ProjectById(1).CreateSnowflakeConnection(#{ "OdbcConnectionStringKey": "MyKey" })<br />
});<br />
</pre><br />
|-<br />
||CreateModel (Model)<br />
||<br />
* Parameters dictionary<br />
||Creates a model to a project. Requires ''GenericWrite'' permission for the Project and global ''CreateModel'' permission. If a model with that name already exists, an exception is thrown.<br />
<br />
Parameters dictionary has the following properties:<br />
* '''Name''': Name of the model. This property is mandatory.<br />
* '''Description''': Description of the model. This property is optional.<br />
* '''Configuration''': Configuration dictionary for the model. This property is technically optional, but a working model requires at least datasource settings to be defined.<br />
<br />
Example:<br />
<pre><br />
ProjectById(1).CreateModel(#{ <br />
"Name": "My model",<br />
"Description": "My description",<br />
"Configuration": {<br />
"DataSource": {<br />
"Cases": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My cases datatable",<br />
"Columns": {<br />
"CaseId": "Case Name"<br />
}<br />
},<br />
"Events": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My events datatable",<br />
"Columns": {<br />
"CaseId": "Case Name",<br />
"EventType": "Event Type",<br />
"Timestamp": "Start Time"<br />
}<br />
}<br />
}<br />
}<br />
});<br />
</pre><br />
|-<br />
||DatatableByName (Datatable)<br />
||Datatable name (String)<br />
||<br />
Returns Datatable by its name located in the project. Returns null, if Datatable with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).DatatableByName("MyDatatable1")<br />
</pre><br />
<br />
Example: Get datatable by name, and create it if it doesn't exist:<br />
<pre><br />
let project = ProjectById(123);<br />
let datatableName = "MyDatatable1";<br />
let datatable = project.DatatableByName(datatableName);<br />
if (datatable == null) {<br />
datatable = project.CreateDatatable(datatableName);<br />
}<br />
</pre><br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||Deletes the Project permanently. Note that the Project doesn't need to be in the recycle bin to be able to delete it permanently.<br />
|-<br />
||Restore<br />
||(none)<br />
||Restores the Project from the recycle bin back to the original location.<br />
|-<br />
||ModelByName (Model)<br />
||Model name (String)<br />
||<br />
Returns Model by its name located in the project. Returns null, if Model with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).ModelByName("My Model 1")<br />
</pre><br />
|-<br />
||ScriptByName (Script)<br />
||Script name (String)<br />
||<br />
Returns Script by its name located in the project. Returns null, if Script with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).ScriptByName("MyScript1")<br />
</pre><br />
|-<br />
||<span id="SetSecret">SetSecret</span><br />
||<br />
# Secret type (string)<br />
# Secret name (string)<br />
# Secret value (string)<br />
||Sets or adds a [[Storing_Secrets_for_Scripts|secret]] for the project. Setting the secret value to ''null'' removes the secret. There can be several secrets with the same name in the same project if the type of the secret is different. Setting secrets requires the project specific ''ManageProject'' permission.<br />
<br />
Parameters:<br />
# '''Type''' (string): Secret type which is one of the following:<br />
#* "odbc": ODBC connection string (e.g., to extract data, or load a model directly)<br />
#* "externaldatatableconnection": ODBC connection string used for a datatable<br />
#* "sap": SAP password<br />
#* "salesforce": Salesforce password<br />
# '''Name''' (string): Secret name, used to refer to the secret in the commands.<br />
# '''Value''' (string): Secret value which contains the confidential information.<br />
<br />
Example: Set SAP password:<br />
<pre><br />
ProjectById(1).SetSecret("sap", "MySapPassword", "I l0ve 5AP!");<br />
</pre><br />
<br />
Example: Remove SAP password:<br />
<pre><br />
ProjectById(1).SetSecret("sap", "MySapPassword", null);<br />
</pre><br />
|}<br />
<br />
Function to get Project by id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ProjectById<br />
||Project id (Integer)<br />
||<br />
Returns project object corresponding to the provided project id.<br />
|-<br />
||ProjectByName<br />
||Project name (String)<br />
||<br />
Returns project object by given project name. If there is no such project or user doesn't have access to it, ''null'' value is returned. If there are multiple projects with the same name, one of them is returned.<br />
<br />
Example:<br />
<pre><br />
let project = ProjectByName("My Project");<br />
</pre><br />
|}<br />
<br />
== Script ==<br />
Scripts are entities that contain executable code, that can be run. Usually scripts contains ETL routines but also other kind of tasks are possible.<br />
<br />
{| class="wikitable"<br />
!'''Script properties'''<br />
! '''Description'''<br />
|-<br />
||Code (String)<br />
||Script code.<br />
|-<br />
||CreatedBy (User)<br />
||User who created the Script.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the Script was created.<br />
|-<br />
||CurrentRunStart (DateTime)<br />
||Timestamp of the current run start. Null if the script is currently not running.<br />
|-<br />
||Description (String)<br />
||Description of the Script.<br />
|-<br />
||Id (Integer)<br />
||Id of the Script.<br />
|-<br />
||Language (String)<br />
||Either of the following scripting language: '''Expression''' or '''SQL'''. When language is Expression, the script is run as an expression script, and when language is SQL, the script is run as an SQL script (using the sandbox database).<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last modified the Script.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the Script was last modified.<br />
|-<br />
||LastRunEnd (DateTime)<br />
||Timestamp of the last completed script run end (either successful completion or failure). Null if the Script hasn't been run yet.<br />
|-<br />
||LastRunResult (String)<br />
||Result of the last run. Options are:<br />
* '''Completed''': The last run was completed successfully.<br />
* '''Failed''': An error occurred during the last run, so likely the script did not complete as intended.<br />
* '''Aborted''': Script run was manually stopped prematurely by a user, so the script did not proceeded in the end.<br />
<br />
Null if the Script hasn't been run yet.<br />
|-<br />
||LastRunStart (DateTime)<br />
||Timestamp of the last completed script run start time. Null if the Script hasn't been run yet.<br />
|-<br />
||Name (String)<br />
||Name of the Script.<br />
|-<br />
||OperationId (Integer)<br />
||Id of the operation which runs the Script. Null if the script is currently not running.<br />
|-<br />
||Project (Project)<br />
||Project where the Script is located. Null if the script is in the global context.<br />
|-<br />
||ProjectId (Integer)<br />
||Id of the project where the Script is located. Null if the script is in the global context.<br />
|-<br />
||Status (String)<br />
||Current status of the script. Options are:<br />
* '''Ready''': Script is not running. In this status, the script can be started (changing the status to ''Running'').<br />
* '''Running''': Script is running. In this status, the script can be stopped (changing the status to ''Stopping''). Calling stop just requests a script to stop, and the actual stopping occurs some time later.<br />
* '''Stopping''': Script has been requested to be stopped, but it's still running. In this status, neither start nor stop can be called for the script. When the script eventually stops, its status changes to ''Ready''.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Script functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||Run (Object)<br />
||Dictionary of parameters<br />
||<br />
Runs the script using the provided parameters. The parameters are available in the script as variables (see the example). Any type of variables can be passed to the script. Note that if the script assumes certain variables, but that they are not passed to the script, the script run will throw an error. <br />
<br />
For SQL scripts, the passed parameters are available in the script as variables in format '''@_parameter_<ParameterName>''' where <ParameterName> is the name of the parameter, e.g. ''parameter_myParameter1''. Only string type of parameters can be used, so any other type of data in parameter values is converted into strings.<br />
<br />
The return value of the script is returned by the Run function. Expression scripts return a value with the ''return'' statement or alternatively the result of the last line of the script is the return value. If the script does not return any value, the Run function returns ''_empty''. For SQL scripts, the return value is the last dataset produced by the script (returned as a DataFrame) (SQL scripts might create several datasets using the ''--#ShowReport'' command or the ''Show'' parameter).<br />
<br />
When a script is called using the Run function, the called script status does not change, because it's the parent script that is ''Running''. Also the called script log is not filled, but instead the logging goes to the calling script.<br />
<br />
It's possible to call a script using the Run function several times simultaneously.<br />
<br />
If there is an error when running the called script, the Run function throws the error to the calling script.<br />
<br />
Scripts are run in the script entity context, so for example the following properties are available:<br />
* Id: Script id<br />
* Name: Script name<br />
* Project.Id: Project id where the script is located<br />
* Project.Name: Name of the project where the script is located<br />
<br />
Example: Following script (id 123) raises a specified number to a specified power:<br />
<pre><br />
return Pow(numberToRaise, exponent);<br />
</pre><br />
<br />
The script can be called as follows (returning 16):<br />
<pre><br />
let runResult = ScriptById(123).Run(#{<br />
"numberToRaise": 4,<br />
"exponent": 2<br />
})<br />
</pre><br />
|-<br />
||Start<br />
||Dictionary of parameters<br />
||Starts the script. The function call doesn't wait for the script run to complete (i.e., asynchronous behavior) which is sane as starting the script in the [[Managing_Scripts#Running_Script|Workspace]].<br />
<br />
Parameters to the script can be provided as a dictionary of name-value pairs (which is not possible when script is started in the Workspace). Return value is the script run id (integer) if the script was started. If the script was already running, return value is ''null''.<br />
<br />
Example: Start script (without parameters) and store the script run id:<br />
<pre><br />
let runId = ScriptById(1).Start();<br />
</pre><br />
<br />
Example: Start script with passing parameters:<br />
<pre><br />
ScriptById(1).Start(#{<br />
"variable1": "val1",<br />
"variable2": 5<br />
});<br />
</pre><br />
|-<br />
||Stop<br />
||<br />
||Stops the script. The operation doesn't wait for the stopping to complete (i.e., asynchronous behavior) which is same as stopping the script in the [[Managing_Scripts#Stopping_Script|Workspace]]. Depending on the operation that the script is performing, the stopping might take some time.<br />
<br />
Return value is the script run id (integer) if the script was running. If the script wasn't running, the return value is ''null''.<br />
<br />
Example:<br />
<pre><br />
let runId = ScriptById(1).Stop();<br />
</pre><br />
|}<br />
<br />
Function to get a script by the script id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ScriptById<br />
||<br />
* Script id (Integer)<br />
||<br />
Returns Script object corresponding to the given script id. If script with the given id doesn't exist or user doesn't have permissions to it, an error is given.<br />
|}<br />
<br />
== User/Group ==<br />
User objects represents users and user groups. Note that some properties can only be used for users and some for groups.<br />
<br />
{| class="wikitable"<br />
!'''User/group properties'''<br />
! '''Description'''<br />
|-<br />
||Description (String)<br />
||Description of the user.<br />
|-<br />
||Email (String)<br />
||Email address of the user.<br />
|-<br />
||FullName (String)<br />
||Full name of the user or group name.<br />
|-<br />
||GlobalPermissions (String*)<br />
||Array of global [[Roles and Permissions#Global_and_Project_Roles|permissions]] of the user. Global permissions come from the global roles assigned to the user and groups that the user belongs to. Note that to get the effective permissions for certain objects, also project specific permissions need to be taken into account.<br />
|-<br />
||GroupMemberNames (String*)<br />
||Array of names of members of a user group. This property is available for groups.<br />
|-<br />
||GroupMembers (User*)<br />
||Array of members of a user group. This property is available for groups.<br />
|-<br />
||GroupNames (String*)<br />
||Array of names of user groups the user belongs to. This property is available for users.<br />
|-<br />
||Groups (User*)<br />
||Array of user groups the user belongs to. This property is available for users.<br />
|-<br />
||HasPassword (Boolean)<br />
||Returns true if user has a password defined in QPR ProcessAnalyzer and thus user can authenticate using the password. If user doesn't have a password, the SAML authentication is the only way to log in. ''ManageUsers'' permission is needed to access this property for other users.<br />
|-<br />
||Id (Integer)<br />
||Id of the user, which is unique for every user.<br />
|-<br />
||IsActive (Boolean)<br />
||Returns true only if the user is active (not disabled).<br />
|-<br />
||IsGroup (Boolean)<br />
||Returns true if the user is a user group.<br />
|-<br />
||IsLocked (Boolean)<br />
||Returns true if user account is currently [[User_Session_Management#Preventing_password_guessing_attacks|locked]]. ''ManageUsers'' permission is needed to access this property.<br />
|-<br />
||LastLockedDate (DateTime)<br />
||Returns date when user account was locked the last time. Returns ''null'' if the user account has never been locked. ''ManageUsers'' permission is needed to access this property.<br />
|-<br />
||LastLoginDate (DateTime)<br />
||Returns date when the user made last successful login. ''ManageUsers'' permission is needed to access this property for other users.<br />
|-<br />
||Name (String)<br />
||Login name of the user or group.<br />
|-<br />
||Roles (Object**)<br />
||<br />
Returns all roles of the user (both global and project roles) as a nested array structure.<br />
<br />
Example:<br />
<pre><br />
ToJson(Users.Where(name == "qpr").Roles)<br />
Returns (for example):<br />
[<br />
[{"calcId": "Project:1"}, "Administrator"],<br />
[{"calcId": "Project:2"}, "Analyzer"],<br />
[{"calcId": "Project:3"}, "Viewer"],<br />
[null, "RunScripts"],<br />
[null, "Administrator"]<br />
]<br />
</pre><br />
|}<br />
<br />
{| class="wikitable"<br />
!'''User/group functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||EffectivePermissionsFor (String Array)<br />
||<br />
* Project to get permissions<br />
||<br />
Returns effective (actual) permission of the user to the given project. Project is given as a [[#Project|project object]] (not as a project id). Effective permissions determine the actual permissions that the user has, i.e. a combination of all permissions assigned to the user and groups the user belong to, including both project specific and global roles.<br />
<br />
Permissions for the EffectivePermissionsFor function are as follows:<br />
* All users can query their own permissions<br />
* To get permissions for any user, the user needs to have [[Roles_and_Permissions|ManageUsers permission]].<br />
<br />
Note that ''inactive'' users don't have any effective permissions, so the EffectivePermissionsFor function does not return any permissions for those users.<br />
<br />
Examples:<br />
<pre><br />
EffectivePermissionsFor(ModelById(1234).Project)<br />
Returns (for example): ["EditDashboards", "Filtering", "GenericRead"]<br />
</pre><br />
|-<br />
||GetAttribute<br />
||<br />
||<br />
Returns user attribute value by given attribute name and optionally by the model/project/dashboard context. Supported data types are String, Integer, Float, and DateTime. To store more complex data types, data can be converted into json and stored as string. If the attribute doesn't exist, null is returned.<br />
<br />
For example, if using dashboard as context, the attributes are effectively bound to each user and each dashboard separately. Thus, there can be several attributes with the same name as long as the dashboard is different.<br />
<br />
Parameters:<br />
# '''Attribute name''' (String): Name of the attribute.<br />
# '''Attribute context''' (Project/Model/Dashboard): Optional context object the attribute is linked to.<br />
<br />
Users have permissions to get attributes for themselves, and also (administrator) users with global ''ManageUsers'' permission can get attributes for all users. In addition, if using the context object, the ''GenericRead'' permission is required for the context object.<br />
<br />
Example: Get user attribute MyDataValue for myself:<br />
<pre><br />
CurrentUser<br />
.GetAttribute("MyDataValue");<br />
</pre><br />
<br />
Example: Get user attribute MyDataValue for user John:<br />
<pre><br />
Users<br />
.Where(Name=="John")<br />
.GetAttribute("MyDataValue");<br />
</pre><br />
<br />
Example: Get user attribute MyDataValue for user 1 related to dashboard id 1:<br />
<pre><br />
UserById(1)<br />
.GetAttribute("MyDataValue", DashboardById(1));<br />
</pre><br />
|-<br />
||SetAttribute<br />
||<br />
||<br />
Sets user attribute value for given attribute name and optionally for the model/project/dashboard context. Supported data types are String, Integer, Float, and DateTime. To store more complex data types, data can be converted into json and stored as string. If setting value ''null'', the user attribute is removed. Required permissions are same as in the GetAttribute function.<br />
<br />
Parameters:<br />
# '''Attribute name''' (String): Name of the attribute.<br />
# '''Attribute value''' (String/Integer/Float/DateTime): Attribute value to be stored.<br />
# '''Attribute context''' (Project/Model/Dashboard): Optional context object the attribute value is linked to.<br />
<br />
Example: Set user attribute MyDataValue for myself:<br />
<pre><br />
CurrentUser<br />
.SetAttribute("MyDataValue ", "value");<br />
</pre><br />
<br />
Example: Set value 123 as user attribute MyDataValue for user John:<br />
<pre><br />
Users<br />
.Where(Name=="John")<br />
.SetAttribute("MyDataValue", 123);<br />
</pre><br />
<br />
Example: Set current time as user attribute MyDataValue for user 1 related to dashboard id 1:<br />
<pre><br />
UserById(1)<br />
.GetAttribute("MyDataValue", Now, DashboardById(1));<br />
</pre><br />
|}<br />
<br />
Function to get User by user id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||UserById<br />
||<br />
* User id (Integer)<br />
||<br />
Returns User object corresponding to the provided user id.<br />
|}</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Objects_in_Expression_Language&diff=24502QPR ProcessAnalyzer Objects in Expression Language2024-03-28T15:07:45Z<p>Ollvihe: /* Script */</p>
<hr />
<div>==Filter==<br />
Filters contain a set of filter rules used to filter cases and events in models. Filters are objects located in the models. Filters are owned by the creator user, and when a filter publish mode is private, only the creator can use it.<br />
<br />
{| class="wikitable"<br />
!'''Filter properties'''<br />
! '''Description'''<br />
|-<br />
||CreatedBy (User)<br />
||Returns the user who created the filter.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Returns date when the filter created date.<br />
|-<br />
||Description (String)<br />
||Returns description of the filter.<br />
|-<br />
||Id (Integer)<br />
||Returns id of the filter.<br />
|-<br />
||LastModifiedBy (User)<br />
||Returns user who modified the filter.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Returns date when the filter last modified.<br />
|-<br />
||Model<br />
||Returns model where the filter belongs to.<br />
|-<br />
||ModelId (Integer)<br />
||Returns model where the filter belongs to.<br />
|-<br />
||Name (String)<br />
||Returns the name of the filter.<br />
|-<br />
||Project<br />
||Returns project where the filter belongs to.<br />
|-<br />
||ProjectId (Integer)<br />
||Returns project id where the filter belongs to.<br />
|-<br />
||PublishMode (String)<br />
||Returns publish mode of the filter, one of the following: '''Private''', '''Public''', or '''Default'''.<br />
|-<br />
||Rules (Dictionary)<br />
||Returns a dictionary containing the filter rules in the filter.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Filter Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||<br />
Deletes the filter permanently. To delete own filters, the '''Filtering''' permission is needed, and to delete any filters the '''ManageViews''' permission is needed.<br />
|-<br />
||Modify<br />
||Dictionary<br />
||<br />
Modifies filter properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: ''Name'', ''Description'', ''PublishMode'', and ''Rules''.<br />
<br />
The function returns the updated filter object. Requires ''GenericWrite'' permission for the Project and global ''CreateModel'' permission.<br />
<br />
Example:<br />
<pre><br />
FilterById(1)<br />
.Modify(#{<br />
"Name": "My filter",<br />
"Description": "My description",<br />
"PublishMode": "Public",<br />
"Rules": #{<br />
"Items": [<br />
#{<br />
"Type": "IncludeCases",<br />
"Items": [<br />
#{<br />
"Type": "CaseAttributeValue",<br />
"Attribute": "Account Manager",<br />
"StringifiedValues": [<br />
"0Mary Wilson"<br />
]<br />
}<br />
]<br />
}<br />
]<br />
}<br />
}<br />
)<br />
</pre><br />
|}<br />
<br />
Function to get filter id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||FilterById<br />
||<br />
* Filter id (Integer)<br />
||<br />
Returns Filter object corresponding to the provided filter id.<br />
|}<br />
<br />
==Model==<br />
Notes:<br />
* For in-memory models that are offline, the object counts represent the situation when the model was last time online (loaded into the memory). ''null'' is returned if the model has never been loaded into the memory.<br />
* If [[Case_Level_Permissions|Case permissions]] are used for the model, and user doesn't have '''GenericWrite''' permission for the model, ''null'' is returned for data security reasons. Users that have the '''GenericWrite''' permission, see null when the model is offline, and when online, they see counts where the case level permissions settings are applied.<br />
* Properties ''CaseAttributes'', ''EventAttributes'' and ''Eventlog'' work only for the in-memory models and they require the model to be loaded into the memory. If the model is not in the memory, it is loaded when these properties is used. Other model properties down require the model to be in the memory.<br />
<br />
{| class="wikitable"<br />
!'''Model properties'''<br />
! '''Description'''<br />
|-<br />
||Calendars (BusinessCalendar*)<br />
||<br />
Returns all [[Business_Calendar|business calendars]] stored to the Model as an array. Returns an empty array, if there are no business calendars stored to the model. Note: UI allows to set only one business calendar for a Model.<br />
|-<br />
||CaseAttributes (AttributeType*)<br />
||[[#AttributeType|CaseAttributes]] in the model returned in the alphabetical order. Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||CasesDatatable (Datatable)<br />
||Returns the Datatable the model uses as a datasource for cases. Returns ''null'' if the cases Datatable is not defined or if model uses other than the Datatable datasource.<br />
|-<br />
||Configuration (Dictionary)<br />
||Returns the Model configuration as dictionary. Example:<br />
<pre><br />
ModelById(123).Configuration.DataSource.Events.DataTableName<br />
</pre><br />
|-<br />
||ConfigurationJson (String)<br />
||Returns the Model configuration as JSON string.<br />
|-<br />
||CreatedBy (User)<br />
||User who created the model.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the model was created.<br />
|-<br />
||DefaultCalendar (BusinessCalendar)<br />
||Returns the default [[Business_Calendar|business calendar]] of the Model. Returns ''null'', if there are no calendars in the Model or no calendar has been set as a default calendar. Note: UI allows to set only one business calendar for a Model, which is also the default calendar.<br />
|-<br />
||DefaultFilter (Filter)<br />
||Default filter of the model. Returns ''null'' if the model does not have a default filter.<br />
|-<br />
||DefaultFilterId (Integer)<br />
||Default filter id of the model. Returns ''null'' if the model does not have a default filter.<br />
|-<br />
||Description (String)<br />
||Model description. The model description may contain line breaks.<br />
|-<br />
||DeletedDate (DateTime)<br />
||Timestamp when Model was deleted (moved to the recycle bin).<br />
|-<br />
||DeletedBy (User)<br />
||User how deleted the Model.<br />
|-<br />
||Diagrams (Diagram*)<br />
||Returns an array of all [[Diagram_in_Expression_Language|diagrams]] in the model.<br />
|-<br />
||EstimatedMemory (Integer)<br />
||Returns an estimation of how much memory in bytes the model requires.<br />
|-<br />
||EventsDatatable (Datatable)<br />
||Returns the Datatable the model uses as a datasource for events. Returns ''null'' if the events Datatable is not defined or if model uses other than the Datatable datasource.<br />
|-<br />
||EventAttributes (AttributeType*)<br />
||[[#AttributeType|EventAttributes]] in the model returned in the alphabetical order. Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||EventLog (EventLog)<br />
||EventLog containing the entire model (i.e. event log where no filters have been applied). Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||Filters (Filter*)<br />
||Returns an array of all [[#Filter|filters]] in the model.<br />
|-<br />
||Id (Integer)<br />
||Model Id. Model Id is generated by QPR ProcessAnalyzer when the model is created.<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last time modified the model properties. Note that datatables containing the eventlog data are separate objects having similar fields to track the last modification and last data import.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the model was modified the last time.<br />
|-<br />
||Name (String)<br />
||Model name.<br />
|-<br />
||NCache (Integer)<br />
||Number of objects related to the model when the model is loaded into the memory.<br />
|-<br />
||NCaseAttributes (Integer)<br />
||Number of [[#AttributeType|CaseAttributes]] in model. Works only for in-memory models.<br />
|-<br />
||NCases (Integer)<br />
||Number of [[#Case|Cases]] in the model. Works only for in-memory models.<br />
|-<br />
||NEventAttributes (Integer)<br />
||Number of [[#AttributeType|EventAttributes]] in model. Works only for in-memory models.<br />
|-<br />
||NEvents (Integer)<br />
||Number of [[#Event|Events]] in model. Works only for in-memory models.<br />
|-<br />
||NEventTypes (Integer)<br />
||Number of [[#EventType|EventTypes]] in the model. Works only for in-memory models.<br />
|-<br />
||NOpens (Integer)<br />
||Number of times analysis has been requested from the model.<br />
|-<br />
||Project (Project)<br />
||[[#Project|Project]] where the model belongs to.<br />
|-<br />
||ProjectId (Integer)<br />
||[[#Project|Project]] id where the model belongs to.<br />
|-<br />
||Status (String)<br />
||<br />
Memory availability status of the model. There are the following statuses:<br />
* '''Loading''': The model is currently loading into the memory. When the loading is ready, the status changes to ''online''. If the loading fails, the status changes to ''offline''.<br />
* '''Offline''': The model is currently not loaded into the memory. The model needs to be loaded into the memory, so that analyses can be calculated from the model (occurs automatically when an analysis is requested).<br />
* '''Online''': The model is in the memory and ready for analysis calculation. If the model is dropped from the memory, its status changes to ''offline''.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Model Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||CalendarByName (BusinessCalendar)<br />
||<br />
name (String)<br />
||<br />
Returns a [[Business_Calendar|business calendar]] stored to the Model by the name of the calendar. Business calendars can be stored to models in the model properties. Returns ''null'', if a calendar with the provided name is not stored to the model.<br />
<br />
Examples:<br />
<pre><br />
ModelById(123).CalendarByName("MyCalendar")<br />
</pre><br />
|-<br />
||CreateDiagram (Diagram)<br />
||Parameters dictionary<br />
||<br />
Creates a [[Diagram_in_Expression_Language|diagram]] to the model. Parameters is a dictionary containing diagram properties. Following properties are available:<br />
* '''Name''' (string): Diagram name that distinguishes diagrams in a model.<br />
* '''Description''' (string): Diagram description text.<br />
* '''Content''' (dictionary): Diagram content as dictionary.<br />
<br />
Example:<br />
<pre><br />
ModelById(1)<br />
.CreateDiagram(#{<br />
"Name": "My diagram",<br />
"Description": "This is my new diagram",<br />
"Content": #{ ... },<br />
})<br />
</pre><br />
|-<br />
||CreateFilter (Filter)<br />
||Parameters dictionary<br />
||Creates a filter to a model. Requires ''GenericWrite'' permission for the project and global ''CreateModel'' permission. If a filter with that name already exists in the model, an exception is thrown.<br />
The parameters dictionary may have the following properties:<br />
* '''Name''': Name of the filter. This property is mandatory.<br />
* '''Description''': Description of the filter. This property is optional.<br />
* '''Rules''': Filter rules for the filter defined as a dictionary according to the [[Filtering_in_QPR_ProcessAnalyzer_Queries|filter json format]]. This property is mandatory.<br />
* '''PublishMode''': Publish mode of the filter which is one of the following: ''Private'', ''Public'' or ''Default''. This property is optional, and the default value is ''Private''.<br />
<br />
Example:<br />
<pre><br />
let newFilter = modelById(1).CreateFilter(#{ <br />
"Name": "My Filter",<br />
"Rules": #{<br />
"Items": [#{<br />
"Type": "IncludeCases",<br />
"Items": [#{<br />
"Type": "CaseAttributeValue",<br />
"Attribute": "Account Manager",<br />
"StringifiedValues": [ "0Robert Miller" ]<br />
}]<br />
}]<br />
},<br />
"PublishMode": "Public"<br />
});<br />
}<br />
</pre><br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||Deletes the Model permanently. The model doesn't need to be in the recycle bin to be able to delete it permanently.<br />
|-<br />
||Modify (Model)<br />
||Dictionary<br />
||<br />
Modifies model properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: ''Name'', ''Description'', ''ProjectId'', and ''Configuration''.<br />
<br />
The function returns the updated model object. Requires the ''GenericWrite'' permission for the project and the global ''CreateModel'' permission.<br />
<br />
Example:<br />
<pre><br />
ModelById(1)<br />
.Modify(#{<br />
"Name": "My model",<br />
"Description": "My description",<br />
"ProjectId": 2,<br />
"Configuration": #{<br />
"DataSource": #{<br />
"Cases": #{<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My cases datatable",<br />
"Columns": #{<br />
"CaseId": "Case Name"<br />
}<br />
},<br />
"Events": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My events datatable",<br />
"Columns": #{<br />
"CaseId": "Case Name",<br />
"EventType": "Event Type",<br />
"Timestamp": "Start Time"<br />
}<br />
}<br />
}<br />
}<br />
}<br />
)<br />
</pre><br />
|-<br />
||ResetPreprocessings<br />
||(none)<br />
||<br />
Removes all cached items related to the Model, e.g. preprocessings and calculation results. In practice, the Model is reset to a state where it was right after the model was loaded into memory.<br />
|-<br />
||Restore<br />
||(none)<br />
||Restores the Model from the recycle bin back to the original location.<br />
|-<br />
||<span id="ToSqlDataFrame">ToSqlDataFrame</span><br />
||In-memory dataframe<br />
||Converts an in-memory dataframe to an SQL dataframe. In practice, an SQL query is created from the in-memory dataframe and the query is executed in the datasource so that the data is available in the datasource for further SQL operations. This function is intended only to small amounts of data which is less than 16384 rows.<br />
<br />
Example: Select matching cases from events data using in-memory dataframe:<br />
<pre><br />
let model = ModelById(1);<br />
let dfEvents = model.EventsDatatable.SqlDataFrame;<br />
let inMemoryDf = ToDataFrame(<br />
[["1"], ["2"], ["3"]],<br />
[#{"Name": "id", "DataType": "String"}]<br />
);<br />
model.ToSqlDataFrame(inMemoryDf)<br />
.Join(dfEvents, ["id": "CaseId"])<br />
.SelectDistinct(["CaseId"])<br />
.Collect();<br />
</pre><br />
|-<br />
||<span id="TriggerNotifications">TriggerNotifications</span> (Boolean)<br />
||Notification names (String*)<br />
||Triggers the given notifications for the Model. Notifications are given by their names. Triggering means that the configured rules are run and notification emails are sent as defined by the rules. If the notification names parameter is not provided, all notifications in the Model are triggered.<br />
<br />
The function return ''true'' if any notification were triggered, otherwise ''false''.<br />
<pre><br />
ModelById(123).TriggerNotifications(["Notification 1", "Notification 2"]);<br />
Triggers notifications Notification 1 and Notification 2 in model id 123.<br />
<br />
ModelById(123).TriggerNotifications();<br />
Triggers all notifications in model id 123.<br />
</pre><br />
|}<br />
<br />
Function to get Model by model id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ModelById<br />
||<br />
* Model id (Integer)<br />
||<br />
Returns [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Model|Model]] object corresponding to the provided model id.<br />
|}<br />
<br />
== Project ==<br />
{| class="wikitable"<br />
!'''Project properties'''<br />
! '''Description'''<br />
|-<br />
||CreatedBy (User)<br />
||User who created the Project.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the Project was created.<br />
|-<br />
||Dashboards (Dashboard*)<br />
||Returns all [[Dashboard_in_Expression_Language|dashboards]] in the project.<br />
|-<br />
||Datatables (Datatable*)<br />
||Returns all Datatables in the project.<br />
|-<br />
||DeletedDate (DateTime)<br />
||Timestamp when the Project was deleted (moved to the recycle bin).<br />
|-<br />
||Description (String)<br />
||Project description. The project description may contain line breaks.<br />
|-<br />
||DeletedBy (User)<br />
||User who deleted the Project (moved to the recycle bin).<br />
|-<br />
||Id (Integer)<br />
||Id of the Project.<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last modified the Project.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the Project was last modified (refers to the project name, description and parent, not the contents of the project).<br />
|-<br />
||Name (String)<br />
||Name of the Project.<br />
|-<br />
||Models (Model*)<br />
||Models that are in the Project.<br />
|-<br />
||Parent (Project)<br />
||Parent project, i.e. a Project where the Project is located in the hierarchy of Projects. Returns ''null'' for root level Projects. Throws an error if user doesn't have access to the parent project.<br />
|-<br />
||ParentProjectId (Integer)<br />
||Parent project id. Returns ''null'' for root level Projects. The parent project id is returned even if user doesn't have access to the parent project.<br />
|-<br />
||Scripts (Script*)<br />
||Scripts that are in the Project.<br />
|-<br />
||Secrets (Dictionary*)<br />
||Returns array of all [[Storing_Secrets_for_Scripts|secrets]] in the project as Dictionary with following properties:<br />
* '''Name''' (string): Name of the secret.<br />
* '''Type''' (string): Type of the secret which is one of the following: "odbc", "sap", "salesforce".<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Project functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||CreateDashboard (Dashboard)<br />
||Parameters dictionary<br />
||Creates a dashboard to the project. ''EditDashboards'' permission to the project is required. The parameter is dictionary with following supported dashboard properties:<br />
* '''Name''' (String): Name of the dashboard.<br />
* '''Identifier''' (String): Identifier of the dashboard.<br />
* '''Description''' (String): Description of the dashboard.<br />
* '''Content''' (Dictionary): Content of the dashboard.<br />
<br />
Example: Create empty dashboard.<br />
<pre><br />
ProjectById(1)<br />
.CreateDashboard(#{<br />
"Name": "My dashboard",<br />
"Identifier": "MyDashboard"<br />
});<br />
</pre><br />
<br />
Example: Create dashboard with a chart.<br />
<pre><br />
ProjectById(1)<br />
.CreateDashboard(#{<br />
"Name": "My dashboard",<br />
"Content": #{<br />
"version": 4,<br />
"typeName": "View",<br />
"name": "My dashboard",<br />
"subElements": [<br />
#{<br />
"position": #{<br />
"x": 0,<br />
"y": 0,<br />
"width": 0.5,<br />
"height": 0.5,<br />
"zOrder": 0<br />
},<br />
"element": #{<br />
"typeName": "Chart",<br />
"configuration": #{<br />
"root": #{<br />
"expressionType": "Cases",<br />
"expressionParameters": #{}<br />
},<br />
"measures": [#{<br />
"expressionType": "Count",<br />
"expressionParameters": #{}<br />
}]<br />
}<br />
}<br />
}<br />
]<br />
}<br />
});<br />
</pre><br />
|-<br />
||<span id="CreateDatatable">CreateDatatable</span> (Datatable)<br />
||<br />
* Parameters dictionary<br />
||Creates datatable to the project. After creation, there are no columns or rows in the datatable. The function returns the created datatable entity. Following properties can be set for the datatable:<br />
* '''Name''' (string): Name of the datatable. This parameter is mandatory.<br />
* '''Description''' (string): Description for the datatable. This parameter is optional.<br />
* '''NameInDataSource''' (string): Table name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''SchemaNameInDataSource''' (string): Schema name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''DatabaseNameInDataSource''' (string): Database name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''Type''' (string): Defines where the data for the datatable is located. Available values are '''Snowflake''', '''SqlServer''', and '''Local'''. This parameter is optional and default value is defined by the [[PA_Configuration_database_table#General_Settings|DefaultDataSource]] setting.<br />
* '''Connection''': Connection object for the datatable. This parameter is optional.<br />
<br />
Example: Create a new datatable:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable"<br />
});<br />
</pre><br />
<br />
Example: Create Snowflake datatable linked to a custom table:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable",<br />
"Description": "My description",<br />
"NameInDataSource": "MyTable",<br />
"SchemaNameInDataSource": "MySchema",<br />
"DatabaseNameInDataSource": "MyDatabase",<br />
"Type": "Snowflake"<br />
});<br />
</pre><br />
<br />
Example: Create Snowflake datatable where connection string is stored as a [[Storing_Secrets_for_Scripts|secret]]:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable",<br />
"Type": "Snowflake",<br />
"Connection": ProjectById(1).CreateSnowflakeConnection(#{ "OdbcConnectionStringKey": "MyKey" })<br />
});<br />
</pre><br />
|-<br />
||CreateModel (Model)<br />
||<br />
* Parameters dictionary<br />
||Creates a model to a project. Requires ''GenericWrite'' permission for the Project and global ''CreateModel'' permission. If a model with that name already exists, an exception is thrown.<br />
<br />
Parameters dictionary has the following properties:<br />
* '''Name''': Name of the model. This property is mandatory.<br />
* '''Description''': Description of the model. This property is optional.<br />
* '''Configuration''': Configuration dictionary for the model. This property is technically optional, but a working model requires at least datasource settings to be defined.<br />
<br />
Example:<br />
<pre><br />
ProjectById(1).CreateModel(#{ <br />
"Name": "My model",<br />
"Description": "My description",<br />
"Configuration": {<br />
"DataSource": {<br />
"Cases": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My cases datatable",<br />
"Columns": {<br />
"CaseId": "Case Name"<br />
}<br />
},<br />
"Events": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My events datatable",<br />
"Columns": {<br />
"CaseId": "Case Name",<br />
"EventType": "Event Type",<br />
"Timestamp": "Start Time"<br />
}<br />
}<br />
}<br />
}<br />
});<br />
</pre><br />
|-<br />
||DatatableByName (Datatable)<br />
||Datatable name (String)<br />
||<br />
Returns Datatable by its name located in the project. Returns null, if Datatable with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).DatatableByName("MyDatatable1")<br />
</pre><br />
<br />
Example: Get datatable by name, and create it if it doesn't exist:<br />
<pre><br />
let project = ProjectById(123);<br />
let datatableName = "MyDatatable1";<br />
let datatable = project.DatatableByName(datatableName);<br />
if (datatable == null) {<br />
datatable = project.CreateDatatable(datatableName);<br />
}<br />
</pre><br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||Deletes the Project permanently. Note that the Project doesn't need to be in the recycle bin to be able to delete it permanently.<br />
|-<br />
||Restore<br />
||(none)<br />
||Restores the Project from the recycle bin back to the original location.<br />
|-<br />
||ModelByName (Model)<br />
||Model name (String)<br />
||<br />
Returns Model by its name located in the project. Returns null, if Model with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).ModelByName("My Model 1")<br />
</pre><br />
|-<br />
||ScriptByName (Script)<br />
||Script name (String)<br />
||<br />
Returns Script by its name located in the project. Returns null, if Script with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).ScriptByName("MyScript1")<br />
</pre><br />
|-<br />
||<span id="SetSecret">SetSecret</span><br />
||<br />
# Secret type (string)<br />
# Secret name (string)<br />
# Secret value (string)<br />
||Sets or adds a [[Storing_Secrets_for_Scripts|secret]] for the project. Setting the secret value to ''null'' removes the secret. There can be several secrets with the same name in the same project if the type of the secret is different. Setting secrets requires the project specific ''ManageProject'' permission.<br />
<br />
Parameters:<br />
# '''Type''' (string): Secret type which is one of the following:<br />
#* "odbc": ODBC connection string (e.g., to extract data, or load a model directly)<br />
#* "externaldatatableconnection": ODBC connection string used for a datatable<br />
#* "sap": SAP password<br />
#* "salesforce": Salesforce password<br />
# '''Name''' (string): Secret name, used to refer to the secret in the commands.<br />
# '''Value''' (string): Secret value which contains the confidential information.<br />
<br />
Example: Set SAP password:<br />
<pre><br />
ProjectById(1).SetSecret("sap", "MySapPassword", "I l0ve 5AP!");<br />
</pre><br />
<br />
Example: Remove SAP password:<br />
<pre><br />
ProjectById(1).SetSecret("sap", "MySapPassword", null);<br />
</pre><br />
|}<br />
<br />
Function to get Project by id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ProjectById<br />
||Project id (Integer)<br />
||<br />
Returns project object corresponding to the provided project id.<br />
|-<br />
||ProjectByName<br />
||Project name (String)<br />
||<br />
Returns project object by given project name. If there is no such project or user doesn't have access to it, ''null'' value is returned. If there are multiple projects with the same name, one of them is returned.<br />
<br />
Example:<br />
<pre><br />
let project = ProjectByName("My Project");<br />
</pre><br />
|}<br />
<br />
== Script ==<br />
Scripts are entities that contain executable code, that can be run. Usually scripts contains ETL routines but also other kind of tasks are possible.<br />
<br />
{| class="wikitable"<br />
!'''Script properties'''<br />
! '''Description'''<br />
|-<br />
||Code (String)<br />
||Script code.<br />
|-<br />
||CreatedBy (User)<br />
||User who created the Script.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the Script was created.<br />
|-<br />
||CurrentRunStart (DateTime)<br />
||Timestamp of the current run start. Null if the script is currently not running.<br />
|-<br />
||Description (String)<br />
||Description of the Script.<br />
|-<br />
||Id (Integer)<br />
||Id of the Script.<br />
|-<br />
||Language (String)<br />
||Either of the following scripting language: '''Expression''' or '''SQL'''. When language is Expression, the script is run as an expression script, and when language is SQL, the script is run as an SQL script (using the sandbox database).<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last modified the Script.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the Script was last modified.<br />
|-<br />
||LastRunEnd (DateTime)<br />
||Timestamp of the last completed script run end (either successful completion or failure). Null if the Script hasn't been run yet.<br />
|-<br />
||LastRunResult (String)<br />
||Result of the last run. Options are:<br />
* '''Completed''': The last run was completed successfully.<br />
* '''Failed''': An error occurred during the last run, so likely the script did not complete as intended.<br />
* '''Aborted''': Script run was manually stopped prematurely by a user, so the script did not proceeded in the end.<br />
<br />
Null if the Script hasn't been run yet.<br />
|-<br />
||LastRunStart (DateTime)<br />
||Timestamp of the last completed script run start time. Null if the Script hasn't been run yet.<br />
|-<br />
||Name (String)<br />
||Name of the Script.<br />
|-<br />
||OperationId (Integer)<br />
||Id of the operation which runs the Script. Null if the script is currently not running.<br />
|-<br />
||Project (Project)<br />
||Project where the Script is located. Null if the script is in the global context.<br />
|-<br />
||ProjectId (Integer)<br />
||Id of the project where the Script is located. Null if the script is in the global context.<br />
|-<br />
||Status (String)<br />
||Current status of the script. Options are:<br />
* '''Ready''': Script is not running. In this status, the script can be started (changing the status to ''Running'').<br />
* '''Running''': Script is running. In this status, the script can be stopped (changing the status to ''Stopping''). Calling stop just requests a script to stop, and the actual stopping occurs some time later.<br />
* '''Stopping''': Script has been requested to be stopped, but it's still running. In this status, neither start nor stop can be called for the script. When the script eventually stops, its status changes to ''Ready''.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Script functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||Run (Object)<br />
||Dictionary of parameters<br />
||<br />
Runs the script using the provided parameters. The parameters are available in the script as variables (see the example). Any type of variables can be passed to the script. Note that if the script assumes certain variables, but that they are not passed to the script, the script run will throw an error. <br />
<br />
For SQL scripts, the passed parameters are available in the script as variables in format '''@_parameter_<ParameterName>''' where <ParameterName> is the name of the parameter, e.g. ''parameter_myParameter1''. Only string type of parameters can be used, so any other type of data in parameter values is converted into strings.<br />
<br />
The return value of the script is returned by the Run function. Expression scripts return a value with the ''return'' statement or alternatively the result of the last line of the script is the return value. If the script does not return any value, the Run function returns ''_empty''. For SQL scripts, the return value is the last dataset produced by the script (returned as a DataFrame) (SQL scripts might create several datasets using the ''--#ShowReport'' command or the ''Show'' parameter).<br />
<br />
When a script is called using the Run function, the called script status does not change, because it's the parent script that is ''Running''. Also the called script log is not filled, but instead the logging goes to the calling script.<br />
<br />
It's possible to call a script using the Run function several times simultaneously.<br />
<br />
If there is an error when running the called script, the Run function throws the error to the calling script.<br />
<br />
Scripts are run in the script entity context, so for example the following properties are available:<br />
* Id: Script id<br />
* Name: Script name<br />
* Project.Id: Project id where the script is located<br />
* Project.Name: Name of the project where the script is located<br />
<br />
Example: Following script (id 123) raises a specified number to a specified power:<br />
<pre><br />
return Pow(numberToRaise, exponent);<br />
</pre><br />
<br />
The script can be called as follows (returning 16):<br />
<pre><br />
let runResult = ScriptById(123).Run(#{<br />
"numberToRaise": 4,<br />
"exponent": 2<br />
})<br />
</pre><br />
|-<br />
||Start<br />
||Dictionary of parameters<br />
||Starts the script. The function call doesn't wait for the script run to complete (i.e., asynchronous behavior) which is similar to starting the script in the [[Managing_Scripts#Running_Script|Workspace]].<br />
<br />
Parameters to the script can be provided as a dictionary of name-value pairs (which is not possible when script is started in the Workspace). Return value is the script run id (integer) if the script was started. If the script was already running, return value is ''null''.<br />
<br />
Example: Start script (without parameters) and store the script run id:<br />
<pre><br />
let runId = ScriptById(1).Start();<br />
</pre><br />
<br />
Example: Start script with passing parameters:<br />
<pre><br />
ScriptById(1).Start(#{<br />
"variable1": "val1",<br />
"variable2": 5<br />
});<br />
</pre><br />
|-<br />
||Stop<br />
||<br />
||Stops the script. The operation doesn't wait for the stopping to complete (i.e., asynchronous behavior) which corresponds to stopping the script in the [[Managing_Scripts#Stopping_Script|Workspace]]. Depending on the operation that the script is performing, the stopping might take some time.<br />
<br />
Return value is the script run id (integer) if the script was running. If the script wasn't running, the return value is ''null''.<br />
<br />
Example:<br />
<pre><br />
let runId = ScriptById(1).Stop();<br />
</pre><br />
|}<br />
<br />
Function to get a script by the script id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ScriptById<br />
||<br />
* Script id (Integer)<br />
||<br />
Returns Script object corresponding to the given script id. If script with the given id doesn't exist or user doesn't have permissions to it, an error is given.<br />
|}<br />
<br />
== User/Group ==<br />
User objects represents users and user groups. Note that some properties can only be used for users and some for groups.<br />
<br />
{| class="wikitable"<br />
!'''User/group properties'''<br />
! '''Description'''<br />
|-<br />
||Description (String)<br />
||Description of the user.<br />
|-<br />
||Email (String)<br />
||Email address of the user.<br />
|-<br />
||FullName (String)<br />
||Full name of the user or group name.<br />
|-<br />
||GlobalPermissions (String*)<br />
||Array of global [[Roles and Permissions#Global_and_Project_Roles|permissions]] of the user. Global permissions come from the global roles assigned to the user and groups that the user belongs to. Note that to get the effective permissions for certain objects, also project specific permissions need to be taken into account.<br />
|-<br />
||GroupMemberNames (String*)<br />
||Array of names of members of a user group. This property is available for groups.<br />
|-<br />
||GroupMembers (User*)<br />
||Array of members of a user group. This property is available for groups.<br />
|-<br />
||GroupNames (String*)<br />
||Array of names of user groups the user belongs to. This property is available for users.<br />
|-<br />
||Groups (User*)<br />
||Array of user groups the user belongs to. This property is available for users.<br />
|-<br />
||HasPassword (Boolean)<br />
||Returns true if user has a password defined in QPR ProcessAnalyzer and thus user can authenticate using the password. If user doesn't have a password, the SAML authentication is the only way to log in. ''ManageUsers'' permission is needed to access this property for other users.<br />
|-<br />
||Id (Integer)<br />
||Id of the user, which is unique for every user.<br />
|-<br />
||IsActive (Boolean)<br />
||Returns true only if the user is active (not disabled).<br />
|-<br />
||IsGroup (Boolean)<br />
||Returns true if the user is a user group.<br />
|-<br />
||IsLocked (Boolean)<br />
||Returns true if user account is currently [[User_Session_Management#Preventing_password_guessing_attacks|locked]]. ''ManageUsers'' permission is needed to access this property.<br />
|-<br />
||LastLockedDate (DateTime)<br />
||Returns date when user account was locked the last time. Returns ''null'' if the user account has never been locked. ''ManageUsers'' permission is needed to access this property.<br />
|-<br />
||LastLoginDate (DateTime)<br />
||Returns date when the user made last successful login. ''ManageUsers'' permission is needed to access this property for other users.<br />
|-<br />
||Name (String)<br />
||Login name of the user or group.<br />
|-<br />
||Roles (Object**)<br />
||<br />
Returns all roles of the user (both global and project roles) as a nested array structure.<br />
<br />
Example:<br />
<pre><br />
ToJson(Users.Where(name == "qpr").Roles)<br />
Returns (for example):<br />
[<br />
[{"calcId": "Project:1"}, "Administrator"],<br />
[{"calcId": "Project:2"}, "Analyzer"],<br />
[{"calcId": "Project:3"}, "Viewer"],<br />
[null, "RunScripts"],<br />
[null, "Administrator"]<br />
]<br />
</pre><br />
|}<br />
<br />
{| class="wikitable"<br />
!'''User/group functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||EffectivePermissionsFor (String Array)<br />
||<br />
* Project to get permissions<br />
||<br />
Returns effective (actual) permission of the user to the given project. Project is given as a [[#Project|project object]] (not as a project id). Effective permissions determine the actual permissions that the user has, i.e. a combination of all permissions assigned to the user and groups the user belong to, including both project specific and global roles.<br />
<br />
Permissions for the EffectivePermissionsFor function are as follows:<br />
* All users can query their own permissions<br />
* To get permissions for any user, the user needs to have [[Roles_and_Permissions|ManageUsers permission]].<br />
<br />
Note that ''inactive'' users don't have any effective permissions, so the EffectivePermissionsFor function does not return any permissions for those users.<br />
<br />
Examples:<br />
<pre><br />
EffectivePermissionsFor(ModelById(1234).Project)<br />
Returns (for example): ["EditDashboards", "Filtering", "GenericRead"]<br />
</pre><br />
|-<br />
||GetAttribute<br />
||<br />
||<br />
Returns user attribute value by given attribute name and optionally by the model/project/dashboard context. Supported data types are String, Integer, Float, and DateTime. To store more complex data types, data can be converted into json and stored as string. If the attribute doesn't exist, null is returned.<br />
<br />
For example, if using dashboard as context, the attributes are effectively bound to each user and each dashboard separately. Thus, there can be several attributes with the same name as long as the dashboard is different.<br />
<br />
Parameters:<br />
# '''Attribute name''' (String): Name of the attribute.<br />
# '''Attribute context''' (Project/Model/Dashboard): Optional context object the attribute is linked to.<br />
<br />
Users have permissions to get attributes for themselves, and also (administrator) users with global ''ManageUsers'' permission can get attributes for all users. In addition, if using the context object, the ''GenericRead'' permission is required for the context object.<br />
<br />
Example: Get user attribute MyDataValue for myself:<br />
<pre><br />
CurrentUser<br />
.GetAttribute("MyDataValue");<br />
</pre><br />
<br />
Example: Get user attribute MyDataValue for user John:<br />
<pre><br />
Users<br />
.Where(Name=="John")<br />
.GetAttribute("MyDataValue");<br />
</pre><br />
<br />
Example: Get user attribute MyDataValue for user 1 related to dashboard id 1:<br />
<pre><br />
UserById(1)<br />
.GetAttribute("MyDataValue", DashboardById(1));<br />
</pre><br />
|-<br />
||SetAttribute<br />
||<br />
||<br />
Sets user attribute value for given attribute name and optionally for the model/project/dashboard context. Supported data types are String, Integer, Float, and DateTime. To store more complex data types, data can be converted into json and stored as string. If setting value ''null'', the user attribute is removed. Required permissions are same as in the GetAttribute function.<br />
<br />
Parameters:<br />
# '''Attribute name''' (String): Name of the attribute.<br />
# '''Attribute value''' (String/Integer/Float/DateTime): Attribute value to be stored.<br />
# '''Attribute context''' (Project/Model/Dashboard): Optional context object the attribute value is linked to.<br />
<br />
Example: Set user attribute MyDataValue for myself:<br />
<pre><br />
CurrentUser<br />
.SetAttribute("MyDataValue ", "value");<br />
</pre><br />
<br />
Example: Set value 123 as user attribute MyDataValue for user John:<br />
<pre><br />
Users<br />
.Where(Name=="John")<br />
.SetAttribute("MyDataValue", 123);<br />
</pre><br />
<br />
Example: Set current time as user attribute MyDataValue for user 1 related to dashboard id 1:<br />
<pre><br />
UserById(1)<br />
.GetAttribute("MyDataValue", Now, DashboardById(1));<br />
</pre><br />
|}<br />
<br />
Function to get User by user id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||UserById<br />
||<br />
* User id (Integer)<br />
||<br />
Returns User object corresponding to the provided user id.<br />
|}</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Objects_in_Expression_Language&diff=24501QPR ProcessAnalyzer Objects in Expression Language2024-03-28T14:42:04Z<p>Ollvihe: /* Script */</p>
<hr />
<div>==Filter==<br />
Filters contain a set of filter rules used to filter cases and events in models. Filters are objects located in the models. Filters are owned by the creator user, and when a filter publish mode is private, only the creator can use it.<br />
<br />
{| class="wikitable"<br />
!'''Filter properties'''<br />
! '''Description'''<br />
|-<br />
||CreatedBy (User)<br />
||Returns the user who created the filter.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Returns date when the filter created date.<br />
|-<br />
||Description (String)<br />
||Returns description of the filter.<br />
|-<br />
||Id (Integer)<br />
||Returns id of the filter.<br />
|-<br />
||LastModifiedBy (User)<br />
||Returns user who modified the filter.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Returns date when the filter last modified.<br />
|-<br />
||Model<br />
||Returns model where the filter belongs to.<br />
|-<br />
||ModelId (Integer)<br />
||Returns model where the filter belongs to.<br />
|-<br />
||Name (String)<br />
||Returns the name of the filter.<br />
|-<br />
||Project<br />
||Returns project where the filter belongs to.<br />
|-<br />
||ProjectId (Integer)<br />
||Returns project id where the filter belongs to.<br />
|-<br />
||PublishMode (String)<br />
||Returns publish mode of the filter, one of the following: '''Private''', '''Public''', or '''Default'''.<br />
|-<br />
||Rules (Dictionary)<br />
||Returns a dictionary containing the filter rules in the filter.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Filter Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||<br />
Deletes the filter permanently. To delete own filters, the '''Filtering''' permission is needed, and to delete any filters the '''ManageViews''' permission is needed.<br />
|-<br />
||Modify<br />
||Dictionary<br />
||<br />
Modifies filter properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: ''Name'', ''Description'', ''PublishMode'', and ''Rules''.<br />
<br />
The function returns the updated filter object. Requires ''GenericWrite'' permission for the Project and global ''CreateModel'' permission.<br />
<br />
Example:<br />
<pre><br />
FilterById(1)<br />
.Modify(#{<br />
"Name": "My filter",<br />
"Description": "My description",<br />
"PublishMode": "Public",<br />
"Rules": #{<br />
"Items": [<br />
#{<br />
"Type": "IncludeCases",<br />
"Items": [<br />
#{<br />
"Type": "CaseAttributeValue",<br />
"Attribute": "Account Manager",<br />
"StringifiedValues": [<br />
"0Mary Wilson"<br />
]<br />
}<br />
]<br />
}<br />
]<br />
}<br />
}<br />
)<br />
</pre><br />
|}<br />
<br />
Function to get filter id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||FilterById<br />
||<br />
* Filter id (Integer)<br />
||<br />
Returns Filter object corresponding to the provided filter id.<br />
|}<br />
<br />
==Model==<br />
Notes:<br />
* For in-memory models that are offline, the object counts represent the situation when the model was last time online (loaded into the memory). ''null'' is returned if the model has never been loaded into the memory.<br />
* If [[Case_Level_Permissions|Case permissions]] are used for the model, and user doesn't have '''GenericWrite''' permission for the model, ''null'' is returned for data security reasons. Users that have the '''GenericWrite''' permission, see null when the model is offline, and when online, they see counts where the case level permissions settings are applied.<br />
* Properties ''CaseAttributes'', ''EventAttributes'' and ''Eventlog'' work only for the in-memory models and they require the model to be loaded into the memory. If the model is not in the memory, it is loaded when these properties is used. Other model properties down require the model to be in the memory.<br />
<br />
{| class="wikitable"<br />
!'''Model properties'''<br />
! '''Description'''<br />
|-<br />
||Calendars (BusinessCalendar*)<br />
||<br />
Returns all [[Business_Calendar|business calendars]] stored to the Model as an array. Returns an empty array, if there are no business calendars stored to the model. Note: UI allows to set only one business calendar for a Model.<br />
|-<br />
||CaseAttributes (AttributeType*)<br />
||[[#AttributeType|CaseAttributes]] in the model returned in the alphabetical order. Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||CasesDatatable (Datatable)<br />
||Returns the Datatable the model uses as a datasource for cases. Returns ''null'' if the cases Datatable is not defined or if model uses other than the Datatable datasource.<br />
|-<br />
||Configuration (Dictionary)<br />
||Returns the Model configuration as dictionary. Example:<br />
<pre><br />
ModelById(123).Configuration.DataSource.Events.DataTableName<br />
</pre><br />
|-<br />
||ConfigurationJson (String)<br />
||Returns the Model configuration as JSON string.<br />
|-<br />
||CreatedBy (User)<br />
||User who created the model.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the model was created.<br />
|-<br />
||DefaultCalendar (BusinessCalendar)<br />
||Returns the default [[Business_Calendar|business calendar]] of the Model. Returns ''null'', if there are no calendars in the Model or no calendar has been set as a default calendar. Note: UI allows to set only one business calendar for a Model, which is also the default calendar.<br />
|-<br />
||DefaultFilter (Filter)<br />
||Default filter of the model. Returns ''null'' if the model does not have a default filter.<br />
|-<br />
||DefaultFilterId (Integer)<br />
||Default filter id of the model. Returns ''null'' if the model does not have a default filter.<br />
|-<br />
||Description (String)<br />
||Model description. The model description may contain line breaks.<br />
|-<br />
||DeletedDate (DateTime)<br />
||Timestamp when Model was deleted (moved to the recycle bin).<br />
|-<br />
||DeletedBy (User)<br />
||User how deleted the Model.<br />
|-<br />
||Diagrams (Diagram*)<br />
||Returns an array of all [[Diagram_in_Expression_Language|diagrams]] in the model.<br />
|-<br />
||EstimatedMemory (Integer)<br />
||Returns an estimation of how much memory in bytes the model requires.<br />
|-<br />
||EventsDatatable (Datatable)<br />
||Returns the Datatable the model uses as a datasource for events. Returns ''null'' if the events Datatable is not defined or if model uses other than the Datatable datasource.<br />
|-<br />
||EventAttributes (AttributeType*)<br />
||[[#AttributeType|EventAttributes]] in the model returned in the alphabetical order. Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||EventLog (EventLog)<br />
||EventLog containing the entire model (i.e. event log where no filters have been applied). Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||Filters (Filter*)<br />
||Returns an array of all [[#Filter|filters]] in the model.<br />
|-<br />
||Id (Integer)<br />
||Model Id. Model Id is generated by QPR ProcessAnalyzer when the model is created.<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last time modified the model properties. Note that datatables containing the eventlog data are separate objects having similar fields to track the last modification and last data import.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the model was modified the last time.<br />
|-<br />
||Name (String)<br />
||Model name.<br />
|-<br />
||NCache (Integer)<br />
||Number of objects related to the model when the model is loaded into the memory.<br />
|-<br />
||NCaseAttributes (Integer)<br />
||Number of [[#AttributeType|CaseAttributes]] in model. Works only for in-memory models.<br />
|-<br />
||NCases (Integer)<br />
||Number of [[#Case|Cases]] in the model. Works only for in-memory models.<br />
|-<br />
||NEventAttributes (Integer)<br />
||Number of [[#AttributeType|EventAttributes]] in model. Works only for in-memory models.<br />
|-<br />
||NEvents (Integer)<br />
||Number of [[#Event|Events]] in model. Works only for in-memory models.<br />
|-<br />
||NEventTypes (Integer)<br />
||Number of [[#EventType|EventTypes]] in the model. Works only for in-memory models.<br />
|-<br />
||NOpens (Integer)<br />
||Number of times analysis has been requested from the model.<br />
|-<br />
||Project (Project)<br />
||[[#Project|Project]] where the model belongs to.<br />
|-<br />
||ProjectId (Integer)<br />
||[[#Project|Project]] id where the model belongs to.<br />
|-<br />
||Status (String)<br />
||<br />
Memory availability status of the model. There are the following statuses:<br />
* '''Loading''': The model is currently loading into the memory. When the loading is ready, the status changes to ''online''. If the loading fails, the status changes to ''offline''.<br />
* '''Offline''': The model is currently not loaded into the memory. The model needs to be loaded into the memory, so that analyses can be calculated from the model (occurs automatically when an analysis is requested).<br />
* '''Online''': The model is in the memory and ready for analysis calculation. If the model is dropped from the memory, its status changes to ''offline''.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Model Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||CalendarByName (BusinessCalendar)<br />
||<br />
name (String)<br />
||<br />
Returns a [[Business_Calendar|business calendar]] stored to the Model by the name of the calendar. Business calendars can be stored to models in the model properties. Returns ''null'', if a calendar with the provided name is not stored to the model.<br />
<br />
Examples:<br />
<pre><br />
ModelById(123).CalendarByName("MyCalendar")<br />
</pre><br />
|-<br />
||CreateDiagram (Diagram)<br />
||Parameters dictionary<br />
||<br />
Creates a [[Diagram_in_Expression_Language|diagram]] to the model. Parameters is a dictionary containing diagram properties. Following properties are available:<br />
* '''Name''' (string): Diagram name that distinguishes diagrams in a model.<br />
* '''Description''' (string): Diagram description text.<br />
* '''Content''' (dictionary): Diagram content as dictionary.<br />
<br />
Example:<br />
<pre><br />
ModelById(1)<br />
.CreateDiagram(#{<br />
"Name": "My diagram",<br />
"Description": "This is my new diagram",<br />
"Content": #{ ... },<br />
})<br />
</pre><br />
|-<br />
||CreateFilter (Filter)<br />
||Parameters dictionary<br />
||Creates a filter to a model. Requires ''GenericWrite'' permission for the project and global ''CreateModel'' permission. If a filter with that name already exists in the model, an exception is thrown.<br />
The parameters dictionary may have the following properties:<br />
* '''Name''': Name of the filter. This property is mandatory.<br />
* '''Description''': Description of the filter. This property is optional.<br />
* '''Rules''': Filter rules for the filter defined as a dictionary according to the [[Filtering_in_QPR_ProcessAnalyzer_Queries|filter json format]]. This property is mandatory.<br />
* '''PublishMode''': Publish mode of the filter which is one of the following: ''Private'', ''Public'' or ''Default''. This property is optional, and the default value is ''Private''.<br />
<br />
Example:<br />
<pre><br />
let newFilter = modelById(1).CreateFilter(#{ <br />
"Name": "My Filter",<br />
"Rules": #{<br />
"Items": [#{<br />
"Type": "IncludeCases",<br />
"Items": [#{<br />
"Type": "CaseAttributeValue",<br />
"Attribute": "Account Manager",<br />
"StringifiedValues": [ "0Robert Miller" ]<br />
}]<br />
}]<br />
},<br />
"PublishMode": "Public"<br />
});<br />
}<br />
</pre><br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||Deletes the Model permanently. The model doesn't need to be in the recycle bin to be able to delete it permanently.<br />
|-<br />
||Modify (Model)<br />
||Dictionary<br />
||<br />
Modifies model properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: ''Name'', ''Description'', ''ProjectId'', and ''Configuration''.<br />
<br />
The function returns the updated model object. Requires the ''GenericWrite'' permission for the project and the global ''CreateModel'' permission.<br />
<br />
Example:<br />
<pre><br />
ModelById(1)<br />
.Modify(#{<br />
"Name": "My model",<br />
"Description": "My description",<br />
"ProjectId": 2,<br />
"Configuration": #{<br />
"DataSource": #{<br />
"Cases": #{<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My cases datatable",<br />
"Columns": #{<br />
"CaseId": "Case Name"<br />
}<br />
},<br />
"Events": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My events datatable",<br />
"Columns": #{<br />
"CaseId": "Case Name",<br />
"EventType": "Event Type",<br />
"Timestamp": "Start Time"<br />
}<br />
}<br />
}<br />
}<br />
}<br />
)<br />
</pre><br />
|-<br />
||ResetPreprocessings<br />
||(none)<br />
||<br />
Removes all cached items related to the Model, e.g. preprocessings and calculation results. In practice, the Model is reset to a state where it was right after the model was loaded into memory.<br />
|-<br />
||Restore<br />
||(none)<br />
||Restores the Model from the recycle bin back to the original location.<br />
|-<br />
||<span id="ToSqlDataFrame">ToSqlDataFrame</span><br />
||In-memory dataframe<br />
||Converts an in-memory dataframe to an SQL dataframe. In practice, an SQL query is created from the in-memory dataframe and the query is executed in the datasource so that the data is available in the datasource for further SQL operations. This function is intended only to small amounts of data which is less than 16384 rows.<br />
<br />
Example: Select matching cases from events data using in-memory dataframe:<br />
<pre><br />
let model = ModelById(1);<br />
let dfEvents = model.EventsDatatable.SqlDataFrame;<br />
let inMemoryDf = ToDataFrame(<br />
[["1"], ["2"], ["3"]],<br />
[#{"Name": "id", "DataType": "String"}]<br />
);<br />
model.ToSqlDataFrame(inMemoryDf)<br />
.Join(dfEvents, ["id": "CaseId"])<br />
.SelectDistinct(["CaseId"])<br />
.Collect();<br />
</pre><br />
|-<br />
||<span id="TriggerNotifications">TriggerNotifications</span> (Boolean)<br />
||Notification names (String*)<br />
||Triggers the given notifications for the Model. Notifications are given by their names. Triggering means that the configured rules are run and notification emails are sent as defined by the rules. If the notification names parameter is not provided, all notifications in the Model are triggered.<br />
<br />
The function return ''true'' if any notification were triggered, otherwise ''false''.<br />
<pre><br />
ModelById(123).TriggerNotifications(["Notification 1", "Notification 2"]);<br />
Triggers notifications Notification 1 and Notification 2 in model id 123.<br />
<br />
ModelById(123).TriggerNotifications();<br />
Triggers all notifications in model id 123.<br />
</pre><br />
|}<br />
<br />
Function to get Model by model id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ModelById<br />
||<br />
* Model id (Integer)<br />
||<br />
Returns [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Model|Model]] object corresponding to the provided model id.<br />
|}<br />
<br />
== Project ==<br />
{| class="wikitable"<br />
!'''Project properties'''<br />
! '''Description'''<br />
|-<br />
||CreatedBy (User)<br />
||User who created the Project.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the Project was created.<br />
|-<br />
||Dashboards (Dashboard*)<br />
||Returns all [[Dashboard_in_Expression_Language|dashboards]] in the project.<br />
|-<br />
||Datatables (Datatable*)<br />
||Returns all Datatables in the project.<br />
|-<br />
||DeletedDate (DateTime)<br />
||Timestamp when the Project was deleted (moved to the recycle bin).<br />
|-<br />
||Description (String)<br />
||Project description. The project description may contain line breaks.<br />
|-<br />
||DeletedBy (User)<br />
||User who deleted the Project (moved to the recycle bin).<br />
|-<br />
||Id (Integer)<br />
||Id of the Project.<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last modified the Project.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the Project was last modified (refers to the project name, description and parent, not the contents of the project).<br />
|-<br />
||Name (String)<br />
||Name of the Project.<br />
|-<br />
||Models (Model*)<br />
||Models that are in the Project.<br />
|-<br />
||Parent (Project)<br />
||Parent project, i.e. a Project where the Project is located in the hierarchy of Projects. Returns ''null'' for root level Projects. Throws an error if user doesn't have access to the parent project.<br />
|-<br />
||ParentProjectId (Integer)<br />
||Parent project id. Returns ''null'' for root level Projects. The parent project id is returned even if user doesn't have access to the parent project.<br />
|-<br />
||Scripts (Script*)<br />
||Scripts that are in the Project.<br />
|-<br />
||Secrets (Dictionary*)<br />
||Returns array of all [[Storing_Secrets_for_Scripts|secrets]] in the project as Dictionary with following properties:<br />
* '''Name''' (string): Name of the secret.<br />
* '''Type''' (string): Type of the secret which is one of the following: "odbc", "sap", "salesforce".<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Project functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||CreateDashboard (Dashboard)<br />
||Parameters dictionary<br />
||Creates a dashboard to the project. ''EditDashboards'' permission to the project is required. The parameter is dictionary with following supported dashboard properties:<br />
* '''Name''' (String): Name of the dashboard.<br />
* '''Identifier''' (String): Identifier of the dashboard.<br />
* '''Description''' (String): Description of the dashboard.<br />
* '''Content''' (Dictionary): Content of the dashboard.<br />
<br />
Example: Create empty dashboard.<br />
<pre><br />
ProjectById(1)<br />
.CreateDashboard(#{<br />
"Name": "My dashboard",<br />
"Identifier": "MyDashboard"<br />
});<br />
</pre><br />
<br />
Example: Create dashboard with a chart.<br />
<pre><br />
ProjectById(1)<br />
.CreateDashboard(#{<br />
"Name": "My dashboard",<br />
"Content": #{<br />
"version": 4,<br />
"typeName": "View",<br />
"name": "My dashboard",<br />
"subElements": [<br />
#{<br />
"position": #{<br />
"x": 0,<br />
"y": 0,<br />
"width": 0.5,<br />
"height": 0.5,<br />
"zOrder": 0<br />
},<br />
"element": #{<br />
"typeName": "Chart",<br />
"configuration": #{<br />
"root": #{<br />
"expressionType": "Cases",<br />
"expressionParameters": #{}<br />
},<br />
"measures": [#{<br />
"expressionType": "Count",<br />
"expressionParameters": #{}<br />
}]<br />
}<br />
}<br />
}<br />
]<br />
}<br />
});<br />
</pre><br />
|-<br />
||<span id="CreateDatatable">CreateDatatable</span> (Datatable)<br />
||<br />
* Parameters dictionary<br />
||Creates datatable to the project. After creation, there are no columns or rows in the datatable. The function returns the created datatable entity. Following properties can be set for the datatable:<br />
* '''Name''' (string): Name of the datatable. This parameter is mandatory.<br />
* '''Description''' (string): Description for the datatable. This parameter is optional.<br />
* '''NameInDataSource''' (string): Table name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''SchemaNameInDataSource''' (string): Schema name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''DatabaseNameInDataSource''' (string): Database name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''Type''' (string): Defines where the data for the datatable is located. Available values are '''Snowflake''', '''SqlServer''', and '''Local'''. This parameter is optional and default value is defined by the [[PA_Configuration_database_table#General_Settings|DefaultDataSource]] setting.<br />
* '''Connection''': Connection object for the datatable. This parameter is optional.<br />
<br />
Example: Create a new datatable:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable"<br />
});<br />
</pre><br />
<br />
Example: Create Snowflake datatable linked to a custom table:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable",<br />
"Description": "My description",<br />
"NameInDataSource": "MyTable",<br />
"SchemaNameInDataSource": "MySchema",<br />
"DatabaseNameInDataSource": "MyDatabase",<br />
"Type": "Snowflake"<br />
});<br />
</pre><br />
<br />
Example: Create Snowflake datatable where connection string is stored as a [[Storing_Secrets_for_Scripts|secret]]:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable",<br />
"Type": "Snowflake",<br />
"Connection": ProjectById(1).CreateSnowflakeConnection(#{ "OdbcConnectionStringKey": "MyKey" })<br />
});<br />
</pre><br />
|-<br />
||CreateModel (Model)<br />
||<br />
* Parameters dictionary<br />
||Creates a model to a project. Requires ''GenericWrite'' permission for the Project and global ''CreateModel'' permission. If a model with that name already exists, an exception is thrown.<br />
<br />
Parameters dictionary has the following properties:<br />
* '''Name''': Name of the model. This property is mandatory.<br />
* '''Description''': Description of the model. This property is optional.<br />
* '''Configuration''': Configuration dictionary for the model. This property is technically optional, but a working model requires at least datasource settings to be defined.<br />
<br />
Example:<br />
<pre><br />
ProjectById(1).CreateModel(#{ <br />
"Name": "My model",<br />
"Description": "My description",<br />
"Configuration": {<br />
"DataSource": {<br />
"Cases": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My cases datatable",<br />
"Columns": {<br />
"CaseId": "Case Name"<br />
}<br />
},<br />
"Events": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My events datatable",<br />
"Columns": {<br />
"CaseId": "Case Name",<br />
"EventType": "Event Type",<br />
"Timestamp": "Start Time"<br />
}<br />
}<br />
}<br />
}<br />
});<br />
</pre><br />
|-<br />
||DatatableByName (Datatable)<br />
||Datatable name (String)<br />
||<br />
Returns Datatable by its name located in the project. Returns null, if Datatable with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).DatatableByName("MyDatatable1")<br />
</pre><br />
<br />
Example: Get datatable by name, and create it if it doesn't exist:<br />
<pre><br />
let project = ProjectById(123);<br />
let datatableName = "MyDatatable1";<br />
let datatable = project.DatatableByName(datatableName);<br />
if (datatable == null) {<br />
datatable = project.CreateDatatable(datatableName);<br />
}<br />
</pre><br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||Deletes the Project permanently. Note that the Project doesn't need to be in the recycle bin to be able to delete it permanently.<br />
|-<br />
||Restore<br />
||(none)<br />
||Restores the Project from the recycle bin back to the original location.<br />
|-<br />
||ModelByName (Model)<br />
||Model name (String)<br />
||<br />
Returns Model by its name located in the project. Returns null, if Model with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).ModelByName("My Model 1")<br />
</pre><br />
|-<br />
||ScriptByName (Script)<br />
||Script name (String)<br />
||<br />
Returns Script by its name located in the project. Returns null, if Script with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).ScriptByName("MyScript1")<br />
</pre><br />
|-<br />
||<span id="SetSecret">SetSecret</span><br />
||<br />
# Secret type (string)<br />
# Secret name (string)<br />
# Secret value (string)<br />
||Sets or adds a [[Storing_Secrets_for_Scripts|secret]] for the project. Setting the secret value to ''null'' removes the secret. There can be several secrets with the same name in the same project if the type of the secret is different. Setting secrets requires the project specific ''ManageProject'' permission.<br />
<br />
Parameters:<br />
# '''Type''' (string): Secret type which is one of the following:<br />
#* "odbc": ODBC connection string (e.g., to extract data, or load a model directly)<br />
#* "externaldatatableconnection": ODBC connection string used for a datatable<br />
#* "sap": SAP password<br />
#* "salesforce": Salesforce password<br />
# '''Name''' (string): Secret name, used to refer to the secret in the commands.<br />
# '''Value''' (string): Secret value which contains the confidential information.<br />
<br />
Example: Set SAP password:<br />
<pre><br />
ProjectById(1).SetSecret("sap", "MySapPassword", "I l0ve 5AP!");<br />
</pre><br />
<br />
Example: Remove SAP password:<br />
<pre><br />
ProjectById(1).SetSecret("sap", "MySapPassword", null);<br />
</pre><br />
|}<br />
<br />
Function to get Project by id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ProjectById<br />
||Project id (Integer)<br />
||<br />
Returns project object corresponding to the provided project id.<br />
|-<br />
||ProjectByName<br />
||Project name (String)<br />
||<br />
Returns project object by given project name. If there is no such project or user doesn't have access to it, ''null'' value is returned. If there are multiple projects with the same name, one of them is returned.<br />
<br />
Example:<br />
<pre><br />
let project = ProjectByName("My Project");<br />
</pre><br />
|}<br />
<br />
== Script ==<br />
Scripts are entities that contain executable code, that can be run. Usually scripts contains ETL routines but also other kind of tasks are possible.<br />
<br />
{| class="wikitable"<br />
!'''Script properties'''<br />
! '''Description'''<br />
|-<br />
||Code (String)<br />
||Script code.<br />
|-<br />
||CreatedBy (User)<br />
||User who created the Script.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the Script was created.<br />
|-<br />
||CurrentRunStart (DateTime)<br />
||Timestamp of the current run start. Null if the script is currently not running.<br />
|-<br />
||Description (String)<br />
||Description of the Script.<br />
|-<br />
||Id (Integer)<br />
||Id of the Script.<br />
|-<br />
||Language (String)<br />
||Either of the following scripting language: '''Expression''' or '''SQL'''. When language is Expression, the script is run as an expression script, and when language is SQL, the script is run as an SQL script (using the sandbox database).<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last modified the Script.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the Script was last modified.<br />
|-<br />
||LastRunEnd (DateTime)<br />
||Timestamp of the last completed script run end (either successful completion or failure). Null if the Script hasn't been run yet.<br />
|-<br />
||LastRunResult (String)<br />
||Result of the last run. Options are:<br />
* '''Completed''': The last run was completed successfully.<br />
* '''Failed''': An error occurred during the last run, so likely the script did not complete as intended.<br />
* '''Aborted''': Script run was manually stopped prematurely by a user, so the script did not proceeded in the end.<br />
<br />
Null if the Script hasn't been run yet.<br />
|-<br />
||LastRunStart (DateTime)<br />
||Timestamp of the last completed script run start time. Null if the Script hasn't been run yet.<br />
|-<br />
||Name (String)<br />
||Name of the Script.<br />
|-<br />
||OperationId (Integer)<br />
||Id of the operation which runs the Script. Null if the script is currently not running.<br />
|-<br />
||Project (Project)<br />
||Project where the Script is located. Null if the script is in the global context.<br />
|-<br />
||ProjectId (Integer)<br />
||Id of the project where the Script is located. Null if the script is in the global context.<br />
|-<br />
||Status (String)<br />
||Current status of the script. Options are:<br />
* '''Ready''': Script is not running. In this status, the script can be started (changing the status to ''Running'').<br />
* '''Running''': Script is running. In this status, the script can be stopped (changing the status to ''Stopping''). Calling stop just requests a script to stop, and the actual stopping occurs some time later.<br />
* '''Stopping''': Script has been requested to be stopped, but it's still running. In this status, neither start nor stop can be called for the script. When the script eventually stops, its status changes to ''Ready''.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Script functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||Run (Object)<br />
||Dictionary of parameters<br />
||<br />
Runs the script using the provided parameters. The parameters are available in the script as variables (see the example). Any type of variables can be passed to the script. Note that if the script assumes certain variables, but that they are not passed to the script, the script run will throw an error. <br />
<br />
For SQL scripts, the passed parameters are available in the script as variables in format '''@_parameter_<ParameterName>''' where <ParameterName> is the name of the parameter, e.g. ''parameter_myParameter1''. Only string type of parameters can be used, so any other type of data in parameter values is converted into strings.<br />
<br />
The return value of the script is returned by the Run function. Expression scripts return a value with the ''return'' statement or alternatively the result of the last line of the script is the return value. If the script does not return any value, the Run function returns ''_empty''. For SQL scripts, the return value is the last dataset produced by the script (returned as a DataFrame) (SQL scripts might create several datasets using the ''--#ShowReport'' command or the ''Show'' parameter).<br />
<br />
When a script is called using the Run function, the called script status does not change, because it's the parent script that is ''Running''. Also the called script log is not filled, but instead the logging goes to the calling script.<br />
<br />
It's possible to call a script using the Run function several times simultaneously.<br />
<br />
If there is an error when running the called script, the Run function throws the error to the calling script.<br />
<br />
Scripts are run in the script entity context, so for example the following properties are available:<br />
* Id: Script id<br />
* Name: Script name<br />
* Project.Id: Project id where the script is located<br />
* Project.Name: Name of the project where the script is located<br />
<br />
Example: Following script (id 123) raises a specified number to a specified power:<br />
<pre><br />
return Pow(numberToRaise, exponent);<br />
</pre><br />
<br />
The script can be called as follows (returning 16):<br />
<pre><br />
let runResult = ScriptById(123).Run(#{<br />
"numberToRaise": 4,<br />
"exponent": 2<br />
})<br />
</pre><br />
|-<br />
||Start<br />
||Dictionary of parameters<br />
||Starts the script. The function call doesn't wait for the script run to complete (i.e., asynchronous behavior) which is similar to starting the script in the Workspace.<br />
<br />
Parameters to the script can be provided as a dictionary of name-value pairs (which is not possible when script is started in the Workspace). Return value is the script run id (integer) if the script was started. If the script was already running, return value is ''null''.<br />
<br />
Example: Start script (without parameters) and store the script run id:<br />
<pre><br />
let runId = ScriptById(1).Start();<br />
</pre><br />
<br />
Example: Start script with passing parameters:<br />
<pre><br />
ScriptById(1).Start(#{<br />
"variable1": "val1",<br />
"variable2": 5<br />
});<br />
</pre><br />
|-<br />
||Stop<br />
||<br />
||Stops the script. The operation doesn't wait for the stopping to complete (i.e., asynchronous behavior) which corresponds to stopping the script in the Workspace. Depending on the operation that the script is performing, the stopping might take some time.<br />
<br />
Return value is the script run id (integer) if the script was running. If the script wasn't running, the return value is ''null''.<br />
<br />
Example:<br />
<pre><br />
let runId = ScriptById(1).Stop();<br />
</pre><br />
|}<br />
<br />
Function to get a script by the script id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ScriptById<br />
||<br />
* Script id (Integer)<br />
||<br />
Returns Script object corresponding to the given script id. If script with the given id doesn't exist or user doesn't have permissions to it, an error is given.<br />
|}<br />
<br />
== User/Group ==<br />
User objects represents users and user groups. Note that some properties can only be used for users and some for groups.<br />
<br />
{| class="wikitable"<br />
!'''User/group properties'''<br />
! '''Description'''<br />
|-<br />
||Description (String)<br />
||Description of the user.<br />
|-<br />
||Email (String)<br />
||Email address of the user.<br />
|-<br />
||FullName (String)<br />
||Full name of the user or group name.<br />
|-<br />
||GlobalPermissions (String*)<br />
||Array of global [[Roles and Permissions#Global_and_Project_Roles|permissions]] of the user. Global permissions come from the global roles assigned to the user and groups that the user belongs to. Note that to get the effective permissions for certain objects, also project specific permissions need to be taken into account.<br />
|-<br />
||GroupMemberNames (String*)<br />
||Array of names of members of a user group. This property is available for groups.<br />
|-<br />
||GroupMembers (User*)<br />
||Array of members of a user group. This property is available for groups.<br />
|-<br />
||GroupNames (String*)<br />
||Array of names of user groups the user belongs to. This property is available for users.<br />
|-<br />
||Groups (User*)<br />
||Array of user groups the user belongs to. This property is available for users.<br />
|-<br />
||HasPassword (Boolean)<br />
||Returns true if user has a password defined in QPR ProcessAnalyzer and thus user can authenticate using the password. If user doesn't have a password, the SAML authentication is the only way to log in. ''ManageUsers'' permission is needed to access this property for other users.<br />
|-<br />
||Id (Integer)<br />
||Id of the user, which is unique for every user.<br />
|-<br />
||IsActive (Boolean)<br />
||Returns true only if the user is active (not disabled).<br />
|-<br />
||IsGroup (Boolean)<br />
||Returns true if the user is a user group.<br />
|-<br />
||IsLocked (Boolean)<br />
||Returns true if user account is currently [[User_Session_Management#Preventing_password_guessing_attacks|locked]]. ''ManageUsers'' permission is needed to access this property.<br />
|-<br />
||LastLockedDate (DateTime)<br />
||Returns date when user account was locked the last time. Returns ''null'' if the user account has never been locked. ''ManageUsers'' permission is needed to access this property.<br />
|-<br />
||LastLoginDate (DateTime)<br />
||Returns date when the user made last successful login. ''ManageUsers'' permission is needed to access this property for other users.<br />
|-<br />
||Name (String)<br />
||Login name of the user or group.<br />
|-<br />
||Roles (Object**)<br />
||<br />
Returns all roles of the user (both global and project roles) as a nested array structure.<br />
<br />
Example:<br />
<pre><br />
ToJson(Users.Where(name == "qpr").Roles)<br />
Returns (for example):<br />
[<br />
[{"calcId": "Project:1"}, "Administrator"],<br />
[{"calcId": "Project:2"}, "Analyzer"],<br />
[{"calcId": "Project:3"}, "Viewer"],<br />
[null, "RunScripts"],<br />
[null, "Administrator"]<br />
]<br />
</pre><br />
|}<br />
<br />
{| class="wikitable"<br />
!'''User/group functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||EffectivePermissionsFor (String Array)<br />
||<br />
* Project to get permissions<br />
||<br />
Returns effective (actual) permission of the user to the given project. Project is given as a [[#Project|project object]] (not as a project id). Effective permissions determine the actual permissions that the user has, i.e. a combination of all permissions assigned to the user and groups the user belong to, including both project specific and global roles.<br />
<br />
Permissions for the EffectivePermissionsFor function are as follows:<br />
* All users can query their own permissions<br />
* To get permissions for any user, the user needs to have [[Roles_and_Permissions|ManageUsers permission]].<br />
<br />
Note that ''inactive'' users don't have any effective permissions, so the EffectivePermissionsFor function does not return any permissions for those users.<br />
<br />
Examples:<br />
<pre><br />
EffectivePermissionsFor(ModelById(1234).Project)<br />
Returns (for example): ["EditDashboards", "Filtering", "GenericRead"]<br />
</pre><br />
|-<br />
||GetAttribute<br />
||<br />
||<br />
Returns user attribute value by given attribute name and optionally by the model/project/dashboard context. Supported data types are String, Integer, Float, and DateTime. To store more complex data types, data can be converted into json and stored as string. If the attribute doesn't exist, null is returned.<br />
<br />
For example, if using dashboard as context, the attributes are effectively bound to each user and each dashboard separately. Thus, there can be several attributes with the same name as long as the dashboard is different.<br />
<br />
Parameters:<br />
# '''Attribute name''' (String): Name of the attribute.<br />
# '''Attribute context''' (Project/Model/Dashboard): Optional context object the attribute is linked to.<br />
<br />
Users have permissions to get attributes for themselves, and also (administrator) users with global ''ManageUsers'' permission can get attributes for all users. In addition, if using the context object, the ''GenericRead'' permission is required for the context object.<br />
<br />
Example: Get user attribute MyDataValue for myself:<br />
<pre><br />
CurrentUser<br />
.GetAttribute("MyDataValue");<br />
</pre><br />
<br />
Example: Get user attribute MyDataValue for user John:<br />
<pre><br />
Users<br />
.Where(Name=="John")<br />
.GetAttribute("MyDataValue");<br />
</pre><br />
<br />
Example: Get user attribute MyDataValue for user 1 related to dashboard id 1:<br />
<pre><br />
UserById(1)<br />
.GetAttribute("MyDataValue", DashboardById(1));<br />
</pre><br />
|-<br />
||SetAttribute<br />
||<br />
||<br />
Sets user attribute value for given attribute name and optionally for the model/project/dashboard context. Supported data types are String, Integer, Float, and DateTime. To store more complex data types, data can be converted into json and stored as string. If setting value ''null'', the user attribute is removed. Required permissions are same as in the GetAttribute function.<br />
<br />
Parameters:<br />
# '''Attribute name''' (String): Name of the attribute.<br />
# '''Attribute value''' (String/Integer/Float/DateTime): Attribute value to be stored.<br />
# '''Attribute context''' (Project/Model/Dashboard): Optional context object the attribute value is linked to.<br />
<br />
Example: Set user attribute MyDataValue for myself:<br />
<pre><br />
CurrentUser<br />
.SetAttribute("MyDataValue ", "value");<br />
</pre><br />
<br />
Example: Set value 123 as user attribute MyDataValue for user John:<br />
<pre><br />
Users<br />
.Where(Name=="John")<br />
.SetAttribute("MyDataValue", 123);<br />
</pre><br />
<br />
Example: Set current time as user attribute MyDataValue for user 1 related to dashboard id 1:<br />
<pre><br />
UserById(1)<br />
.GetAttribute("MyDataValue", Now, DashboardById(1));<br />
</pre><br />
|}<br />
<br />
Function to get User by user id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||UserById<br />
||<br />
* User id (Integer)<br />
||<br />
Returns User object corresponding to the provided user id.<br />
|}</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Objects_in_Expression_Language&diff=24500QPR ProcessAnalyzer Objects in Expression Language2024-03-28T14:35:35Z<p>Ollvihe: /* Script */</p>
<hr />
<div>==Filter==<br />
Filters contain a set of filter rules used to filter cases and events in models. Filters are objects located in the models. Filters are owned by the creator user, and when a filter publish mode is private, only the creator can use it.<br />
<br />
{| class="wikitable"<br />
!'''Filter properties'''<br />
! '''Description'''<br />
|-<br />
||CreatedBy (User)<br />
||Returns the user who created the filter.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Returns date when the filter created date.<br />
|-<br />
||Description (String)<br />
||Returns description of the filter.<br />
|-<br />
||Id (Integer)<br />
||Returns id of the filter.<br />
|-<br />
||LastModifiedBy (User)<br />
||Returns user who modified the filter.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Returns date when the filter last modified.<br />
|-<br />
||Model<br />
||Returns model where the filter belongs to.<br />
|-<br />
||ModelId (Integer)<br />
||Returns model where the filter belongs to.<br />
|-<br />
||Name (String)<br />
||Returns the name of the filter.<br />
|-<br />
||Project<br />
||Returns project where the filter belongs to.<br />
|-<br />
||ProjectId (Integer)<br />
||Returns project id where the filter belongs to.<br />
|-<br />
||PublishMode (String)<br />
||Returns publish mode of the filter, one of the following: '''Private''', '''Public''', or '''Default'''.<br />
|-<br />
||Rules (Dictionary)<br />
||Returns a dictionary containing the filter rules in the filter.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Filter Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||<br />
Deletes the filter permanently. To delete own filters, the '''Filtering''' permission is needed, and to delete any filters the '''ManageViews''' permission is needed.<br />
|-<br />
||Modify<br />
||Dictionary<br />
||<br />
Modifies filter properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: ''Name'', ''Description'', ''PublishMode'', and ''Rules''.<br />
<br />
The function returns the updated filter object. Requires ''GenericWrite'' permission for the Project and global ''CreateModel'' permission.<br />
<br />
Example:<br />
<pre><br />
FilterById(1)<br />
.Modify(#{<br />
"Name": "My filter",<br />
"Description": "My description",<br />
"PublishMode": "Public",<br />
"Rules": #{<br />
"Items": [<br />
#{<br />
"Type": "IncludeCases",<br />
"Items": [<br />
#{<br />
"Type": "CaseAttributeValue",<br />
"Attribute": "Account Manager",<br />
"StringifiedValues": [<br />
"0Mary Wilson"<br />
]<br />
}<br />
]<br />
}<br />
]<br />
}<br />
}<br />
)<br />
</pre><br />
|}<br />
<br />
Function to get filter id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||FilterById<br />
||<br />
* Filter id (Integer)<br />
||<br />
Returns Filter object corresponding to the provided filter id.<br />
|}<br />
<br />
==Model==<br />
Notes:<br />
* For in-memory models that are offline, the object counts represent the situation when the model was last time online (loaded into the memory). ''null'' is returned if the model has never been loaded into the memory.<br />
* If [[Case_Level_Permissions|Case permissions]] are used for the model, and user doesn't have '''GenericWrite''' permission for the model, ''null'' is returned for data security reasons. Users that have the '''GenericWrite''' permission, see null when the model is offline, and when online, they see counts where the case level permissions settings are applied.<br />
* Properties ''CaseAttributes'', ''EventAttributes'' and ''Eventlog'' work only for the in-memory models and they require the model to be loaded into the memory. If the model is not in the memory, it is loaded when these properties is used. Other model properties down require the model to be in the memory.<br />
<br />
{| class="wikitable"<br />
!'''Model properties'''<br />
! '''Description'''<br />
|-<br />
||Calendars (BusinessCalendar*)<br />
||<br />
Returns all [[Business_Calendar|business calendars]] stored to the Model as an array. Returns an empty array, if there are no business calendars stored to the model. Note: UI allows to set only one business calendar for a Model.<br />
|-<br />
||CaseAttributes (AttributeType*)<br />
||[[#AttributeType|CaseAttributes]] in the model returned in the alphabetical order. Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||CasesDatatable (Datatable)<br />
||Returns the Datatable the model uses as a datasource for cases. Returns ''null'' if the cases Datatable is not defined or if model uses other than the Datatable datasource.<br />
|-<br />
||Configuration (Dictionary)<br />
||Returns the Model configuration as dictionary. Example:<br />
<pre><br />
ModelById(123).Configuration.DataSource.Events.DataTableName<br />
</pre><br />
|-<br />
||ConfigurationJson (String)<br />
||Returns the Model configuration as JSON string.<br />
|-<br />
||CreatedBy (User)<br />
||User who created the model.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the model was created.<br />
|-<br />
||DefaultCalendar (BusinessCalendar)<br />
||Returns the default [[Business_Calendar|business calendar]] of the Model. Returns ''null'', if there are no calendars in the Model or no calendar has been set as a default calendar. Note: UI allows to set only one business calendar for a Model, which is also the default calendar.<br />
|-<br />
||DefaultFilter (Filter)<br />
||Default filter of the model. Returns ''null'' if the model does not have a default filter.<br />
|-<br />
||DefaultFilterId (Integer)<br />
||Default filter id of the model. Returns ''null'' if the model does not have a default filter.<br />
|-<br />
||Description (String)<br />
||Model description. The model description may contain line breaks.<br />
|-<br />
||DeletedDate (DateTime)<br />
||Timestamp when Model was deleted (moved to the recycle bin).<br />
|-<br />
||DeletedBy (User)<br />
||User how deleted the Model.<br />
|-<br />
||Diagrams (Diagram*)<br />
||Returns an array of all [[Diagram_in_Expression_Language|diagrams]] in the model.<br />
|-<br />
||EstimatedMemory (Integer)<br />
||Returns an estimation of how much memory in bytes the model requires.<br />
|-<br />
||EventsDatatable (Datatable)<br />
||Returns the Datatable the model uses as a datasource for events. Returns ''null'' if the events Datatable is not defined or if model uses other than the Datatable datasource.<br />
|-<br />
||EventAttributes (AttributeType*)<br />
||[[#AttributeType|EventAttributes]] in the model returned in the alphabetical order. Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||EventLog (EventLog)<br />
||EventLog containing the entire model (i.e. event log where no filters have been applied). Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||Filters (Filter*)<br />
||Returns an array of all [[#Filter|filters]] in the model.<br />
|-<br />
||Id (Integer)<br />
||Model Id. Model Id is generated by QPR ProcessAnalyzer when the model is created.<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last time modified the model properties. Note that datatables containing the eventlog data are separate objects having similar fields to track the last modification and last data import.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the model was modified the last time.<br />
|-<br />
||Name (String)<br />
||Model name.<br />
|-<br />
||NCache (Integer)<br />
||Number of objects related to the model when the model is loaded into the memory.<br />
|-<br />
||NCaseAttributes (Integer)<br />
||Number of [[#AttributeType|CaseAttributes]] in model. Works only for in-memory models.<br />
|-<br />
||NCases (Integer)<br />
||Number of [[#Case|Cases]] in the model. Works only for in-memory models.<br />
|-<br />
||NEventAttributes (Integer)<br />
||Number of [[#AttributeType|EventAttributes]] in model. Works only for in-memory models.<br />
|-<br />
||NEvents (Integer)<br />
||Number of [[#Event|Events]] in model. Works only for in-memory models.<br />
|-<br />
||NEventTypes (Integer)<br />
||Number of [[#EventType|EventTypes]] in the model. Works only for in-memory models.<br />
|-<br />
||NOpens (Integer)<br />
||Number of times analysis has been requested from the model.<br />
|-<br />
||Project (Project)<br />
||[[#Project|Project]] where the model belongs to.<br />
|-<br />
||ProjectId (Integer)<br />
||[[#Project|Project]] id where the model belongs to.<br />
|-<br />
||Status (String)<br />
||<br />
Memory availability status of the model. There are the following statuses:<br />
* '''Loading''': The model is currently loading into the memory. When the loading is ready, the status changes to ''online''. If the loading fails, the status changes to ''offline''.<br />
* '''Offline''': The model is currently not loaded into the memory. The model needs to be loaded into the memory, so that analyses can be calculated from the model (occurs automatically when an analysis is requested).<br />
* '''Online''': The model is in the memory and ready for analysis calculation. If the model is dropped from the memory, its status changes to ''offline''.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Model Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||CalendarByName (BusinessCalendar)<br />
||<br />
name (String)<br />
||<br />
Returns a [[Business_Calendar|business calendar]] stored to the Model by the name of the calendar. Business calendars can be stored to models in the model properties. Returns ''null'', if a calendar with the provided name is not stored to the model.<br />
<br />
Examples:<br />
<pre><br />
ModelById(123).CalendarByName("MyCalendar")<br />
</pre><br />
|-<br />
||CreateDiagram (Diagram)<br />
||Parameters dictionary<br />
||<br />
Creates a [[Diagram_in_Expression_Language|diagram]] to the model. Parameters is a dictionary containing diagram properties. Following properties are available:<br />
* '''Name''' (string): Diagram name that distinguishes diagrams in a model.<br />
* '''Description''' (string): Diagram description text.<br />
* '''Content''' (dictionary): Diagram content as dictionary.<br />
<br />
Example:<br />
<pre><br />
ModelById(1)<br />
.CreateDiagram(#{<br />
"Name": "My diagram",<br />
"Description": "This is my new diagram",<br />
"Content": #{ ... },<br />
})<br />
</pre><br />
|-<br />
||CreateFilter (Filter)<br />
||Parameters dictionary<br />
||Creates a filter to a model. Requires ''GenericWrite'' permission for the project and global ''CreateModel'' permission. If a filter with that name already exists in the model, an exception is thrown.<br />
The parameters dictionary may have the following properties:<br />
* '''Name''': Name of the filter. This property is mandatory.<br />
* '''Description''': Description of the filter. This property is optional.<br />
* '''Rules''': Filter rules for the filter defined as a dictionary according to the [[Filtering_in_QPR_ProcessAnalyzer_Queries|filter json format]]. This property is mandatory.<br />
* '''PublishMode''': Publish mode of the filter which is one of the following: ''Private'', ''Public'' or ''Default''. This property is optional, and the default value is ''Private''.<br />
<br />
Example:<br />
<pre><br />
let newFilter = modelById(1).CreateFilter(#{ <br />
"Name": "My Filter",<br />
"Rules": #{<br />
"Items": [#{<br />
"Type": "IncludeCases",<br />
"Items": [#{<br />
"Type": "CaseAttributeValue",<br />
"Attribute": "Account Manager",<br />
"StringifiedValues": [ "0Robert Miller" ]<br />
}]<br />
}]<br />
},<br />
"PublishMode": "Public"<br />
});<br />
}<br />
</pre><br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||Deletes the Model permanently. The model doesn't need to be in the recycle bin to be able to delete it permanently.<br />
|-<br />
||Modify (Model)<br />
||Dictionary<br />
||<br />
Modifies model properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: ''Name'', ''Description'', ''ProjectId'', and ''Configuration''.<br />
<br />
The function returns the updated model object. Requires the ''GenericWrite'' permission for the project and the global ''CreateModel'' permission.<br />
<br />
Example:<br />
<pre><br />
ModelById(1)<br />
.Modify(#{<br />
"Name": "My model",<br />
"Description": "My description",<br />
"ProjectId": 2,<br />
"Configuration": #{<br />
"DataSource": #{<br />
"Cases": #{<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My cases datatable",<br />
"Columns": #{<br />
"CaseId": "Case Name"<br />
}<br />
},<br />
"Events": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My events datatable",<br />
"Columns": #{<br />
"CaseId": "Case Name",<br />
"EventType": "Event Type",<br />
"Timestamp": "Start Time"<br />
}<br />
}<br />
}<br />
}<br />
}<br />
)<br />
</pre><br />
|-<br />
||ResetPreprocessings<br />
||(none)<br />
||<br />
Removes all cached items related to the Model, e.g. preprocessings and calculation results. In practice, the Model is reset to a state where it was right after the model was loaded into memory.<br />
|-<br />
||Restore<br />
||(none)<br />
||Restores the Model from the recycle bin back to the original location.<br />
|-<br />
||<span id="ToSqlDataFrame">ToSqlDataFrame</span><br />
||In-memory dataframe<br />
||Converts an in-memory dataframe to an SQL dataframe. In practice, an SQL query is created from the in-memory dataframe and the query is executed in the datasource so that the data is available in the datasource for further SQL operations. This function is intended only to small amounts of data which is less than 16384 rows.<br />
<br />
Example: Select matching cases from events data using in-memory dataframe:<br />
<pre><br />
let model = ModelById(1);<br />
let dfEvents = model.EventsDatatable.SqlDataFrame;<br />
let inMemoryDf = ToDataFrame(<br />
[["1"], ["2"], ["3"]],<br />
[#{"Name": "id", "DataType": "String"}]<br />
);<br />
model.ToSqlDataFrame(inMemoryDf)<br />
.Join(dfEvents, ["id": "CaseId"])<br />
.SelectDistinct(["CaseId"])<br />
.Collect();<br />
</pre><br />
|-<br />
||<span id="TriggerNotifications">TriggerNotifications</span> (Boolean)<br />
||Notification names (String*)<br />
||Triggers the given notifications for the Model. Notifications are given by their names. Triggering means that the configured rules are run and notification emails are sent as defined by the rules. If the notification names parameter is not provided, all notifications in the Model are triggered.<br />
<br />
The function return ''true'' if any notification were triggered, otherwise ''false''.<br />
<pre><br />
ModelById(123).TriggerNotifications(["Notification 1", "Notification 2"]);<br />
Triggers notifications Notification 1 and Notification 2 in model id 123.<br />
<br />
ModelById(123).TriggerNotifications();<br />
Triggers all notifications in model id 123.<br />
</pre><br />
|}<br />
<br />
Function to get Model by model id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ModelById<br />
||<br />
* Model id (Integer)<br />
||<br />
Returns [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Model|Model]] object corresponding to the provided model id.<br />
|}<br />
<br />
== Project ==<br />
{| class="wikitable"<br />
!'''Project properties'''<br />
! '''Description'''<br />
|-<br />
||CreatedBy (User)<br />
||User who created the Project.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the Project was created.<br />
|-<br />
||Dashboards (Dashboard*)<br />
||Returns all [[Dashboard_in_Expression_Language|dashboards]] in the project.<br />
|-<br />
||Datatables (Datatable*)<br />
||Returns all Datatables in the project.<br />
|-<br />
||DeletedDate (DateTime)<br />
||Timestamp when the Project was deleted (moved to the recycle bin).<br />
|-<br />
||Description (String)<br />
||Project description. The project description may contain line breaks.<br />
|-<br />
||DeletedBy (User)<br />
||User who deleted the Project (moved to the recycle bin).<br />
|-<br />
||Id (Integer)<br />
||Id of the Project.<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last modified the Project.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the Project was last modified (refers to the project name, description and parent, not the contents of the project).<br />
|-<br />
||Name (String)<br />
||Name of the Project.<br />
|-<br />
||Models (Model*)<br />
||Models that are in the Project.<br />
|-<br />
||Parent (Project)<br />
||Parent project, i.e. a Project where the Project is located in the hierarchy of Projects. Returns ''null'' for root level Projects. Throws an error if user doesn't have access to the parent project.<br />
|-<br />
||ParentProjectId (Integer)<br />
||Parent project id. Returns ''null'' for root level Projects. The parent project id is returned even if user doesn't have access to the parent project.<br />
|-<br />
||Scripts (Script*)<br />
||Scripts that are in the Project.<br />
|-<br />
||Secrets (Dictionary*)<br />
||Returns array of all [[Storing_Secrets_for_Scripts|secrets]] in the project as Dictionary with following properties:<br />
* '''Name''' (string): Name of the secret.<br />
* '''Type''' (string): Type of the secret which is one of the following: "odbc", "sap", "salesforce".<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Project functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||CreateDashboard (Dashboard)<br />
||Parameters dictionary<br />
||Creates a dashboard to the project. ''EditDashboards'' permission to the project is required. The parameter is dictionary with following supported dashboard properties:<br />
* '''Name''' (String): Name of the dashboard.<br />
* '''Identifier''' (String): Identifier of the dashboard.<br />
* '''Description''' (String): Description of the dashboard.<br />
* '''Content''' (Dictionary): Content of the dashboard.<br />
<br />
Example: Create empty dashboard.<br />
<pre><br />
ProjectById(1)<br />
.CreateDashboard(#{<br />
"Name": "My dashboard",<br />
"Identifier": "MyDashboard"<br />
});<br />
</pre><br />
<br />
Example: Create dashboard with a chart.<br />
<pre><br />
ProjectById(1)<br />
.CreateDashboard(#{<br />
"Name": "My dashboard",<br />
"Content": #{<br />
"version": 4,<br />
"typeName": "View",<br />
"name": "My dashboard",<br />
"subElements": [<br />
#{<br />
"position": #{<br />
"x": 0,<br />
"y": 0,<br />
"width": 0.5,<br />
"height": 0.5,<br />
"zOrder": 0<br />
},<br />
"element": #{<br />
"typeName": "Chart",<br />
"configuration": #{<br />
"root": #{<br />
"expressionType": "Cases",<br />
"expressionParameters": #{}<br />
},<br />
"measures": [#{<br />
"expressionType": "Count",<br />
"expressionParameters": #{}<br />
}]<br />
}<br />
}<br />
}<br />
]<br />
}<br />
});<br />
</pre><br />
|-<br />
||<span id="CreateDatatable">CreateDatatable</span> (Datatable)<br />
||<br />
* Parameters dictionary<br />
||Creates datatable to the project. After creation, there are no columns or rows in the datatable. The function returns the created datatable entity. Following properties can be set for the datatable:<br />
* '''Name''' (string): Name of the datatable. This parameter is mandatory.<br />
* '''Description''' (string): Description for the datatable. This parameter is optional.<br />
* '''NameInDataSource''' (string): Table name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''SchemaNameInDataSource''' (string): Schema name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''DatabaseNameInDataSource''' (string): Database name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''Type''' (string): Defines where the data for the datatable is located. Available values are '''Snowflake''', '''SqlServer''', and '''Local'''. This parameter is optional and default value is defined by the [[PA_Configuration_database_table#General_Settings|DefaultDataSource]] setting.<br />
* '''Connection''': Connection object for the datatable. This parameter is optional.<br />
<br />
Example: Create a new datatable:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable"<br />
});<br />
</pre><br />
<br />
Example: Create Snowflake datatable linked to a custom table:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable",<br />
"Description": "My description",<br />
"NameInDataSource": "MyTable",<br />
"SchemaNameInDataSource": "MySchema",<br />
"DatabaseNameInDataSource": "MyDatabase",<br />
"Type": "Snowflake"<br />
});<br />
</pre><br />
<br />
Example: Create Snowflake datatable where connection string is stored as a [[Storing_Secrets_for_Scripts|secret]]:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable",<br />
"Type": "Snowflake",<br />
"Connection": ProjectById(1).CreateSnowflakeConnection(#{ "OdbcConnectionStringKey": "MyKey" })<br />
});<br />
</pre><br />
|-<br />
||CreateModel (Model)<br />
||<br />
* Parameters dictionary<br />
||Creates a model to a project. Requires ''GenericWrite'' permission for the Project and global ''CreateModel'' permission. If a model with that name already exists, an exception is thrown.<br />
<br />
Parameters dictionary has the following properties:<br />
* '''Name''': Name of the model. This property is mandatory.<br />
* '''Description''': Description of the model. This property is optional.<br />
* '''Configuration''': Configuration dictionary for the model. This property is technically optional, but a working model requires at least datasource settings to be defined.<br />
<br />
Example:<br />
<pre><br />
ProjectById(1).CreateModel(#{ <br />
"Name": "My model",<br />
"Description": "My description",<br />
"Configuration": {<br />
"DataSource": {<br />
"Cases": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My cases datatable",<br />
"Columns": {<br />
"CaseId": "Case Name"<br />
}<br />
},<br />
"Events": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My events datatable",<br />
"Columns": {<br />
"CaseId": "Case Name",<br />
"EventType": "Event Type",<br />
"Timestamp": "Start Time"<br />
}<br />
}<br />
}<br />
}<br />
});<br />
</pre><br />
|-<br />
||DatatableByName (Datatable)<br />
||Datatable name (String)<br />
||<br />
Returns Datatable by its name located in the project. Returns null, if Datatable with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).DatatableByName("MyDatatable1")<br />
</pre><br />
<br />
Example: Get datatable by name, and create it if it doesn't exist:<br />
<pre><br />
let project = ProjectById(123);<br />
let datatableName = "MyDatatable1";<br />
let datatable = project.DatatableByName(datatableName);<br />
if (datatable == null) {<br />
datatable = project.CreateDatatable(datatableName);<br />
}<br />
</pre><br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||Deletes the Project permanently. Note that the Project doesn't need to be in the recycle bin to be able to delete it permanently.<br />
|-<br />
||Restore<br />
||(none)<br />
||Restores the Project from the recycle bin back to the original location.<br />
|-<br />
||ModelByName (Model)<br />
||Model name (String)<br />
||<br />
Returns Model by its name located in the project. Returns null, if Model with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).ModelByName("My Model 1")<br />
</pre><br />
|-<br />
||ScriptByName (Script)<br />
||Script name (String)<br />
||<br />
Returns Script by its name located in the project. Returns null, if Script with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).ScriptByName("MyScript1")<br />
</pre><br />
|-<br />
||<span id="SetSecret">SetSecret</span><br />
||<br />
# Secret type (string)<br />
# Secret name (string)<br />
# Secret value (string)<br />
||Sets or adds a [[Storing_Secrets_for_Scripts|secret]] for the project. Setting the secret value to ''null'' removes the secret. There can be several secrets with the same name in the same project if the type of the secret is different. Setting secrets requires the project specific ''ManageProject'' permission.<br />
<br />
Parameters:<br />
# '''Type''' (string): Secret type which is one of the following:<br />
#* "odbc": ODBC connection string (e.g., to extract data, or load a model directly)<br />
#* "externaldatatableconnection": ODBC connection string used for a datatable<br />
#* "sap": SAP password<br />
#* "salesforce": Salesforce password<br />
# '''Name''' (string): Secret name, used to refer to the secret in the commands.<br />
# '''Value''' (string): Secret value which contains the confidential information.<br />
<br />
Example: Set SAP password:<br />
<pre><br />
ProjectById(1).SetSecret("sap", "MySapPassword", "I l0ve 5AP!");<br />
</pre><br />
<br />
Example: Remove SAP password:<br />
<pre><br />
ProjectById(1).SetSecret("sap", "MySapPassword", null);<br />
</pre><br />
|}<br />
<br />
Function to get Project by id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ProjectById<br />
||Project id (Integer)<br />
||<br />
Returns project object corresponding to the provided project id.<br />
|-<br />
||ProjectByName<br />
||Project name (String)<br />
||<br />
Returns project object by given project name. If there is no such project or user doesn't have access to it, ''null'' value is returned. If there are multiple projects with the same name, one of them is returned.<br />
<br />
Example:<br />
<pre><br />
let project = ProjectByName("My Project");<br />
</pre><br />
|}<br />
<br />
== Script ==<br />
Scripts are entities that contain executable code, that can be run. Usually scripts contains ETL routines but also other kind of tasks are possible.<br />
<br />
{| class="wikitable"<br />
!'''Script properties'''<br />
! '''Description'''<br />
|-<br />
||Code (String)<br />
||Script code.<br />
|-<br />
||CreatedBy (User)<br />
||User who created the Script.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the Script was created.<br />
|-<br />
||CurrentRunStart (DateTime)<br />
||Timestamp of the current run start. Null if the script is currently not running.<br />
|-<br />
||Description (String)<br />
||Description of the Script.<br />
|-<br />
||Id (Integer)<br />
||Id of the Script.<br />
|-<br />
||Language (String)<br />
||Either of the following scripting language: '''Expression''' or '''SQL'''. When language is Expression, the script is run as an expression script, and when language is SQL, the script is run as an SQL script (using the sandbox database).<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last modified the Script.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the Script was last modified.<br />
|-<br />
||LastRunEnd (DateTime)<br />
||Timestamp of the last completed script run end (either successful completion or failure). Null if the Script hasn't been run yet.<br />
|-<br />
||LastRunResult (String)<br />
||Result of the last run. Options are:<br />
* '''Completed''': The last run was completed successfully.<br />
* '''Failed''': An error occurred during the last run, so likely the script did not complete as intended.<br />
* '''Aborted''': Script run was manually stopped prematurely by a user, so the script did not proceeded in the end.<br />
<br />
Null if the Script hasn't been run yet.<br />
|-<br />
||LastRunStart (DateTime)<br />
||Timestamp of the last completed script run start time. Null if the Script hasn't been run yet.<br />
|-<br />
||Name (String)<br />
||Name of the Script.<br />
|-<br />
||OperationId (Integer)<br />
||Id of the operation which runs the Script. Null if the script is currently not running.<br />
|-<br />
||Project (Project)<br />
||Project where the Script is located. Null if the script is in the global context.<br />
|-<br />
||ProjectId (Integer)<br />
||Id of the project where the Script is located. Null if the script is in the global context.<br />
|-<br />
||Status (String)<br />
||Current status of the script. Options are:<br />
* '''Ready''': Script is not running. In this status, the script can be started (changing the status to ''Running'').<br />
* '''Running''': Script is running. In this status, the script can be stopped (changing the status to ''Stopping''). Calling stop just requests a script to stop, and the actual stopping occurs some time later.<br />
* '''Stopping''': Script has been requested to be stopped, but it's still running. In this status, neither start nor stop can be called for the script. When the script eventually stops, its status changes to ''Ready''.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Script functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||Run (Object)<br />
||Dictionary of parameters<br />
||<br />
Runs the script using the provided parameters. The parameters are available in the script as variables (see the example). Any type of variables can be passed to the script. Note that if the script assumes certain variables, but that they are not passed to the script, the script run will throw an error. <br />
<br />
For SQL scripts, the passed parameters are available in the script as variables in format '''@_parameter_<ParameterName>''' where <ParameterName> is the name of the parameter, e.g. ''parameter_myParameter1''. Only string type of parameters can be used, so any other type of data in parameter values is converted into strings.<br />
<br />
The return value of the script is returned by the Run function. Expression scripts return a value with the ''return'' statement or alternatively the result of the last line of the script is the return value. If the script does not return any value, the Run function returns ''_empty''. For SQL scripts, the return value is the last dataset produced by the script (returned as a DataFrame) (SQL scripts might create several datasets using the ''--#ShowReport'' command or the ''Show'' parameter).<br />
<br />
When a script is called using the Run function, the called script status does not change, because it's the parent script that is ''Running''. Also the called script log is not filled, but instead the logging goes to the calling script.<br />
<br />
It's possible to call a script using the Run function several times simultaneously.<br />
<br />
If there is an error when running the called script, the Run function throws the error to the calling script.<br />
<br />
Scripts are run in the script entity context, so for example the following properties are available:<br />
* Id: Script id<br />
* Name: Script name<br />
* Project.Id: Project id where the script is located<br />
* Project.Name: Name of the project where the script is located<br />
<br />
Example: Following script (id 123) raises a specified number to a specified power:<br />
<pre><br />
return Pow(numberToRaise, exponent);<br />
</pre><br />
<br />
The script can be called as follows (returning 16):<br />
<pre><br />
let runResult = ScriptById(123).Run(#{<br />
"numberToRaise": 4,<br />
"exponent": 2<br />
})<br />
</pre><br />
|-<br />
||Start<br />
||Dictionary of parameters<br />
||Starts the script. The operation doesn't wait for the script run to complete (i.e., asynchronous behavior) which corresponds to starting the script in the Workspace.<br />
<br />
Parameters to the script can additionally be provided as a dictionary of name-value pairs (which is not possible when script is started in the Workspace). Return value is script run id (integer) if the script was started, and if the script was already running, it returns ''null''.<br />
<br />
Example: start script and store the script run id:<br />
<pre><br />
let runId = ScriptById(1).Start();<br />
</pre><br />
<br />
Example: start script and pass parameters:<br />
<pre><br />
ScriptById(1).Start(#{<br />
"variable1": "val1",<br />
"variable2": 5<br />
});<br />
</pre><br />
|-<br />
||Stop<br />
||<br />
||Stops the script. The operation doesn't wait for the stopping to complete (i.e., asynchronous behavior) which corresponds to stopping the script in the Workspace.<br />
<br />
Return value is script run id (integer) if the script stopping was initiated, and there isn't a script to stop, it returns ''null''.<br />
<br />
Example:<br />
<pre><br />
let runId = ScriptById(1).Stop();<br />
</pre><br />
|}<br />
<br />
Function to get a script by the script id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ScriptById<br />
||<br />
* Script id (Integer)<br />
||<br />
Returns Script object corresponding to the given script id. If script with the given id doesn't exist or user doesn't have permissions to it, an error is given.<br />
|}<br />
<br />
== User/Group ==<br />
User objects represents users and user groups. Note that some properties can only be used for users and some for groups.<br />
<br />
{| class="wikitable"<br />
!'''User/group properties'''<br />
! '''Description'''<br />
|-<br />
||Description (String)<br />
||Description of the user.<br />
|-<br />
||Email (String)<br />
||Email address of the user.<br />
|-<br />
||FullName (String)<br />
||Full name of the user or group name.<br />
|-<br />
||GlobalPermissions (String*)<br />
||Array of global [[Roles and Permissions#Global_and_Project_Roles|permissions]] of the user. Global permissions come from the global roles assigned to the user and groups that the user belongs to. Note that to get the effective permissions for certain objects, also project specific permissions need to be taken into account.<br />
|-<br />
||GroupMemberNames (String*)<br />
||Array of names of members of a user group. This property is available for groups.<br />
|-<br />
||GroupMembers (User*)<br />
||Array of members of a user group. This property is available for groups.<br />
|-<br />
||GroupNames (String*)<br />
||Array of names of user groups the user belongs to. This property is available for users.<br />
|-<br />
||Groups (User*)<br />
||Array of user groups the user belongs to. This property is available for users.<br />
|-<br />
||HasPassword (Boolean)<br />
||Returns true if user has a password defined in QPR ProcessAnalyzer and thus user can authenticate using the password. If user doesn't have a password, the SAML authentication is the only way to log in. ''ManageUsers'' permission is needed to access this property for other users.<br />
|-<br />
||Id (Integer)<br />
||Id of the user, which is unique for every user.<br />
|-<br />
||IsActive (Boolean)<br />
||Returns true only if the user is active (not disabled).<br />
|-<br />
||IsGroup (Boolean)<br />
||Returns true if the user is a user group.<br />
|-<br />
||IsLocked (Boolean)<br />
||Returns true if user account is currently [[User_Session_Management#Preventing_password_guessing_attacks|locked]]. ''ManageUsers'' permission is needed to access this property.<br />
|-<br />
||LastLockedDate (DateTime)<br />
||Returns date when user account was locked the last time. Returns ''null'' if the user account has never been locked. ''ManageUsers'' permission is needed to access this property.<br />
|-<br />
||LastLoginDate (DateTime)<br />
||Returns date when the user made last successful login. ''ManageUsers'' permission is needed to access this property for other users.<br />
|-<br />
||Name (String)<br />
||Login name of the user or group.<br />
|-<br />
||Roles (Object**)<br />
||<br />
Returns all roles of the user (both global and project roles) as a nested array structure.<br />
<br />
Example:<br />
<pre><br />
ToJson(Users.Where(name == "qpr").Roles)<br />
Returns (for example):<br />
[<br />
[{"calcId": "Project:1"}, "Administrator"],<br />
[{"calcId": "Project:2"}, "Analyzer"],<br />
[{"calcId": "Project:3"}, "Viewer"],<br />
[null, "RunScripts"],<br />
[null, "Administrator"]<br />
]<br />
</pre><br />
|}<br />
<br />
{| class="wikitable"<br />
!'''User/group functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||EffectivePermissionsFor (String Array)<br />
||<br />
* Project to get permissions<br />
||<br />
Returns effective (actual) permission of the user to the given project. Project is given as a [[#Project|project object]] (not as a project id). Effective permissions determine the actual permissions that the user has, i.e. a combination of all permissions assigned to the user and groups the user belong to, including both project specific and global roles.<br />
<br />
Permissions for the EffectivePermissionsFor function are as follows:<br />
* All users can query their own permissions<br />
* To get permissions for any user, the user needs to have [[Roles_and_Permissions|ManageUsers permission]].<br />
<br />
Note that ''inactive'' users don't have any effective permissions, so the EffectivePermissionsFor function does not return any permissions for those users.<br />
<br />
Examples:<br />
<pre><br />
EffectivePermissionsFor(ModelById(1234).Project)<br />
Returns (for example): ["EditDashboards", "Filtering", "GenericRead"]<br />
</pre><br />
|-<br />
||GetAttribute<br />
||<br />
||<br />
Returns user attribute value by given attribute name and optionally by the model/project/dashboard context. Supported data types are String, Integer, Float, and DateTime. To store more complex data types, data can be converted into json and stored as string. If the attribute doesn't exist, null is returned.<br />
<br />
For example, if using dashboard as context, the attributes are effectively bound to each user and each dashboard separately. Thus, there can be several attributes with the same name as long as the dashboard is different.<br />
<br />
Parameters:<br />
# '''Attribute name''' (String): Name of the attribute.<br />
# '''Attribute context''' (Project/Model/Dashboard): Optional context object the attribute is linked to.<br />
<br />
Users have permissions to get attributes for themselves, and also (administrator) users with global ''ManageUsers'' permission can get attributes for all users. In addition, if using the context object, the ''GenericRead'' permission is required for the context object.<br />
<br />
Example: Get user attribute MyDataValue for myself:<br />
<pre><br />
CurrentUser<br />
.GetAttribute("MyDataValue");<br />
</pre><br />
<br />
Example: Get user attribute MyDataValue for user John:<br />
<pre><br />
Users<br />
.Where(Name=="John")<br />
.GetAttribute("MyDataValue");<br />
</pre><br />
<br />
Example: Get user attribute MyDataValue for user 1 related to dashboard id 1:<br />
<pre><br />
UserById(1)<br />
.GetAttribute("MyDataValue", DashboardById(1));<br />
</pre><br />
|-<br />
||SetAttribute<br />
||<br />
||<br />
Sets user attribute value for given attribute name and optionally for the model/project/dashboard context. Supported data types are String, Integer, Float, and DateTime. To store more complex data types, data can be converted into json and stored as string. If setting value ''null'', the user attribute is removed. Required permissions are same as in the GetAttribute function.<br />
<br />
Parameters:<br />
# '''Attribute name''' (String): Name of the attribute.<br />
# '''Attribute value''' (String/Integer/Float/DateTime): Attribute value to be stored.<br />
# '''Attribute context''' (Project/Model/Dashboard): Optional context object the attribute value is linked to.<br />
<br />
Example: Set user attribute MyDataValue for myself:<br />
<pre><br />
CurrentUser<br />
.SetAttribute("MyDataValue ", "value");<br />
</pre><br />
<br />
Example: Set value 123 as user attribute MyDataValue for user John:<br />
<pre><br />
Users<br />
.Where(Name=="John")<br />
.SetAttribute("MyDataValue", 123);<br />
</pre><br />
<br />
Example: Set current time as user attribute MyDataValue for user 1 related to dashboard id 1:<br />
<pre><br />
UserById(1)<br />
.GetAttribute("MyDataValue", Now, DashboardById(1));<br />
</pre><br />
|}<br />
<br />
Function to get User by user id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||UserById<br />
||<br />
* User id (Integer)<br />
||<br />
Returns User object corresponding to the provided user id.<br />
|}</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Objects_in_Expression_Language&diff=24499QPR ProcessAnalyzer Objects in Expression Language2024-03-28T14:00:54Z<p>Ollvihe: /* Script */</p>
<hr />
<div>==Filter==<br />
Filters contain a set of filter rules used to filter cases and events in models. Filters are objects located in the models. Filters are owned by the creator user, and when a filter publish mode is private, only the creator can use it.<br />
<br />
{| class="wikitable"<br />
!'''Filter properties'''<br />
! '''Description'''<br />
|-<br />
||CreatedBy (User)<br />
||Returns the user who created the filter.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Returns date when the filter created date.<br />
|-<br />
||Description (String)<br />
||Returns description of the filter.<br />
|-<br />
||Id (Integer)<br />
||Returns id of the filter.<br />
|-<br />
||LastModifiedBy (User)<br />
||Returns user who modified the filter.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Returns date when the filter last modified.<br />
|-<br />
||Model<br />
||Returns model where the filter belongs to.<br />
|-<br />
||ModelId (Integer)<br />
||Returns model where the filter belongs to.<br />
|-<br />
||Name (String)<br />
||Returns the name of the filter.<br />
|-<br />
||Project<br />
||Returns project where the filter belongs to.<br />
|-<br />
||ProjectId (Integer)<br />
||Returns project id where the filter belongs to.<br />
|-<br />
||PublishMode (String)<br />
||Returns publish mode of the filter, one of the following: '''Private''', '''Public''', or '''Default'''.<br />
|-<br />
||Rules (Dictionary)<br />
||Returns a dictionary containing the filter rules in the filter.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Filter Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||<br />
Deletes the filter permanently. To delete own filters, the '''Filtering''' permission is needed, and to delete any filters the '''ManageViews''' permission is needed.<br />
|-<br />
||Modify<br />
||Dictionary<br />
||<br />
Modifies filter properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: ''Name'', ''Description'', ''PublishMode'', and ''Rules''.<br />
<br />
The function returns the updated filter object. Requires ''GenericWrite'' permission for the Project and global ''CreateModel'' permission.<br />
<br />
Example:<br />
<pre><br />
FilterById(1)<br />
.Modify(#{<br />
"Name": "My filter",<br />
"Description": "My description",<br />
"PublishMode": "Public",<br />
"Rules": #{<br />
"Items": [<br />
#{<br />
"Type": "IncludeCases",<br />
"Items": [<br />
#{<br />
"Type": "CaseAttributeValue",<br />
"Attribute": "Account Manager",<br />
"StringifiedValues": [<br />
"0Mary Wilson"<br />
]<br />
}<br />
]<br />
}<br />
]<br />
}<br />
}<br />
)<br />
</pre><br />
|}<br />
<br />
Function to get filter id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||FilterById<br />
||<br />
* Filter id (Integer)<br />
||<br />
Returns Filter object corresponding to the provided filter id.<br />
|}<br />
<br />
==Model==<br />
Notes:<br />
* For in-memory models that are offline, the object counts represent the situation when the model was last time online (loaded into the memory). ''null'' is returned if the model has never been loaded into the memory.<br />
* If [[Case_Level_Permissions|Case permissions]] are used for the model, and user doesn't have '''GenericWrite''' permission for the model, ''null'' is returned for data security reasons. Users that have the '''GenericWrite''' permission, see null when the model is offline, and when online, they see counts where the case level permissions settings are applied.<br />
* Properties ''CaseAttributes'', ''EventAttributes'' and ''Eventlog'' work only for the in-memory models and they require the model to be loaded into the memory. If the model is not in the memory, it is loaded when these properties is used. Other model properties down require the model to be in the memory.<br />
<br />
{| class="wikitable"<br />
!'''Model properties'''<br />
! '''Description'''<br />
|-<br />
||Calendars (BusinessCalendar*)<br />
||<br />
Returns all [[Business_Calendar|business calendars]] stored to the Model as an array. Returns an empty array, if there are no business calendars stored to the model. Note: UI allows to set only one business calendar for a Model.<br />
|-<br />
||CaseAttributes (AttributeType*)<br />
||[[#AttributeType|CaseAttributes]] in the model returned in the alphabetical order. Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||CasesDatatable (Datatable)<br />
||Returns the Datatable the model uses as a datasource for cases. Returns ''null'' if the cases Datatable is not defined or if model uses other than the Datatable datasource.<br />
|-<br />
||Configuration (Dictionary)<br />
||Returns the Model configuration as dictionary. Example:<br />
<pre><br />
ModelById(123).Configuration.DataSource.Events.DataTableName<br />
</pre><br />
|-<br />
||ConfigurationJson (String)<br />
||Returns the Model configuration as JSON string.<br />
|-<br />
||CreatedBy (User)<br />
||User who created the model.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the model was created.<br />
|-<br />
||DefaultCalendar (BusinessCalendar)<br />
||Returns the default [[Business_Calendar|business calendar]] of the Model. Returns ''null'', if there are no calendars in the Model or no calendar has been set as a default calendar. Note: UI allows to set only one business calendar for a Model, which is also the default calendar.<br />
|-<br />
||DefaultFilter (Filter)<br />
||Default filter of the model. Returns ''null'' if the model does not have a default filter.<br />
|-<br />
||DefaultFilterId (Integer)<br />
||Default filter id of the model. Returns ''null'' if the model does not have a default filter.<br />
|-<br />
||Description (String)<br />
||Model description. The model description may contain line breaks.<br />
|-<br />
||DeletedDate (DateTime)<br />
||Timestamp when Model was deleted (moved to the recycle bin).<br />
|-<br />
||DeletedBy (User)<br />
||User how deleted the Model.<br />
|-<br />
||Diagrams (Diagram*)<br />
||Returns an array of all [[Diagram_in_Expression_Language|diagrams]] in the model.<br />
|-<br />
||EstimatedMemory (Integer)<br />
||Returns an estimation of how much memory in bytes the model requires.<br />
|-<br />
||EventsDatatable (Datatable)<br />
||Returns the Datatable the model uses as a datasource for events. Returns ''null'' if the events Datatable is not defined or if model uses other than the Datatable datasource.<br />
|-<br />
||EventAttributes (AttributeType*)<br />
||[[#AttributeType|EventAttributes]] in the model returned in the alphabetical order. Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||EventLog (EventLog)<br />
||EventLog containing the entire model (i.e. event log where no filters have been applied). Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||Filters (Filter*)<br />
||Returns an array of all [[#Filter|filters]] in the model.<br />
|-<br />
||Id (Integer)<br />
||Model Id. Model Id is generated by QPR ProcessAnalyzer when the model is created.<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last time modified the model properties. Note that datatables containing the eventlog data are separate objects having similar fields to track the last modification and last data import.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the model was modified the last time.<br />
|-<br />
||Name (String)<br />
||Model name.<br />
|-<br />
||NCache (Integer)<br />
||Number of objects related to the model when the model is loaded into the memory.<br />
|-<br />
||NCaseAttributes (Integer)<br />
||Number of [[#AttributeType|CaseAttributes]] in model. Works only for in-memory models.<br />
|-<br />
||NCases (Integer)<br />
||Number of [[#Case|Cases]] in the model. Works only for in-memory models.<br />
|-<br />
||NEventAttributes (Integer)<br />
||Number of [[#AttributeType|EventAttributes]] in model. Works only for in-memory models.<br />
|-<br />
||NEvents (Integer)<br />
||Number of [[#Event|Events]] in model. Works only for in-memory models.<br />
|-<br />
||NEventTypes (Integer)<br />
||Number of [[#EventType|EventTypes]] in the model. Works only for in-memory models.<br />
|-<br />
||NOpens (Integer)<br />
||Number of times analysis has been requested from the model.<br />
|-<br />
||Project (Project)<br />
||[[#Project|Project]] where the model belongs to.<br />
|-<br />
||ProjectId (Integer)<br />
||[[#Project|Project]] id where the model belongs to.<br />
|-<br />
||Status (String)<br />
||<br />
Memory availability status of the model. There are the following statuses:<br />
* '''Loading''': The model is currently loading into the memory. When the loading is ready, the status changes to ''online''. If the loading fails, the status changes to ''offline''.<br />
* '''Offline''': The model is currently not loaded into the memory. The model needs to be loaded into the memory, so that analyses can be calculated from the model (occurs automatically when an analysis is requested).<br />
* '''Online''': The model is in the memory and ready for analysis calculation. If the model is dropped from the memory, its status changes to ''offline''.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Model Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||CalendarByName (BusinessCalendar)<br />
||<br />
name (String)<br />
||<br />
Returns a [[Business_Calendar|business calendar]] stored to the Model by the name of the calendar. Business calendars can be stored to models in the model properties. Returns ''null'', if a calendar with the provided name is not stored to the model.<br />
<br />
Examples:<br />
<pre><br />
ModelById(123).CalendarByName("MyCalendar")<br />
</pre><br />
|-<br />
||CreateDiagram (Diagram)<br />
||Parameters dictionary<br />
||<br />
Creates a [[Diagram_in_Expression_Language|diagram]] to the model. Parameters is a dictionary containing diagram properties. Following properties are available:<br />
* '''Name''' (string): Diagram name that distinguishes diagrams in a model.<br />
* '''Description''' (string): Diagram description text.<br />
* '''Content''' (dictionary): Diagram content as dictionary.<br />
<br />
Example:<br />
<pre><br />
ModelById(1)<br />
.CreateDiagram(#{<br />
"Name": "My diagram",<br />
"Description": "This is my new diagram",<br />
"Content": #{ ... },<br />
})<br />
</pre><br />
|-<br />
||CreateFilter (Filter)<br />
||Parameters dictionary<br />
||Creates a filter to a model. Requires ''GenericWrite'' permission for the project and global ''CreateModel'' permission. If a filter with that name already exists in the model, an exception is thrown.<br />
The parameters dictionary may have the following properties:<br />
* '''Name''': Name of the filter. This property is mandatory.<br />
* '''Description''': Description of the filter. This property is optional.<br />
* '''Rules''': Filter rules for the filter defined as a dictionary according to the [[Filtering_in_QPR_ProcessAnalyzer_Queries|filter json format]]. This property is mandatory.<br />
* '''PublishMode''': Publish mode of the filter which is one of the following: ''Private'', ''Public'' or ''Default''. This property is optional, and the default value is ''Private''.<br />
<br />
Example:<br />
<pre><br />
let newFilter = modelById(1).CreateFilter(#{ <br />
"Name": "My Filter",<br />
"Rules": #{<br />
"Items": [#{<br />
"Type": "IncludeCases",<br />
"Items": [#{<br />
"Type": "CaseAttributeValue",<br />
"Attribute": "Account Manager",<br />
"StringifiedValues": [ "0Robert Miller" ]<br />
}]<br />
}]<br />
},<br />
"PublishMode": "Public"<br />
});<br />
}<br />
</pre><br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||Deletes the Model permanently. The model doesn't need to be in the recycle bin to be able to delete it permanently.<br />
|-<br />
||Modify (Model)<br />
||Dictionary<br />
||<br />
Modifies model properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: ''Name'', ''Description'', ''ProjectId'', and ''Configuration''.<br />
<br />
The function returns the updated model object. Requires the ''GenericWrite'' permission for the project and the global ''CreateModel'' permission.<br />
<br />
Example:<br />
<pre><br />
ModelById(1)<br />
.Modify(#{<br />
"Name": "My model",<br />
"Description": "My description",<br />
"ProjectId": 2,<br />
"Configuration": #{<br />
"DataSource": #{<br />
"Cases": #{<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My cases datatable",<br />
"Columns": #{<br />
"CaseId": "Case Name"<br />
}<br />
},<br />
"Events": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My events datatable",<br />
"Columns": #{<br />
"CaseId": "Case Name",<br />
"EventType": "Event Type",<br />
"Timestamp": "Start Time"<br />
}<br />
}<br />
}<br />
}<br />
}<br />
)<br />
</pre><br />
|-<br />
||ResetPreprocessings<br />
||(none)<br />
||<br />
Removes all cached items related to the Model, e.g. preprocessings and calculation results. In practice, the Model is reset to a state where it was right after the model was loaded into memory.<br />
|-<br />
||Restore<br />
||(none)<br />
||Restores the Model from the recycle bin back to the original location.<br />
|-<br />
||<span id="ToSqlDataFrame">ToSqlDataFrame</span><br />
||In-memory dataframe<br />
||Converts an in-memory dataframe to an SQL dataframe. In practice, an SQL query is created from the in-memory dataframe and the query is executed in the datasource so that the data is available in the datasource for further SQL operations. This function is intended only to small amounts of data which is less than 16384 rows.<br />
<br />
Example: Select matching cases from events data using in-memory dataframe:<br />
<pre><br />
let model = ModelById(1);<br />
let dfEvents = model.EventsDatatable.SqlDataFrame;<br />
let inMemoryDf = ToDataFrame(<br />
[["1"], ["2"], ["3"]],<br />
[#{"Name": "id", "DataType": "String"}]<br />
);<br />
model.ToSqlDataFrame(inMemoryDf)<br />
.Join(dfEvents, ["id": "CaseId"])<br />
.SelectDistinct(["CaseId"])<br />
.Collect();<br />
</pre><br />
|-<br />
||<span id="TriggerNotifications">TriggerNotifications</span> (Boolean)<br />
||Notification names (String*)<br />
||Triggers the given notifications for the Model. Notifications are given by their names. Triggering means that the configured rules are run and notification emails are sent as defined by the rules. If the notification names parameter is not provided, all notifications in the Model are triggered.<br />
<br />
The function return ''true'' if any notification were triggered, otherwise ''false''.<br />
<pre><br />
ModelById(123).TriggerNotifications(["Notification 1", "Notification 2"]);<br />
Triggers notifications Notification 1 and Notification 2 in model id 123.<br />
<br />
ModelById(123).TriggerNotifications();<br />
Triggers all notifications in model id 123.<br />
</pre><br />
|}<br />
<br />
Function to get Model by model id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ModelById<br />
||<br />
* Model id (Integer)<br />
||<br />
Returns [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Model|Model]] object corresponding to the provided model id.<br />
|}<br />
<br />
== Project ==<br />
{| class="wikitable"<br />
!'''Project properties'''<br />
! '''Description'''<br />
|-<br />
||CreatedBy (User)<br />
||User who created the Project.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the Project was created.<br />
|-<br />
||Dashboards (Dashboard*)<br />
||Returns all [[Dashboard_in_Expression_Language|dashboards]] in the project.<br />
|-<br />
||Datatables (Datatable*)<br />
||Returns all Datatables in the project.<br />
|-<br />
||DeletedDate (DateTime)<br />
||Timestamp when the Project was deleted (moved to the recycle bin).<br />
|-<br />
||Description (String)<br />
||Project description. The project description may contain line breaks.<br />
|-<br />
||DeletedBy (User)<br />
||User who deleted the Project (moved to the recycle bin).<br />
|-<br />
||Id (Integer)<br />
||Id of the Project.<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last modified the Project.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the Project was last modified (refers to the project name, description and parent, not the contents of the project).<br />
|-<br />
||Name (String)<br />
||Name of the Project.<br />
|-<br />
||Models (Model*)<br />
||Models that are in the Project.<br />
|-<br />
||Parent (Project)<br />
||Parent project, i.e. a Project where the Project is located in the hierarchy of Projects. Returns ''null'' for root level Projects. Throws an error if user doesn't have access to the parent project.<br />
|-<br />
||ParentProjectId (Integer)<br />
||Parent project id. Returns ''null'' for root level Projects. The parent project id is returned even if user doesn't have access to the parent project.<br />
|-<br />
||Scripts (Script*)<br />
||Scripts that are in the Project.<br />
|-<br />
||Secrets (Dictionary*)<br />
||Returns array of all [[Storing_Secrets_for_Scripts|secrets]] in the project as Dictionary with following properties:<br />
* '''Name''' (string): Name of the secret.<br />
* '''Type''' (string): Type of the secret which is one of the following: "odbc", "sap", "salesforce".<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Project functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||CreateDashboard (Dashboard)<br />
||Parameters dictionary<br />
||Creates a dashboard to the project. ''EditDashboards'' permission to the project is required. The parameter is dictionary with following supported dashboard properties:<br />
* '''Name''' (String): Name of the dashboard.<br />
* '''Identifier''' (String): Identifier of the dashboard.<br />
* '''Description''' (String): Description of the dashboard.<br />
* '''Content''' (Dictionary): Content of the dashboard.<br />
<br />
Example: Create empty dashboard.<br />
<pre><br />
ProjectById(1)<br />
.CreateDashboard(#{<br />
"Name": "My dashboard",<br />
"Identifier": "MyDashboard"<br />
});<br />
</pre><br />
<br />
Example: Create dashboard with a chart.<br />
<pre><br />
ProjectById(1)<br />
.CreateDashboard(#{<br />
"Name": "My dashboard",<br />
"Content": #{<br />
"version": 4,<br />
"typeName": "View",<br />
"name": "My dashboard",<br />
"subElements": [<br />
#{<br />
"position": #{<br />
"x": 0,<br />
"y": 0,<br />
"width": 0.5,<br />
"height": 0.5,<br />
"zOrder": 0<br />
},<br />
"element": #{<br />
"typeName": "Chart",<br />
"configuration": #{<br />
"root": #{<br />
"expressionType": "Cases",<br />
"expressionParameters": #{}<br />
},<br />
"measures": [#{<br />
"expressionType": "Count",<br />
"expressionParameters": #{}<br />
}]<br />
}<br />
}<br />
}<br />
]<br />
}<br />
});<br />
</pre><br />
|-<br />
||<span id="CreateDatatable">CreateDatatable</span> (Datatable)<br />
||<br />
* Parameters dictionary<br />
||Creates datatable to the project. After creation, there are no columns or rows in the datatable. The function returns the created datatable entity. Following properties can be set for the datatable:<br />
* '''Name''' (string): Name of the datatable. This parameter is mandatory.<br />
* '''Description''' (string): Description for the datatable. This parameter is optional.<br />
* '''NameInDataSource''' (string): Table name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''SchemaNameInDataSource''' (string): Schema name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''DatabaseNameInDataSource''' (string): Database name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''Type''' (string): Defines where the data for the datatable is located. Available values are '''Snowflake''', '''SqlServer''', and '''Local'''. This parameter is optional and default value is defined by the [[PA_Configuration_database_table#General_Settings|DefaultDataSource]] setting.<br />
* '''Connection''': Connection object for the datatable. This parameter is optional.<br />
<br />
Example: Create a new datatable:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable"<br />
});<br />
</pre><br />
<br />
Example: Create Snowflake datatable linked to a custom table:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable",<br />
"Description": "My description",<br />
"NameInDataSource": "MyTable",<br />
"SchemaNameInDataSource": "MySchema",<br />
"DatabaseNameInDataSource": "MyDatabase",<br />
"Type": "Snowflake"<br />
});<br />
</pre><br />
<br />
Example: Create Snowflake datatable where connection string is stored as a [[Storing_Secrets_for_Scripts|secret]]:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable",<br />
"Type": "Snowflake",<br />
"Connection": ProjectById(1).CreateSnowflakeConnection(#{ "OdbcConnectionStringKey": "MyKey" })<br />
});<br />
</pre><br />
|-<br />
||CreateModel (Model)<br />
||<br />
* Parameters dictionary<br />
||Creates a model to a project. Requires ''GenericWrite'' permission for the Project and global ''CreateModel'' permission. If a model with that name already exists, an exception is thrown.<br />
<br />
Parameters dictionary has the following properties:<br />
* '''Name''': Name of the model. This property is mandatory.<br />
* '''Description''': Description of the model. This property is optional.<br />
* '''Configuration''': Configuration dictionary for the model. This property is technically optional, but a working model requires at least datasource settings to be defined.<br />
<br />
Example:<br />
<pre><br />
ProjectById(1).CreateModel(#{ <br />
"Name": "My model",<br />
"Description": "My description",<br />
"Configuration": {<br />
"DataSource": {<br />
"Cases": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My cases datatable",<br />
"Columns": {<br />
"CaseId": "Case Name"<br />
}<br />
},<br />
"Events": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My events datatable",<br />
"Columns": {<br />
"CaseId": "Case Name",<br />
"EventType": "Event Type",<br />
"Timestamp": "Start Time"<br />
}<br />
}<br />
}<br />
}<br />
});<br />
</pre><br />
|-<br />
||DatatableByName (Datatable)<br />
||Datatable name (String)<br />
||<br />
Returns Datatable by its name located in the project. Returns null, if Datatable with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).DatatableByName("MyDatatable1")<br />
</pre><br />
<br />
Example: Get datatable by name, and create it if it doesn't exist:<br />
<pre><br />
let project = ProjectById(123);<br />
let datatableName = "MyDatatable1";<br />
let datatable = project.DatatableByName(datatableName);<br />
if (datatable == null) {<br />
datatable = project.CreateDatatable(datatableName);<br />
}<br />
</pre><br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||Deletes the Project permanently. Note that the Project doesn't need to be in the recycle bin to be able to delete it permanently.<br />
|-<br />
||Restore<br />
||(none)<br />
||Restores the Project from the recycle bin back to the original location.<br />
|-<br />
||ModelByName (Model)<br />
||Model name (String)<br />
||<br />
Returns Model by its name located in the project. Returns null, if Model with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).ModelByName("My Model 1")<br />
</pre><br />
|-<br />
||ScriptByName (Script)<br />
||Script name (String)<br />
||<br />
Returns Script by its name located in the project. Returns null, if Script with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).ScriptByName("MyScript1")<br />
</pre><br />
|-<br />
||<span id="SetSecret">SetSecret</span><br />
||<br />
# Secret type (string)<br />
# Secret name (string)<br />
# Secret value (string)<br />
||Sets or adds a [[Storing_Secrets_for_Scripts|secret]] for the project. Setting the secret value to ''null'' removes the secret. There can be several secrets with the same name in the same project if the type of the secret is different. Setting secrets requires the project specific ''ManageProject'' permission.<br />
<br />
Parameters:<br />
# '''Type''' (string): Secret type which is one of the following:<br />
#* "odbc": ODBC connection string (e.g., to extract data, or load a model directly)<br />
#* "externaldatatableconnection": ODBC connection string used for a datatable<br />
#* "sap": SAP password<br />
#* "salesforce": Salesforce password<br />
# '''Name''' (string): Secret name, used to refer to the secret in the commands.<br />
# '''Value''' (string): Secret value which contains the confidential information.<br />
<br />
Example: Set SAP password:<br />
<pre><br />
ProjectById(1).SetSecret("sap", "MySapPassword", "I l0ve 5AP!");<br />
</pre><br />
<br />
Example: Remove SAP password:<br />
<pre><br />
ProjectById(1).SetSecret("sap", "MySapPassword", null);<br />
</pre><br />
|}<br />
<br />
Function to get Project by id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ProjectById<br />
||Project id (Integer)<br />
||<br />
Returns project object corresponding to the provided project id.<br />
|-<br />
||ProjectByName<br />
||Project name (String)<br />
||<br />
Returns project object by given project name. If there is no such project or user doesn't have access to it, ''null'' value is returned. If there are multiple projects with the same name, one of them is returned.<br />
<br />
Example:<br />
<pre><br />
let project = ProjectByName("My Project");<br />
</pre><br />
|}<br />
<br />
== Script ==<br />
Scripts are entities that contain executable code, that can be run. Usually scripts contains ETL routines but also other kind of tasks are possible.<br />
<br />
{| class="wikitable"<br />
!'''Script properties'''<br />
! '''Description'''<br />
|-<br />
||Code (String)<br />
||Script code.<br />
|-<br />
||CreatedBy (User)<br />
||User who created the Script.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the Script was created.<br />
|-<br />
||CurrentRunStart (DateTime)<br />
||Timestamp of the current run start. Null if the script is currently not running.<br />
|-<br />
||Description (String)<br />
||Description of the Script.<br />
|-<br />
||Id (Integer)<br />
||Id of the Script.<br />
|-<br />
||Language (String)<br />
||Either of the following scripting language: '''Expression''' or '''SQL'''. When language is Expression, the script is run as an expression script, and when language is SQL, the script is run as an SQL script (using the sandbox database).<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last modified the Script.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the Script was last modified.<br />
|-<br />
||LastRunEnd (DateTime)<br />
||Timestamp of the last completed script run end (either successful completion or failure). Null if the Script hasn't been run yet.<br />
|-<br />
||LastRunResult (String)<br />
||Result of the last run. Options are:<br />
* '''Completed''': The last run was completed successfully.<br />
* '''Failed''': An error occurred during the last run, so likely the script did not complete as intended.<br />
* '''Aborted''': Script run was manually stopped prematurely by a user, so the script did not proceeded in the end.<br />
<br />
Null if the Script hasn't been run yet.<br />
|-<br />
||LastRunStart (DateTime)<br />
||Timestamp of the last completed script run start time. Null if the Script hasn't been run yet.<br />
|-<br />
||Name (String)<br />
||Name of the Script.<br />
|-<br />
||OperationId (Integer)<br />
||Id of the operation which runs the Script. Null if the script is currently not running.<br />
|-<br />
||Project (Project)<br />
||Project where the Script is located. Null if the script is in the global context.<br />
|-<br />
||ProjectId (Integer)<br />
||Id of the project where the Script is located. Null if the script is in the global context.<br />
|-<br />
||Status (String)<br />
||Current status of the script. Options are:<br />
* '''Ready''': Script is not running. In this status, the script can be started (changing the status to ''Running'').<br />
* '''Running''': Script is running. In this status, the script can be stopped (changing the status to ''Stopping''). Calling stop just requests a script to stop, and the actual stopping occurs some time later.<br />
* '''Stopping''': Script has been requested to be stopped, but it's still running. In this status, neither start nor stop can be called for the script. When the script eventually stops, its status changes to ''Ready''.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Script functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||Run (Object)<br />
||Dictionary of parameters<br />
||<br />
Runs the script using the provided parameters. The parameters are available in the script as variables (see the example). Any type of variables can be passed to the script. Note that if the script assumes certain variables, but that they are not passed to the script, the script run will throw an error. <br />
<br />
For SQL scripts, the passed parameters are available in the script as variables in format '''@_parameter_<ParameterName>''' where <ParameterName> is the name of the parameter, e.g. ''parameter_myParameter1''. Only string type of parameters can be used, so any other type of data in parameter values is converted into strings.<br />
<br />
The return value of the script is returned by the Run function. Expression scripts return a value with the ''return'' statement or alternatively the result of the last line of the script is the return value. If the script does not return any value, the Run function returns ''_empty''. For SQL scripts, the return value is the last dataset produced by the script (returned as a DataFrame) (SQL scripts might create several datasets using the ''--#ShowReport'' command or the ''Show'' parameter).<br />
<br />
When a script is called using the Run function, the called script status does not change, because it's the parent script that is ''Running''. Also the called script log is not filled, but instead the logging goes to the calling script.<br />
<br />
It's possible to call a script using the Run function several times simultaneously.<br />
<br />
If there is an error when running the called script, the Run function throws the error to the calling script.<br />
<br />
Scripts are run in the script entity context, so for example the following properties are available:<br />
* Id: Script id<br />
* Name: Script name<br />
* Project.Id: Project id where the script is located<br />
* Project.Name: Name of the project where the script is located<br />
<br />
Example: Following script (id 123) raises a specified number to a specified power:<br />
<pre><br />
return Pow(numberToRaise, exponent);<br />
</pre><br />
<br />
The script can be called as follows:<br />
<pre><br />
let runResult = ScriptById(123).Run(#{<br />
"numberToRaise": 4,<br />
"exponent": 2<br />
})<br />
Returns: 16<br />
</pre><br />
|-<br />
||Start<br />
||Dictionary of parameters<br />
||Starts the script. The operation doesn't wait for the script run to complete (i.e., asynchronous behavior) which corresponds to starting the script in the Workspace.<br />
<br />
Parameters to the script can additionally be provided as a dictionary of name-value pairs (which is not possible when script is started in the Workspace). Return value is script run id (integer) if the script was started, and if the script was already running, it returns ''null''.<br />
<br />
Example: start script and store the script run id:<br />
<pre><br />
let runId = ScriptById(1).Start();<br />
</pre><br />
<br />
Example: start script and pass parameters:<br />
<pre><br />
ScriptById(1).Start(#{<br />
"variable1": "val1",<br />
"variable2": 5<br />
});<br />
</pre><br />
|-<br />
||Stop<br />
||<br />
||Stops the script. The operation doesn't wait for the stopping to complete (i.e., asynchronous behavior) which corresponds to stopping the script in the Workspace.<br />
<br />
Return value is script run id (integer) if the script stopping was initiated, and there isn't a script to stop, it returns ''null''.<br />
<br />
Example:<br />
<pre><br />
let runId = ScriptById(1).Stop();<br />
</pre><br />
|}<br />
<br />
Function to get a script by the script id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ScriptById<br />
||<br />
* Script id (Integer)<br />
||<br />
Returns Script object corresponding to the given script id. If script with the given id doesn't exist or user doesn't have permissions to it, an error is given.<br />
|}<br />
<br />
== User/Group ==<br />
User objects represents users and user groups. Note that some properties can only be used for users and some for groups.<br />
<br />
{| class="wikitable"<br />
!'''User/group properties'''<br />
! '''Description'''<br />
|-<br />
||Description (String)<br />
||Description of the user.<br />
|-<br />
||Email (String)<br />
||Email address of the user.<br />
|-<br />
||FullName (String)<br />
||Full name of the user or group name.<br />
|-<br />
||GlobalPermissions (String*)<br />
||Array of global [[Roles and Permissions#Global_and_Project_Roles|permissions]] of the user. Global permissions come from the global roles assigned to the user and groups that the user belongs to. Note that to get the effective permissions for certain objects, also project specific permissions need to be taken into account.<br />
|-<br />
||GroupMemberNames (String*)<br />
||Array of names of members of a user group. This property is available for groups.<br />
|-<br />
||GroupMembers (User*)<br />
||Array of members of a user group. This property is available for groups.<br />
|-<br />
||GroupNames (String*)<br />
||Array of names of user groups the user belongs to. This property is available for users.<br />
|-<br />
||Groups (User*)<br />
||Array of user groups the user belongs to. This property is available for users.<br />
|-<br />
||HasPassword (Boolean)<br />
||Returns true if user has a password defined in QPR ProcessAnalyzer and thus user can authenticate using the password. If user doesn't have a password, the SAML authentication is the only way to log in. ''ManageUsers'' permission is needed to access this property for other users.<br />
|-<br />
||Id (Integer)<br />
||Id of the user, which is unique for every user.<br />
|-<br />
||IsActive (Boolean)<br />
||Returns true only if the user is active (not disabled).<br />
|-<br />
||IsGroup (Boolean)<br />
||Returns true if the user is a user group.<br />
|-<br />
||IsLocked (Boolean)<br />
||Returns true if user account is currently [[User_Session_Management#Preventing_password_guessing_attacks|locked]]. ''ManageUsers'' permission is needed to access this property.<br />
|-<br />
||LastLockedDate (DateTime)<br />
||Returns date when user account was locked the last time. Returns ''null'' if the user account has never been locked. ''ManageUsers'' permission is needed to access this property.<br />
|-<br />
||LastLoginDate (DateTime)<br />
||Returns date when the user made last successful login. ''ManageUsers'' permission is needed to access this property for other users.<br />
|-<br />
||Name (String)<br />
||Login name of the user or group.<br />
|-<br />
||Roles (Object**)<br />
||<br />
Returns all roles of the user (both global and project roles) as a nested array structure.<br />
<br />
Example:<br />
<pre><br />
ToJson(Users.Where(name == "qpr").Roles)<br />
Returns (for example):<br />
[<br />
[{"calcId": "Project:1"}, "Administrator"],<br />
[{"calcId": "Project:2"}, "Analyzer"],<br />
[{"calcId": "Project:3"}, "Viewer"],<br />
[null, "RunScripts"],<br />
[null, "Administrator"]<br />
]<br />
</pre><br />
|}<br />
<br />
{| class="wikitable"<br />
!'''User/group functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||EffectivePermissionsFor (String Array)<br />
||<br />
* Project to get permissions<br />
||<br />
Returns effective (actual) permission of the user to the given project. Project is given as a [[#Project|project object]] (not as a project id). Effective permissions determine the actual permissions that the user has, i.e. a combination of all permissions assigned to the user and groups the user belong to, including both project specific and global roles.<br />
<br />
Permissions for the EffectivePermissionsFor function are as follows:<br />
* All users can query their own permissions<br />
* To get permissions for any user, the user needs to have [[Roles_and_Permissions|ManageUsers permission]].<br />
<br />
Note that ''inactive'' users don't have any effective permissions, so the EffectivePermissionsFor function does not return any permissions for those users.<br />
<br />
Examples:<br />
<pre><br />
EffectivePermissionsFor(ModelById(1234).Project)<br />
Returns (for example): ["EditDashboards", "Filtering", "GenericRead"]<br />
</pre><br />
|-<br />
||GetAttribute<br />
||<br />
||<br />
Returns user attribute value by given attribute name and optionally by the model/project/dashboard context. Supported data types are String, Integer, Float, and DateTime. To store more complex data types, data can be converted into json and stored as string. If the attribute doesn't exist, null is returned.<br />
<br />
For example, if using dashboard as context, the attributes are effectively bound to each user and each dashboard separately. Thus, there can be several attributes with the same name as long as the dashboard is different.<br />
<br />
Parameters:<br />
# '''Attribute name''' (String): Name of the attribute.<br />
# '''Attribute context''' (Project/Model/Dashboard): Optional context object the attribute is linked to.<br />
<br />
Users have permissions to get attributes for themselves, and also (administrator) users with global ''ManageUsers'' permission can get attributes for all users. In addition, if using the context object, the ''GenericRead'' permission is required for the context object.<br />
<br />
Example: Get user attribute MyDataValue for myself:<br />
<pre><br />
CurrentUser<br />
.GetAttribute("MyDataValue");<br />
</pre><br />
<br />
Example: Get user attribute MyDataValue for user John:<br />
<pre><br />
Users<br />
.Where(Name=="John")<br />
.GetAttribute("MyDataValue");<br />
</pre><br />
<br />
Example: Get user attribute MyDataValue for user 1 related to dashboard id 1:<br />
<pre><br />
UserById(1)<br />
.GetAttribute("MyDataValue", DashboardById(1));<br />
</pre><br />
|-<br />
||SetAttribute<br />
||<br />
||<br />
Sets user attribute value for given attribute name and optionally for the model/project/dashboard context. Supported data types are String, Integer, Float, and DateTime. To store more complex data types, data can be converted into json and stored as string. If setting value ''null'', the user attribute is removed. Required permissions are same as in the GetAttribute function.<br />
<br />
Parameters:<br />
# '''Attribute name''' (String): Name of the attribute.<br />
# '''Attribute value''' (String/Integer/Float/DateTime): Attribute value to be stored.<br />
# '''Attribute context''' (Project/Model/Dashboard): Optional context object the attribute value is linked to.<br />
<br />
Example: Set user attribute MyDataValue for myself:<br />
<pre><br />
CurrentUser<br />
.SetAttribute("MyDataValue ", "value");<br />
</pre><br />
<br />
Example: Set value 123 as user attribute MyDataValue for user John:<br />
<pre><br />
Users<br />
.Where(Name=="John")<br />
.SetAttribute("MyDataValue", 123);<br />
</pre><br />
<br />
Example: Set current time as user attribute MyDataValue for user 1 related to dashboard id 1:<br />
<pre><br />
UserById(1)<br />
.GetAttribute("MyDataValue", Now, DashboardById(1));<br />
</pre><br />
|}<br />
<br />
Function to get User by user id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||UserById<br />
||<br />
* User id (Integer)<br />
||<br />
Returns User object corresponding to the provided user id.<br />
|}</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Objects_in_Expression_Language&diff=24498QPR ProcessAnalyzer Objects in Expression Language2024-03-28T13:56:21Z<p>Ollvihe: /* Script */</p>
<hr />
<div>==Filter==<br />
Filters contain a set of filter rules used to filter cases and events in models. Filters are objects located in the models. Filters are owned by the creator user, and when a filter publish mode is private, only the creator can use it.<br />
<br />
{| class="wikitable"<br />
!'''Filter properties'''<br />
! '''Description'''<br />
|-<br />
||CreatedBy (User)<br />
||Returns the user who created the filter.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Returns date when the filter created date.<br />
|-<br />
||Description (String)<br />
||Returns description of the filter.<br />
|-<br />
||Id (Integer)<br />
||Returns id of the filter.<br />
|-<br />
||LastModifiedBy (User)<br />
||Returns user who modified the filter.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Returns date when the filter last modified.<br />
|-<br />
||Model<br />
||Returns model where the filter belongs to.<br />
|-<br />
||ModelId (Integer)<br />
||Returns model where the filter belongs to.<br />
|-<br />
||Name (String)<br />
||Returns the name of the filter.<br />
|-<br />
||Project<br />
||Returns project where the filter belongs to.<br />
|-<br />
||ProjectId (Integer)<br />
||Returns project id where the filter belongs to.<br />
|-<br />
||PublishMode (String)<br />
||Returns publish mode of the filter, one of the following: '''Private''', '''Public''', or '''Default'''.<br />
|-<br />
||Rules (Dictionary)<br />
||Returns a dictionary containing the filter rules in the filter.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Filter Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||<br />
Deletes the filter permanently. To delete own filters, the '''Filtering''' permission is needed, and to delete any filters the '''ManageViews''' permission is needed.<br />
|-<br />
||Modify<br />
||Dictionary<br />
||<br />
Modifies filter properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: ''Name'', ''Description'', ''PublishMode'', and ''Rules''.<br />
<br />
The function returns the updated filter object. Requires ''GenericWrite'' permission for the Project and global ''CreateModel'' permission.<br />
<br />
Example:<br />
<pre><br />
FilterById(1)<br />
.Modify(#{<br />
"Name": "My filter",<br />
"Description": "My description",<br />
"PublishMode": "Public",<br />
"Rules": #{<br />
"Items": [<br />
#{<br />
"Type": "IncludeCases",<br />
"Items": [<br />
#{<br />
"Type": "CaseAttributeValue",<br />
"Attribute": "Account Manager",<br />
"StringifiedValues": [<br />
"0Mary Wilson"<br />
]<br />
}<br />
]<br />
}<br />
]<br />
}<br />
}<br />
)<br />
</pre><br />
|}<br />
<br />
Function to get filter id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||FilterById<br />
||<br />
* Filter id (Integer)<br />
||<br />
Returns Filter object corresponding to the provided filter id.<br />
|}<br />
<br />
==Model==<br />
Notes:<br />
* For in-memory models that are offline, the object counts represent the situation when the model was last time online (loaded into the memory). ''null'' is returned if the model has never been loaded into the memory.<br />
* If [[Case_Level_Permissions|Case permissions]] are used for the model, and user doesn't have '''GenericWrite''' permission for the model, ''null'' is returned for data security reasons. Users that have the '''GenericWrite''' permission, see null when the model is offline, and when online, they see counts where the case level permissions settings are applied.<br />
* Properties ''CaseAttributes'', ''EventAttributes'' and ''Eventlog'' work only for the in-memory models and they require the model to be loaded into the memory. If the model is not in the memory, it is loaded when these properties is used. Other model properties down require the model to be in the memory.<br />
<br />
{| class="wikitable"<br />
!'''Model properties'''<br />
! '''Description'''<br />
|-<br />
||Calendars (BusinessCalendar*)<br />
||<br />
Returns all [[Business_Calendar|business calendars]] stored to the Model as an array. Returns an empty array, if there are no business calendars stored to the model. Note: UI allows to set only one business calendar for a Model.<br />
|-<br />
||CaseAttributes (AttributeType*)<br />
||[[#AttributeType|CaseAttributes]] in the model returned in the alphabetical order. Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||CasesDatatable (Datatable)<br />
||Returns the Datatable the model uses as a datasource for cases. Returns ''null'' if the cases Datatable is not defined or if model uses other than the Datatable datasource.<br />
|-<br />
||Configuration (Dictionary)<br />
||Returns the Model configuration as dictionary. Example:<br />
<pre><br />
ModelById(123).Configuration.DataSource.Events.DataTableName<br />
</pre><br />
|-<br />
||ConfigurationJson (String)<br />
||Returns the Model configuration as JSON string.<br />
|-<br />
||CreatedBy (User)<br />
||User who created the model.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the model was created.<br />
|-<br />
||DefaultCalendar (BusinessCalendar)<br />
||Returns the default [[Business_Calendar|business calendar]] of the Model. Returns ''null'', if there are no calendars in the Model or no calendar has been set as a default calendar. Note: UI allows to set only one business calendar for a Model, which is also the default calendar.<br />
|-<br />
||DefaultFilter (Filter)<br />
||Default filter of the model. Returns ''null'' if the model does not have a default filter.<br />
|-<br />
||DefaultFilterId (Integer)<br />
||Default filter id of the model. Returns ''null'' if the model does not have a default filter.<br />
|-<br />
||Description (String)<br />
||Model description. The model description may contain line breaks.<br />
|-<br />
||DeletedDate (DateTime)<br />
||Timestamp when Model was deleted (moved to the recycle bin).<br />
|-<br />
||DeletedBy (User)<br />
||User how deleted the Model.<br />
|-<br />
||Diagrams (Diagram*)<br />
||Returns an array of all [[Diagram_in_Expression_Language|diagrams]] in the model.<br />
|-<br />
||EstimatedMemory (Integer)<br />
||Returns an estimation of how much memory in bytes the model requires.<br />
|-<br />
||EventsDatatable (Datatable)<br />
||Returns the Datatable the model uses as a datasource for events. Returns ''null'' if the events Datatable is not defined or if model uses other than the Datatable datasource.<br />
|-<br />
||EventAttributes (AttributeType*)<br />
||[[#AttributeType|EventAttributes]] in the model returned in the alphabetical order. Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||EventLog (EventLog)<br />
||EventLog containing the entire model (i.e. event log where no filters have been applied). Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||Filters (Filter*)<br />
||Returns an array of all [[#Filter|filters]] in the model.<br />
|-<br />
||Id (Integer)<br />
||Model Id. Model Id is generated by QPR ProcessAnalyzer when the model is created.<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last time modified the model properties. Note that datatables containing the eventlog data are separate objects having similar fields to track the last modification and last data import.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the model was modified the last time.<br />
|-<br />
||Name (String)<br />
||Model name.<br />
|-<br />
||NCache (Integer)<br />
||Number of objects related to the model when the model is loaded into the memory.<br />
|-<br />
||NCaseAttributes (Integer)<br />
||Number of [[#AttributeType|CaseAttributes]] in model. Works only for in-memory models.<br />
|-<br />
||NCases (Integer)<br />
||Number of [[#Case|Cases]] in the model. Works only for in-memory models.<br />
|-<br />
||NEventAttributes (Integer)<br />
||Number of [[#AttributeType|EventAttributes]] in model. Works only for in-memory models.<br />
|-<br />
||NEvents (Integer)<br />
||Number of [[#Event|Events]] in model. Works only for in-memory models.<br />
|-<br />
||NEventTypes (Integer)<br />
||Number of [[#EventType|EventTypes]] in the model. Works only for in-memory models.<br />
|-<br />
||NOpens (Integer)<br />
||Number of times analysis has been requested from the model.<br />
|-<br />
||Project (Project)<br />
||[[#Project|Project]] where the model belongs to.<br />
|-<br />
||ProjectId (Integer)<br />
||[[#Project|Project]] id where the model belongs to.<br />
|-<br />
||Status (String)<br />
||<br />
Memory availability status of the model. There are the following statuses:<br />
* '''Loading''': The model is currently loading into the memory. When the loading is ready, the status changes to ''online''. If the loading fails, the status changes to ''offline''.<br />
* '''Offline''': The model is currently not loaded into the memory. The model needs to be loaded into the memory, so that analyses can be calculated from the model (occurs automatically when an analysis is requested).<br />
* '''Online''': The model is in the memory and ready for analysis calculation. If the model is dropped from the memory, its status changes to ''offline''.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Model Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||CalendarByName (BusinessCalendar)<br />
||<br />
name (String)<br />
||<br />
Returns a [[Business_Calendar|business calendar]] stored to the Model by the name of the calendar. Business calendars can be stored to models in the model properties. Returns ''null'', if a calendar with the provided name is not stored to the model.<br />
<br />
Examples:<br />
<pre><br />
ModelById(123).CalendarByName("MyCalendar")<br />
</pre><br />
|-<br />
||CreateDiagram (Diagram)<br />
||Parameters dictionary<br />
||<br />
Creates a [[Diagram_in_Expression_Language|diagram]] to the model. Parameters is a dictionary containing diagram properties. Following properties are available:<br />
* '''Name''' (string): Diagram name that distinguishes diagrams in a model.<br />
* '''Description''' (string): Diagram description text.<br />
* '''Content''' (dictionary): Diagram content as dictionary.<br />
<br />
Example:<br />
<pre><br />
ModelById(1)<br />
.CreateDiagram(#{<br />
"Name": "My diagram",<br />
"Description": "This is my new diagram",<br />
"Content": #{ ... },<br />
})<br />
</pre><br />
|-<br />
||CreateFilter (Filter)<br />
||Parameters dictionary<br />
||Creates a filter to a model. Requires ''GenericWrite'' permission for the project and global ''CreateModel'' permission. If a filter with that name already exists in the model, an exception is thrown.<br />
The parameters dictionary may have the following properties:<br />
* '''Name''': Name of the filter. This property is mandatory.<br />
* '''Description''': Description of the filter. This property is optional.<br />
* '''Rules''': Filter rules for the filter defined as a dictionary according to the [[Filtering_in_QPR_ProcessAnalyzer_Queries|filter json format]]. This property is mandatory.<br />
* '''PublishMode''': Publish mode of the filter which is one of the following: ''Private'', ''Public'' or ''Default''. This property is optional, and the default value is ''Private''.<br />
<br />
Example:<br />
<pre><br />
let newFilter = modelById(1).CreateFilter(#{ <br />
"Name": "My Filter",<br />
"Rules": #{<br />
"Items": [#{<br />
"Type": "IncludeCases",<br />
"Items": [#{<br />
"Type": "CaseAttributeValue",<br />
"Attribute": "Account Manager",<br />
"StringifiedValues": [ "0Robert Miller" ]<br />
}]<br />
}]<br />
},<br />
"PublishMode": "Public"<br />
});<br />
}<br />
</pre><br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||Deletes the Model permanently. The model doesn't need to be in the recycle bin to be able to delete it permanently.<br />
|-<br />
||Modify (Model)<br />
||Dictionary<br />
||<br />
Modifies model properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: ''Name'', ''Description'', ''ProjectId'', and ''Configuration''.<br />
<br />
The function returns the updated model object. Requires the ''GenericWrite'' permission for the project and the global ''CreateModel'' permission.<br />
<br />
Example:<br />
<pre><br />
ModelById(1)<br />
.Modify(#{<br />
"Name": "My model",<br />
"Description": "My description",<br />
"ProjectId": 2,<br />
"Configuration": #{<br />
"DataSource": #{<br />
"Cases": #{<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My cases datatable",<br />
"Columns": #{<br />
"CaseId": "Case Name"<br />
}<br />
},<br />
"Events": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My events datatable",<br />
"Columns": #{<br />
"CaseId": "Case Name",<br />
"EventType": "Event Type",<br />
"Timestamp": "Start Time"<br />
}<br />
}<br />
}<br />
}<br />
}<br />
)<br />
</pre><br />
|-<br />
||ResetPreprocessings<br />
||(none)<br />
||<br />
Removes all cached items related to the Model, e.g. preprocessings and calculation results. In practice, the Model is reset to a state where it was right after the model was loaded into memory.<br />
|-<br />
||Restore<br />
||(none)<br />
||Restores the Model from the recycle bin back to the original location.<br />
|-<br />
||<span id="ToSqlDataFrame">ToSqlDataFrame</span><br />
||In-memory dataframe<br />
||Converts an in-memory dataframe to an SQL dataframe. In practice, an SQL query is created from the in-memory dataframe and the query is executed in the datasource so that the data is available in the datasource for further SQL operations. This function is intended only to small amounts of data which is less than 16384 rows.<br />
<br />
Example: Select matching cases from events data using in-memory dataframe:<br />
<pre><br />
let model = ModelById(1);<br />
let dfEvents = model.EventsDatatable.SqlDataFrame;<br />
let inMemoryDf = ToDataFrame(<br />
[["1"], ["2"], ["3"]],<br />
[#{"Name": "id", "DataType": "String"}]<br />
);<br />
model.ToSqlDataFrame(inMemoryDf)<br />
.Join(dfEvents, ["id": "CaseId"])<br />
.SelectDistinct(["CaseId"])<br />
.Collect();<br />
</pre><br />
|-<br />
||<span id="TriggerNotifications">TriggerNotifications</span> (Boolean)<br />
||Notification names (String*)<br />
||Triggers the given notifications for the Model. Notifications are given by their names. Triggering means that the configured rules are run and notification emails are sent as defined by the rules. If the notification names parameter is not provided, all notifications in the Model are triggered.<br />
<br />
The function return ''true'' if any notification were triggered, otherwise ''false''.<br />
<pre><br />
ModelById(123).TriggerNotifications(["Notification 1", "Notification 2"]);<br />
Triggers notifications Notification 1 and Notification 2 in model id 123.<br />
<br />
ModelById(123).TriggerNotifications();<br />
Triggers all notifications in model id 123.<br />
</pre><br />
|}<br />
<br />
Function to get Model by model id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ModelById<br />
||<br />
* Model id (Integer)<br />
||<br />
Returns [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Model|Model]] object corresponding to the provided model id.<br />
|}<br />
<br />
== Project ==<br />
{| class="wikitable"<br />
!'''Project properties'''<br />
! '''Description'''<br />
|-<br />
||CreatedBy (User)<br />
||User who created the Project.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the Project was created.<br />
|-<br />
||Dashboards (Dashboard*)<br />
||Returns all [[Dashboard_in_Expression_Language|dashboards]] in the project.<br />
|-<br />
||Datatables (Datatable*)<br />
||Returns all Datatables in the project.<br />
|-<br />
||DeletedDate (DateTime)<br />
||Timestamp when the Project was deleted (moved to the recycle bin).<br />
|-<br />
||Description (String)<br />
||Project description. The project description may contain line breaks.<br />
|-<br />
||DeletedBy (User)<br />
||User who deleted the Project (moved to the recycle bin).<br />
|-<br />
||Id (Integer)<br />
||Id of the Project.<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last modified the Project.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the Project was last modified (refers to the project name, description and parent, not the contents of the project).<br />
|-<br />
||Name (String)<br />
||Name of the Project.<br />
|-<br />
||Models (Model*)<br />
||Models that are in the Project.<br />
|-<br />
||Parent (Project)<br />
||Parent project, i.e. a Project where the Project is located in the hierarchy of Projects. Returns ''null'' for root level Projects. Throws an error if user doesn't have access to the parent project.<br />
|-<br />
||ParentProjectId (Integer)<br />
||Parent project id. Returns ''null'' for root level Projects. The parent project id is returned even if user doesn't have access to the parent project.<br />
|-<br />
||Scripts (Script*)<br />
||Scripts that are in the Project.<br />
|-<br />
||Secrets (Dictionary*)<br />
||Returns array of all [[Storing_Secrets_for_Scripts|secrets]] in the project as Dictionary with following properties:<br />
* '''Name''' (string): Name of the secret.<br />
* '''Type''' (string): Type of the secret which is one of the following: "odbc", "sap", "salesforce".<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Project functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||CreateDashboard (Dashboard)<br />
||Parameters dictionary<br />
||Creates a dashboard to the project. ''EditDashboards'' permission to the project is required. The parameter is dictionary with following supported dashboard properties:<br />
* '''Name''' (String): Name of the dashboard.<br />
* '''Identifier''' (String): Identifier of the dashboard.<br />
* '''Description''' (String): Description of the dashboard.<br />
* '''Content''' (Dictionary): Content of the dashboard.<br />
<br />
Example: Create empty dashboard.<br />
<pre><br />
ProjectById(1)<br />
.CreateDashboard(#{<br />
"Name": "My dashboard",<br />
"Identifier": "MyDashboard"<br />
});<br />
</pre><br />
<br />
Example: Create dashboard with a chart.<br />
<pre><br />
ProjectById(1)<br />
.CreateDashboard(#{<br />
"Name": "My dashboard",<br />
"Content": #{<br />
"version": 4,<br />
"typeName": "View",<br />
"name": "My dashboard",<br />
"subElements": [<br />
#{<br />
"position": #{<br />
"x": 0,<br />
"y": 0,<br />
"width": 0.5,<br />
"height": 0.5,<br />
"zOrder": 0<br />
},<br />
"element": #{<br />
"typeName": "Chart",<br />
"configuration": #{<br />
"root": #{<br />
"expressionType": "Cases",<br />
"expressionParameters": #{}<br />
},<br />
"measures": [#{<br />
"expressionType": "Count",<br />
"expressionParameters": #{}<br />
}]<br />
}<br />
}<br />
}<br />
]<br />
}<br />
});<br />
</pre><br />
|-<br />
||<span id="CreateDatatable">CreateDatatable</span> (Datatable)<br />
||<br />
* Parameters dictionary<br />
||Creates datatable to the project. After creation, there are no columns or rows in the datatable. The function returns the created datatable entity. Following properties can be set for the datatable:<br />
* '''Name''' (string): Name of the datatable. This parameter is mandatory.<br />
* '''Description''' (string): Description for the datatable. This parameter is optional.<br />
* '''NameInDataSource''' (string): Table name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''SchemaNameInDataSource''' (string): Schema name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''DatabaseNameInDataSource''' (string): Database name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''Type''' (string): Defines where the data for the datatable is located. Available values are '''Snowflake''', '''SqlServer''', and '''Local'''. This parameter is optional and default value is defined by the [[PA_Configuration_database_table#General_Settings|DefaultDataSource]] setting.<br />
* '''Connection''': Connection object for the datatable. This parameter is optional.<br />
<br />
Example: Create a new datatable:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable"<br />
});<br />
</pre><br />
<br />
Example: Create Snowflake datatable linked to a custom table:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable",<br />
"Description": "My description",<br />
"NameInDataSource": "MyTable",<br />
"SchemaNameInDataSource": "MySchema",<br />
"DatabaseNameInDataSource": "MyDatabase",<br />
"Type": "Snowflake"<br />
});<br />
</pre><br />
<br />
Example: Create Snowflake datatable where connection string is stored as a [[Storing_Secrets_for_Scripts|secret]]:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable",<br />
"Type": "Snowflake",<br />
"Connection": ProjectById(1).CreateSnowflakeConnection(#{ "OdbcConnectionStringKey": "MyKey" })<br />
});<br />
</pre><br />
|-<br />
||CreateModel (Model)<br />
||<br />
* Parameters dictionary<br />
||Creates a model to a project. Requires ''GenericWrite'' permission for the Project and global ''CreateModel'' permission. If a model with that name already exists, an exception is thrown.<br />
<br />
Parameters dictionary has the following properties:<br />
* '''Name''': Name of the model. This property is mandatory.<br />
* '''Description''': Description of the model. This property is optional.<br />
* '''Configuration''': Configuration dictionary for the model. This property is technically optional, but a working model requires at least datasource settings to be defined.<br />
<br />
Example:<br />
<pre><br />
ProjectById(1).CreateModel(#{ <br />
"Name": "My model",<br />
"Description": "My description",<br />
"Configuration": {<br />
"DataSource": {<br />
"Cases": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My cases datatable",<br />
"Columns": {<br />
"CaseId": "Case Name"<br />
}<br />
},<br />
"Events": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My events datatable",<br />
"Columns": {<br />
"CaseId": "Case Name",<br />
"EventType": "Event Type",<br />
"Timestamp": "Start Time"<br />
}<br />
}<br />
}<br />
}<br />
});<br />
</pre><br />
|-<br />
||DatatableByName (Datatable)<br />
||Datatable name (String)<br />
||<br />
Returns Datatable by its name located in the project. Returns null, if Datatable with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).DatatableByName("MyDatatable1")<br />
</pre><br />
<br />
Example: Get datatable by name, and create it if it doesn't exist:<br />
<pre><br />
let project = ProjectById(123);<br />
let datatableName = "MyDatatable1";<br />
let datatable = project.DatatableByName(datatableName);<br />
if (datatable == null) {<br />
datatable = project.CreateDatatable(datatableName);<br />
}<br />
</pre><br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||Deletes the Project permanently. Note that the Project doesn't need to be in the recycle bin to be able to delete it permanently.<br />
|-<br />
||Restore<br />
||(none)<br />
||Restores the Project from the recycle bin back to the original location.<br />
|-<br />
||ModelByName (Model)<br />
||Model name (String)<br />
||<br />
Returns Model by its name located in the project. Returns null, if Model with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).ModelByName("My Model 1")<br />
</pre><br />
|-<br />
||ScriptByName (Script)<br />
||Script name (String)<br />
||<br />
Returns Script by its name located in the project. Returns null, if Script with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).ScriptByName("MyScript1")<br />
</pre><br />
|-<br />
||<span id="SetSecret">SetSecret</span><br />
||<br />
# Secret type (string)<br />
# Secret name (string)<br />
# Secret value (string)<br />
||Sets or adds a [[Storing_Secrets_for_Scripts|secret]] for the project. Setting the secret value to ''null'' removes the secret. There can be several secrets with the same name in the same project if the type of the secret is different. Setting secrets requires the project specific ''ManageProject'' permission.<br />
<br />
Parameters:<br />
# '''Type''' (string): Secret type which is one of the following:<br />
#* "odbc": ODBC connection string (e.g., to extract data, or load a model directly)<br />
#* "externaldatatableconnection": ODBC connection string used for a datatable<br />
#* "sap": SAP password<br />
#* "salesforce": Salesforce password<br />
# '''Name''' (string): Secret name, used to refer to the secret in the commands.<br />
# '''Value''' (string): Secret value which contains the confidential information.<br />
<br />
Example: Set SAP password:<br />
<pre><br />
ProjectById(1).SetSecret("sap", "MySapPassword", "I l0ve 5AP!");<br />
</pre><br />
<br />
Example: Remove SAP password:<br />
<pre><br />
ProjectById(1).SetSecret("sap", "MySapPassword", null);<br />
</pre><br />
|}<br />
<br />
Function to get Project by id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ProjectById<br />
||Project id (Integer)<br />
||<br />
Returns project object corresponding to the provided project id.<br />
|-<br />
||ProjectByName<br />
||Project name (String)<br />
||<br />
Returns project object by given project name. If there is no such project or user doesn't have access to it, ''null'' value is returned. If there are multiple projects with the same name, one of them is returned.<br />
<br />
Example:<br />
<pre><br />
let project = ProjectByName("My Project");<br />
</pre><br />
|}<br />
<br />
== Script ==<br />
Scripts are entities that contain executable code, that can be run. Usually scripts contains ETL routines but also other kind of tasks are possible.<br />
<br />
{| class="wikitable"<br />
!'''Script properties'''<br />
! '''Description'''<br />
|-<br />
||Code (String)<br />
||Script code.<br />
|-<br />
||CreatedBy (User)<br />
||User who created the Script.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the Script was created.<br />
|-<br />
||CurrentRunStart (DateTime)<br />
||Timestamp of the current run start. Null if the script is currently not running.<br />
|-<br />
||Description (String)<br />
||Description of the Script.<br />
|-<br />
||Id (Integer)<br />
||Id of the Script.<br />
|-<br />
||Language (String)<br />
||Either of the following scripting language: '''Expression''' or '''SQL'''. When language is Expression, the script is run as an expression script, and when language is SQL, the script is run as an SQL script (using the sandbox database).<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last modified the Script.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the Script was last modified.<br />
|-<br />
||LastRunEnd (DateTime)<br />
||Timestamp of the last completed script run end (either successful completion or failure). Null if the Script hasn't been run yet.<br />
|-<br />
||LastRunResult (String)<br />
||Result of the last run. Options are:<br />
* '''Completed''': The last run was completed successfully.<br />
* '''Failed''': An error occurred during the last run, so likely the script did not complete as intended.<br />
* '''Aborted''': Script run was manually stopped prematurely by a user, so the script did not proceeded in the end.<br />
<br />
Null if the Script hasn't been run yet.<br />
|-<br />
||LastRunStart (DateTime)<br />
||Timestamp of the last completed script run start time. Null if the Script hasn't been run yet.<br />
|-<br />
||Name (String)<br />
||Name of the Script.<br />
|-<br />
||OperationId (Integer)<br />
||Id of the operation which runs the Script. Null if the script is currently not running.<br />
|-<br />
||Project (Project)<br />
||Project where the Script is located. Null if the script is in the global context.<br />
|-<br />
||ProjectId (Integer)<br />
||Id of the project where the Script is located. Null if the script is in the global context.<br />
|-<br />
||Status (String)<br />
||Current status of the script. Options are:<br />
* '''Ready''': Script is not running. In this status, the script can be started (changing the status to ''Running'').<br />
* '''Running''': Script is running. In this status, the script can be stopped (changing the status to ''Stopping''). Calling stop just requests a script to stop, and the actual stopping occurs some time later.<br />
* '''Stopping''': Script has been requested to be stopped, but it's still running. In this status, neither start nor stop can be called for the script. When the script eventually stops, its status changes to ''Ready''.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Script functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||Run (Object)<br />
||Dictionary of parameters<br />
||<br />
Runs the script using the provided parameters. The parameters are available in the script as variables (see the example). Any type of variables can be passed to the script. Note that if the script assumes certain variables, but that they are not passed to the script, the script run will throw an error. <br />
<br />
For SQL scripts, the passed parameters are available in the script as variables in format '''@_parameter_<ParameterName>''' where <ParameterName> is the name of the parameter, e.g. ''parameter_myParameter1''. Only string type of parameters can be used, so any other type of data in parameter values is converted into strings.<br />
<br />
The return value of the script is returned by the Run function. Expression scripts return a value with the ''return'' statement or alternatively the result of the last line of the script is the return value. If the script does not return any value, the Run function returns ''_empty''. For SQL scripts, the return value is the last dataset produced by the script (returned as a DataFrame) (SQL scripts might create several datasets using the ''--#ShowReport'' command or the ''Show'' parameter).<br />
<br />
When a script is called using the Run function, the called script status does not change, because it's the parent script that is ''Running''. Also the called script log is not filled, but instead the logging goes to the calling script.<br />
<br />
It's possible to call a script using the Run function several times simultaneously.<br />
<br />
If there is an error when running the called script, the Run function throws the error to the calling script.<br />
<br />
Scripts are run in the script entity context, so for example the following properties are available:<br />
* Id: Script id<br />
* Name: Script name<br />
* Project.Id: Project id where the script is located<br />
* Project.Name: Name of the project where the script is located<br />
<br />
Example: Following script (id 123) raises a specified number to a specified power:<br />
<pre><br />
return Pow(numberToRaise, exponent);<br />
</pre><br />
<br />
The script can be called as follows:<br />
<pre><br />
let runResult = ScriptById(123).Run(#{<br />
"numberToRaise": 4,<br />
"exponent": 2<br />
})<br />
Returns: 16<br />
</pre><br />
|-<br />
||Start<br />
||<br />
||Starts the script. The operation doesn't wait for the script run to complete (i.e., asynchronous behavior) which corresponds to starting the script in the Workspace.<br />
<br />
Parameters to the script can additionally be provided as a dictionary of name-value pairs (which is not possible when script is started in the Workspace). Return value is script run id (integer) if the script was started, and if the script was already running, it returns ''null''.<br />
<br />
Example: start script and store the script run id:<br />
<pre><br />
let runId = ScriptById(1).Start();<br />
</pre><br />
<br />
Example: start script and pass parameters:<br />
<pre><br />
ScriptById(1).Start(#{<br />
"variable1": "val1",<br />
"variable2": 5<br />
});<br />
</pre><br />
|-<br />
||Stop<br />
||<br />
||Stops the script. The operation doesn't wait for the stopping to complete (i.e., asynchronous behavior) which corresponds to stopping the script in the Workspace.<br />
<br />
Return value is script run id (integer) if the script stopping was initiated, and there isn't a script to stop, it returns ''null''.<br />
<br />
Example:<br />
<pre><br />
let runId = ScriptById(1).Stop();<br />
</pre><br />
|}<br />
<br />
Function to get a script by the script id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ScriptById<br />
||<br />
* Script id (Integer)<br />
||<br />
Returns Script object corresponding to the given script id. If script with the given id doesn't exist or user doesn't have permissions to it, an error is given.<br />
|}<br />
<br />
== User/Group ==<br />
User objects represents users and user groups. Note that some properties can only be used for users and some for groups.<br />
<br />
{| class="wikitable"<br />
!'''User/group properties'''<br />
! '''Description'''<br />
|-<br />
||Description (String)<br />
||Description of the user.<br />
|-<br />
||Email (String)<br />
||Email address of the user.<br />
|-<br />
||FullName (String)<br />
||Full name of the user or group name.<br />
|-<br />
||GlobalPermissions (String*)<br />
||Array of global [[Roles and Permissions#Global_and_Project_Roles|permissions]] of the user. Global permissions come from the global roles assigned to the user and groups that the user belongs to. Note that to get the effective permissions for certain objects, also project specific permissions need to be taken into account.<br />
|-<br />
||GroupMemberNames (String*)<br />
||Array of names of members of a user group. This property is available for groups.<br />
|-<br />
||GroupMembers (User*)<br />
||Array of members of a user group. This property is available for groups.<br />
|-<br />
||GroupNames (String*)<br />
||Array of names of user groups the user belongs to. This property is available for users.<br />
|-<br />
||Groups (User*)<br />
||Array of user groups the user belongs to. This property is available for users.<br />
|-<br />
||HasPassword (Boolean)<br />
||Returns true if user has a password defined in QPR ProcessAnalyzer and thus user can authenticate using the password. If user doesn't have a password, the SAML authentication is the only way to log in. ''ManageUsers'' permission is needed to access this property for other users.<br />
|-<br />
||Id (Integer)<br />
||Id of the user, which is unique for every user.<br />
|-<br />
||IsActive (Boolean)<br />
||Returns true only if the user is active (not disabled).<br />
|-<br />
||IsGroup (Boolean)<br />
||Returns true if the user is a user group.<br />
|-<br />
||IsLocked (Boolean)<br />
||Returns true if user account is currently [[User_Session_Management#Preventing_password_guessing_attacks|locked]]. ''ManageUsers'' permission is needed to access this property.<br />
|-<br />
||LastLockedDate (DateTime)<br />
||Returns date when user account was locked the last time. Returns ''null'' if the user account has never been locked. ''ManageUsers'' permission is needed to access this property.<br />
|-<br />
||LastLoginDate (DateTime)<br />
||Returns date when the user made last successful login. ''ManageUsers'' permission is needed to access this property for other users.<br />
|-<br />
||Name (String)<br />
||Login name of the user or group.<br />
|-<br />
||Roles (Object**)<br />
||<br />
Returns all roles of the user (both global and project roles) as a nested array structure.<br />
<br />
Example:<br />
<pre><br />
ToJson(Users.Where(name == "qpr").Roles)<br />
Returns (for example):<br />
[<br />
[{"calcId": "Project:1"}, "Administrator"],<br />
[{"calcId": "Project:2"}, "Analyzer"],<br />
[{"calcId": "Project:3"}, "Viewer"],<br />
[null, "RunScripts"],<br />
[null, "Administrator"]<br />
]<br />
</pre><br />
|}<br />
<br />
{| class="wikitable"<br />
!'''User/group functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||EffectivePermissionsFor (String Array)<br />
||<br />
* Project to get permissions<br />
||<br />
Returns effective (actual) permission of the user to the given project. Project is given as a [[#Project|project object]] (not as a project id). Effective permissions determine the actual permissions that the user has, i.e. a combination of all permissions assigned to the user and groups the user belong to, including both project specific and global roles.<br />
<br />
Permissions for the EffectivePermissionsFor function are as follows:<br />
* All users can query their own permissions<br />
* To get permissions for any user, the user needs to have [[Roles_and_Permissions|ManageUsers permission]].<br />
<br />
Note that ''inactive'' users don't have any effective permissions, so the EffectivePermissionsFor function does not return any permissions for those users.<br />
<br />
Examples:<br />
<pre><br />
EffectivePermissionsFor(ModelById(1234).Project)<br />
Returns (for example): ["EditDashboards", "Filtering", "GenericRead"]<br />
</pre><br />
|-<br />
||GetAttribute<br />
||<br />
||<br />
Returns user attribute value by given attribute name and optionally by the model/project/dashboard context. Supported data types are String, Integer, Float, and DateTime. To store more complex data types, data can be converted into json and stored as string. If the attribute doesn't exist, null is returned.<br />
<br />
For example, if using dashboard as context, the attributes are effectively bound to each user and each dashboard separately. Thus, there can be several attributes with the same name as long as the dashboard is different.<br />
<br />
Parameters:<br />
# '''Attribute name''' (String): Name of the attribute.<br />
# '''Attribute context''' (Project/Model/Dashboard): Optional context object the attribute is linked to.<br />
<br />
Users have permissions to get attributes for themselves, and also (administrator) users with global ''ManageUsers'' permission can get attributes for all users. In addition, if using the context object, the ''GenericRead'' permission is required for the context object.<br />
<br />
Example: Get user attribute MyDataValue for myself:<br />
<pre><br />
CurrentUser<br />
.GetAttribute("MyDataValue");<br />
</pre><br />
<br />
Example: Get user attribute MyDataValue for user John:<br />
<pre><br />
Users<br />
.Where(Name=="John")<br />
.GetAttribute("MyDataValue");<br />
</pre><br />
<br />
Example: Get user attribute MyDataValue for user 1 related to dashboard id 1:<br />
<pre><br />
UserById(1)<br />
.GetAttribute("MyDataValue", DashboardById(1));<br />
</pre><br />
|-<br />
||SetAttribute<br />
||<br />
||<br />
Sets user attribute value for given attribute name and optionally for the model/project/dashboard context. Supported data types are String, Integer, Float, and DateTime. To store more complex data types, data can be converted into json and stored as string. If setting value ''null'', the user attribute is removed. Required permissions are same as in the GetAttribute function.<br />
<br />
Parameters:<br />
# '''Attribute name''' (String): Name of the attribute.<br />
# '''Attribute value''' (String/Integer/Float/DateTime): Attribute value to be stored.<br />
# '''Attribute context''' (Project/Model/Dashboard): Optional context object the attribute value is linked to.<br />
<br />
Example: Set user attribute MyDataValue for myself:<br />
<pre><br />
CurrentUser<br />
.SetAttribute("MyDataValue ", "value");<br />
</pre><br />
<br />
Example: Set value 123 as user attribute MyDataValue for user John:<br />
<pre><br />
Users<br />
.Where(Name=="John")<br />
.SetAttribute("MyDataValue", 123);<br />
</pre><br />
<br />
Example: Set current time as user attribute MyDataValue for user 1 related to dashboard id 1:<br />
<pre><br />
UserById(1)<br />
.GetAttribute("MyDataValue", Now, DashboardById(1));<br />
</pre><br />
|}<br />
<br />
Function to get User by user id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||UserById<br />
||<br />
* User id (Integer)<br />
||<br />
Returns User object corresponding to the provided user id.<br />
|}</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Objects_in_Expression_Language&diff=24497QPR ProcessAnalyzer Objects in Expression Language2024-03-28T10:06:46Z<p>Ollvihe: /* Script */</p>
<hr />
<div>==Filter==<br />
Filters contain a set of filter rules used to filter cases and events in models. Filters are objects located in the models. Filters are owned by the creator user, and when a filter publish mode is private, only the creator can use it.<br />
<br />
{| class="wikitable"<br />
!'''Filter properties'''<br />
! '''Description'''<br />
|-<br />
||CreatedBy (User)<br />
||Returns the user who created the filter.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Returns date when the filter created date.<br />
|-<br />
||Description (String)<br />
||Returns description of the filter.<br />
|-<br />
||Id (Integer)<br />
||Returns id of the filter.<br />
|-<br />
||LastModifiedBy (User)<br />
||Returns user who modified the filter.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Returns date when the filter last modified.<br />
|-<br />
||Model<br />
||Returns model where the filter belongs to.<br />
|-<br />
||ModelId (Integer)<br />
||Returns model where the filter belongs to.<br />
|-<br />
||Name (String)<br />
||Returns the name of the filter.<br />
|-<br />
||Project<br />
||Returns project where the filter belongs to.<br />
|-<br />
||ProjectId (Integer)<br />
||Returns project id where the filter belongs to.<br />
|-<br />
||PublishMode (String)<br />
||Returns publish mode of the filter, one of the following: '''Private''', '''Public''', or '''Default'''.<br />
|-<br />
||Rules (Dictionary)<br />
||Returns a dictionary containing the filter rules in the filter.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Filter Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||<br />
Deletes the filter permanently. To delete own filters, the '''Filtering''' permission is needed, and to delete any filters the '''ManageViews''' permission is needed.<br />
|-<br />
||Modify<br />
||Dictionary<br />
||<br />
Modifies filter properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: ''Name'', ''Description'', ''PublishMode'', and ''Rules''.<br />
<br />
The function returns the updated filter object. Requires ''GenericWrite'' permission for the Project and global ''CreateModel'' permission.<br />
<br />
Example:<br />
<pre><br />
FilterById(1)<br />
.Modify(#{<br />
"Name": "My filter",<br />
"Description": "My description",<br />
"PublishMode": "Public",<br />
"Rules": #{<br />
"Items": [<br />
#{<br />
"Type": "IncludeCases",<br />
"Items": [<br />
#{<br />
"Type": "CaseAttributeValue",<br />
"Attribute": "Account Manager",<br />
"StringifiedValues": [<br />
"0Mary Wilson"<br />
]<br />
}<br />
]<br />
}<br />
]<br />
}<br />
}<br />
)<br />
</pre><br />
|}<br />
<br />
Function to get filter id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||FilterById<br />
||<br />
* Filter id (Integer)<br />
||<br />
Returns Filter object corresponding to the provided filter id.<br />
|}<br />
<br />
==Model==<br />
Notes:<br />
* For in-memory models that are offline, the object counts represent the situation when the model was last time online (loaded into the memory). ''null'' is returned if the model has never been loaded into the memory.<br />
* If [[Case_Level_Permissions|Case permissions]] are used for the model, and user doesn't have '''GenericWrite''' permission for the model, ''null'' is returned for data security reasons. Users that have the '''GenericWrite''' permission, see null when the model is offline, and when online, they see counts where the case level permissions settings are applied.<br />
* Properties ''CaseAttributes'', ''EventAttributes'' and ''Eventlog'' work only for the in-memory models and they require the model to be loaded into the memory. If the model is not in the memory, it is loaded when these properties is used. Other model properties down require the model to be in the memory.<br />
<br />
{| class="wikitable"<br />
!'''Model properties'''<br />
! '''Description'''<br />
|-<br />
||Calendars (BusinessCalendar*)<br />
||<br />
Returns all [[Business_Calendar|business calendars]] stored to the Model as an array. Returns an empty array, if there are no business calendars stored to the model. Note: UI allows to set only one business calendar for a Model.<br />
|-<br />
||CaseAttributes (AttributeType*)<br />
||[[#AttributeType|CaseAttributes]] in the model returned in the alphabetical order. Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||CasesDatatable (Datatable)<br />
||Returns the Datatable the model uses as a datasource for cases. Returns ''null'' if the cases Datatable is not defined or if model uses other than the Datatable datasource.<br />
|-<br />
||Configuration (Dictionary)<br />
||Returns the Model configuration as dictionary. Example:<br />
<pre><br />
ModelById(123).Configuration.DataSource.Events.DataTableName<br />
</pre><br />
|-<br />
||ConfigurationJson (String)<br />
||Returns the Model configuration as JSON string.<br />
|-<br />
||CreatedBy (User)<br />
||User who created the model.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the model was created.<br />
|-<br />
||DefaultCalendar (BusinessCalendar)<br />
||Returns the default [[Business_Calendar|business calendar]] of the Model. Returns ''null'', if there are no calendars in the Model or no calendar has been set as a default calendar. Note: UI allows to set only one business calendar for a Model, which is also the default calendar.<br />
|-<br />
||DefaultFilter (Filter)<br />
||Default filter of the model. Returns ''null'' if the model does not have a default filter.<br />
|-<br />
||DefaultFilterId (Integer)<br />
||Default filter id of the model. Returns ''null'' if the model does not have a default filter.<br />
|-<br />
||Description (String)<br />
||Model description. The model description may contain line breaks.<br />
|-<br />
||DeletedDate (DateTime)<br />
||Timestamp when Model was deleted (moved to the recycle bin).<br />
|-<br />
||DeletedBy (User)<br />
||User how deleted the Model.<br />
|-<br />
||Diagrams (Diagram*)<br />
||Returns an array of all [[Diagram_in_Expression_Language|diagrams]] in the model.<br />
|-<br />
||EstimatedMemory (Integer)<br />
||Returns an estimation of how much memory in bytes the model requires.<br />
|-<br />
||EventsDatatable (Datatable)<br />
||Returns the Datatable the model uses as a datasource for events. Returns ''null'' if the events Datatable is not defined or if model uses other than the Datatable datasource.<br />
|-<br />
||EventAttributes (AttributeType*)<br />
||[[#AttributeType|EventAttributes]] in the model returned in the alphabetical order. Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||EventLog (EventLog)<br />
||EventLog containing the entire model (i.e. event log where no filters have been applied). Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||Filters (Filter*)<br />
||Returns an array of all [[#Filter|filters]] in the model.<br />
|-<br />
||Id (Integer)<br />
||Model Id. Model Id is generated by QPR ProcessAnalyzer when the model is created.<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last time modified the model properties. Note that datatables containing the eventlog data are separate objects having similar fields to track the last modification and last data import.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the model was modified the last time.<br />
|-<br />
||Name (String)<br />
||Model name.<br />
|-<br />
||NCache (Integer)<br />
||Number of objects related to the model when the model is loaded into the memory.<br />
|-<br />
||NCaseAttributes (Integer)<br />
||Number of [[#AttributeType|CaseAttributes]] in model. Works only for in-memory models.<br />
|-<br />
||NCases (Integer)<br />
||Number of [[#Case|Cases]] in the model. Works only for in-memory models.<br />
|-<br />
||NEventAttributes (Integer)<br />
||Number of [[#AttributeType|EventAttributes]] in model. Works only for in-memory models.<br />
|-<br />
||NEvents (Integer)<br />
||Number of [[#Event|Events]] in model. Works only for in-memory models.<br />
|-<br />
||NEventTypes (Integer)<br />
||Number of [[#EventType|EventTypes]] in the model. Works only for in-memory models.<br />
|-<br />
||NOpens (Integer)<br />
||Number of times analysis has been requested from the model.<br />
|-<br />
||Project (Project)<br />
||[[#Project|Project]] where the model belongs to.<br />
|-<br />
||ProjectId (Integer)<br />
||[[#Project|Project]] id where the model belongs to.<br />
|-<br />
||Status (String)<br />
||<br />
Memory availability status of the model. There are the following statuses:<br />
* '''Loading''': The model is currently loading into the memory. When the loading is ready, the status changes to ''online''. If the loading fails, the status changes to ''offline''.<br />
* '''Offline''': The model is currently not loaded into the memory. The model needs to be loaded into the memory, so that analyses can be calculated from the model (occurs automatically when an analysis is requested).<br />
* '''Online''': The model is in the memory and ready for analysis calculation. If the model is dropped from the memory, its status changes to ''offline''.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Model Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||CalendarByName (BusinessCalendar)<br />
||<br />
name (String)<br />
||<br />
Returns a [[Business_Calendar|business calendar]] stored to the Model by the name of the calendar. Business calendars can be stored to models in the model properties. Returns ''null'', if a calendar with the provided name is not stored to the model.<br />
<br />
Examples:<br />
<pre><br />
ModelById(123).CalendarByName("MyCalendar")<br />
</pre><br />
|-<br />
||CreateDiagram (Diagram)<br />
||Parameters dictionary<br />
||<br />
Creates a [[Diagram_in_Expression_Language|diagram]] to the model. Parameters is a dictionary containing diagram properties. Following properties are available:<br />
* '''Name''' (string): Diagram name that distinguishes diagrams in a model.<br />
* '''Description''' (string): Diagram description text.<br />
* '''Content''' (dictionary): Diagram content as dictionary.<br />
<br />
Example:<br />
<pre><br />
ModelById(1)<br />
.CreateDiagram(#{<br />
"Name": "My diagram",<br />
"Description": "This is my new diagram",<br />
"Content": #{ ... },<br />
})<br />
</pre><br />
|-<br />
||CreateFilter (Filter)<br />
||Parameters dictionary<br />
||Creates a filter to a model. Requires ''GenericWrite'' permission for the project and global ''CreateModel'' permission. If a filter with that name already exists in the model, an exception is thrown.<br />
The parameters dictionary may have the following properties:<br />
* '''Name''': Name of the filter. This property is mandatory.<br />
* '''Description''': Description of the filter. This property is optional.<br />
* '''Rules''': Filter rules for the filter defined as a dictionary according to the [[Filtering_in_QPR_ProcessAnalyzer_Queries|filter json format]]. This property is mandatory.<br />
* '''PublishMode''': Publish mode of the filter which is one of the following: ''Private'', ''Public'' or ''Default''. This property is optional, and the default value is ''Private''.<br />
<br />
Example:<br />
<pre><br />
let newFilter = modelById(1).CreateFilter(#{ <br />
"Name": "My Filter",<br />
"Rules": #{<br />
"Items": [#{<br />
"Type": "IncludeCases",<br />
"Items": [#{<br />
"Type": "CaseAttributeValue",<br />
"Attribute": "Account Manager",<br />
"StringifiedValues": [ "0Robert Miller" ]<br />
}]<br />
}]<br />
},<br />
"PublishMode": "Public"<br />
});<br />
}<br />
</pre><br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||Deletes the Model permanently. The model doesn't need to be in the recycle bin to be able to delete it permanently.<br />
|-<br />
||Modify (Model)<br />
||Dictionary<br />
||<br />
Modifies model properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: ''Name'', ''Description'', ''ProjectId'', and ''Configuration''.<br />
<br />
The function returns the updated model object. Requires the ''GenericWrite'' permission for the project and the global ''CreateModel'' permission.<br />
<br />
Example:<br />
<pre><br />
ModelById(1)<br />
.Modify(#{<br />
"Name": "My model",<br />
"Description": "My description",<br />
"ProjectId": 2,<br />
"Configuration": #{<br />
"DataSource": #{<br />
"Cases": #{<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My cases datatable",<br />
"Columns": #{<br />
"CaseId": "Case Name"<br />
}<br />
},<br />
"Events": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My events datatable",<br />
"Columns": #{<br />
"CaseId": "Case Name",<br />
"EventType": "Event Type",<br />
"Timestamp": "Start Time"<br />
}<br />
}<br />
}<br />
}<br />
}<br />
)<br />
</pre><br />
|-<br />
||ResetPreprocessings<br />
||(none)<br />
||<br />
Removes all cached items related to the Model, e.g. preprocessings and calculation results. In practice, the Model is reset to a state where it was right after the model was loaded into memory.<br />
|-<br />
||Restore<br />
||(none)<br />
||Restores the Model from the recycle bin back to the original location.<br />
|-<br />
||<span id="ToSqlDataFrame">ToSqlDataFrame</span><br />
||In-memory dataframe<br />
||Converts an in-memory dataframe to an SQL dataframe. In practice, an SQL query is created from the in-memory dataframe and the query is executed in the datasource so that the data is available in the datasource for further SQL operations. This function is intended only to small amounts of data which is less than 16384 rows.<br />
<br />
Example: Select matching cases from events data using in-memory dataframe:<br />
<pre><br />
let model = ModelById(1);<br />
let dfEvents = model.EventsDatatable.SqlDataFrame;<br />
let inMemoryDf = ToDataFrame(<br />
[["1"], ["2"], ["3"]],<br />
[#{"Name": "id", "DataType": "String"}]<br />
);<br />
model.ToSqlDataFrame(inMemoryDf)<br />
.Join(dfEvents, ["id": "CaseId"])<br />
.SelectDistinct(["CaseId"])<br />
.Collect();<br />
</pre><br />
|-<br />
||<span id="TriggerNotifications">TriggerNotifications</span> (Boolean)<br />
||Notification names (String*)<br />
||Triggers the given notifications for the Model. Notifications are given by their names. Triggering means that the configured rules are run and notification emails are sent as defined by the rules. If the notification names parameter is not provided, all notifications in the Model are triggered.<br />
<br />
The function return ''true'' if any notification were triggered, otherwise ''false''.<br />
<pre><br />
ModelById(123).TriggerNotifications(["Notification 1", "Notification 2"]);<br />
Triggers notifications Notification 1 and Notification 2 in model id 123.<br />
<br />
ModelById(123).TriggerNotifications();<br />
Triggers all notifications in model id 123.<br />
</pre><br />
|}<br />
<br />
Function to get Model by model id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ModelById<br />
||<br />
* Model id (Integer)<br />
||<br />
Returns [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Model|Model]] object corresponding to the provided model id.<br />
|}<br />
<br />
== Project ==<br />
{| class="wikitable"<br />
!'''Project properties'''<br />
! '''Description'''<br />
|-<br />
||CreatedBy (User)<br />
||User who created the Project.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the Project was created.<br />
|-<br />
||Dashboards (Dashboard*)<br />
||Returns all [[Dashboard_in_Expression_Language|dashboards]] in the project.<br />
|-<br />
||Datatables (Datatable*)<br />
||Returns all Datatables in the project.<br />
|-<br />
||DeletedDate (DateTime)<br />
||Timestamp when the Project was deleted (moved to the recycle bin).<br />
|-<br />
||Description (String)<br />
||Project description. The project description may contain line breaks.<br />
|-<br />
||DeletedBy (User)<br />
||User who deleted the Project (moved to the recycle bin).<br />
|-<br />
||Id (Integer)<br />
||Id of the Project.<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last modified the Project.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the Project was last modified (refers to the project name, description and parent, not the contents of the project).<br />
|-<br />
||Name (String)<br />
||Name of the Project.<br />
|-<br />
||Models (Model*)<br />
||Models that are in the Project.<br />
|-<br />
||Parent (Project)<br />
||Parent project, i.e. a Project where the Project is located in the hierarchy of Projects. Returns ''null'' for root level Projects. Throws an error if user doesn't have access to the parent project.<br />
|-<br />
||ParentProjectId (Integer)<br />
||Parent project id. Returns ''null'' for root level Projects. The parent project id is returned even if user doesn't have access to the parent project.<br />
|-<br />
||Scripts (Script*)<br />
||Scripts that are in the Project.<br />
|-<br />
||Secrets (Dictionary*)<br />
||Returns array of all [[Storing_Secrets_for_Scripts|secrets]] in the project as Dictionary with following properties:<br />
* '''Name''' (string): Name of the secret.<br />
* '''Type''' (string): Type of the secret which is one of the following: "odbc", "sap", "salesforce".<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Project functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||CreateDashboard (Dashboard)<br />
||Parameters dictionary<br />
||Creates a dashboard to the project. ''EditDashboards'' permission to the project is required. The parameter is dictionary with following supported dashboard properties:<br />
* '''Name''' (String): Name of the dashboard.<br />
* '''Identifier''' (String): Identifier of the dashboard.<br />
* '''Description''' (String): Description of the dashboard.<br />
* '''Content''' (Dictionary): Content of the dashboard.<br />
<br />
Example: Create empty dashboard.<br />
<pre><br />
ProjectById(1)<br />
.CreateDashboard(#{<br />
"Name": "My dashboard",<br />
"Identifier": "MyDashboard"<br />
});<br />
</pre><br />
<br />
Example: Create dashboard with a chart.<br />
<pre><br />
ProjectById(1)<br />
.CreateDashboard(#{<br />
"Name": "My dashboard",<br />
"Content": #{<br />
"version": 4,<br />
"typeName": "View",<br />
"name": "My dashboard",<br />
"subElements": [<br />
#{<br />
"position": #{<br />
"x": 0,<br />
"y": 0,<br />
"width": 0.5,<br />
"height": 0.5,<br />
"zOrder": 0<br />
},<br />
"element": #{<br />
"typeName": "Chart",<br />
"configuration": #{<br />
"root": #{<br />
"expressionType": "Cases",<br />
"expressionParameters": #{}<br />
},<br />
"measures": [#{<br />
"expressionType": "Count",<br />
"expressionParameters": #{}<br />
}]<br />
}<br />
}<br />
}<br />
]<br />
}<br />
});<br />
</pre><br />
|-<br />
||<span id="CreateDatatable">CreateDatatable</span> (Datatable)<br />
||<br />
* Parameters dictionary<br />
||Creates datatable to the project. After creation, there are no columns or rows in the datatable. The function returns the created datatable entity. Following properties can be set for the datatable:<br />
* '''Name''' (string): Name of the datatable. This parameter is mandatory.<br />
* '''Description''' (string): Description for the datatable. This parameter is optional.<br />
* '''NameInDataSource''' (string): Table name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''SchemaNameInDataSource''' (string): Schema name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''DatabaseNameInDataSource''' (string): Database name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''Type''' (string): Defines where the data for the datatable is located. Available values are '''Snowflake''', '''SqlServer''', and '''Local'''. This parameter is optional and default value is defined by the [[PA_Configuration_database_table#General_Settings|DefaultDataSource]] setting.<br />
* '''Connection''': Connection object for the datatable. This parameter is optional.<br />
<br />
Example: Create a new datatable:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable"<br />
});<br />
</pre><br />
<br />
Example: Create Snowflake datatable linked to a custom table:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable",<br />
"Description": "My description",<br />
"NameInDataSource": "MyTable",<br />
"SchemaNameInDataSource": "MySchema",<br />
"DatabaseNameInDataSource": "MyDatabase",<br />
"Type": "Snowflake"<br />
});<br />
</pre><br />
<br />
Example: Create Snowflake datatable where connection string is stored as a [[Storing_Secrets_for_Scripts|secret]]:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable",<br />
"Type": "Snowflake",<br />
"Connection": ProjectById(1).CreateSnowflakeConnection(#{ "OdbcConnectionStringKey": "MyKey" })<br />
});<br />
</pre><br />
|-<br />
||CreateModel (Model)<br />
||<br />
* Parameters dictionary<br />
||Creates a model to a project. Requires ''GenericWrite'' permission for the Project and global ''CreateModel'' permission. If a model with that name already exists, an exception is thrown.<br />
<br />
Parameters dictionary has the following properties:<br />
* '''Name''': Name of the model. This property is mandatory.<br />
* '''Description''': Description of the model. This property is optional.<br />
* '''Configuration''': Configuration dictionary for the model. This property is technically optional, but a working model requires at least datasource settings to be defined.<br />
<br />
Example:<br />
<pre><br />
ProjectById(1).CreateModel(#{ <br />
"Name": "My model",<br />
"Description": "My description",<br />
"Configuration": {<br />
"DataSource": {<br />
"Cases": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My cases datatable",<br />
"Columns": {<br />
"CaseId": "Case Name"<br />
}<br />
},<br />
"Events": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My events datatable",<br />
"Columns": {<br />
"CaseId": "Case Name",<br />
"EventType": "Event Type",<br />
"Timestamp": "Start Time"<br />
}<br />
}<br />
}<br />
}<br />
});<br />
</pre><br />
|-<br />
||DatatableByName (Datatable)<br />
||Datatable name (String)<br />
||<br />
Returns Datatable by its name located in the project. Returns null, if Datatable with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).DatatableByName("MyDatatable1")<br />
</pre><br />
<br />
Example: Get datatable by name, and create it if it doesn't exist:<br />
<pre><br />
let project = ProjectById(123);<br />
let datatableName = "MyDatatable1";<br />
let datatable = project.DatatableByName(datatableName);<br />
if (datatable == null) {<br />
datatable = project.CreateDatatable(datatableName);<br />
}<br />
</pre><br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||Deletes the Project permanently. Note that the Project doesn't need to be in the recycle bin to be able to delete it permanently.<br />
|-<br />
||Restore<br />
||(none)<br />
||Restores the Project from the recycle bin back to the original location.<br />
|-<br />
||ModelByName (Model)<br />
||Model name (String)<br />
||<br />
Returns Model by its name located in the project. Returns null, if Model with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).ModelByName("My Model 1")<br />
</pre><br />
|-<br />
||ScriptByName (Script)<br />
||Script name (String)<br />
||<br />
Returns Script by its name located in the project. Returns null, if Script with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).ScriptByName("MyScript1")<br />
</pre><br />
|-<br />
||<span id="SetSecret">SetSecret</span><br />
||<br />
# Secret type (string)<br />
# Secret name (string)<br />
# Secret value (string)<br />
||Sets or adds a [[Storing_Secrets_for_Scripts|secret]] for the project. Setting the secret value to ''null'' removes the secret. There can be several secrets with the same name in the same project if the type of the secret is different. Setting secrets requires the project specific ''ManageProject'' permission.<br />
<br />
Parameters:<br />
# '''Type''' (string): Secret type which is one of the following:<br />
#* "odbc": ODBC connection string (e.g., to extract data, or load a model directly)<br />
#* "externaldatatableconnection": ODBC connection string used for a datatable<br />
#* "sap": SAP password<br />
#* "salesforce": Salesforce password<br />
# '''Name''' (string): Secret name, used to refer to the secret in the commands.<br />
# '''Value''' (string): Secret value which contains the confidential information.<br />
<br />
Example: Set SAP password:<br />
<pre><br />
ProjectById(1).SetSecret("sap", "MySapPassword", "I l0ve 5AP!");<br />
</pre><br />
<br />
Example: Remove SAP password:<br />
<pre><br />
ProjectById(1).SetSecret("sap", "MySapPassword", null);<br />
</pre><br />
|}<br />
<br />
Function to get Project by id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ProjectById<br />
||Project id (Integer)<br />
||<br />
Returns project object corresponding to the provided project id.<br />
|-<br />
||ProjectByName<br />
||Project name (String)<br />
||<br />
Returns project object by given project name. If there is no such project or user doesn't have access to it, ''null'' value is returned. If there are multiple projects with the same name, one of them is returned.<br />
<br />
Example:<br />
<pre><br />
let project = ProjectByName("My Project");<br />
</pre><br />
|}<br />
<br />
== Script ==<br />
Scripts are entities that contain executable code, that can be run. Usually scripts contains ETL routines but also other kind of tasks are possible.<br />
<br />
{| class="wikitable"<br />
!'''Script properties'''<br />
! '''Description'''<br />
|-<br />
||Code (String)<br />
||Script code.<br />
|-<br />
||CreatedBy (User)<br />
||User who created the Script.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the Script was created.<br />
|-<br />
||CurrentRunStart (DateTime)<br />
||Timestamp of the current run start. Null if the script is currently not running.<br />
|-<br />
||Description (String)<br />
||Description of the Script.<br />
|-<br />
||Id (Integer)<br />
||Id of the Script.<br />
|-<br />
||Language (String)<br />
||Either of the following scripting language: '''Expression''' or '''SQL'''. When language is Expression, the script is run as an expression script, and when language is SQL, the script is run as an SQL script (using the sandbox database).<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last modified the Script.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the Script was last modified.<br />
|-<br />
||LastRunEnd (DateTime)<br />
||Timestamp of the last completed script run end (either successful completion or failure). Null if the Script hasn't been run yet.<br />
|-<br />
||LastRunResult (String)<br />
||Result of the last run. Options are:<br />
* '''Completed''': The last run was completed successfully.<br />
* '''Failed''': An error occurred during the last run, so likely the script did not complete as intended.<br />
* '''Aborted''': Script run was manually stopped prematurely by a user, so the script did not proceeded in the end.<br />
<br />
Null if the Script hasn't been run yet.<br />
|-<br />
||LastRunStart (DateTime)<br />
||Timestamp of the last completed script run start time. Null if the Script hasn't been run yet.<br />
|-<br />
||Name (String)<br />
||Name of the Script.<br />
|-<br />
||OperationId (Integer)<br />
||Id of the operation which runs the Script. Null if the script is currently not running.<br />
|-<br />
||Project (Project)<br />
||Project where the Script is located. Null if the script is in the global context.<br />
|-<br />
||ProjectId (Integer)<br />
||Id of the project where the Script is located. Null if the script is in the global context.<br />
|-<br />
||Status (String)<br />
||Current status of the script. Options are:<br />
* '''Ready''': Script is not running. In this status, the script can be started (changing the status to ''Running'').<br />
* '''Running''': Script is running. In this status, the script can be stopped (changing the status to ''Stopping''). Calling stop just requests a script to stop, and the actual stopping occurs some time later.<br />
* '''Stopping''': Script has been requested to be stopped, but it's still running. In this status, neither start nor stop can be called for the script. When the script eventually stops, its status changes to ''Ready''.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Script functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||Run (Object)<br />
||Dictionary of parameters<br />
||<br />
Runs the script using the provided parameters. The parameters are available in the script as variables (see the example). Any type of variables can be passed to the script. Note that if the script assumes certain variables, but that they are not passed to the script, the script run will throw an error. <br />
<br />
For SQL scripts, the passed parameters are available in the script as variables in format '''@_parameter_<ParameterName>''' where <ParameterName> is the name of the parameter, e.g. ''parameter_myParameter1''. Only string type of parameters can be used, so any other type of data in parameter values is converted into strings.<br />
<br />
The return value of the script is returned by the Run function. Expression scripts return a value with the ''return'' statement or alternatively the result of the last line of the script is the return value. If the script does not return any value, the Run function returns ''_empty''. For SQL scripts, the return value is the last dataset produced by the script (returned as a DataFrame) (SQL scripts might create several datasets using the ''--#ShowReport'' command or the ''Show'' parameter).<br />
<br />
When a script is called using the Run function, the called script status does not change, because it's the parent script that is ''Running''. Also the called script log is not filled, but instead the logging goes to the calling script.<br />
<br />
It's possible to call a script using the Run function several times simultaneously.<br />
<br />
If there is an error when running the called script, the Run function throws the error to the calling script.<br />
<br />
Scripts are run in the script entity context, so for example the following properties are available:<br />
* Id: Script id<br />
* Name: Script name<br />
* Project.Id: Project id where the script is located<br />
* Project.Name: Name of the project where the script is located<br />
<br />
Example: Following script (id 123) raises a specified number to a specified power:<br />
<pre><br />
return Pow(numberToRaise, exponent);<br />
</pre><br />
<br />
The script can be called as follows:<br />
<pre><br />
let runResult = ScriptById(123).Run(#{<br />
"numberToRaise": 4,<br />
"exponent": 2<br />
})<br />
Returns: 16<br />
</pre><br />
|-<br />
||Start<br />
||<br />
||Starts the script without waiting for the script to complete (i.e., asynchronous behavior) which corresponds to starting the script in the Workspace. Parameters to the script can additionally be provided in a dictionary of variable name-value pairs (which is not possible in the Workspace). Return value is script run id (integer) if the script was started, and otherwise null.<br />
<br />
Example:<br />
<pre><br />
let runId = ScriptById(1).Start();<br />
</pre><br />
<br />
Example:<br />
<pre><br />
ScriptById(1).Start(#{<br />
"variable1": "val1",<br />
"variable2": 5<br />
});<br />
</pre><br />
|-<br />
||Stop<br />
||<br />
||Stops the script without waiting for the stopping to complete (i.e., asynchronous behavior) which corresponds to stopping the script in the Workspace. Return value is script run id (integer) if the script was stopped, and otherwise null.<br />
<br />
Example:<br />
<pre><br />
let runId = ScriptById(1).Start();<br />
</pre><br />
|}<br />
<br />
Function to get a script by the script id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ScriptById<br />
||<br />
* Script id (Integer)<br />
||<br />
Returns Script object corresponding to the given script id. If script with the given id doesn't exist or user doesn't have permissions to it, an error is given.<br />
|}<br />
<br />
== User/Group ==<br />
User objects represents users and user groups. Note that some properties can only be used for users and some for groups.<br />
<br />
{| class="wikitable"<br />
!'''User/group properties'''<br />
! '''Description'''<br />
|-<br />
||Description (String)<br />
||Description of the user.<br />
|-<br />
||Email (String)<br />
||Email address of the user.<br />
|-<br />
||FullName (String)<br />
||Full name of the user or group name.<br />
|-<br />
||GlobalPermissions (String*)<br />
||Array of global [[Roles and Permissions#Global_and_Project_Roles|permissions]] of the user. Global permissions come from the global roles assigned to the user and groups that the user belongs to. Note that to get the effective permissions for certain objects, also project specific permissions need to be taken into account.<br />
|-<br />
||GroupMemberNames (String*)<br />
||Array of names of members of a user group. This property is available for groups.<br />
|-<br />
||GroupMembers (User*)<br />
||Array of members of a user group. This property is available for groups.<br />
|-<br />
||GroupNames (String*)<br />
||Array of names of user groups the user belongs to. This property is available for users.<br />
|-<br />
||Groups (User*)<br />
||Array of user groups the user belongs to. This property is available for users.<br />
|-<br />
||HasPassword (Boolean)<br />
||Returns true if user has a password defined in QPR ProcessAnalyzer and thus user can authenticate using the password. If user doesn't have a password, the SAML authentication is the only way to log in. ''ManageUsers'' permission is needed to access this property for other users.<br />
|-<br />
||Id (Integer)<br />
||Id of the user, which is unique for every user.<br />
|-<br />
||IsActive (Boolean)<br />
||Returns true only if the user is active (not disabled).<br />
|-<br />
||IsGroup (Boolean)<br />
||Returns true if the user is a user group.<br />
|-<br />
||IsLocked (Boolean)<br />
||Returns true if user account is currently [[User_Session_Management#Preventing_password_guessing_attacks|locked]]. ''ManageUsers'' permission is needed to access this property.<br />
|-<br />
||LastLockedDate (DateTime)<br />
||Returns date when user account was locked the last time. Returns ''null'' if the user account has never been locked. ''ManageUsers'' permission is needed to access this property.<br />
|-<br />
||LastLoginDate (DateTime)<br />
||Returns date when the user made last successful login. ''ManageUsers'' permission is needed to access this property for other users.<br />
|-<br />
||Name (String)<br />
||Login name of the user or group.<br />
|-<br />
||Roles (Object**)<br />
||<br />
Returns all roles of the user (both global and project roles) as a nested array structure.<br />
<br />
Example:<br />
<pre><br />
ToJson(Users.Where(name == "qpr").Roles)<br />
Returns (for example):<br />
[<br />
[{"calcId": "Project:1"}, "Administrator"],<br />
[{"calcId": "Project:2"}, "Analyzer"],<br />
[{"calcId": "Project:3"}, "Viewer"],<br />
[null, "RunScripts"],<br />
[null, "Administrator"]<br />
]<br />
</pre><br />
|}<br />
<br />
{| class="wikitable"<br />
!'''User/group functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||EffectivePermissionsFor (String Array)<br />
||<br />
* Project to get permissions<br />
||<br />
Returns effective (actual) permission of the user to the given project. Project is given as a [[#Project|project object]] (not as a project id). Effective permissions determine the actual permissions that the user has, i.e. a combination of all permissions assigned to the user and groups the user belong to, including both project specific and global roles.<br />
<br />
Permissions for the EffectivePermissionsFor function are as follows:<br />
* All users can query their own permissions<br />
* To get permissions for any user, the user needs to have [[Roles_and_Permissions|ManageUsers permission]].<br />
<br />
Note that ''inactive'' users don't have any effective permissions, so the EffectivePermissionsFor function does not return any permissions for those users.<br />
<br />
Examples:<br />
<pre><br />
EffectivePermissionsFor(ModelById(1234).Project)<br />
Returns (for example): ["EditDashboards", "Filtering", "GenericRead"]<br />
</pre><br />
|-<br />
||GetAttribute<br />
||<br />
||<br />
Returns user attribute value by given attribute name and optionally by the model/project/dashboard context. Supported data types are String, Integer, Float, and DateTime. To store more complex data types, data can be converted into json and stored as string. If the attribute doesn't exist, null is returned.<br />
<br />
For example, if using dashboard as context, the attributes are effectively bound to each user and each dashboard separately. Thus, there can be several attributes with the same name as long as the dashboard is different.<br />
<br />
Parameters:<br />
# '''Attribute name''' (String): Name of the attribute.<br />
# '''Attribute context''' (Project/Model/Dashboard): Optional context object the attribute is linked to.<br />
<br />
Users have permissions to get attributes for themselves, and also (administrator) users with global ''ManageUsers'' permission can get attributes for all users. In addition, if using the context object, the ''GenericRead'' permission is required for the context object.<br />
<br />
Example: Get user attribute MyDataValue for myself:<br />
<pre><br />
CurrentUser<br />
.GetAttribute("MyDataValue");<br />
</pre><br />
<br />
Example: Get user attribute MyDataValue for user John:<br />
<pre><br />
Users<br />
.Where(Name=="John")<br />
.GetAttribute("MyDataValue");<br />
</pre><br />
<br />
Example: Get user attribute MyDataValue for user 1 related to dashboard id 1:<br />
<pre><br />
UserById(1)<br />
.GetAttribute("MyDataValue", DashboardById(1));<br />
</pre><br />
|-<br />
||SetAttribute<br />
||<br />
||<br />
Sets user attribute value for given attribute name and optionally for the model/project/dashboard context. Supported data types are String, Integer, Float, and DateTime. To store more complex data types, data can be converted into json and stored as string. If setting value ''null'', the user attribute is removed. Required permissions are same as in the GetAttribute function.<br />
<br />
Parameters:<br />
# '''Attribute name''' (String): Name of the attribute.<br />
# '''Attribute value''' (String/Integer/Float/DateTime): Attribute value to be stored.<br />
# '''Attribute context''' (Project/Model/Dashboard): Optional context object the attribute value is linked to.<br />
<br />
Example: Set user attribute MyDataValue for myself:<br />
<pre><br />
CurrentUser<br />
.SetAttribute("MyDataValue ", "value");<br />
</pre><br />
<br />
Example: Set value 123 as user attribute MyDataValue for user John:<br />
<pre><br />
Users<br />
.Where(Name=="John")<br />
.SetAttribute("MyDataValue", 123);<br />
</pre><br />
<br />
Example: Set current time as user attribute MyDataValue for user 1 related to dashboard id 1:<br />
<pre><br />
UserById(1)<br />
.GetAttribute("MyDataValue", Now, DashboardById(1));<br />
</pre><br />
|}<br />
<br />
Function to get User by user id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||UserById<br />
||<br />
* User id (Integer)<br />
||<br />
Returns User object corresponding to the provided user id.<br />
|}</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Objects_in_Expression_Language&diff=24496QPR ProcessAnalyzer Objects in Expression Language2024-03-28T08:40:27Z<p>Ollvihe: /* Script */</p>
<hr />
<div>==Filter==<br />
Filters contain a set of filter rules used to filter cases and events in models. Filters are objects located in the models. Filters are owned by the creator user, and when a filter publish mode is private, only the creator can use it.<br />
<br />
{| class="wikitable"<br />
!'''Filter properties'''<br />
! '''Description'''<br />
|-<br />
||CreatedBy (User)<br />
||Returns the user who created the filter.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Returns date when the filter created date.<br />
|-<br />
||Description (String)<br />
||Returns description of the filter.<br />
|-<br />
||Id (Integer)<br />
||Returns id of the filter.<br />
|-<br />
||LastModifiedBy (User)<br />
||Returns user who modified the filter.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Returns date when the filter last modified.<br />
|-<br />
||Model<br />
||Returns model where the filter belongs to.<br />
|-<br />
||ModelId (Integer)<br />
||Returns model where the filter belongs to.<br />
|-<br />
||Name (String)<br />
||Returns the name of the filter.<br />
|-<br />
||Project<br />
||Returns project where the filter belongs to.<br />
|-<br />
||ProjectId (Integer)<br />
||Returns project id where the filter belongs to.<br />
|-<br />
||PublishMode (String)<br />
||Returns publish mode of the filter, one of the following: '''Private''', '''Public''', or '''Default'''.<br />
|-<br />
||Rules (Dictionary)<br />
||Returns a dictionary containing the filter rules in the filter.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Filter Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||<br />
Deletes the filter permanently. To delete own filters, the '''Filtering''' permission is needed, and to delete any filters the '''ManageViews''' permission is needed.<br />
|-<br />
||Modify<br />
||Dictionary<br />
||<br />
Modifies filter properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: ''Name'', ''Description'', ''PublishMode'', and ''Rules''.<br />
<br />
The function returns the updated filter object. Requires ''GenericWrite'' permission for the Project and global ''CreateModel'' permission.<br />
<br />
Example:<br />
<pre><br />
FilterById(1)<br />
.Modify(#{<br />
"Name": "My filter",<br />
"Description": "My description",<br />
"PublishMode": "Public",<br />
"Rules": #{<br />
"Items": [<br />
#{<br />
"Type": "IncludeCases",<br />
"Items": [<br />
#{<br />
"Type": "CaseAttributeValue",<br />
"Attribute": "Account Manager",<br />
"StringifiedValues": [<br />
"0Mary Wilson"<br />
]<br />
}<br />
]<br />
}<br />
]<br />
}<br />
}<br />
)<br />
</pre><br />
|}<br />
<br />
Function to get filter id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||FilterById<br />
||<br />
* Filter id (Integer)<br />
||<br />
Returns Filter object corresponding to the provided filter id.<br />
|}<br />
<br />
==Model==<br />
Notes:<br />
* For in-memory models that are offline, the object counts represent the situation when the model was last time online (loaded into the memory). ''null'' is returned if the model has never been loaded into the memory.<br />
* If [[Case_Level_Permissions|Case permissions]] are used for the model, and user doesn't have '''GenericWrite''' permission for the model, ''null'' is returned for data security reasons. Users that have the '''GenericWrite''' permission, see null when the model is offline, and when online, they see counts where the case level permissions settings are applied.<br />
* Properties ''CaseAttributes'', ''EventAttributes'' and ''Eventlog'' work only for the in-memory models and they require the model to be loaded into the memory. If the model is not in the memory, it is loaded when these properties is used. Other model properties down require the model to be in the memory.<br />
<br />
{| class="wikitable"<br />
!'''Model properties'''<br />
! '''Description'''<br />
|-<br />
||Calendars (BusinessCalendar*)<br />
||<br />
Returns all [[Business_Calendar|business calendars]] stored to the Model as an array. Returns an empty array, if there are no business calendars stored to the model. Note: UI allows to set only one business calendar for a Model.<br />
|-<br />
||CaseAttributes (AttributeType*)<br />
||[[#AttributeType|CaseAttributes]] in the model returned in the alphabetical order. Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||CasesDatatable (Datatable)<br />
||Returns the Datatable the model uses as a datasource for cases. Returns ''null'' if the cases Datatable is not defined or if model uses other than the Datatable datasource.<br />
|-<br />
||Configuration (Dictionary)<br />
||Returns the Model configuration as dictionary. Example:<br />
<pre><br />
ModelById(123).Configuration.DataSource.Events.DataTableName<br />
</pre><br />
|-<br />
||ConfigurationJson (String)<br />
||Returns the Model configuration as JSON string.<br />
|-<br />
||CreatedBy (User)<br />
||User who created the model.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the model was created.<br />
|-<br />
||DefaultCalendar (BusinessCalendar)<br />
||Returns the default [[Business_Calendar|business calendar]] of the Model. Returns ''null'', if there are no calendars in the Model or no calendar has been set as a default calendar. Note: UI allows to set only one business calendar for a Model, which is also the default calendar.<br />
|-<br />
||DefaultFilter (Filter)<br />
||Default filter of the model. Returns ''null'' if the model does not have a default filter.<br />
|-<br />
||DefaultFilterId (Integer)<br />
||Default filter id of the model. Returns ''null'' if the model does not have a default filter.<br />
|-<br />
||Description (String)<br />
||Model description. The model description may contain line breaks.<br />
|-<br />
||DeletedDate (DateTime)<br />
||Timestamp when Model was deleted (moved to the recycle bin).<br />
|-<br />
||DeletedBy (User)<br />
||User how deleted the Model.<br />
|-<br />
||Diagrams (Diagram*)<br />
||Returns an array of all [[Diagram_in_Expression_Language|diagrams]] in the model.<br />
|-<br />
||EstimatedMemory (Integer)<br />
||Returns an estimation of how much memory in bytes the model requires.<br />
|-<br />
||EventsDatatable (Datatable)<br />
||Returns the Datatable the model uses as a datasource for events. Returns ''null'' if the events Datatable is not defined or if model uses other than the Datatable datasource.<br />
|-<br />
||EventAttributes (AttributeType*)<br />
||[[#AttributeType|EventAttributes]] in the model returned in the alphabetical order. Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||EventLog (EventLog)<br />
||EventLog containing the entire model (i.e. event log where no filters have been applied). Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||Filters (Filter*)<br />
||Returns an array of all [[#Filter|filters]] in the model.<br />
|-<br />
||Id (Integer)<br />
||Model Id. Model Id is generated by QPR ProcessAnalyzer when the model is created.<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last time modified the model properties. Note that datatables containing the eventlog data are separate objects having similar fields to track the last modification and last data import.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the model was modified the last time.<br />
|-<br />
||Name (String)<br />
||Model name.<br />
|-<br />
||NCache (Integer)<br />
||Number of objects related to the model when the model is loaded into the memory.<br />
|-<br />
||NCaseAttributes (Integer)<br />
||Number of [[#AttributeType|CaseAttributes]] in model. Works only for in-memory models.<br />
|-<br />
||NCases (Integer)<br />
||Number of [[#Case|Cases]] in the model. Works only for in-memory models.<br />
|-<br />
||NEventAttributes (Integer)<br />
||Number of [[#AttributeType|EventAttributes]] in model. Works only for in-memory models.<br />
|-<br />
||NEvents (Integer)<br />
||Number of [[#Event|Events]] in model. Works only for in-memory models.<br />
|-<br />
||NEventTypes (Integer)<br />
||Number of [[#EventType|EventTypes]] in the model. Works only for in-memory models.<br />
|-<br />
||NOpens (Integer)<br />
||Number of times analysis has been requested from the model.<br />
|-<br />
||Project (Project)<br />
||[[#Project|Project]] where the model belongs to.<br />
|-<br />
||ProjectId (Integer)<br />
||[[#Project|Project]] id where the model belongs to.<br />
|-<br />
||Status (String)<br />
||<br />
Memory availability status of the model. There are the following statuses:<br />
* '''Loading''': The model is currently loading into the memory. When the loading is ready, the status changes to ''online''. If the loading fails, the status changes to ''offline''.<br />
* '''Offline''': The model is currently not loaded into the memory. The model needs to be loaded into the memory, so that analyses can be calculated from the model (occurs automatically when an analysis is requested).<br />
* '''Online''': The model is in the memory and ready for analysis calculation. If the model is dropped from the memory, its status changes to ''offline''.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Model Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||CalendarByName (BusinessCalendar)<br />
||<br />
name (String)<br />
||<br />
Returns a [[Business_Calendar|business calendar]] stored to the Model by the name of the calendar. Business calendars can be stored to models in the model properties. Returns ''null'', if a calendar with the provided name is not stored to the model.<br />
<br />
Examples:<br />
<pre><br />
ModelById(123).CalendarByName("MyCalendar")<br />
</pre><br />
|-<br />
||CreateDiagram (Diagram)<br />
||Parameters dictionary<br />
||<br />
Creates a [[Diagram_in_Expression_Language|diagram]] to the model. Parameters is a dictionary containing diagram properties. Following properties are available:<br />
* '''Name''' (string): Diagram name that distinguishes diagrams in a model.<br />
* '''Description''' (string): Diagram description text.<br />
* '''Content''' (dictionary): Diagram content as dictionary.<br />
<br />
Example:<br />
<pre><br />
ModelById(1)<br />
.CreateDiagram(#{<br />
"Name": "My diagram",<br />
"Description": "This is my new diagram",<br />
"Content": #{ ... },<br />
})<br />
</pre><br />
|-<br />
||CreateFilter (Filter)<br />
||Parameters dictionary<br />
||Creates a filter to a model. Requires ''GenericWrite'' permission for the project and global ''CreateModel'' permission. If a filter with that name already exists in the model, an exception is thrown.<br />
The parameters dictionary may have the following properties:<br />
* '''Name''': Name of the filter. This property is mandatory.<br />
* '''Description''': Description of the filter. This property is optional.<br />
* '''Rules''': Filter rules for the filter defined as a dictionary according to the [[Filtering_in_QPR_ProcessAnalyzer_Queries|filter json format]]. This property is mandatory.<br />
* '''PublishMode''': Publish mode of the filter which is one of the following: ''Private'', ''Public'' or ''Default''. This property is optional, and the default value is ''Private''.<br />
<br />
Example:<br />
<pre><br />
let newFilter = modelById(1).CreateFilter(#{ <br />
"Name": "My Filter",<br />
"Rules": #{<br />
"Items": [#{<br />
"Type": "IncludeCases",<br />
"Items": [#{<br />
"Type": "CaseAttributeValue",<br />
"Attribute": "Account Manager",<br />
"StringifiedValues": [ "0Robert Miller" ]<br />
}]<br />
}]<br />
},<br />
"PublishMode": "Public"<br />
});<br />
}<br />
</pre><br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||Deletes the Model permanently. The model doesn't need to be in the recycle bin to be able to delete it permanently.<br />
|-<br />
||Modify (Model)<br />
||Dictionary<br />
||<br />
Modifies model properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: ''Name'', ''Description'', ''ProjectId'', and ''Configuration''.<br />
<br />
The function returns the updated model object. Requires the ''GenericWrite'' permission for the project and the global ''CreateModel'' permission.<br />
<br />
Example:<br />
<pre><br />
ModelById(1)<br />
.Modify(#{<br />
"Name": "My model",<br />
"Description": "My description",<br />
"ProjectId": 2,<br />
"Configuration": #{<br />
"DataSource": #{<br />
"Cases": #{<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My cases datatable",<br />
"Columns": #{<br />
"CaseId": "Case Name"<br />
}<br />
},<br />
"Events": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My events datatable",<br />
"Columns": #{<br />
"CaseId": "Case Name",<br />
"EventType": "Event Type",<br />
"Timestamp": "Start Time"<br />
}<br />
}<br />
}<br />
}<br />
}<br />
)<br />
</pre><br />
|-<br />
||ResetPreprocessings<br />
||(none)<br />
||<br />
Removes all cached items related to the Model, e.g. preprocessings and calculation results. In practice, the Model is reset to a state where it was right after the model was loaded into memory.<br />
|-<br />
||Restore<br />
||(none)<br />
||Restores the Model from the recycle bin back to the original location.<br />
|-<br />
||<span id="ToSqlDataFrame">ToSqlDataFrame</span><br />
||In-memory dataframe<br />
||Converts an in-memory dataframe to an SQL dataframe. In practice, an SQL query is created from the in-memory dataframe and the query is executed in the datasource so that the data is available in the datasource for further SQL operations. This function is intended only to small amounts of data which is less than 16384 rows.<br />
<br />
Example: Select matching cases from events data using in-memory dataframe:<br />
<pre><br />
let model = ModelById(1);<br />
let dfEvents = model.EventsDatatable.SqlDataFrame;<br />
let inMemoryDf = ToDataFrame(<br />
[["1"], ["2"], ["3"]],<br />
[#{"Name": "id", "DataType": "String"}]<br />
);<br />
model.ToSqlDataFrame(inMemoryDf)<br />
.Join(dfEvents, ["id": "CaseId"])<br />
.SelectDistinct(["CaseId"])<br />
.Collect();<br />
</pre><br />
|-<br />
||<span id="TriggerNotifications">TriggerNotifications</span> (Boolean)<br />
||Notification names (String*)<br />
||Triggers the given notifications for the Model. Notifications are given by their names. Triggering means that the configured rules are run and notification emails are sent as defined by the rules. If the notification names parameter is not provided, all notifications in the Model are triggered.<br />
<br />
The function return ''true'' if any notification were triggered, otherwise ''false''.<br />
<pre><br />
ModelById(123).TriggerNotifications(["Notification 1", "Notification 2"]);<br />
Triggers notifications Notification 1 and Notification 2 in model id 123.<br />
<br />
ModelById(123).TriggerNotifications();<br />
Triggers all notifications in model id 123.<br />
</pre><br />
|}<br />
<br />
Function to get Model by model id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ModelById<br />
||<br />
* Model id (Integer)<br />
||<br />
Returns [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Model|Model]] object corresponding to the provided model id.<br />
|}<br />
<br />
== Project ==<br />
{| class="wikitable"<br />
!'''Project properties'''<br />
! '''Description'''<br />
|-<br />
||CreatedBy (User)<br />
||User who created the Project.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the Project was created.<br />
|-<br />
||Dashboards (Dashboard*)<br />
||Returns all [[Dashboard_in_Expression_Language|dashboards]] in the project.<br />
|-<br />
||Datatables (Datatable*)<br />
||Returns all Datatables in the project.<br />
|-<br />
||DeletedDate (DateTime)<br />
||Timestamp when the Project was deleted (moved to the recycle bin).<br />
|-<br />
||Description (String)<br />
||Project description. The project description may contain line breaks.<br />
|-<br />
||DeletedBy (User)<br />
||User who deleted the Project (moved to the recycle bin).<br />
|-<br />
||Id (Integer)<br />
||Id of the Project.<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last modified the Project.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the Project was last modified (refers to the project name, description and parent, not the contents of the project).<br />
|-<br />
||Name (String)<br />
||Name of the Project.<br />
|-<br />
||Models (Model*)<br />
||Models that are in the Project.<br />
|-<br />
||Parent (Project)<br />
||Parent project, i.e. a Project where the Project is located in the hierarchy of Projects. Returns ''null'' for root level Projects. Throws an error if user doesn't have access to the parent project.<br />
|-<br />
||ParentProjectId (Integer)<br />
||Parent project id. Returns ''null'' for root level Projects. The parent project id is returned even if user doesn't have access to the parent project.<br />
|-<br />
||Scripts (Script*)<br />
||Scripts that are in the Project.<br />
|-<br />
||Secrets (Dictionary*)<br />
||Returns array of all [[Storing_Secrets_for_Scripts|secrets]] in the project as Dictionary with following properties:<br />
* '''Name''' (string): Name of the secret.<br />
* '''Type''' (string): Type of the secret which is one of the following: "odbc", "sap", "salesforce".<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Project functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||CreateDashboard (Dashboard)<br />
||Parameters dictionary<br />
||Creates a dashboard to the project. ''EditDashboards'' permission to the project is required. The parameter is dictionary with following supported dashboard properties:<br />
* '''Name''' (String): Name of the dashboard.<br />
* '''Identifier''' (String): Identifier of the dashboard.<br />
* '''Description''' (String): Description of the dashboard.<br />
* '''Content''' (Dictionary): Content of the dashboard.<br />
<br />
Example: Create empty dashboard.<br />
<pre><br />
ProjectById(1)<br />
.CreateDashboard(#{<br />
"Name": "My dashboard",<br />
"Identifier": "MyDashboard"<br />
});<br />
</pre><br />
<br />
Example: Create dashboard with a chart.<br />
<pre><br />
ProjectById(1)<br />
.CreateDashboard(#{<br />
"Name": "My dashboard",<br />
"Content": #{<br />
"version": 4,<br />
"typeName": "View",<br />
"name": "My dashboard",<br />
"subElements": [<br />
#{<br />
"position": #{<br />
"x": 0,<br />
"y": 0,<br />
"width": 0.5,<br />
"height": 0.5,<br />
"zOrder": 0<br />
},<br />
"element": #{<br />
"typeName": "Chart",<br />
"configuration": #{<br />
"root": #{<br />
"expressionType": "Cases",<br />
"expressionParameters": #{}<br />
},<br />
"measures": [#{<br />
"expressionType": "Count",<br />
"expressionParameters": #{}<br />
}]<br />
}<br />
}<br />
}<br />
]<br />
}<br />
});<br />
</pre><br />
|-<br />
||<span id="CreateDatatable">CreateDatatable</span> (Datatable)<br />
||<br />
* Parameters dictionary<br />
||Creates datatable to the project. After creation, there are no columns or rows in the datatable. The function returns the created datatable entity. Following properties can be set for the datatable:<br />
* '''Name''' (string): Name of the datatable. This parameter is mandatory.<br />
* '''Description''' (string): Description for the datatable. This parameter is optional.<br />
* '''NameInDataSource''' (string): Table name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''SchemaNameInDataSource''' (string): Schema name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''DatabaseNameInDataSource''' (string): Database name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''Type''' (string): Defines where the data for the datatable is located. Available values are '''Snowflake''', '''SqlServer''', and '''Local'''. This parameter is optional and default value is defined by the [[PA_Configuration_database_table#General_Settings|DefaultDataSource]] setting.<br />
* '''Connection''': Connection object for the datatable. This parameter is optional.<br />
<br />
Example: Create a new datatable:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable"<br />
});<br />
</pre><br />
<br />
Example: Create Snowflake datatable linked to a custom table:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable",<br />
"Description": "My description",<br />
"NameInDataSource": "MyTable",<br />
"SchemaNameInDataSource": "MySchema",<br />
"DatabaseNameInDataSource": "MyDatabase",<br />
"Type": "Snowflake"<br />
});<br />
</pre><br />
<br />
Example: Create Snowflake datatable where connection string is stored as a [[Storing_Secrets_for_Scripts|secret]]:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable",<br />
"Type": "Snowflake",<br />
"Connection": ProjectById(1).CreateSnowflakeConnection(#{ "OdbcConnectionStringKey": "MyKey" })<br />
});<br />
</pre><br />
|-<br />
||CreateModel (Model)<br />
||<br />
* Parameters dictionary<br />
||Creates a model to a project. Requires ''GenericWrite'' permission for the Project and global ''CreateModel'' permission. If a model with that name already exists, an exception is thrown.<br />
<br />
Parameters dictionary has the following properties:<br />
* '''Name''': Name of the model. This property is mandatory.<br />
* '''Description''': Description of the model. This property is optional.<br />
* '''Configuration''': Configuration dictionary for the model. This property is technically optional, but a working model requires at least datasource settings to be defined.<br />
<br />
Example:<br />
<pre><br />
ProjectById(1).CreateModel(#{ <br />
"Name": "My model",<br />
"Description": "My description",<br />
"Configuration": {<br />
"DataSource": {<br />
"Cases": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My cases datatable",<br />
"Columns": {<br />
"CaseId": "Case Name"<br />
}<br />
},<br />
"Events": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My events datatable",<br />
"Columns": {<br />
"CaseId": "Case Name",<br />
"EventType": "Event Type",<br />
"Timestamp": "Start Time"<br />
}<br />
}<br />
}<br />
}<br />
});<br />
</pre><br />
|-<br />
||DatatableByName (Datatable)<br />
||Datatable name (String)<br />
||<br />
Returns Datatable by its name located in the project. Returns null, if Datatable with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).DatatableByName("MyDatatable1")<br />
</pre><br />
<br />
Example: Get datatable by name, and create it if it doesn't exist:<br />
<pre><br />
let project = ProjectById(123);<br />
let datatableName = "MyDatatable1";<br />
let datatable = project.DatatableByName(datatableName);<br />
if (datatable == null) {<br />
datatable = project.CreateDatatable(datatableName);<br />
}<br />
</pre><br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||Deletes the Project permanently. Note that the Project doesn't need to be in the recycle bin to be able to delete it permanently.<br />
|-<br />
||Restore<br />
||(none)<br />
||Restores the Project from the recycle bin back to the original location.<br />
|-<br />
||ModelByName (Model)<br />
||Model name (String)<br />
||<br />
Returns Model by its name located in the project. Returns null, if Model with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).ModelByName("My Model 1")<br />
</pre><br />
|-<br />
||ScriptByName (Script)<br />
||Script name (String)<br />
||<br />
Returns Script by its name located in the project. Returns null, if Script with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).ScriptByName("MyScript1")<br />
</pre><br />
|-<br />
||<span id="SetSecret">SetSecret</span><br />
||<br />
# Secret type (string)<br />
# Secret name (string)<br />
# Secret value (string)<br />
||Sets or adds a [[Storing_Secrets_for_Scripts|secret]] for the project. Setting the secret value to ''null'' removes the secret. There can be several secrets with the same name in the same project if the type of the secret is different. Setting secrets requires the project specific ''ManageProject'' permission.<br />
<br />
Parameters:<br />
# '''Type''' (string): Secret type which is one of the following:<br />
#* "odbc": ODBC connection string (e.g., to extract data, or load a model directly)<br />
#* "externaldatatableconnection": ODBC connection string used for a datatable<br />
#* "sap": SAP password<br />
#* "salesforce": Salesforce password<br />
# '''Name''' (string): Secret name, used to refer to the secret in the commands.<br />
# '''Value''' (string): Secret value which contains the confidential information.<br />
<br />
Example: Set SAP password:<br />
<pre><br />
ProjectById(1).SetSecret("sap", "MySapPassword", "I l0ve 5AP!");<br />
</pre><br />
<br />
Example: Remove SAP password:<br />
<pre><br />
ProjectById(1).SetSecret("sap", "MySapPassword", null);<br />
</pre><br />
|}<br />
<br />
Function to get Project by id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ProjectById<br />
||Project id (Integer)<br />
||<br />
Returns project object corresponding to the provided project id.<br />
|-<br />
||ProjectByName<br />
||Project name (String)<br />
||<br />
Returns project object by given project name. If there is no such project or user doesn't have access to it, ''null'' value is returned. If there are multiple projects with the same name, one of them is returned.<br />
<br />
Example:<br />
<pre><br />
let project = ProjectByName("My Project");<br />
</pre><br />
|}<br />
<br />
== Script ==<br />
Scripts are entities that contain executable code, that can be run. Usually scripts contains ETL routines but also other kind of tasks are possible.<br />
<br />
{| class="wikitable"<br />
!'''Script properties'''<br />
! '''Description'''<br />
|-<br />
||Code (String)<br />
||Script code.<br />
|-<br />
||CreatedBy (User)<br />
||User who created the Script.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the Script was created.<br />
|-<br />
||CurrentRunStart (DateTime)<br />
||Timestamp of the current run start. Null if the script is currently not running.<br />
|-<br />
||Description (String)<br />
||Description of the Script.<br />
|-<br />
||Id (Integer)<br />
||Id of the Script.<br />
|-<br />
||Language (String)<br />
||Either of the following scripting language: '''Expression''' or '''SQL'''. When language is Expression, the script is run as an expression script, and when language is SQL, the script is run as an SQL script (using the sandbox database).<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last modified the Script.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the Script was last modified.<br />
|-<br />
||LastRunEnd (DateTime)<br />
||Timestamp of the last completed script run end (either successful completion or failure). Null if the Script hasn't been run yet.<br />
|-<br />
||LastRunResult (String)<br />
||Result of the last run. Options are:<br />
* '''Completed''': The last run was completed successfully.<br />
* '''Failed''': An error occurred during the last run, so likely the script did not complete as intended.<br />
* '''Aborted''': Script run was manually stopped prematurely by a user, so the script did not proceeded in the end.<br />
<br />
Null if the Script hasn't been run yet.<br />
|-<br />
||LastRunStart (DateTime)<br />
||Timestamp of the last completed script run start time. Null if the Script hasn't been run yet.<br />
|-<br />
||Name (String)<br />
||Name of the Script.<br />
|-<br />
||OperationId (Integer)<br />
||Id of the operation which runs the Script. Null if the script is currently not running.<br />
|-<br />
||Project (Project)<br />
||Project where the Script is located. Null if the script is in the global context.<br />
|-<br />
||ProjectId (Integer)<br />
||Id of the project where the Script is located. Null if the script is in the global context.<br />
|-<br />
||Status (String)<br />
||Current status of the script. Options are:<br />
* '''Ready''': Script is not running. In this status, the script can be started (changing the status to ''Running'').<br />
* '''Running''': Script is running. In this status, the script can be stopped (changing the status to ''Stopping''). Calling stop just requests a script to stop, and the actual stopping occurs some time later.<br />
* '''Stopping''': Script has been requested to be stopped, but it's still running. In this status, neither start nor stop can be called for the script. When the script eventually stops, its status changes to ''Ready''.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Script functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||Run (Object)<br />
||Dictionary of parameters<br />
||<br />
Runs the script using the provided parameters. The parameters are available in the script as variables (see the example). Any type of variables can be passed to the script. Note that if the script assumes certain variables, but that they are not passed to the script, the script run will throw an error. <br />
<br />
For SQL scripts, the passed parameters are available in the script as variables in format '''@_parameter_<ParameterName>''' where <ParameterName> is the name of the parameter, e.g. ''parameter_myParameter1''. Only string type of parameters can be used, so any other type of data in parameter values is converted into strings.<br />
<br />
The return value of the script is returned by the Run function. Expression scripts return a value with the ''return'' statement or alternatively the result of the last line of the script is the return value. If the script does not return any value, the Run function returns ''_empty''. For SQL scripts, the return value is the last dataset produced by the script (returned as a DataFrame) (SQL scripts might create several datasets using the ''--#ShowReport'' command or the ''Show'' parameter).<br />
<br />
When a script is called using the Run function, the called script status does not change, because it's the parent script that is ''Running''. Also the called script log is not filled, but instead the logging goes to the calling script.<br />
<br />
It's possible to call a script using the Run function several times simultaneously.<br />
<br />
If there is an error when running the called script, the Run function throws the error to the calling script.<br />
<br />
Scripts are run in the script entity context, so for example the following properties are available:<br />
* Id: Script id<br />
* Name: Script name<br />
* Project.Id: Project id where the script is located<br />
* Project.Name: Name of the project where the script is located<br />
<br />
Example: Following script (id 123) raises a specified number to a specified power:<br />
<pre><br />
return Pow(numberToRaise, exponent);<br />
</pre><br />
<br />
The script can be called as follows:<br />
<pre><br />
let runResult = ScriptById(123).Run(#{<br />
"numberToRaise": 4,<br />
"exponent": 2<br />
})<br />
Returns: 16<br />
</pre><br />
|-<br />
||Start<br />
||<br />
||Starts the script.<br />
1. Add functions Script.Start() and Script.Stop() corresponding to REST /api/scripts/run/{scriptId} and /api/scripts/end/{scriptId}.<br />
1.1 Parameters can be passed for the Script.Start function similar to the Script.Run function.<br />
1.2 Return value is script run id (integer) if the script was started or stopped, and otherwise null.<br />
<br />
Example:<br />
<pre><br />
ScriptById(1).Start();<br />
</pre><br />
<br />
Example:<br />
<pre><br />
ScriptById(1).Start(#{<br />
<br />
});<br />
</pre><br />
|-<br />
||Stop<br />
||<br />
||Stops the script.<br />
|}<br />
<br />
Function to get a script by the script id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ScriptById<br />
||<br />
* Script id (Integer)<br />
||<br />
Returns Script object corresponding to the given script id. If script with the given id doesn't exist or user doesn't have permissions to it, an error is given.<br />
|}<br />
<br />
== User/Group ==<br />
User objects represents users and user groups. Note that some properties can only be used for users and some for groups.<br />
<br />
{| class="wikitable"<br />
!'''User/group properties'''<br />
! '''Description'''<br />
|-<br />
||Description (String)<br />
||Description of the user.<br />
|-<br />
||Email (String)<br />
||Email address of the user.<br />
|-<br />
||FullName (String)<br />
||Full name of the user or group name.<br />
|-<br />
||GlobalPermissions (String*)<br />
||Array of global [[Roles and Permissions#Global_and_Project_Roles|permissions]] of the user. Global permissions come from the global roles assigned to the user and groups that the user belongs to. Note that to get the effective permissions for certain objects, also project specific permissions need to be taken into account.<br />
|-<br />
||GroupMemberNames (String*)<br />
||Array of names of members of a user group. This property is available for groups.<br />
|-<br />
||GroupMembers (User*)<br />
||Array of members of a user group. This property is available for groups.<br />
|-<br />
||GroupNames (String*)<br />
||Array of names of user groups the user belongs to. This property is available for users.<br />
|-<br />
||Groups (User*)<br />
||Array of user groups the user belongs to. This property is available for users.<br />
|-<br />
||HasPassword (Boolean)<br />
||Returns true if user has a password defined in QPR ProcessAnalyzer and thus user can authenticate using the password. If user doesn't have a password, the SAML authentication is the only way to log in. ''ManageUsers'' permission is needed to access this property for other users.<br />
|-<br />
||Id (Integer)<br />
||Id of the user, which is unique for every user.<br />
|-<br />
||IsActive (Boolean)<br />
||Returns true only if the user is active (not disabled).<br />
|-<br />
||IsGroup (Boolean)<br />
||Returns true if the user is a user group.<br />
|-<br />
||IsLocked (Boolean)<br />
||Returns true if user account is currently [[User_Session_Management#Preventing_password_guessing_attacks|locked]]. ''ManageUsers'' permission is needed to access this property.<br />
|-<br />
||LastLockedDate (DateTime)<br />
||Returns date when user account was locked the last time. Returns ''null'' if the user account has never been locked. ''ManageUsers'' permission is needed to access this property.<br />
|-<br />
||LastLoginDate (DateTime)<br />
||Returns date when the user made last successful login. ''ManageUsers'' permission is needed to access this property for other users.<br />
|-<br />
||Name (String)<br />
||Login name of the user or group.<br />
|-<br />
||Roles (Object**)<br />
||<br />
Returns all roles of the user (both global and project roles) as a nested array structure.<br />
<br />
Example:<br />
<pre><br />
ToJson(Users.Where(name == "qpr").Roles)<br />
Returns (for example):<br />
[<br />
[{"calcId": "Project:1"}, "Administrator"],<br />
[{"calcId": "Project:2"}, "Analyzer"],<br />
[{"calcId": "Project:3"}, "Viewer"],<br />
[null, "RunScripts"],<br />
[null, "Administrator"]<br />
]<br />
</pre><br />
|}<br />
<br />
{| class="wikitable"<br />
!'''User/group functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||EffectivePermissionsFor (String Array)<br />
||<br />
* Project to get permissions<br />
||<br />
Returns effective (actual) permission of the user to the given project. Project is given as a [[#Project|project object]] (not as a project id). Effective permissions determine the actual permissions that the user has, i.e. a combination of all permissions assigned to the user and groups the user belong to, including both project specific and global roles.<br />
<br />
Permissions for the EffectivePermissionsFor function are as follows:<br />
* All users can query their own permissions<br />
* To get permissions for any user, the user needs to have [[Roles_and_Permissions|ManageUsers permission]].<br />
<br />
Note that ''inactive'' users don't have any effective permissions, so the EffectivePermissionsFor function does not return any permissions for those users.<br />
<br />
Examples:<br />
<pre><br />
EffectivePermissionsFor(ModelById(1234).Project)<br />
Returns (for example): ["EditDashboards", "Filtering", "GenericRead"]<br />
</pre><br />
|-<br />
||GetAttribute<br />
||<br />
||<br />
Returns user attribute value by given attribute name and optionally by the model/project/dashboard context. Supported data types are String, Integer, Float, and DateTime. To store more complex data types, data can be converted into json and stored as string. If the attribute doesn't exist, null is returned.<br />
<br />
For example, if using dashboard as context, the attributes are effectively bound to each user and each dashboard separately. Thus, there can be several attributes with the same name as long as the dashboard is different.<br />
<br />
Parameters:<br />
# '''Attribute name''' (String): Name of the attribute.<br />
# '''Attribute context''' (Project/Model/Dashboard): Optional context object the attribute is linked to.<br />
<br />
Users have permissions to get attributes for themselves, and also (administrator) users with global ''ManageUsers'' permission can get attributes for all users. In addition, if using the context object, the ''GenericRead'' permission is required for the context object.<br />
<br />
Example: Get user attribute MyDataValue for myself:<br />
<pre><br />
CurrentUser<br />
.GetAttribute("MyDataValue");<br />
</pre><br />
<br />
Example: Get user attribute MyDataValue for user John:<br />
<pre><br />
Users<br />
.Where(Name=="John")<br />
.GetAttribute("MyDataValue");<br />
</pre><br />
<br />
Example: Get user attribute MyDataValue for user 1 related to dashboard id 1:<br />
<pre><br />
UserById(1)<br />
.GetAttribute("MyDataValue", DashboardById(1));<br />
</pre><br />
|-<br />
||SetAttribute<br />
||<br />
||<br />
Sets user attribute value for given attribute name and optionally for the model/project/dashboard context. Supported data types are String, Integer, Float, and DateTime. To store more complex data types, data can be converted into json and stored as string. If setting value ''null'', the user attribute is removed. Required permissions are same as in the GetAttribute function.<br />
<br />
Parameters:<br />
# '''Attribute name''' (String): Name of the attribute.<br />
# '''Attribute value''' (String/Integer/Float/DateTime): Attribute value to be stored.<br />
# '''Attribute context''' (Project/Model/Dashboard): Optional context object the attribute value is linked to.<br />
<br />
Example: Set user attribute MyDataValue for myself:<br />
<pre><br />
CurrentUser<br />
.SetAttribute("MyDataValue ", "value");<br />
</pre><br />
<br />
Example: Set value 123 as user attribute MyDataValue for user John:<br />
<pre><br />
Users<br />
.Where(Name=="John")<br />
.SetAttribute("MyDataValue", 123);<br />
</pre><br />
<br />
Example: Set current time as user attribute MyDataValue for user 1 related to dashboard id 1:<br />
<pre><br />
UserById(1)<br />
.GetAttribute("MyDataValue", Now, DashboardById(1));<br />
</pre><br />
|}<br />
<br />
Function to get User by user id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||UserById<br />
||<br />
* User id (Integer)<br />
||<br />
Returns User object corresponding to the provided user id.<br />
|}</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Objects_in_Expression_Language&diff=24495QPR ProcessAnalyzer Objects in Expression Language2024-03-28T08:39:25Z<p>Ollvihe: /* Script */</p>
<hr />
<div>==Filter==<br />
Filters contain a set of filter rules used to filter cases and events in models. Filters are objects located in the models. Filters are owned by the creator user, and when a filter publish mode is private, only the creator can use it.<br />
<br />
{| class="wikitable"<br />
!'''Filter properties'''<br />
! '''Description'''<br />
|-<br />
||CreatedBy (User)<br />
||Returns the user who created the filter.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Returns date when the filter created date.<br />
|-<br />
||Description (String)<br />
||Returns description of the filter.<br />
|-<br />
||Id (Integer)<br />
||Returns id of the filter.<br />
|-<br />
||LastModifiedBy (User)<br />
||Returns user who modified the filter.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Returns date when the filter last modified.<br />
|-<br />
||Model<br />
||Returns model where the filter belongs to.<br />
|-<br />
||ModelId (Integer)<br />
||Returns model where the filter belongs to.<br />
|-<br />
||Name (String)<br />
||Returns the name of the filter.<br />
|-<br />
||Project<br />
||Returns project where the filter belongs to.<br />
|-<br />
||ProjectId (Integer)<br />
||Returns project id where the filter belongs to.<br />
|-<br />
||PublishMode (String)<br />
||Returns publish mode of the filter, one of the following: '''Private''', '''Public''', or '''Default'''.<br />
|-<br />
||Rules (Dictionary)<br />
||Returns a dictionary containing the filter rules in the filter.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Filter Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||<br />
Deletes the filter permanently. To delete own filters, the '''Filtering''' permission is needed, and to delete any filters the '''ManageViews''' permission is needed.<br />
|-<br />
||Modify<br />
||Dictionary<br />
||<br />
Modifies filter properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: ''Name'', ''Description'', ''PublishMode'', and ''Rules''.<br />
<br />
The function returns the updated filter object. Requires ''GenericWrite'' permission for the Project and global ''CreateModel'' permission.<br />
<br />
Example:<br />
<pre><br />
FilterById(1)<br />
.Modify(#{<br />
"Name": "My filter",<br />
"Description": "My description",<br />
"PublishMode": "Public",<br />
"Rules": #{<br />
"Items": [<br />
#{<br />
"Type": "IncludeCases",<br />
"Items": [<br />
#{<br />
"Type": "CaseAttributeValue",<br />
"Attribute": "Account Manager",<br />
"StringifiedValues": [<br />
"0Mary Wilson"<br />
]<br />
}<br />
]<br />
}<br />
]<br />
}<br />
}<br />
)<br />
</pre><br />
|}<br />
<br />
Function to get filter id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||FilterById<br />
||<br />
* Filter id (Integer)<br />
||<br />
Returns Filter object corresponding to the provided filter id.<br />
|}<br />
<br />
==Model==<br />
Notes:<br />
* For in-memory models that are offline, the object counts represent the situation when the model was last time online (loaded into the memory). ''null'' is returned if the model has never been loaded into the memory.<br />
* If [[Case_Level_Permissions|Case permissions]] are used for the model, and user doesn't have '''GenericWrite''' permission for the model, ''null'' is returned for data security reasons. Users that have the '''GenericWrite''' permission, see null when the model is offline, and when online, they see counts where the case level permissions settings are applied.<br />
* Properties ''CaseAttributes'', ''EventAttributes'' and ''Eventlog'' work only for the in-memory models and they require the model to be loaded into the memory. If the model is not in the memory, it is loaded when these properties is used. Other model properties down require the model to be in the memory.<br />
<br />
{| class="wikitable"<br />
!'''Model properties'''<br />
! '''Description'''<br />
|-<br />
||Calendars (BusinessCalendar*)<br />
||<br />
Returns all [[Business_Calendar|business calendars]] stored to the Model as an array. Returns an empty array, if there are no business calendars stored to the model. Note: UI allows to set only one business calendar for a Model.<br />
|-<br />
||CaseAttributes (AttributeType*)<br />
||[[#AttributeType|CaseAttributes]] in the model returned in the alphabetical order. Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||CasesDatatable (Datatable)<br />
||Returns the Datatable the model uses as a datasource for cases. Returns ''null'' if the cases Datatable is not defined or if model uses other than the Datatable datasource.<br />
|-<br />
||Configuration (Dictionary)<br />
||Returns the Model configuration as dictionary. Example:<br />
<pre><br />
ModelById(123).Configuration.DataSource.Events.DataTableName<br />
</pre><br />
|-<br />
||ConfigurationJson (String)<br />
||Returns the Model configuration as JSON string.<br />
|-<br />
||CreatedBy (User)<br />
||User who created the model.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the model was created.<br />
|-<br />
||DefaultCalendar (BusinessCalendar)<br />
||Returns the default [[Business_Calendar|business calendar]] of the Model. Returns ''null'', if there are no calendars in the Model or no calendar has been set as a default calendar. Note: UI allows to set only one business calendar for a Model, which is also the default calendar.<br />
|-<br />
||DefaultFilter (Filter)<br />
||Default filter of the model. Returns ''null'' if the model does not have a default filter.<br />
|-<br />
||DefaultFilterId (Integer)<br />
||Default filter id of the model. Returns ''null'' if the model does not have a default filter.<br />
|-<br />
||Description (String)<br />
||Model description. The model description may contain line breaks.<br />
|-<br />
||DeletedDate (DateTime)<br />
||Timestamp when Model was deleted (moved to the recycle bin).<br />
|-<br />
||DeletedBy (User)<br />
||User how deleted the Model.<br />
|-<br />
||Diagrams (Diagram*)<br />
||Returns an array of all [[Diagram_in_Expression_Language|diagrams]] in the model.<br />
|-<br />
||EstimatedMemory (Integer)<br />
||Returns an estimation of how much memory in bytes the model requires.<br />
|-<br />
||EventsDatatable (Datatable)<br />
||Returns the Datatable the model uses as a datasource for events. Returns ''null'' if the events Datatable is not defined or if model uses other than the Datatable datasource.<br />
|-<br />
||EventAttributes (AttributeType*)<br />
||[[#AttributeType|EventAttributes]] in the model returned in the alphabetical order. Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||EventLog (EventLog)<br />
||EventLog containing the entire model (i.e. event log where no filters have been applied). Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||Filters (Filter*)<br />
||Returns an array of all [[#Filter|filters]] in the model.<br />
|-<br />
||Id (Integer)<br />
||Model Id. Model Id is generated by QPR ProcessAnalyzer when the model is created.<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last time modified the model properties. Note that datatables containing the eventlog data are separate objects having similar fields to track the last modification and last data import.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the model was modified the last time.<br />
|-<br />
||Name (String)<br />
||Model name.<br />
|-<br />
||NCache (Integer)<br />
||Number of objects related to the model when the model is loaded into the memory.<br />
|-<br />
||NCaseAttributes (Integer)<br />
||Number of [[#AttributeType|CaseAttributes]] in model. Works only for in-memory models.<br />
|-<br />
||NCases (Integer)<br />
||Number of [[#Case|Cases]] in the model. Works only for in-memory models.<br />
|-<br />
||NEventAttributes (Integer)<br />
||Number of [[#AttributeType|EventAttributes]] in model. Works only for in-memory models.<br />
|-<br />
||NEvents (Integer)<br />
||Number of [[#Event|Events]] in model. Works only for in-memory models.<br />
|-<br />
||NEventTypes (Integer)<br />
||Number of [[#EventType|EventTypes]] in the model. Works only for in-memory models.<br />
|-<br />
||NOpens (Integer)<br />
||Number of times analysis has been requested from the model.<br />
|-<br />
||Project (Project)<br />
||[[#Project|Project]] where the model belongs to.<br />
|-<br />
||ProjectId (Integer)<br />
||[[#Project|Project]] id where the model belongs to.<br />
|-<br />
||Status (String)<br />
||<br />
Memory availability status of the model. There are the following statuses:<br />
* '''Loading''': The model is currently loading into the memory. When the loading is ready, the status changes to ''online''. If the loading fails, the status changes to ''offline''.<br />
* '''Offline''': The model is currently not loaded into the memory. The model needs to be loaded into the memory, so that analyses can be calculated from the model (occurs automatically when an analysis is requested).<br />
* '''Online''': The model is in the memory and ready for analysis calculation. If the model is dropped from the memory, its status changes to ''offline''.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Model Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||CalendarByName (BusinessCalendar)<br />
||<br />
name (String)<br />
||<br />
Returns a [[Business_Calendar|business calendar]] stored to the Model by the name of the calendar. Business calendars can be stored to models in the model properties. Returns ''null'', if a calendar with the provided name is not stored to the model.<br />
<br />
Examples:<br />
<pre><br />
ModelById(123).CalendarByName("MyCalendar")<br />
</pre><br />
|-<br />
||CreateDiagram (Diagram)<br />
||Parameters dictionary<br />
||<br />
Creates a [[Diagram_in_Expression_Language|diagram]] to the model. Parameters is a dictionary containing diagram properties. Following properties are available:<br />
* '''Name''' (string): Diagram name that distinguishes diagrams in a model.<br />
* '''Description''' (string): Diagram description text.<br />
* '''Content''' (dictionary): Diagram content as dictionary.<br />
<br />
Example:<br />
<pre><br />
ModelById(1)<br />
.CreateDiagram(#{<br />
"Name": "My diagram",<br />
"Description": "This is my new diagram",<br />
"Content": #{ ... },<br />
})<br />
</pre><br />
|-<br />
||CreateFilter (Filter)<br />
||Parameters dictionary<br />
||Creates a filter to a model. Requires ''GenericWrite'' permission for the project and global ''CreateModel'' permission. If a filter with that name already exists in the model, an exception is thrown.<br />
The parameters dictionary may have the following properties:<br />
* '''Name''': Name of the filter. This property is mandatory.<br />
* '''Description''': Description of the filter. This property is optional.<br />
* '''Rules''': Filter rules for the filter defined as a dictionary according to the [[Filtering_in_QPR_ProcessAnalyzer_Queries|filter json format]]. This property is mandatory.<br />
* '''PublishMode''': Publish mode of the filter which is one of the following: ''Private'', ''Public'' or ''Default''. This property is optional, and the default value is ''Private''.<br />
<br />
Example:<br />
<pre><br />
let newFilter = modelById(1).CreateFilter(#{ <br />
"Name": "My Filter",<br />
"Rules": #{<br />
"Items": [#{<br />
"Type": "IncludeCases",<br />
"Items": [#{<br />
"Type": "CaseAttributeValue",<br />
"Attribute": "Account Manager",<br />
"StringifiedValues": [ "0Robert Miller" ]<br />
}]<br />
}]<br />
},<br />
"PublishMode": "Public"<br />
});<br />
}<br />
</pre><br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||Deletes the Model permanently. The model doesn't need to be in the recycle bin to be able to delete it permanently.<br />
|-<br />
||Modify (Model)<br />
||Dictionary<br />
||<br />
Modifies model properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: ''Name'', ''Description'', ''ProjectId'', and ''Configuration''.<br />
<br />
The function returns the updated model object. Requires the ''GenericWrite'' permission for the project and the global ''CreateModel'' permission.<br />
<br />
Example:<br />
<pre><br />
ModelById(1)<br />
.Modify(#{<br />
"Name": "My model",<br />
"Description": "My description",<br />
"ProjectId": 2,<br />
"Configuration": #{<br />
"DataSource": #{<br />
"Cases": #{<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My cases datatable",<br />
"Columns": #{<br />
"CaseId": "Case Name"<br />
}<br />
},<br />
"Events": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My events datatable",<br />
"Columns": #{<br />
"CaseId": "Case Name",<br />
"EventType": "Event Type",<br />
"Timestamp": "Start Time"<br />
}<br />
}<br />
}<br />
}<br />
}<br />
)<br />
</pre><br />
|-<br />
||ResetPreprocessings<br />
||(none)<br />
||<br />
Removes all cached items related to the Model, e.g. preprocessings and calculation results. In practice, the Model is reset to a state where it was right after the model was loaded into memory.<br />
|-<br />
||Restore<br />
||(none)<br />
||Restores the Model from the recycle bin back to the original location.<br />
|-<br />
||<span id="ToSqlDataFrame">ToSqlDataFrame</span><br />
||In-memory dataframe<br />
||Converts an in-memory dataframe to an SQL dataframe. In practice, an SQL query is created from the in-memory dataframe and the query is executed in the datasource so that the data is available in the datasource for further SQL operations. This function is intended only to small amounts of data which is less than 16384 rows.<br />
<br />
Example: Select matching cases from events data using in-memory dataframe:<br />
<pre><br />
let model = ModelById(1);<br />
let dfEvents = model.EventsDatatable.SqlDataFrame;<br />
let inMemoryDf = ToDataFrame(<br />
[["1"], ["2"], ["3"]],<br />
[#{"Name": "id", "DataType": "String"}]<br />
);<br />
model.ToSqlDataFrame(inMemoryDf)<br />
.Join(dfEvents, ["id": "CaseId"])<br />
.SelectDistinct(["CaseId"])<br />
.Collect();<br />
</pre><br />
|-<br />
||<span id="TriggerNotifications">TriggerNotifications</span> (Boolean)<br />
||Notification names (String*)<br />
||Triggers the given notifications for the Model. Notifications are given by their names. Triggering means that the configured rules are run and notification emails are sent as defined by the rules. If the notification names parameter is not provided, all notifications in the Model are triggered.<br />
<br />
The function return ''true'' if any notification were triggered, otherwise ''false''.<br />
<pre><br />
ModelById(123).TriggerNotifications(["Notification 1", "Notification 2"]);<br />
Triggers notifications Notification 1 and Notification 2 in model id 123.<br />
<br />
ModelById(123).TriggerNotifications();<br />
Triggers all notifications in model id 123.<br />
</pre><br />
|}<br />
<br />
Function to get Model by model id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ModelById<br />
||<br />
* Model id (Integer)<br />
||<br />
Returns [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Model|Model]] object corresponding to the provided model id.<br />
|}<br />
<br />
== Project ==<br />
{| class="wikitable"<br />
!'''Project properties'''<br />
! '''Description'''<br />
|-<br />
||CreatedBy (User)<br />
||User who created the Project.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the Project was created.<br />
|-<br />
||Dashboards (Dashboard*)<br />
||Returns all [[Dashboard_in_Expression_Language|dashboards]] in the project.<br />
|-<br />
||Datatables (Datatable*)<br />
||Returns all Datatables in the project.<br />
|-<br />
||DeletedDate (DateTime)<br />
||Timestamp when the Project was deleted (moved to the recycle bin).<br />
|-<br />
||Description (String)<br />
||Project description. The project description may contain line breaks.<br />
|-<br />
||DeletedBy (User)<br />
||User who deleted the Project (moved to the recycle bin).<br />
|-<br />
||Id (Integer)<br />
||Id of the Project.<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last modified the Project.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the Project was last modified (refers to the project name, description and parent, not the contents of the project).<br />
|-<br />
||Name (String)<br />
||Name of the Project.<br />
|-<br />
||Models (Model*)<br />
||Models that are in the Project.<br />
|-<br />
||Parent (Project)<br />
||Parent project, i.e. a Project where the Project is located in the hierarchy of Projects. Returns ''null'' for root level Projects. Throws an error if user doesn't have access to the parent project.<br />
|-<br />
||ParentProjectId (Integer)<br />
||Parent project id. Returns ''null'' for root level Projects. The parent project id is returned even if user doesn't have access to the parent project.<br />
|-<br />
||Scripts (Script*)<br />
||Scripts that are in the Project.<br />
|-<br />
||Secrets (Dictionary*)<br />
||Returns array of all [[Storing_Secrets_for_Scripts|secrets]] in the project as Dictionary with following properties:<br />
* '''Name''' (string): Name of the secret.<br />
* '''Type''' (string): Type of the secret which is one of the following: "odbc", "sap", "salesforce".<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Project functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||CreateDashboard (Dashboard)<br />
||Parameters dictionary<br />
||Creates a dashboard to the project. ''EditDashboards'' permission to the project is required. The parameter is dictionary with following supported dashboard properties:<br />
* '''Name''' (String): Name of the dashboard.<br />
* '''Identifier''' (String): Identifier of the dashboard.<br />
* '''Description''' (String): Description of the dashboard.<br />
* '''Content''' (Dictionary): Content of the dashboard.<br />
<br />
Example: Create empty dashboard.<br />
<pre><br />
ProjectById(1)<br />
.CreateDashboard(#{<br />
"Name": "My dashboard",<br />
"Identifier": "MyDashboard"<br />
});<br />
</pre><br />
<br />
Example: Create dashboard with a chart.<br />
<pre><br />
ProjectById(1)<br />
.CreateDashboard(#{<br />
"Name": "My dashboard",<br />
"Content": #{<br />
"version": 4,<br />
"typeName": "View",<br />
"name": "My dashboard",<br />
"subElements": [<br />
#{<br />
"position": #{<br />
"x": 0,<br />
"y": 0,<br />
"width": 0.5,<br />
"height": 0.5,<br />
"zOrder": 0<br />
},<br />
"element": #{<br />
"typeName": "Chart",<br />
"configuration": #{<br />
"root": #{<br />
"expressionType": "Cases",<br />
"expressionParameters": #{}<br />
},<br />
"measures": [#{<br />
"expressionType": "Count",<br />
"expressionParameters": #{}<br />
}]<br />
}<br />
}<br />
}<br />
]<br />
}<br />
});<br />
</pre><br />
|-<br />
||<span id="CreateDatatable">CreateDatatable</span> (Datatable)<br />
||<br />
* Parameters dictionary<br />
||Creates datatable to the project. After creation, there are no columns or rows in the datatable. The function returns the created datatable entity. Following properties can be set for the datatable:<br />
* '''Name''' (string): Name of the datatable. This parameter is mandatory.<br />
* '''Description''' (string): Description for the datatable. This parameter is optional.<br />
* '''NameInDataSource''' (string): Table name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''SchemaNameInDataSource''' (string): Schema name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''DatabaseNameInDataSource''' (string): Database name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''Type''' (string): Defines where the data for the datatable is located. Available values are '''Snowflake''', '''SqlServer''', and '''Local'''. This parameter is optional and default value is defined by the [[PA_Configuration_database_table#General_Settings|DefaultDataSource]] setting.<br />
* '''Connection''': Connection object for the datatable. This parameter is optional.<br />
<br />
Example: Create a new datatable:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable"<br />
});<br />
</pre><br />
<br />
Example: Create Snowflake datatable linked to a custom table:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable",<br />
"Description": "My description",<br />
"NameInDataSource": "MyTable",<br />
"SchemaNameInDataSource": "MySchema",<br />
"DatabaseNameInDataSource": "MyDatabase",<br />
"Type": "Snowflake"<br />
});<br />
</pre><br />
<br />
Example: Create Snowflake datatable where connection string is stored as a [[Storing_Secrets_for_Scripts|secret]]:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable",<br />
"Type": "Snowflake",<br />
"Connection": ProjectById(1).CreateSnowflakeConnection(#{ "OdbcConnectionStringKey": "MyKey" })<br />
});<br />
</pre><br />
|-<br />
||CreateModel (Model)<br />
||<br />
* Parameters dictionary<br />
||Creates a model to a project. Requires ''GenericWrite'' permission for the Project and global ''CreateModel'' permission. If a model with that name already exists, an exception is thrown.<br />
<br />
Parameters dictionary has the following properties:<br />
* '''Name''': Name of the model. This property is mandatory.<br />
* '''Description''': Description of the model. This property is optional.<br />
* '''Configuration''': Configuration dictionary for the model. This property is technically optional, but a working model requires at least datasource settings to be defined.<br />
<br />
Example:<br />
<pre><br />
ProjectById(1).CreateModel(#{ <br />
"Name": "My model",<br />
"Description": "My description",<br />
"Configuration": {<br />
"DataSource": {<br />
"Cases": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My cases datatable",<br />
"Columns": {<br />
"CaseId": "Case Name"<br />
}<br />
},<br />
"Events": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My events datatable",<br />
"Columns": {<br />
"CaseId": "Case Name",<br />
"EventType": "Event Type",<br />
"Timestamp": "Start Time"<br />
}<br />
}<br />
}<br />
}<br />
});<br />
</pre><br />
|-<br />
||DatatableByName (Datatable)<br />
||Datatable name (String)<br />
||<br />
Returns Datatable by its name located in the project. Returns null, if Datatable with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).DatatableByName("MyDatatable1")<br />
</pre><br />
<br />
Example: Get datatable by name, and create it if it doesn't exist:<br />
<pre><br />
let project = ProjectById(123);<br />
let datatableName = "MyDatatable1";<br />
let datatable = project.DatatableByName(datatableName);<br />
if (datatable == null) {<br />
datatable = project.CreateDatatable(datatableName);<br />
}<br />
</pre><br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||Deletes the Project permanently. Note that the Project doesn't need to be in the recycle bin to be able to delete it permanently.<br />
|-<br />
||Restore<br />
||(none)<br />
||Restores the Project from the recycle bin back to the original location.<br />
|-<br />
||ModelByName (Model)<br />
||Model name (String)<br />
||<br />
Returns Model by its name located in the project. Returns null, if Model with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).ModelByName("My Model 1")<br />
</pre><br />
|-<br />
||ScriptByName (Script)<br />
||Script name (String)<br />
||<br />
Returns Script by its name located in the project. Returns null, if Script with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).ScriptByName("MyScript1")<br />
</pre><br />
|-<br />
||<span id="SetSecret">SetSecret</span><br />
||<br />
# Secret type (string)<br />
# Secret name (string)<br />
# Secret value (string)<br />
||Sets or adds a [[Storing_Secrets_for_Scripts|secret]] for the project. Setting the secret value to ''null'' removes the secret. There can be several secrets with the same name in the same project if the type of the secret is different. Setting secrets requires the project specific ''ManageProject'' permission.<br />
<br />
Parameters:<br />
# '''Type''' (string): Secret type which is one of the following:<br />
#* "odbc": ODBC connection string (e.g., to extract data, or load a model directly)<br />
#* "externaldatatableconnection": ODBC connection string used for a datatable<br />
#* "sap": SAP password<br />
#* "salesforce": Salesforce password<br />
# '''Name''' (string): Secret name, used to refer to the secret in the commands.<br />
# '''Value''' (string): Secret value which contains the confidential information.<br />
<br />
Example: Set SAP password:<br />
<pre><br />
ProjectById(1).SetSecret("sap", "MySapPassword", "I l0ve 5AP!");<br />
</pre><br />
<br />
Example: Remove SAP password:<br />
<pre><br />
ProjectById(1).SetSecret("sap", "MySapPassword", null);<br />
</pre><br />
|}<br />
<br />
Function to get Project by id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ProjectById<br />
||Project id (Integer)<br />
||<br />
Returns project object corresponding to the provided project id.<br />
|-<br />
||ProjectByName<br />
||Project name (String)<br />
||<br />
Returns project object by given project name. If there is no such project or user doesn't have access to it, ''null'' value is returned. If there are multiple projects with the same name, one of them is returned.<br />
<br />
Example:<br />
<pre><br />
let project = ProjectByName("My Project");<br />
</pre><br />
|}<br />
<br />
== Script ==<br />
Scripts are entities that contain executable code, that can be run. Usually scripts contains ETL routines but also other kind of tasks are possible.<br />
<br />
{| class="wikitable"<br />
!'''Script properties'''<br />
! '''Description'''<br />
|-<br />
||Code (String)<br />
||Script code.<br />
|-<br />
||CreatedBy (User)<br />
||User who created the Script.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the Script was created.<br />
|-<br />
||CurrentRunStart (DateTime)<br />
||Timestamp of the current run start. Null if the script is currently not running.<br />
|-<br />
||Description (String)<br />
||Description of the Script.<br />
|-<br />
||Id (Integer)<br />
||Id of the Script.<br />
|-<br />
||Language (String)<br />
||Either of the following scripting language: '''Expression''' or '''SQL'''. When language is Expression, the script is run as an expression script, and when language is SQL, the script is run as an SQL script (using the sandbox database).<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last modified the Script.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the Script was last modified.<br />
|-<br />
||LastRunEnd (DateTime)<br />
||Timestamp of the last completed script run end (either successful completion or failure). Null if the Script hasn't been run yet.<br />
|-<br />
||LastRunResult (String)<br />
||Result of the last run. Options are:<br />
* '''Completed''': The last run was completed successfully.<br />
* '''Failed''': An error occurred during the last run, so likely the script did not complete as intended.<br />
* '''Aborted''': Script run was manually stopped prematurely by a user, so the script did not proceeded in the end.<br />
<br />
Null if the Script hasn't been run yet.<br />
|-<br />
||LastRunStart (DateTime)<br />
||Timestamp of the last completed script run start time. Null if the Script hasn't been run yet.<br />
|-<br />
||Name (String)<br />
||Name of the Script.<br />
|-<br />
||OperationId (Integer)<br />
||Id of the operation which runs the Script. Null if the script is currently not running.<br />
|-<br />
||Project (Project)<br />
||Project where the Script is located. Null if the script is in the global context.<br />
|-<br />
||ProjectId (Integer)<br />
||Id of the project where the Script is located. Null if the script is in the global context.<br />
|-<br />
||Status (String)<br />
||Current status of the script. Options are:<br />
* '''Ready''': Script is not running. In this status, the script can be started (changing the status to ''Running'').<br />
* '''Running''': Script is running. In this status, the script can be stopped (changing the status to ''Stopping''). Calling stop just requests a script to stop, and the actual stopping occurs some time later.<br />
* '''Stopping''': Script has been requested to be stopped, but it's still running. In this status, neither start nor stop can be called for the script. When the script eventually stops, its status changes to ''Ready''.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Script functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||Run (Object)<br />
||Dictionary of parameters<br />
||<br />
Runs the script using the provided parameters. The parameters are available in the script as variables (see the example). Any type of variables can be passed to the script. Note that if the script assumes certain variables, but that they are not passed to the script, the script run will throw an error. <br />
<br />
For SQL scripts, the passed parameters are available in the script as variables in format '''@_parameter_<ParameterName>''' where <ParameterName> is the name of the parameter, e.g. ''parameter_myParameter1''. Only string type of parameters can be used, so any other type of data in parameter values is converted into strings.<br />
<br />
The return value of the script is returned by the Run function. Expression scripts return a value with the ''return'' statement or alternatively the result of the last line of the script is the return value. If the script does not return any value, the Run function returns ''_empty''. For SQL scripts, the return value is the last dataset produced by the script (returned as a DataFrame) (SQL scripts might create several datasets using the ''--#ShowReport'' command or the ''Show'' parameter).<br />
<br />
When a script is called using the Run function, the called script status does not change, because it's the parent script that is ''Running''. Also the called script log is not filled, but instead the logging goes to the calling script.<br />
<br />
It's possible to call a script using the Run function several times simultaneously.<br />
<br />
If there is an error when running the called script, the Run function throws the error to the calling script.<br />
<br />
Scripts are run in the script entity context, so for example the following properties are available:<br />
* Id: Script id<br />
* Name: Script name<br />
* Project.Id: Project id where the script is located<br />
* Project.Name: Name of the project where the script is located<br />
<br />
Example: Following script (id 123) raises a specified number to a specified power:<br />
<pre><br />
return Pow(numberToRaise, exponent);<br />
</pre><br />
<br />
The script can be called as follows:<br />
<pre><br />
let runResult = ScriptById(123).Run(#{<br />
"numberToRaise": 4,<br />
"exponent": 2<br />
})<br />
Returns: 16<br />
</pre><br />
|-<br />
||Start<br />
||Starts the script.<br />
1. Add functions Script.Start() and Script.Stop() corresponding to REST /api/scripts/run/{scriptId} and /api/scripts/end/{scriptId}.<br />
1.1 Parameters can be passed for the Script.Start function similar to the Script.Run function.<br />
1.2 Return value is script run id (integer) if the script was started or stopped, and otherwise null.<br />
<br />
Example:<br />
<pre><br />
ScriptById(1).Start();<br />
</pre><br />
<br />
Example:<br />
<pre><br />
ScriptById(1).Start(#{<br />
<br />
});<br />
</pre><br />
|}<br />
<br />
Function to get a script by the script id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ScriptById<br />
||<br />
* Script id (Integer)<br />
||<br />
Returns Script object corresponding to the given script id. If script with the given id doesn't exist or user doesn't have permissions to it, an error is given.<br />
|}<br />
<br />
== User/Group ==<br />
User objects represents users and user groups. Note that some properties can only be used for users and some for groups.<br />
<br />
{| class="wikitable"<br />
!'''User/group properties'''<br />
! '''Description'''<br />
|-<br />
||Description (String)<br />
||Description of the user.<br />
|-<br />
||Email (String)<br />
||Email address of the user.<br />
|-<br />
||FullName (String)<br />
||Full name of the user or group name.<br />
|-<br />
||GlobalPermissions (String*)<br />
||Array of global [[Roles and Permissions#Global_and_Project_Roles|permissions]] of the user. Global permissions come from the global roles assigned to the user and groups that the user belongs to. Note that to get the effective permissions for certain objects, also project specific permissions need to be taken into account.<br />
|-<br />
||GroupMemberNames (String*)<br />
||Array of names of members of a user group. This property is available for groups.<br />
|-<br />
||GroupMembers (User*)<br />
||Array of members of a user group. This property is available for groups.<br />
|-<br />
||GroupNames (String*)<br />
||Array of names of user groups the user belongs to. This property is available for users.<br />
|-<br />
||Groups (User*)<br />
||Array of user groups the user belongs to. This property is available for users.<br />
|-<br />
||HasPassword (Boolean)<br />
||Returns true if user has a password defined in QPR ProcessAnalyzer and thus user can authenticate using the password. If user doesn't have a password, the SAML authentication is the only way to log in. ''ManageUsers'' permission is needed to access this property for other users.<br />
|-<br />
||Id (Integer)<br />
||Id of the user, which is unique for every user.<br />
|-<br />
||IsActive (Boolean)<br />
||Returns true only if the user is active (not disabled).<br />
|-<br />
||IsGroup (Boolean)<br />
||Returns true if the user is a user group.<br />
|-<br />
||IsLocked (Boolean)<br />
||Returns true if user account is currently [[User_Session_Management#Preventing_password_guessing_attacks|locked]]. ''ManageUsers'' permission is needed to access this property.<br />
|-<br />
||LastLockedDate (DateTime)<br />
||Returns date when user account was locked the last time. Returns ''null'' if the user account has never been locked. ''ManageUsers'' permission is needed to access this property.<br />
|-<br />
||LastLoginDate (DateTime)<br />
||Returns date when the user made last successful login. ''ManageUsers'' permission is needed to access this property for other users.<br />
|-<br />
||Name (String)<br />
||Login name of the user or group.<br />
|-<br />
||Roles (Object**)<br />
||<br />
Returns all roles of the user (both global and project roles) as a nested array structure.<br />
<br />
Example:<br />
<pre><br />
ToJson(Users.Where(name == "qpr").Roles)<br />
Returns (for example):<br />
[<br />
[{"calcId": "Project:1"}, "Administrator"],<br />
[{"calcId": "Project:2"}, "Analyzer"],<br />
[{"calcId": "Project:3"}, "Viewer"],<br />
[null, "RunScripts"],<br />
[null, "Administrator"]<br />
]<br />
</pre><br />
|}<br />
<br />
{| class="wikitable"<br />
!'''User/group functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||EffectivePermissionsFor (String Array)<br />
||<br />
* Project to get permissions<br />
||<br />
Returns effective (actual) permission of the user to the given project. Project is given as a [[#Project|project object]] (not as a project id). Effective permissions determine the actual permissions that the user has, i.e. a combination of all permissions assigned to the user and groups the user belong to, including both project specific and global roles.<br />
<br />
Permissions for the EffectivePermissionsFor function are as follows:<br />
* All users can query their own permissions<br />
* To get permissions for any user, the user needs to have [[Roles_and_Permissions|ManageUsers permission]].<br />
<br />
Note that ''inactive'' users don't have any effective permissions, so the EffectivePermissionsFor function does not return any permissions for those users.<br />
<br />
Examples:<br />
<pre><br />
EffectivePermissionsFor(ModelById(1234).Project)<br />
Returns (for example): ["EditDashboards", "Filtering", "GenericRead"]<br />
</pre><br />
|-<br />
||GetAttribute<br />
||<br />
||<br />
Returns user attribute value by given attribute name and optionally by the model/project/dashboard context. Supported data types are String, Integer, Float, and DateTime. To store more complex data types, data can be converted into json and stored as string. If the attribute doesn't exist, null is returned.<br />
<br />
For example, if using dashboard as context, the attributes are effectively bound to each user and each dashboard separately. Thus, there can be several attributes with the same name as long as the dashboard is different.<br />
<br />
Parameters:<br />
# '''Attribute name''' (String): Name of the attribute.<br />
# '''Attribute context''' (Project/Model/Dashboard): Optional context object the attribute is linked to.<br />
<br />
Users have permissions to get attributes for themselves, and also (administrator) users with global ''ManageUsers'' permission can get attributes for all users. In addition, if using the context object, the ''GenericRead'' permission is required for the context object.<br />
<br />
Example: Get user attribute MyDataValue for myself:<br />
<pre><br />
CurrentUser<br />
.GetAttribute("MyDataValue");<br />
</pre><br />
<br />
Example: Get user attribute MyDataValue for user John:<br />
<pre><br />
Users<br />
.Where(Name=="John")<br />
.GetAttribute("MyDataValue");<br />
</pre><br />
<br />
Example: Get user attribute MyDataValue for user 1 related to dashboard id 1:<br />
<pre><br />
UserById(1)<br />
.GetAttribute("MyDataValue", DashboardById(1));<br />
</pre><br />
|-<br />
||SetAttribute<br />
||<br />
||<br />
Sets user attribute value for given attribute name and optionally for the model/project/dashboard context. Supported data types are String, Integer, Float, and DateTime. To store more complex data types, data can be converted into json and stored as string. If setting value ''null'', the user attribute is removed. Required permissions are same as in the GetAttribute function.<br />
<br />
Parameters:<br />
# '''Attribute name''' (String): Name of the attribute.<br />
# '''Attribute value''' (String/Integer/Float/DateTime): Attribute value to be stored.<br />
# '''Attribute context''' (Project/Model/Dashboard): Optional context object the attribute value is linked to.<br />
<br />
Example: Set user attribute MyDataValue for myself:<br />
<pre><br />
CurrentUser<br />
.SetAttribute("MyDataValue ", "value");<br />
</pre><br />
<br />
Example: Set value 123 as user attribute MyDataValue for user John:<br />
<pre><br />
Users<br />
.Where(Name=="John")<br />
.SetAttribute("MyDataValue", 123);<br />
</pre><br />
<br />
Example: Set current time as user attribute MyDataValue for user 1 related to dashboard id 1:<br />
<pre><br />
UserById(1)<br />
.GetAttribute("MyDataValue", Now, DashboardById(1));<br />
</pre><br />
|}<br />
<br />
Function to get User by user id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||UserById<br />
||<br />
* User id (Integer)<br />
||<br />
Returns User object corresponding to the provided user id.<br />
|}</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&diff=24494QPR ProcessAnalyzer Release Notes2024-03-27T09:20:47Z<p>Ollvihe: /* Next Release: QPR ProcessAnalyzer 2024.3 (planned release date 2024-04-02) */</p>
<hr />
<div>This page lists all new features and fixed issues for each QPR ProcessAnalyzer release.<br />
<br />
== Next Release: QPR ProcessAnalyzer 2024.3 (planned release date 2024-04-02) ==<br />
<br />
'''Features:'''<br />
* B-08242: [[Actions_to_Run_Script_in_Table|Custom actions]] in scripts can be started from dashboard table context menu, e.g., create tickets, trigger automation, and fetch external information.<br />
* B-08252: When Analyzed objects is cases, event attribute values are filtered with the native event attribute filter rules instead of expression based filter rules.<br />
* B-08268: (1) In Overview flowchart preset, flow width visualizes now case volumes. (2) When converting Snowflake expression into custom, the expression filter is preserved and not embedded into the expression.<br />
* B-08231: Snowflake performance improved by splitting object counts (shown in header) query into two, so that the filtered object count query uses eventlog caching.<br />
* B-07906: Implemented cross joins to SQL dataframes.<br />
* B-03047: Removed support for dashboard panels.<br />
* B-08214: Removed unused columns from the PA_VIEW table.<br />
* B-08221: Snowflake query performance has been improved by using cached filters to build new filters.<br />
* B-08254: Frontend components have been updated.<br />
* B-08255: Backend components have been updated.<br />
<br />
'''Fixed issues:'''<br />
* D-14048: Fixed issue where in-memory root causes analysis for case attributes didn't show attributes with ShortString data type.<br />
* D-14049: Added some missing translations for table column filter and BPMN editor.<br />
* D-14021: FindRootCauses function WeightingExpression was run in incorrect context for in-memory model.<br />
* D-14020: Query which goes from EventTypes to Cases did not show the error when using GetValueFrom function.<br />
* D-13976: Fixed issue where gateway-based imports were not synchronous.<br />
* D-13689: Fixed JavaScript error in Highcharts polar chart with tooltips.<br />
* D-12614: Highcharts gives "Maximum call stack size exceeded" error in bar chart with polar and data labels.<br />
* D-14060: Highcharts custom layout translatable properties incorrectly changed chart configuration by translating the labels.<br />
* D-14071: Business calendar button press caused error when user didn't have access to any model.<br />
* D-14041: Manager Users dialog "Has password" field filter shows now Yes/No texts instead of true/false.<br />
* D-11268: There were inconsistent button colors in Workspace.<br />
* D-12264: Disabled stacked and polar charts for donut, packed bubble, sankey, dependency wheel, word cloud, and gantt charts.<br />
* D-14066: Fixed issue when EventTypes, Events.IncomingFlowOccurrence fails because there is event type filtering in in-memory model.<br />
<br />
== Latest: Additional release for QPR ProcessAnalyzer 2024.2 (build 5509) (released 2024-02-27) ==<br />
<br />
'''Features:'''<br />
<br />
* B-06280: User management dialog shows whether users have password defined and unnecessary passwords can be removed to improve security.<br />
<br />
'''Fixed issues:'''<br />
<br />
* D-14045: Fixed issue where users with Viewer or Analyzer role couldn't create filters in Snowflake models.<br />
<br />
== QPR ProcessAnalyzer 2024.2 (build 5438) (released 2024-02-21) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue: Snowflake models and dashboards don't work with Viewer and Analyzer role permisions. The reason is that cache tables created to Snowflake incorrectly require the write permissions. Workaround is to give users the Designer role which will give the needed permissions. Note that the Designer role gives many permissions to the user for the project [[Roles_and_Permissions#Roles_and_Permissions|(more information)]]. This issue has been fixed in the next release (D-14045).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
The legacy User permissions report (analysis number 11) and Filters report (analysis number 30) used in SQL scripts have been removed. Use instead the expressions language to query filters and user permissions, e.g., [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|Models.Filters]] and [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
New version of the Design diagram component has been improved with object-specific measures, and the previous common measures are not migrated into object-specific measures. Thus, the measures need to be configured again, or manually edit the chart json settings (if needed please ask instructions from QPR CustomerCare).<br />
</div><br />
<br />
'''Features:'''<br />
* B-08022: Design diagram supports now BPMN notation, elbow style flows and object-specific measures.<br />
* B-08232: Entire future eventlogs can be [[Create_Predicted_Eventlog|predicted]] based on generative AI models running in Snowflake.<br />
* B-08166: Added expression language function [[Generic_Functions_in_QPR_ProcessAnalyzer#OpenAIChatCompletion|OpenAIChatCompletion]] to answer natural language prompts based on OpenAI ChatGPT API.<br />
* B-08177: Snowflake query performance has been improved by introducing caching of filtered eventlogs using Snowflake tables.<br />
* B-08196: Conditional formatting rules can be defined for [[QPR_ProcessAnalyzer_Table#Textual_equal_rules_for_background_color|textual and boolean values]].<br />
* B-08213: Big data chart expressions event type selections to be multi-select where applicable.<br />
* B-08205: Expression language API is available for storing [[Storing_Secrets_for_Scripts|secrets]] for scripts.<br />
* B-07780: Chart [[QPR_ProcessAnalyzer_Chart#Variable_mappings|variable mappings]] has been removed - use the [[Chart_Linked_Settings|linked settings]] instead. Dashboards using variable mappings are automatically converted to use linked settings.<br />
* B-08117: Added ToSqlDataFrame function to convert in-memory dataframe into SQL dataframes.<br />
* B-08174: Only non-default parameters values are written to the operation log.<br />
* B-08200: Timestamps in System reports are shown in user workstation local time.<br />
* B-08171: Dashboard id has been added to queries, to track from which dashboard queries are originating.<br />
* B-07144: Remove legacy User permissions report (analysis number 11) and Filters report (analysis number 30) in SQL scripts (see note above).<br />
* B-08193: Added retry mechanism to QPR ScriptLauncher to recover if connection to server breaks.<br />
* B-08202: Updated copyright for year 2024.<br />
* B-08199: Frontend components have been updated.<br />
* B-08203: Backend components have been updated.<br />
* B-08209: Translations updated for release 2024.2.<br />
<br />
'''Fixed issues:'''<br />
* D-13972: Some measures/dimensions/columns in Big data chart didn't show the expressions level filtering.<br />
* D-14015: Fixed business calendar incorrect calculation when business period covered entire day.<br />
* D-14014: Fixed issue where Snowflake business calendar could not have end time as 00:00.<br />
* D-13962: System variable values were interpreted incorrectly when used in linked settings.<br />
* D-13971: HiddenInNavigation and SortOrder variables didn't work in navigation menu dashboards list.<br />
* D-13959: Removed possibility to add datatable columns with the legacy "any" data type.<br />
* D-13991: Improved drop-down selector component to handle empty strings as variable values.<br />
* D-13965: Datatable column name length was validated incorrectly which may have caused error in saving with too long column names.<br />
* D-13958: Project names showed unnecessary html escaping in the "Move to" menu.<br />
* D-13964: Model attributes and notifications dialogs gave error when trying to use dashboard tags.<br />
* D-13960: Added missing translations for list of permission list and 12-hour clock format.<br />
* D-13966: Fixed issue were root causes chart tooltip sometimes didn't disappear.<br />
* D-13969: Datatable column schema export sometimes showed empty for the key column.<br />
* D-13862: Session token was not accepted when url path capitalization is different.<br />
* D-13942: Datatable could not be dimensioned if it has column named "CaseId".<br />
* D-13980: Business calendar dialog crashed when tried to open it for a model without access.<br />
* D-13983: Notifications dialog didn't validate situation when same name was used in a measure and dimension.<br />
* D-13981: Dashboard import set incorrect model id to dashboard if there was no access to any model.<br />
* D-11276: Translations were missing for 12-hour clock dates (AM and PM) in dashboards.<br />
* D-13977: Multi-select dropdown lists showed some special characters incorrectly.<br />
* D-13945: Syncfusion toast message didn't work when text contains ${[]}.<br />
* D-13930: Pivot table throws javascript error when certain clicks.<br />
* D-13273: Duplicate datatable row count didn't shown correctly.<br />
* D-13994: There was an error in the in-memory chart with some flow related measures about duplicate variable names when same measure was defined twice.<br />
* D-13985: Models list dots menu had texts misaligned in narrow screens.<br />
* D-13995: In Workspace, wrong datatable was selected after duplication when non-default sorting was applied.<br />
* D-13997: Workspace tables column filtering search caused JavaScript errors.<br />
* D-13978: In table Excel export, the last row representing other items appeared incorrectly for in-memory chart.<br />
* D-14007: In System reports, model related selections are hidden from the Analyzed objects lists.<br />
* D-14005: In big data chart, changing to custom expression caused crash with some expressions having case/event attribute.<br />
* D-14003: When dimensioning was not used, pivot table values were incorrectly rounded in the server side.<br />
* D-14004: Removed empty filters from queries to optimize them.<br />
* D-13988: Fixed issue where data grid context menu rendered initially as too high.<br />
* D-13979: BPMN model editor element settings use now Open Sans font.<br />
* D-14013: Fixed incorrect expression "Duration between first and last occurrence" in big data chart event types.<br />
* D-13984: Fixed the error of refusing to run the JavaScript URL.<br />
* D-14031: ThrownObject property was not included to http error response when error came from the script.<br />
<br />
== QPR ProcessAnalyzer 2024.1 (build 4784) (released 2024-01-10) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue fixed in QPR ProcessAnalyzer 2024.2: In Big data chart, some measures, dimensions and columns have the filtering option missing. The issue concerns for example Duration between events, Path starting/until between specific events, and Cases where event occurs before other selections. Workaround is to set the filter in the chart json settings: the filter can be configured to another expression and copied to the correct expression.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
QPR ProcessAnalyzer Server and QPR ScriptLauncher are now using .Net 8 (previous was .Net 6). When updating to this release, install the .Net 8 Runtime ([[Updating_QPR_ProcessAnalyzer_Server|see more]]). The .Net 6 doesn't need to be uninstalled immediately because .Net 6 and .Net 8 work side-by-side, but due to security reasons, the unused .Net 6 should eventually be uninstalled.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In this release, all filters that don't contain any filter rules, are removed. These are legacy filters which have not been visible in the UI.<br />
</div><br />
<br />
'''Features:'''<br />
* B-08019: New component [[Design_Diagram|Design Diagram]] for showing user-created diagrams in dashboards where to visualize process mining metrics.<br />
* B-08087: Generic [[Dropdown_List_Selector|dropdown list selector]] works with Snowflake models allowing to add selection lists for any values.<br />
* B-08163: Linked settings support for binding to [[Chart_Linked_Settings#Binding_to_case_attribute_filters_with_attribute_name_and_attribute_values|case attribute filter values without defining case attribute name]].<br />
* B-08170: Snowflake model filters can be [[Filtering_in_QPR_ProcessAnalyzer#Filter_actions|saved as new models]] which can be used to create snapshots of part of models.<br />
* B-08093: Multiple dashboards can be exported to same file, and model can be set for imported dashboards.<br />
* B-08161: Added [[Datatable_in_Expression_Language#Modify|Modify]] function to change datatable properties and improved [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#CreateDatatable|CreateDatatable]] function for creating datatables.<br />
* B-08122: Added new system report to list dashboards.<br />
* B-08173: Removed legacy filters that didn't have any filter rules.<br />
* B-07961: In OperationLog, changed parameters to json format and added request id.<br />
* B-08069: Added DashboardId property to [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog]] in expression language.<br />
* B-08139: Added [[Datatable_in_Expression_Language#UpdateRows|UpdateRows]] function to update existing rows in datatables with similar logic than SQL update.<br />
* B-08115: Added [[Datatable_in_Expression_Language#DeleteRows|DeleteRows]] function to delete rows in datatables with similar logic than SQL delete.<br />
* B-08149: QPR ProcessAnalyzer has been updated to .Net 8.<br />
* B-08054: Changed Scripts property in generic context to return all scripts, instead of legacy system level scripts.<br />
* B-08138: Changed Synchronize function to remove all columns when no Snowflake table exists.<br />
* B-07689: For datatables, [[Datatable_in_Expression_Language#ForeignKeys|foreign keys]] to other datatables can be defined using expression language.<br />
* B-08176: Translation updates for release 2024.1.<br />
* B-08175: Workspace should show timestamps in user's local time.<br />
<br />
'''Fixed issues:'''<br />
* D-13913: Datatable properties dialog incorrectly showed linked models from other projects.<br />
* D-13916: Chart filter could not be defined for some expressions in Big data chart.<br />
* D-13933: Navigation menu selected item wasn't highlighted when used Snowflake models.<br />
* D-13906: In Conformance Analysis, deviating flows were not translated.<br />
* D-13907: Improved translation related to datatable properties dialog "Used by models" field.<br />
* D-13904: There was an unclear error message in Snowflake, as exception code 1 was returned without AttributeName and ModelName properties when non-existing attribute was in filter.<br />
* D-13911: Fixed small glitches in the opening and closing of drop-down lists.<br />
* D-13918: Datatable could be configured incorrectly to use table for other datatable.<br />
* D-13932: Duplicating datatable with custom table in datasource losed all data.<br />
* D-11002: Removed legacy in-memory prediction preset.<br />
* D-13912: Added check that array cannot be stored to dashboard Content property.<br />
* D-13936: Query designer default query didn't work with Snowflake models.<br />
* D-13938: There was an incorrect logging with some operations related to ScriptLauncher.<br />
* D-13923: Snowflake expressions didn't work with Where function in root referring to case attribute.<br />
* D-13939: ApplyFilter function gave null reference error for non-existing attribute name.<br />
* D-13931: There were issues with AllowExternalDatasources and EnableFullFunctionality settings.<br />
<br />
== QPR ProcessAnalyzer 2023.7 (build 4326) (released 2023-11-28) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Limitation for the maximum amount of data (B-07636) causes a behavior change in in-memory charts that have the Maximum rows settings empty and have the sorting defined. In certain cases, the order in which measures are evaluated changes (due to an internal performance optimization). If there are custom expressions that define variables, the variables may not be available in other measures anymore. As a resolution, either redefine the variables in those measure expressions or add those measures secondarily to the sorting.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Default query timeout of 30 minutes has been added for --#ImportOdbcQuery, --#ImportSqlQuery and --#ImportOleDbQuery commands. If a query run is taking longer than the timeout, the query is stopped. The timeout can be adjusted using the '''QueryExecutionTimeout''' parameter. Previously, there has been no timeout, so queries that take more than 30 minutes require configuring a longer timeout.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Incorrectly configured [[Chart_Linked_Settings|linked settings]] in charts (available in the ''Advanced'' tab) give now an error message, if they are referring to non-existing measures, dimensions or columns. Previously, incorrect linked settings were ignored. To fix the error message, remove the incorrect linked settings.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07511: Datatables have a [[Datatable_Properties_Dialog|dialog]] to view datatable properties, write description, set the Snowflake source table, add/modify/delete columns, and set the datatable key.<br />
* B-08150: Added setting [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|Apply chart filters first]] to determine whether chart filter rules or dashboard filter rules are applied first when chart queries are filtered.<br />
* B-08091: When filtering charts in Snowflake, case attribute filter is created instead of case id filter.<br />
* B-08091: [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|New setting]] to define whether cases or events are filtered by default.<br />
* B-08091: New preset "Looping paths" to detect whether there are repeating patterns of events.<br />
* B-08091: Duration between events calculation ignores negative durations in Snowflake.<br />
* B-08091: Chart loading animation has been renewed.<br />
* B-07636: To prevent dashboards from jamming when querying too much data, added [[QPR_ProcessAnalyzer_Chart#Available_Visualizations|limitations]] to the amount of data that charts can visualize. Note that the limitation concerns the aggregated data that is visualized, not the source event log data.<br />
* B-08017: [[Dashboard_in_Expression_Language|Dashboards API]] has been added to expression language, allowing to create, modify and delete dashboards in scripts.<br />
* B-08056: Following properties have been added to [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#User.2FGroup|user objects]] in expression language: IsLocked, LastLockedDate, LastLoginDate.<br />
* B-08053: [[Navigation_Menu#System_Reports|User rights report]] has been refactored to use [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property in the expression language. The change also simplifies the report as now it only shows the direct role assignments that are visible in the [[Manage_Users_and_Groups|User Management]].<br />
* B-08151: For Snowflake expressions support for following [[SQL_Expressions#Window_functions|windowing functions]]: sum, average, median, min, and max.<br />
* B-08050: When a model is created, the default filter is not created anymore (this is a refactoring that doesn't have any impact on user interface).<br />
* B-08123: Translation updates for 2023.7.<br />
* B-08092: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13876: In CreateSnowflakeConnection function, ProjectId parameter is optional when OdbcConnectionStringKey is not specified.<br />
* D-13898: Snowflake: Exclude case attribute filter didn't work when there was null values and was selecting at least two values.<br />
* D-13890: Fixed XES file import to work.<br />
* D-13894: Business calendar based duration calculation was incorrect in some durations that spanned to several weeks (for Snowflake and in-memory models).<br />
* D-13899: Using broken OdbcConnectionString in a datatable prevented the datatable from being deleted.<br />
* D-13883: Script run stucked after running a script with error that uses client-side ODBC import.<br />
* D-13879: SqlExpressionValue filter when excluding events didn't work with filter rule root expression only.<br />
* D-13896: Adding or removing columns to datatable didn't change the LastModifiedDate.<br />
* D-13882: User details weren't written to operation log when creating or modifying users.<br />
* D-13771: User rights system report didn't give error when changing columns.<br />
* D-13893: Some event filtering caused null pointer error when primary key had been defined.<br />
* D-13873: Fixed pivot table visual issues after component update.<br />
* D-13900: When adding, renaming or removing columns for Snowflake table fails, operation is now rolled back without any changes.<br />
* D-13866: Querying GET api/uielements was quite slow right after server start.<br />
* D-13864: Combinations of translatable and hardcoded strings didn't get translated in UI.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.6 (build 3933) (released 2023-10-24) ==<br />
<br />
'''Features:'''<br />
* B-08055: Error message for locked account has been replaced with generic error message, so that username enumeration is not possible.<br />
<br />
'''Fixed issues:'''<br />
* D-13884: Attributes dialog crashed with some older model configurations.<br />
* D-13843: In charts, selected case and event attributes switched away when attribute data type was ShortString.<br />
* D-13877: Some Snowflake expressions gave error "exceeds maximum length limit of 255 characters" when selecting lot of items.<br />
* D-13878: Snowflake expression filters for case attribute values didn't accept other than string type of case attributes.<br />
* D-13871: Some statistical calculations with percentages didn't work with Last Row Aggregates Over-limit Rows setting.<br />
* D-13875: Using some case level filters in a model without cases datatable didn't work.<br />
* D-13861: Dashboard opens are now logged to the Task log (i.e., calling GET /api/dashboards/{dashboardid}).<br />
* D-13870: Workspace projects hierarchy focused project showed light grey background making the project name not readable.<br />
* D-13867: When starting datatable refresh and going to other tab, went back to Datatables tab when query completed.<br />
* D-13853: If chart Custom Layout settings had extra series defined, chart may have crashed.<br />
* D-13869: Export as CSV button didn't work in the datatable contents dialog when dialog was still loading.<br />
* D-13872: Main progress spinner had unnecessary small scrollbar on top right.<br />
* D-13863: In the REST API method GET /api/users, password field (that has always been null) has been removed.<br />
<br />
== QPR ProcessAnalyzer 2023.6 (build 3847) (released 2023-10-17) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is removed in this release. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
'''Features:'''<br />
* B-07992: Added 10 new presets including Queue analysis, Four eyes principle, Self-looping events, and Path until selected event. There are also presets for Individual Cases Flow and Range of event type occurrences which use Gantt chart.<br />
* B-08011: Added following date related operations for Snowflake: Day of year, Day of month, Day of week, Week of year, Half-year only, Quarter only, Month only, Hours only, Minutes only, Seconds only, and Milliseconds only. These are available when calculating with date type of data.<br />
* B-08016: [[QPR_ProcessAnalyzer_Table#Table_actions|Table actions to set variables]] can also be opened to a new browser tab. Also improved user interface for table actions.<br />
* B-08018: For Snowflake expressions, added Flows aggregations FromEventType and ToEventType to get starting/ending event type, and FlowOccurrences aggregations FromEvent and ToEvent to get starting/ending event.<br />
* B-08001: Added [[Generic_Functions_in_QPR_ProcessAnalyzer#CallStoredProcedure|CallStoredProcedure]] function to call Snowflake stored procedures. This allows to start ETL transformation in Snowflake orchestrated by QPR ProcessAnalyzer script.<br />
* B-08013: Added [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property to expression language to replace the legacy UserPermissions analysis (11).<br />
* B-07976: Snowflake [[Filtering_in_QPR_ProcessAnalyzer_Queries#Expression|expression based filter rules]] support additional expression columns allowing more Big data chart expressions to be filterable.<br />
* B-08015: Big data chart doesn't anymore support calculation in SQL Server (using local datatables).<br />
* B-06270: Improved error messages and made them translatable by taking into use exception codes provided by server.<br />
* B-08021: Added possibility to store [[Diagram_in_Expression_Language|designed diagrams]] for models and expression language API for reading and modifying diagrams.<br />
* B-08037: Dropped following unused tables database: PA_IDEA, PA_IDEA_VOTE, PA_REPORT, PA_REPORT_SETTING, PA_SESSION_SERVICE, PA_VIEW_FILTER_RULE, PA_VIEW_FILTER_RULE_PARAMETER.<br />
* B-08052: Language translations have been updated to 2023.6.<br />
* B-08051: Frontend side components have been updated.<br />
* B-08034: Backend side components have been updated.<br />
<br />
'''Fixed issues:'''<br />
* D-13830: Object counts indicator in header showed incorrect counts when there was disabled filter rules in Snowflake models.<br />
* D-13833: In-memory charts didn't work with boolean type of dimensions when filtering with the false value.<br />
* D-13858: Target value measures didn't update chart when controlled using an on-screen setting.<br />
* D-13827: Calculated attributes data type was incorrectly set as Any by the Attributes dialog.<br />
* D-13849: Multiselect list search didn't allow spaces.<br />
* D-13829: Multiselect dropdown lists height jumped couple of pixels when selecting values.<br />
* D-13835: Deselecting a selected data point didn't remove chart filter rule.<br />
* D-13702: Improved Snowflake query performance in situations when there are lot of filter rules (by decreasing number of CTE's).<br />
* D-13819: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13820: Fixed incorrect manifest.json file to avoid "not found" errors when fetching web site icon.<br />
* D-13865: Break, continue, and return statements didn't work properly when called from inside a catch block.<br />
* D-13795: There was a Python error in clustering analysis with Snowflake model.<br />
* D-13823: Some tooltips in Workspace project hierarchy didn't work and caused a JavaScript error.<br />
* D-13824: BPMN editor align context menu layout looked strange.<br />
* D-13813: QPR logo button in the top left was misaligned in Firefox.<br />
* D-13797: Snowflake query may have given following error when using sampling: ambiguous column name '_EventType_NotNull_1'.<br />
* D-13774: TakeSample function with certain columns caused SQL compilation error: ambiguous column name 'Case Name'.<br />
* D-13782: Snowflake: Aggregating from variations didn't work when using sampling.<br />
* D-13836: Some tooltips had a strange two-colored background.<br />
* D-13834: Removed Model statistics column from clustering and root causes analysis.<br />
* D-13860: Removed filter button from the custom expressions in Task log analyzed objects.<br />
* D-13838: Removed Split data by filtering column from clustering analysis.<br />
* D-13832: Script and model status updates incorrectly sent next update when previous was still pending.<br />
* D-13839: Charts reset zoom button font size was too small.<br />
* D-13817: Importing data to Snowflake datatable with Append=0 doesn't now drop the underlying Snowflake table.<br />
* D-13825: Some models could not have been deleted from recycle bin.<br />
* D-13852: Recycle bin Projects and Models tab didn't show correct content when Recycle bin only contained either models or projects.<br />
* D-13841: In-memory chart Data type selection type has been corrected to string.<br />
* D-13842: Second time and Third time selections has been hidden in in-memory chart measures.<br />
* D-13850: In Chrome, there were console errors related in incorrect text field autocomplete type and text field without form.<br />
* D-13847: Improved browser side performance by removing unnecessary operations.<br />
* D-13859: Chart without dimensions showed an unnecessary Remove dimension button.<br />
* D-12598: When script is stopped in server, ScriptLauncher could still incorrectly continue to import data.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.5 (build 3334) (released 2023-09-07) ==<br />
<br />
'''Fixed issues:'''<br />
* D-13826: Measures or dimensions with case or event attribute and value selections incorrectly removed calculated attributes when dashboard was opened or chart settings were changed.<br />
* D-13821: Font size of some Highcharts tooltips was too small. Issue appeared when there were tooltips mappings in measures or dimensions.<br />
* D-13810: Simplified help links: now all Help buttons go to the QPR ProcessAnalyzer wiki main page.<br />
* D-13822: Snowflake clustering analysis showed empty strings and nulls as case attribute values in an unclear way as just nothing.<br />
<br />
== QPR ProcessAnalyzer 2023.5 (build 3304) (released 2023-09-05) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In Big Data Chart, the '''Case conformance''' measure and dimension has changed in a way that now it provides boolean values (true/false) instead of integer values (1/0). If [[Measure,_Dimension_and_Column_Settings#Other_settings|colorMappings]] are used for this measure or dimension to set specific colors to visualize conformant and nonconformant cases, the mapped values need to be changed as follows: '''1''' -> '''true''' and '''0''' -> '''false'''. Without the change, the mapped colors are not effective.<br />
<br />
Exmaple: Old configuration:<br />
<pre><br />
"colorMappings": {<br />
"1": "#36d475ff",<br />
"0": "#f5403bff"<br />
}<br />
</pre><br />
New configuration:<br />
<pre><br />
"colorMappings": {<br />
"true": "#36d475ff",<br />
"false": "#f5403bff"<br />
}<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is deprecated. Big data chart has allowed to process data both in Snowflake and SQL Server. Now the support for SQL Server is deprecated and the Big data chart will only support calculation in Snowflake. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). The OperationLog analysis is replaced by the [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog function]] and the Infcluencers analysis is replaced by the [[FindRootCauses_Function|FindRootCauses function]].<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [12, 14, 15, 16, 29];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
By default, Snowflake ODBC driver generates quite much logging to files which might unnecessarily fill up the disk space. It's recommended to set the LogLevel parameter to value 0. The path where the logs are created can be seen in Windows registry (key LogPath). More information about configuring Snowflake ODBC parameters: https://docs.snowflake.com/en/developer-guide/odbc/odbc-parameters.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07971: Machine learning based [[Clustering_Analysis|Clustering analysis]] can be run in Snowflake.<br />
* B-07989: In dashboard designer the stacking order of charts can be changed with buttons [[QPR_ProcessAnalyzer_Dashboard_Designer#Viewing_and_Editing_Dashboards|Bring to front, Send to back, Bring forward and Send backward]].<br />
* B-07977: For [[Sankey_Chart|sankey diagram]], added Start level and End level mappings to define custom start and end level for the sankey flows. Implemented also color mappings to define specific colors for specific values.<br />
* B-08010: To improve performance, charts are loaded and updated only when they are visible in the dashboard.<br />
* B-07975: Added following [[SQL_Expressions#Date_functions|date related functions]] to Snowflake: DayOfYear, DayOfWeek, WeekOfYear, Quarter.<br />
* B-07908: When [[QPR_ProcessAnalyzer_Project_Workspace#Duplicating_Model|model is duplicated]], also filters in the model are also duplicated.<br />
* B-07904: Filters and models API for expression language has been completed.<br />
* B-07991: In [[Filter_Selectors|case and event type filter selectors]], threshold whether the dropdown list or search dialog is shown can be defined using the ''Maximum Rows'' setting. Also the search dialog filters search results by other filter rules in the dashboard.<br />
* B-07999: Filters report has been changed to use the [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|expression language API for filters]].<br />
* B-07540: Added [[QPR_ProcessAnalyzer_Expressions#Throwing_objects|throw statement]] to expression language.<br />
* B-07813: UI components are updated. There are small visual improvements, such as in flowchart flows are routed a bit differently and in charts the hidden series is shown as strike-through in the legend.<br />
* B-07963: Following legacy analysis types have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29) (see more information in the note above).<br />
<br />
'''Fixed issues:'''<br />
* D-13777: Filters could not be created in charts when "Update Filter During Selection" setting was disabled.<br />
* D-13767: Automation per Event Types preset in in-memory incorrectly showed only one event type.<br />
* D-13756: Changing background color in KPI card didn't have any effect.<br />
* D-13812: "Exclude events" was incorrectly translated to "Exclure les cas" in French.<br />
* D-13815: Dashboard designer background grid was not visible in entire area in edit mode. Improved also the grid to match to snapping in move and resize.<br />
* D-13674: Business calendar dialog layout was incorrect when a model with a long name was selected to copy holidays.<br />
* D-13811: Table actions link to a new window didn't go to dashboard if there were other parameters in the link.<br />
* D-13601: Fixed issue where some presets may have given error when attribute value selection and the automatically selected attribute conflicted by the data type.<br />
* D-13753: While Snowflake model was selected, in Filters and User Rights reports the Columns list could not be opened.<br />
* D-13720: Now table column filter and sorting are preserved when resizing or zooming page.<br />
* D-13785: In tables increased number of rows to 20000 that are inspected to get available items shown in Excel-style column filter.<br />
* D-13759: Some statistical calculations had bad performance with large number of rows.<br />
* D-13787: Conformance statistics component didn't have scrollbars when text didn't fit to the visible area.<br />
* D-13788: In-memory "Nonconformance reason" selection caused error when two of them was selected in the same chart.<br />
* D-13783: When Analyzed objects was Generic analysis, column selection incorrectly caused "Analysis has not been selected" error.<br />
* D-13776: When measure name contained quotation mark, notification preview didn't work.<br />
* D-13747: Filtering with integer type of case id with case attribute value filter caused error in Snowflake.<br />
* D-13791: In Firefox, model selection in chart settings didn't show models in the first open.<br />
* D-11984: Recycle bin buttons didn't fit to the screen when screen width was small.<br />
* D-13780: Using CaseId case attribute in clustering analysis did not work with Snowflake 106 cases standard model.<br />
* D-13781: Clustering analysis produced Python error with a certain simple Snowflake model.<br />
* D-13730: Snowflake: Case attribute filtering didn't work when there are cases without row in cases table.<br />
* D-13803: There was chart configuration validation error in browser console when measures were moved into dimensions in Big data chart.<br />
* D-13758: There was performance issue with the Recent tasks system preset.<br />
* D-13793: Snowflake clustering failed when cluster count is larger than case count.<br />
* D-13763: SQL expression based filter rule with Where function to filter events didn't filter anything in Snowflake.<br />
* D-13804: Added missing Millisecond function to Snowflake.<br />
* D-13772: Expression EventLog.Cases.Events caused error "Value cannot be null".<br />
* D-13755: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13739: When switching between System reports there was error: "Uncaught Error: 2nd dimension not found. at y.getExpressionConfiguration".<br />
* D-12109: Sometimes flowcharts showed message "Error in querying event type measures. Input string was not in a correct format".<br />
* D-12473: Cost Savings by Automation preset gave sometimes error "Unable to cast object of type 'System.Double' to type 'System.String'".<br />
* D-13750: Snowflake model didn't work with the Case Duration vs. Manual Activities preset.<br />
* D-13657: There was error converting data type nvarchar to bigint.<br />
* D-13796: Some Snowflake operations didn't work with zero rows and columns.<br />
* D-12494: Now when chart size changes, the table column filters and sorting are preserved.<br />
* D-13736: In Performance benchmarking dialog, the Export result button exported wrong benchmark performance analysis result.<br />
* D-13609: Improved conformance analysis related filter names.<br />
* D-13594: Recycle bin buttons were not visible when opening recycle bin in a narrow screen.<br />
* D-13226: Tooltips in the model properties dialog are now translated.<br />
* D-12569: Table incorrectly showed ellipsis for narrow boolean type of columns showing checkboxes.<br />
* D-13391: Emptying date or datetime picker value was not registered and it didn't trigger functionality.<br />
* D-12621: Value search dialog didn't work with values containing backslashes.<br />
* D-13796: Some Snowflake operation didn't work with zero rows/columns.<br />
<br />
== QPR ProcessAnalyzer 2023.4 (build 2628) (released 2023-06-14) ==<br />
<br />
'''Features:'''<br />
* B-07767: Added [[Gantt_Chart|Gantt chart]] to visualize timeline of cases and events divided into swimlanes.<br />
* B-06383: Added [[Sankey_Chart|Sankey chart]] to visualize flow from one set of values to another.<br />
* B-07941: Implemented many more presets running in Snowflake models for compliance and operational excellence use cases. There are also presets for the path analysis and process bottlenecks identification.<br />
* B-07864: Snowflake conformance analysis shows now [[Conformance_Analysis#Top_Deviations_(in-memory)_/_Deviating_Flows_(Snowflake)|reasons for conformance deviations]], such as which event occurrences deviated from the design model.<br />
* B-07909: Snowflake conformance analysis visualizes [[Conformance_Analysis#Undesired_Events_(Snowflake)|undesired event types]] in table and flowchart.<br />
* B-07823: Flowchart Bottlenecks preset has been changed to show bottlenecks for event types. Also renewed the [[QPR_ProcessAnalyzer_Logs#Task_Log|Tasks reports]] to use expression language based interface.<br />
* B-07891: User interface has been [[Languages_and_Localization|translated into Portuguese]].<br />
* B-07873: Improved [[QPR_ProcessAnalyzer_Pivot_Table|pivot table]] visual layout to highlight totals and aggregated rows. Also the row titles are now visible in the top left.<br />
* B-07905: Added [[SQL_Expressions#Rank_functions|Rank related functions]] to Snowflake for writing more versatile custom KPI's, e.g., FirstValue, LastValue, NthValue, Lead and Lag.<br />
* B-07912: Added more SQL expression [[SQL_Expressions#Array_functions|array functions ArrayToString and ArrayOverlap]] to Snowflake.<br />
* B-06449: Added SQL expression functions ToTimestamp and TryToTimestamp for parsing timestamps from strings using provided format.<br />
* B-07959: Added new functions Base64Encode and Base64Decode to help using basic HTTP authentication when calling web services.<br />
* B-07206: SQL expressions support data [[SqlDataFrame_in_Expression_Language#WithClusterColumn|clustering]] which is an unsupervised machine learning algorithm to group data based on similarities.<br />
* B-07848: Data can be extracted from SAP using the encrypted [[Importing_Data_from_SAP#SNC_encrypted_connection|SNC connection]].<br />
* B-07903: Added expression language API to create and modify filters and models.<br />
* B-03103: [[QPR_ProcessAnalyzer_Logs#Task_Log|Task log]] (operation log) can be accessed in expression language.<br />
* B-07872: List aggregation with Distinct=true orders now items by their value.<br />
* B-07940: Removed "Count" aggregation from textual values in Big data chart (you can use the Case count, Event count, etc. selection instead).<br />
* B-07757: Backend support for datatables linking to user-definable Snowflake database, schema and table.<br />
* B-07825: Improved error message when trying to use non-existing attributes in Snowflake queries.<br />
* B-03101: To expression language, added try-catch-finally statement to handle thrown exceptions.<br />
* B-07861: Removed available and total virtual memory information from User settings dialog.<br />
* B-07902: Optimized sequences of joins in Snowflake queries to improve performance.<br />
* B-07837: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13709: If image width-to-height ratio was lower than container's ratio, image was incorrectly stretched to fit the container.<br />
* D-13660: Disabling filter rules didn't work in Snowflake models.<br />
* D-13526: Passing dataframes from SQL scripts to expression scripts didn't work.<br />
* D-13661: Snowflake conformance analysis crashed when there was no access to conformance related Snowflake UDF's.<br />
* D-13693: Resolved major Snowflake conformance analysis performance issues in the BPMN model handling.<br />
* D-13716: Snowflake root causes analysis incorrectly bypassed Snowflake cache.<br />
* D-13707: In SQL Scripting, the datatable analysis (number 18) didn't always copy the data table contents to the target table correctly.<br />
* D-13653: Big data flowchart Root causes preset showed incorrect legend.<br />
* D-13626: Flowchart froze when converting into big data flowchart and vice versa by modifying chart json settings.<br />
* D-13656: Root causes for attribute gave error "Failed to compare two elements in the array" in some situations.<br />
* D-11563: Pivot table had a minimum height of 300px, which caused bottom part of it to be out of view.<br />
* D-13704: In CSV file import, parsing now allows spaces between column separator and text quotation mark.<br />
* D-13598: Chart gave unclear error message when events datatable was not defined.<br />
* D-13655: Improved error messages for BPMN editor and conformance statistics.<br />
* D-13528: Error message for certain erroneous SQL expressions was unclear.<br />
* D-13677: "Flow occurrences with specific case attribute value" selection didn't work for in-memory chart.<br />
* D-13663: Pivot table border line was slightly broken in the header area.<br />
* D-13608: There was incorrect alignment of items in the table paging controls.<br />
* D-13703: Importing CSV file with some special characters to Snowflake failed (due to incorrect escaping in Snowflake staging files).<br />
* D-13708: Duplicating datatable using user defined table, removed data the source table.<br />
* D-13717: Dependency wheel crashed when there were zero weights and showing data labels.<br />
* D-13348: There was an unclear error message when Snowflake query had a certain incorrect expression.<br />
* D-13732: Pivot table Excel export contained headers formatted incorrectly.<br />
* D-13729: There was a JavaScript error when limited user tried to access business calendar.<br />
* D-13662: Percentile function didn't always work with timespan types.<br />
* D-13646: Using incorrectly configured model without cases datatable caused null reference error.<br />
* D-13629: When tried to use chart with a non-existing model, there is now a proper translated error message.<br />
<br />
== QPR ProcessAnalyzer 2023.3 (build 1990) (released 2023-05-03) ==<br />
<br />
'''Features:'''<br />
* B-07818: [[Conformance_Analysis|Conformance analysis]] is supported in Snowflake with following dashboard components: Big data chart, BPMN editor, Conformance statistics, and Design model selector.<br />
* B-07833: [[Root_Causes#Root_causes_in_flowchart|Root causes analysis for flowchart]] is available for Snowflake showing how the event and flow occurrences explain selected phenomena.<br />
* B-07786: Big data chart has more [[Big_Data_Chart#Measure_aggregations|measure aggregations]], such as median, percentile, standard deviation and variance. Also for textual items, unique values can be listed.<br />
* B-07795: [[QPR_ProcessAnalyzer_Table#Conditional_formatting|Conditional formatting]] supports also columns with non-numerical contents.<br />
* B-07830: [[Big_Data_Chart#Measure_aggregations|None and Any aggregations]] for Snowflake and user-friendly formatting for conformance violations.<br />
* B-06527: Error messages in [[Importing_Data_to_Datatable_from_CSV_File|CSV file import]] show also the column number to help working with CSV files with lot of columns.<br />
* B-07747: In-memory conformance checking accepts design models with multiple tasks having same name (same is followed by the Snowflake implementation).<br />
* B-07659: In-memory flowchart preset Case Conformance to visualize conformance checking violations.<br />
* B-07571: Added function IsConformant to backend to check whether cases are conformant.<br />
* B-07863: Added function ConformanceViolationsFlows to backend to return nonconformance reasons for violating cases.<br />
* B-07844: Support for "array" aggregation to return aggregated items as array.<br />
* B-07856: Support for creating and accessing arrays and objects in SQL expressions.<br />
* B-07860: Array handling functions and Tasks property for DesignModel entity.<br />
* B-07847: Added throttling for QPR ScriptLauncher client-side imports to limit memory usage.<br />
* B-07811: Snowflake query optimization to omit columns that are not used by the query.<br />
<br />
'''Fixed issues:'''<br />
* D-13632: Going from variations to event types led to very poor performance with certain models.<br />
* D-13628: Statistical calculations were incorrectly not applied in chart CSV export.<br />
* D-13575: SQL script may have given error "Operand type clash: nvarchar(max) was incompatible with sql_variant".<br />
* D-13597: UI supports now datatable column type "ShortString" (previously datatable contents preview and CSV import didn't work).<br />
* D-13536: Using business calendar sometimes gave error "System.InvalidOperationException: Collection was modified".<br />
* D-13477: Chart types without y-axis mapping caused an error when series mapping was used.<br />
* D-13453: _model variable was not available for Snowflake expression filter rules.<br />
* D-13527: Checkbox height didn't increase when long label needed to span to multiple lines.<br />
* D-13363: Snowflake query with EvaluateAfterAggregations and IsHidden failed when dimensioning by case id column.<br />
* D-13383: Snowflake query gave error "Invalid column name 'FromCase Name'".<br />
* D-13523: Request id was incorrectly shown as zeros in error messages.<br />
* D-13541: In CSV import, error message for maximum number of columns exceeded is improved (maximum is 300 column for SQL Server).<br />
* D-13583: Objects count in header didn't work for empty Snowflake model.<br />
* D-13553: Larger pacm files can now be imported, as there isn't error "Request body too large. The max request body size is 30000000 bytes".<br />
* D-13306: Stack overflow error was given when using SqlDataFrames.<br />
* D-13487: When Flows root and there was filter in Values expression, some flows were lost.<br />
* D-13540: SqlDataFrame query with 300 columns failed to error "WithExpressionColumn: No name given for the new column".<br />
* D-13429: Ordering in List aggregation couldn't find columns in dataframe query.<br />
* D-13406: Dataframe query with root FlowOccurrences and get value from cases caused error.<br />
* D-13538: There was incorrect handling of escaping characters in column names used in dimensions.<br />
* D-13633: Fixed ordering in List aggregation with null and empty values.<br />
* D-13636: Query that dimensions by numeric case attribute with AggregateOthers true, caused error.<br />
* D-13589: Creating Snowflake datatable did not connect to Snowflake.<br />
* D-13623: Value expressions without aggregation didn't work with AggregateOthers setting.<br />
* D-13554: In in-memory chart, percentile function might have return both Int64 and Double type of objects which cannot be sorted.<br />
* D-13481: Improved error message when trying to use deleted model.<br />
* D-13621: Dynamic value search dialog had incorrect font in lists.<br />
* D-13610: Some invalid BPMN files crashed BPMN editor.<br />
* D-13614: Checkbox label texts overflowed to right.<br />
* D-13520: Removed excessive parameters from the Query Designer for generic context queries.<br />
* D-12998: QPR icon was incorrectly positioned in header in Safari.<br />
* D-13480: Import to duration data type is removed from Snowflake datatables, and for local datatables duration type maximum size is checked.<br />
* D-13517: In Highcharts-based visualizationsm conditional formatting didn't work for other than the first y-axis mapping.<br />
* D-13529: In some presets containing several on-screen settings, when chart showed in error message, on-screen settings showed invalid selection.<br />
* D-13530: Opening dropdown list caused JavaScript error when the list contents should be empty after it previously contained items.<br />
* D-13486: Removed unreachable error message in CSV import.<br />
* D-13524: Fixed in-memory chart flow occurrences root measures "Event attribute (text)" and "Event attribute (number)" that caused error.<br />
<br />
== QPR ProcessAnalyzer 2023.2 (build 1478) (released 2023-03-22) ==<br />
<br />
'''Features:'''<br />
* B-07755: [[Business_Calendar|Business calendar]] for duration calculation is available for Snowflake models.<br />
* B-07719: In Snowflake dashboards, [[Big_Data_Chart#Using_measure_variables|measures can be assigned to variables]] and use the variables in other measures to create combined measures.<br />
* B-07746: Changed in-memory conformance checking to not show invalid flow violations where starting or ending event type is invalid.<br />
* B-07743: [[PA_Configuration_database_table#General_Settings|Default datasource]] can be configured for datatables created by scripts, allowing to set Snowflake as default.<br />
* B-07740: System memory indicator moved from the header to User settings Version information dialog.<br />
* B-07776: New SQL expressions functions Unicode, Char and Regexp, as a basis for future rule-based process mining.<br />
* B-07741: Backend support for aggregation operations Median, Percentile, Stdev, Stdevp, Var and Varp to Snowflake.<br />
* B-07742: Backend support for aggregation operation to list unique items in Snowflake.<br />
* B-07770: Optimized Snowflake SQL generation by combining consecutive WithColumn function calls into one select.<br />
<br />
'''Fixed issues:'''<br />
* D-13491: QPR ProcessAnalyzer server crashed now and then when sorting was in progress and the query was cancelled.<br />
* D-13380: Dimensioning integers in in-memory core calculation didn't work correctly as 0 and -1 were put to same bucket.<br />
* D-13385: In Workspace Bin, Delete Forever and Restore from Bin buttons were misaligned.<br />
* D-13332: Conformance checking didn't show in violations when there were multiple undesired events in same case.<br />
* D-13405: Images take now always all available space in image component area.<br />
* D-13417: KPI card without title was slightly misaligned vertically.<br />
* D-13438: Clicking selected event type or flow in flowchart didn't cancel the filter selection.<br />
* D-13350: Task log and Script log default filter end date is now empty by default.<br />
* D-13381: Disabled browser auto-complete from flowchart variation stepper and Workspace create/rename object dialog.<br />
* D-13347: Improved performance for in-memory business calendar calculation.<br />
* D-13335: In in-memory chart, filtering didn't work in "Flow occurrences" root "Flow occurrences with specific event attribute value" dimension.<br />
* D-13367: Percentage value wasn't displayed properly with German or Spanish language when event types were shown in object counts indicator.<br />
* D-13451: Exported filter file is now named based on selected filter name.<br />
* D-13378: In Big data chart, prevented error "Unable to aggregate from level RootCauses to level Custom".<br />
* D-13293: DataFrame query with root Flows and IncludeEvents and ExcludeEvents filter rules failed.<br />
* D-13370: Fixed issue where on-screen settings that didn't have any selectable items, showed a strange selection.<br />
* D-13392: Clustering analysis was incorrectly shown when originally in-memory chart was converted into big data chart by changing chart json settings.<br />
* D-12784: Some Snowflake queries incorrectly bypassed Snowflake caching because they used unique object names.<br />
* D-13456: Improved error messages for incorrectly configured on-screen settings.<br />
* D-13445: Conformance violations related translated terms have been fine-tuned for better translations into different languages.<br />
* D-13421: Improved error messages when trying to use model having some column mappings missing.<br />
* D-13485: Snowflake business calendar gave error when calendar contained Sunday.<br />
* D-13218: Windows event viewer incorrectly contained log entries that are not errors.<br />
* D-12634: Multiline text boxes width is set to non-changeable.<br />
* D-13034: Confirmation dialog to delete items permanently has been updated.<br />
* D-13288: In dialogs, the Create button didn't show the disabled state correctly.<br />
* D-13427: When dropdown lists didn't have any selectable items, the "N/A" text appeared and the list incorrectly took more space vertically.<br />
* D-13483: In Workspace, the new items menu was too narrow for Spanish texts.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.1 (build 1449) (released 2023-02-24) ==<br />
<br />
'''Features:'''<br />
* B-07690: System setting [[PA_Configuration_database_table#General_Settings|DatabaseId]] can be defined by administrator to get more simple table names in Snowflake.<br />
* B-07737: In flowchart Bottlenecks preset, originally used flow colors has been recovered.<br />
* B-07748: For Analyzed objects "Conformance checking findings" in charts, terminology has been revised and issue with the case count calculation fixed.<br />
* B-07663: In [[Chart_On-screen_Settings|on-screen settings]], when case/event attribute is selected, related attribute values list are reset.<br />
* B-07570: Backend support for [[Business_Calendar|business calendars]] in Snowflake.<br />
* B-07660: Backend support for conformance checking to show also the last event index and event type in NotCompleted reason.<br />
* B-07610: Memory counter related technical properties have been removed from expression language.<br />
<br />
'''Fixed issues:'''<br />
* D-13349: Opening dashboard containing Root causes preset with default settings jammed the system by generating lot of calculations (for more information, see previous release notes).<br />
* D-13277: Stacked charts with date type of data as series did incorrectly show gaps in columns/bars.<br />
* D-13270: Flowchart conditional formatting didn't work with duration multi-unit format.<br />
* D-13358: Calculation results caching works also across different user sessions.<br />
* D-13250: Dashboard with two charts connected with linked settings using variables ended up to to a never ending loop.<br />
* D-13230: SAP import did not automatically create columns to use the correct column types.<br />
* D-12857: Deeply recursive functions caused a crash without any trace.<br />
* D-12994: In Workspace, some buttons were not clickable due to breadcrumb covering them.<br />
* D-13249: In Workspace, there was incorrect error message for duplicate datatable names when there were items with only letter capitalization was different.<br />
* D-13232: In-memory chart Top variations preset is now sorted secondarily by average duration descending.<br />
* D-13300: Setting DashboardFilter variable to empty value didn't have any effect in dashboard but old value was incorrectly used.<br />
* D-12834: Limited the maximum number of dimensions to 20, to avoid too demanding queries for SQL Server.<br />
* D-12917: Changed visual indication of missing items in dropdown lists (it's no longer showing "***").<br />
* D-13111: In Root causes preset, there is now error message when trying to use weighting related columns when weighting isn't in use.<br />
* D-13124: SQLDataFrame query containing filter rule EventTypes aggregating from cases failed.<br />
* D-13207: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed.<br />
* D-13292: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed (rev.2).<br />
* D-12991: Dropdown list texts had some translations missing.<br />
<br />
== QPR ProcessAnalyzer 2023.1 (build 1433) (released 2023-02-07) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release contains a potentially severe issue, where some dashboards completely jam the system by generating lot of calculations. The issue may appear in dashboards that have been created in earlier releases and containing the Root causes preset with default settings. The issue will be fixed by the next release. The issue can be worked around by exporting the affected dashboard, modifying the dashboard file manually and importing the dashboard back. The required modification is to remove line(s) containing <pre>"preset": "RootCauses"</pre> and the comma from the preceding line.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Cases (analysis number: 5), Events (6), and EventTypes (7). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). Note that the legacy analyses removal don't affect the dashboarding functionality.<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [5, 6, 7];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2023.1, the '''.NET Desktop Runtime''' is not needed anymore for QPR ProcessAnalyzer Server, so it can be uninstalled. Also for QPR ScriptLauncher, ''.NET Desktop Runtime'' is not needed, but instead install the '''.NET Runtime''' (which is more lightweight). ''.NET Desktop Runtime'' contains the ''.NET Runtime'', so the actions are not mandatory when updating to QPR ProcessAnalyzer 2023.1.<br />
</div><br />
<br />
'''Features:'''<br />
* B-06997: Expression-based filter rules for Snowflake dashboards to allow versatile filtering and filtering from custom expressions.<br />
* B-07383: Improvements to linked settings to allow binding to variables, tags and filter rules [[Chart_Linked_Settings|(more information)]].<br />
* B-07508: Flowchart preset colors have been renewed to be more intuitive.<br />
* B-07184: Automation preset in flowchart has now options for selecting the Automation attribute and value.<br />
* B-07512: Changed datatable metadata can be refreshed from Snowflake, and all rows in the datatable can be deleted easily in Workspace [[QPR_ProcessAnalyzer_Project_Workspace#Datatables|(more information)]].<br />
* B-07440: Date when the release was made is now shown in User settings.<br />
* B-07595: WeekOfYear property for DateTime objects in expression language to get the week number of a year (between 1 and 53).<br />
* B-07623: In-memory expression language functions Random (to get random numbers) and Hash (to get hash value of string).<br />
* B-07612: Breadcrumb in Workspace has now a Home button to quickly navigate to the top level of the projects hierarchy.<br />
* B-07637: Language selector now shows the language options in local languages.<br />
* B-07228: Remove following deprecated analyses: Cases, Events, and EventTypes (see the release note above).<br />
* B-07538: Backend support: Snowflake root causes analysis can find event attribute related root causes.<br />
* B-07706: Backend support: Snowflake expression-based filter rules support for roots containing Where function.<br />
* B-07611: Removed following legacy filter rules: CaseAttributeTrend, EventAttributeTrend, EventTypeTrend, and Duration.<br />
* B-07598: Refactored client-side import for SQL scripting to use generic client-side task mechanism.<br />
* B-07716: ShortString columns are now properly detected in SQL Server queries.<br />
* B-07652: Now it's possible to pipe multiline expression strings to QPR ScriptLauncher.<br />
* B-07688: AddColumns function for Datatables to create multiple columns in one call.<br />
<br />
'''Fixed issues:'''<br />
* D-13092: Table conditional formatting didn't work when color code was fetched from other column.<br />
* D-13105: Some charts created in earlier release referring to non-existing presets names appeared as empty after software update.<br />
* D-13107: Flowcharts crashed and showed loading animation forever when setting color or flow thickness to non-numerical measure.<br />
* D-13104: In BPMN model editor, context menus to edit elements didn't appear.<br />
* D-12939: Script editor tabs Close buttons didn't work.<br />
* D-13154: "Search by case ID" didn't work in in-memory chart.<br />
* D-12933: CSV columns with only empty values were incorrectly auto-detected as integers.<br />
* D-12929: In-memory chart Root causes for case duration and Root causes for case attributes (weighted) had Custom expression missing.<br />
* D-12928: Pivot table headers were empty when there were two column levels and two values.<br />
* D-12924: Pivot table columns with Count and Distinct Count aggregations are now numeric and aligned right.<br />
* D-13033: Changing colors in chart settings Color palette caused "Item already exists" error and prevented changing colors.<br />
* D-12996: Tags referring to dashboard variables didn't work in Additional root expression.<br />
* D-12877: UI gave error in some situations: Uncaught TypeError: Cannot read properties of undefined (reading 'min').<br />
* D-13071: Prevented selecting two or more of the Y-axis, X-axis and series mappings at the same time for the same measure or dimension.<br />
* D-12895: Big data chart crashed when on-screen setting contained event type selector and there were no event type filter set.<br />
* D-13231: Tooltips for dashboard name, model selector and filter selector in header show now the content text instead of generic instruction.<br />
* D-13139: There was an error when tried to create filter for a custom expression where selected data type didn't match with the actual type of data.<br />
* D-12988: Chart presets selection in chart settings showed unnecessary tooltip.<br />
* D-12901: When set sampling over 1 million, Snowflake models gave error: parameter value out of range: size of fixed sample. Must be between 0 and 1,000,000.<br />
* D-12904: Creating expression filter having lower/greater logic with root objects sampling failed.<br />
* D-12923: Chart schema didn't accept pivotAggregation in dimensions/columns.<br />
* D-12926: Root causes columns Selected weight, Compared weight and Total weight have now correct float data type.<br />
* D-12880: In out-of-the box dashboards, chart titles and subtitles were not translated.<br />
* D-12916: Improved filter rule description text in Filter rule editor dialog for expression filter rules.<br />
* D-12889: No clear error message was given when user tried to export corrupted model from .pacm file.<br />
* D-12869: Date selector in on-screen settings had inconsistent vertical alignment.<br />
* D-12938: When creating a filter with lasso and selecting a single data point only, "equals" kind of filter rule is now created.<br />
* D-12989: "Running tasks as specific time" system report may have ended up in loop causing following error: Maximum call stack size exceeded error.<br />
* D-13010: Pivot table sometimes ended up to never-ending resizing loop when browser zoom was more than 100%.<br />
* D-12790: Expression language: DataFrame.SetColumns: Initializing and using variables defined in closure of SetColumns function parameter didn't work<br />
* D-12927: All on-screen settings were not be visible in narrow charts having several on-screen settings.<br />
* D-12937: Added maximum value limitation to several number input fields in charts.<br />
* D-12947: Message dialog didn't show line breaks correctly (e.g., in CSV file import).<br />
* D-12948: Defining column setting caused error when Measure Expression was not defined.<br />
* D-12946: Filter rule text couldn't be seen entirely from tooltip.<br />
* D-12983: When range filtering using integer values in Highcharts chart, filter is now shown as integer value.<br />
* D-12984: When range filtering in Highcharts charts and there is category axis, filter rule is now based on individual (category) values.<br />
* D-12930: When creating filters from charts using date type of X-axis with lasso, "greater than or equal" and "less than or equal" filter rules are not created.<br />
* D-12920: "Where" function in DataFrame lost column data types of the original DataFrame.<br />
* D-13048: Model notifications failed with certain measures that define variables in root expression leading to error: Variable "sampleSize" already exists in this context.<br />
* D-13116: BPMN editor had some translations missing.<br />
* D-13019: Datatable and script selectors show now datatable/script name instead of id, when opening selector having existing selections.<br />
* D-12951: Changing additional root expression in flowchart didn't refresh the flowchart.<br />
* D-13147: Filter rule boxes in header had different widths, and Add filter rule button vertical alignment was incorrect.<br />
* D-12907: Sometimes case attribute selection showed incorrect attribute name for empty model.<br />
* D-13148: Filters and Datatables system reports loaded unnecessarily twice which could be seen as blinking.<br />
* D-12844: In dataframe query, FlowOccurrences in root and GetValueFrom Cases with filter gave null reference exception<br />
* D-12915: Repeating certain query twice with aggregations in Events root generated invalid SQL<br />
* D-12728: Was huge amount logs in server during client side import (manual testing required as identification)<br />
* D-13156: Persist function failed to snowflake: Invalid unicode escape sequence '\u0027ACCE'; should be at most '\u0010FFFF'.<br />
* D-12876: Flows/FlowOccurrences in root didn't work with SqlExpressionValue filtering.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2022.8 (build 1397) (released 2023-01-11) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release fixes an issue where extracting large datasets from SAP increases memory consumption considerably and may lead to out-of-memory error. This release contains packages for both QPR ScriptLauncher and QPR ProcessAnalyzer Server. If SAP extractions are done using QPR ScriptLauncher in client side mode (ExecuteInClientSide=1), it's enough to update QPR ScriptLauncher to fix this issue.<br />
</div><br />
<br />
'''Fixed issues:'''<br />
* D-12941: Extracting data from SAP consumed unnecessary lot of memory and may have led to out-of-memory error (both when running using QPR ScriptLauncher and in server side).<br />
<br />
== QPR ProcessAnalyzer 2022.8 (build 1396) (released 2022-12-30) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Creating datatables with duplicate names in the same project is prevented, and possible existing duplicate names are automatically changed to unique names with a random suffix. If there are duplicate names, they can be renamed either before updating QPR ProcessAnalyzer (to avoid automatic renaming) or after the update (by changing suffixed names). If the renamed datatables are used by models, the linkage will break because it's based on the datatable name. Creating duplicate datatables has already been prevented in the UI, but the improved method works also in the API level.<br />
<br />
Following SQL query can be used to list datatables (and project id) having duplicate names:<br />
SELECT ITA_NAME, ITA_PROJECT_ID<br />
FROM PA_INTEGRATION_TABLE<br />
GROUP BY ITA_NAME, ITA_PROJECT_ID<br />
HAVING Count(*) > 1<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
If trying to use business calendar for a model that doesn't have the business calendar defined, there will now be an error message instead of showing the chart. Either unselect the business calendar checkbox for the measure or dimension, or define a business calendar to the model. In this situation in earlier releases the business calendar was ignored and full time calculation used.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07498: Automation and Operational Excellence presets and Root causes analysis (for Snowflake), Weighted root causes analysis and Event scattering preset (for Snowflake and in-memory), Root causes for case duration (in-memory).<br />
* B-07177: Flexible mappings, user selectable aggregations and conditional formatting for Pivot table, and flexible mappings for KPI Card.<br />
* B-07518: New function named Query to run call /api/expression/query.<br />
* B-07294: In Workspace, the left side projects hierarchy can be collapsed and expanded to make more space to project contents.<br />
* B-06814: In SQL expressions, new function DurationBetweenDates to calculate duration between timestamps precisely.<br />
* B-07519: Replaced DateDiff function with the new DurationBetweenDates function in big data chart.<br />
* B-07531: In SQL expressions, new mathematical functions Abs, Log, Mod, Power, Rand, Sign and Sqrt.<br />
* B-07297: To optimize performance, Snowflake queries are automatically cancelled if they are not needed by UI.<br />
* B-07569: To optimize performance, TakeSample function implementation is improved for Snowflake.<br />
* B-07198: Several performance improvements to DataFrame queries (used in Snowflake).<br />
* B-07464: Added Lead and Lag functions to SqlDataFrames to support getting previous and next event.<br />
* B-07470: New ExtractSap function to fetch data from SAP using expression language.<br />
* B-07536: New Pivot function to SqlDataFrames to enable root causes analysis.<br />
* B-07488: Primary keys can be set to datatables to improve calculation performance (UI will follow later).<br />
* B-07515: Added RootCauseAnalysis function to SqlDataFrames.<br />
* B-07546: RootCauseAnalysis function support for complex weighting expressions.<br />
* B-03052: Support for user-defined variables in /api/expression/query.<br />
* B-07565: Support for NumberPrecision, DatetimeTruncation and TimespanPrecision properties for Values section in in-memory query.<br />
* B-07513: For product activation file handling, replaced mutex based implementation with exclusive file lock.<br />
* B-07480: Expression language support for DataFlows for data extraction.<br />
* B-07613: Removed support for SQL Server based R scripting.<br />
* B-07567: Take datatable primary keys into use in expression builder to improve performance (part 2).<br />
* B-07588: Remove total memory information from log writing and DateDiff function for in-memory.<br />
<br />
'''Fixed issues:'''<br />
* D-12715: Snowflake calculated imprecisely some operations containing division and aggregation.<br />
* D-12761: Progress bar of the CSV import dialog didn't show any progress.<br />
* D-12799: Opening datatable contents dialog settings was slow when there were lot of rows in the datatable.<br />
* D-12089: Include conforming/nonconforming cases made BPMN editor no responding.<br />
* D-12496: Datagrid filter search keyword didn't work for rounded values, so the search was hidden for other than textual data.<br />
* D-12704: Durations as quarters was calculated incorrectly in charts.<br />
* D-12662: Fixed issue where some special literals in custom expressions didn't work.<br />
* D-12403: Setting Notifications on a model had some visual issues.<br />
* D-12859: Dependency wheel visualization crashed with nulls values in From and To mappings.<br />
* D-12660: Removed unnecessary float conversions in SQL expressions.<br />
* D-12653: In-memory datafram OrderByColumns function with mixed values failed.<br />
* D-12657: When trying to use milliseconds period in some presets, frontend frozed.<br />
* D-12706: Line breaks in data were shown in many places where it's undesired.<br />
* D-12719: Syncfusion dialog headers showed backslaces incorrectly.<br />
* D-12372: Refused to run the JavaScript URL because it violated the Content Security Policy directive.<br />
* D-12730: Logging out when filter selection is in progress, gave javascript error.<br />
* D-12705: Header object counts tooltip was sometimes messed after logout.<br />
* D-12384: Selected project was not highlighted for whole project name string.<br />
* D-12581: Prevented creating duplicate datatable names in same project in parallel execution.<br />
* D-12722: There was incorrect syntax near '<' when running SqlDataFrame expressions.<br />
* D-12736: Swedish and Finnish translation improvements for object counter tooltips.<br />
* D-12702: For BPMN Editor component "Something went wrong" error was given when switching from in-memory to Snowflake model.<br />
* D-12712: UI gave error: TypeError: Cannot read properties of undefined (reading 'id').<br />
* D-12738: Business calendar showed total business time when calendar configuration was invalid.<br />
* D-12776: Special character filter caused JavaScript SyntaxError.<br />
* D-12785: Unnecessary vertical scrollbar displayed for main header toolbar.<br />
* D-12164: There was unnecessary UnauthorizedAccess errors in logs.<br />
* D-12580: Case duration was not same when comparing Big data chart with in-memory chart for same data.<br />
* D-12768: Data grid links and variable change actions didn't work when grouping was used.<br />
* D-12735: FindRootCauses (in-memory) function filtered out cases with zero contribution.<br />
* D-12763: --#CallWebService didn't work from ScriptLauncher.<br />
* D-12789: There was timeout in SQL queries to scripting sandbox.<br />
<br />
== QPR ProcessAnalyzer 2022.7 (build 1331) (released 2022-11-15) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2022.7, to improve security expression language operations that modify data or connect to external datasources are prevented in dashboard custom expressions. The limitation is required, because when a dashboard is opened, its expressions are run with the user's permissions, and the user need to trust the expressions don't perform any unexpected operations, such as delete data. The full functionality of the expression language is available in the scripts and in the Expression Designer.<br />
<br />
The following functions and operations are prevented in dashboards: SendEmail(), CallWebService(), ImportOdbc(), ImportOdbcSecure(), Model.DeletePermanently(), Model.Restore(), Model.TriggerNotifications(), Project.DeletePermanently(), Project.Restore(), Project.CreateDatatable(), Datatable.AddColumn(), Datatable.DeletePermanently(), Datatable.Import(), Datatable.Merge(), Datatable.RemoveColumns(), Datatable.RenameColumns(), Datatable.Truncate(), RecycleBin.DeletePermanently(), and call SQL script. Calling expression scripts is allowed, but in the script all previously mentioned operations are prevented.<br />
<br />
Following SQL query can be executed in the QPR ProcessAnalyzer metadata database to reveal dashboards that potentially have prevented expressions:<br />
SELECT * FROM [PA_UI_ELEMENT] WHERE [UIE_PROPERTIES] LIKE '%SendEmail(%' OR [UIE_PROPERTIES] LIKE '%CallWebService(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbc(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbcSecure(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Restore(%' OR [UIE_PROPERTIES] LIKE '%TriggerNotifications(%' OR [UIE_PROPERTIES] LIKE '%CreateDatatable(%' OR [UIE_PROPERTIES] LIKE '%AddColumn(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Import(%' OR [UIE_PROPERTIES] LIKE '%Merge(%' OR [UIE_PROPERTIES] LIKE '%RemoveColumns(%' OR [UIE_PROPERTIES] LIKE '%RenameColumns(%'<br />
</div><br />
<br />
'''Features:'''<br />
* B-07287: Process Discovery and most important presets for Snowflake.<br />
* B-07271: "Last Row Aggregates Over-limit Rows" setting for big data chart.<br />
* B-06431: Snowflake datatables support for database views in the datasource.<br />
* B-07266: Security: "limited mode" to prevent data modifications and external calls from dashboard expressions.<br />
* B-07097: Improved flowchart root causes color scales.<br />
* B-07363: SQL LIKE function support for escape character.<br />
* B-06877: Improved variation queries performance in Snowflake, part 1.<br />
* B-07444: Improved variation queries performance in Snowflake, part 2.<br />
* B-07382: Support for empty strings and nulls in event type names in dataframe processing.<br />
* B-07273: WithRowNumberColumn, WithRankColumn, WithDenseRankColumn support for descending sorting.<br />
* B-07303: FindRootCauses function support for weighting expression.<br />
* B-07327: Unpivot function for SqlDataFrames (for root cause analysis).<br />
* B-07385: Align token lifetime with SESSION_MAXIMUM_DURATION setting.<br />
* B-07500: ColumnMappings property for IDataFrame and DataTables.<br />
* B-07499: IDataFrame.ApplyFilter function to filter events data using a JSON-based filter.<br />
* B-07469: Translation updates for release 2022.7.<br />
<br />
'''Fixed issues:'''<br />
* D-11630: Drag and drop from chart settings to main header was working incorrectly for filter and root cause rules.<br />
* D-12455: Moving a chart filter from one chart to another created a root cause analysis filter.<br />
* D-12266: Root causes analysis showed incorrect results when certain combination of filters.<br />
* D-12525: Numerical values in Excel export in data grid was formatted incorrectly.<br />
* D-12534: Restoring item from recycle bin changed project from Bin to previous project.<br />
* D-12529: Measure specific datalabel mapping did not work correctly when also mapped to Y-axis.<br />
* D-12532: Multi-selection options caused layout issue for Chart setting.<br />
* D-12541: Layout issue for Polish in multiselect list search dialog.<br />
* D-11277: Increase/decrease Icons were missing in the dimension sorting for Mac.<br />
* D-12552: Uncaught Error: Diagram.selectCollection given something that is not a Part: null.<br />
* D-12567: Tooltip incorrectly showed for label component containing only spaces.<br />
* D-12438: Operation was cancelled because it was replaced by a new operation.<br />
* D-12551: Some expressions didn't work as calculated case/event attributes.<br />
* D-11720: Chart buttons were not visible in Apple Safari and iPad.<br />
* D-12544: On-screen settings "options" parameter did not work.<br />
* D-12528: Multi-unit time unit selection appeared where it's not applicable.<br />
* D-12583: Error message should be provided for invalid settings input than just display JS errors.<br />
* D-12599: Tooltips didn't show correct measures/dimensions when "Show in tooltip" mappings are used.<br />
* D-12561: Chart settings content was incorrectly drawn outside of the chart dialog.<br />
* D-12568: Reload UI sometimes crashed chart having multiselect on-screen settings.<br />
* D-12572: Main header toolbar lost when refresh maximized PA chart.<br />
* D-12612: Drop Unused Filters After setting incorrectly allowed zero seconds.<br />
* D-12533: Error message keeped blinking in Analysis view.<br />
* D-12608: User could not select or add new case attribute when current select attribute doesn't exist.<br />
* D-12451: Prevented deleting running script.<br />
* D-12516: Windows event viewer warning: Failed to gracefully shutdown application.<br />
* D-12523: Business calendar performance - part 2.<br />
* D-12538: Column with same name could be added multiple times to datatable using expression language.<br />
* D-12582: Improved EMS mutex code to support multiple PA service in one server.<br />
* D-12624: Synchronize new (empty) data table generated failed queries in Snowflake.<br />
* D-12622: Advanced setting page reserved room for the expression editor frame that did not exist.<br />
* D-11295: In on-screen settings, some UI controls were vertically misaligned.<br />
* D-11625: The heights of the parameter option menu in the clustering tab was not well aligned.<br />
* D-12103: Small dropdown list layout issue.<br />
* D-12633: Align issue for Column related Advanced settings.<br />
* D-12505: Search dialog didn't escape % and _ characters correctly in dataframe processing.<br />
* D-12645: Tabs in expression settings dialog were partly hidden when dialog is narrow.<br />
* D-11382: Moving of flowchart was sometimes shaky.<br />
* D-12655: Filter rule tooltips in header were styled incorrectly.<br />
* D-12656: Large integer values in filter jsons were incorrectly presented as small integers.<br />
* D-12661: Some exported filters contained unnecessary "invert" property.<br />
* D-12500: Model with numeric case id's and filtering with the attribute mapped as case id: ERROR [22018] Numeric value <nowiki>''</nowiki> is not recognized.<br />
* D-12509: Filtering null values didn't work in boolean attributes in Snowflake.<br />
* D-12571: In dataframe processing in SQL Server, dividing two integers should not make rounding to integer.<br />
* D-12610: Setting for global DropUnusedFiltersAfter was missing.<br />
* D-12613: Filtering with case/event attributes with null values didn't match in Snowflake models.<br />
* D-12617: Model didn't work when DropUnusedFiltersAfter is 00:00:00.<br />
* D-12618: If model ConfigurationJson is null, Configuration property didn't work.<br />
* D-12620: Filtering didn't work when there are backslaces in attribute names in Snowflake models.<br />
* D-12643: AttributeFunctionCallExpression did not always work properly in array context.<br />
* D-12647: SqlDataFrame with SQL Server: Comparing literals to variant column values failed.<br />
* D-12648: Models that have DropUnusedModelsAfter setting caused "The sliding expiration value must be positive" error.<br />
* D-11526: It was unable to translate Unicode character \uD83D at index 176 to specified code page.<br />
* D-12637: In application startup arised FATAL Application startup exception System.UnauthorizedAccessException: Access to the path 'Global\MutexQPRPAActivation' is denied.<br />
<br />
== Old Releases ==<br />
See older releases in [[QPR ProcessAnalyzer Release Archive]]<br />
__NOTOC__<br />
<br />
[[Category: QPR ProcessAnalyzer]]</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&diff=24493QPR ProcessAnalyzer Release Notes2024-03-27T09:15:13Z<p>Ollvihe: /* Next Release: QPR ProcessAnalyzer 2024.3 (planned release date 2024-04-02) */</p>
<hr />
<div>This page lists all new features and fixed issues for each QPR ProcessAnalyzer release.<br />
<br />
== Next Release: QPR ProcessAnalyzer 2024.3 (planned release date 2024-04-02) ==<br />
<br />
'''Features:'''<br />
* B-08242: [[Actions_to_Run_Script_in_Table|Custom actions]] in scripts can be started from dashboard table context menu, e.g., create tickets, trigger automation, and fetch external information.<br />
* B-08252: When Analyzed objects is cases, event attribute values are filtered with the native event attribute filter rules instead of expression based filter rules.<br />
* B-08268: In Overview flowchart preset, flow width shows shown number of cases. When converting Snowflake expression into custom, the expression filter is preserved.<br />
* B-08231: Snowflake performance improved by splitting object counts (shown in header) query into two, so that the filtered object count query uses eventlog caching.<br />
* B-07906: Implemented cross joins to SQL dataframes.<br />
* B-03047: Removed support for dashboard panels.<br />
* B-08214: Removed unused columns from the PA_VIEW table.<br />
* B-08254: Frontend components have been updated.<br />
* B-08221: Snowflake query performance improvement.<br />
* B-08255: Backend components have been updated.<br />
<br />
'''Fixed issues:'''<br />
* D-14048: Fixed issue where in-memory root causes analysis for case attributes didn't show attributes with ShortString data type.<br />
* D-14049: Added some missing translations for table column filter and BPMN editor.<br />
* D-14021: FindRootCauses function WeightingExpression was run in incorrect context for in-memory model.<br />
* D-14020: Query which goes from EventTypes to Cases did not show the error when using GetValueFrom function.<br />
* D-13976: Fixed issue where gateway-based imports were not synchronous.<br />
* D-13689: Fixed JavaScript error in Highcharts polar chart with tooltips.<br />
* D-12614: Highcharts gives "Maximum call stack size exceeded" error in bar chart with polar and data labels.<br />
* D-14060: Highcharts custom layout translatable properties incorrectly changed chart configuration by translating the labels.<br />
* D-14071: Business calendar button press caused error when user didn't have access to any model.<br />
* D-14041: Manager Users dialog "Has password" field filter shows now Yes/No texts instead of true/false.<br />
* D-11268: There were inconsistent button colors in Workspace.<br />
* D-12264: Disabled stacked and polar charts for donut, packed bubble, sankey, dependency wheel, word cloud, and gantt charts.<br />
* D-14066: Fixed issue when EventTypes, Events.IncomingFlowOccurrence fails because there is event type filtering in in-memory model.<br />
<br />
== Latest: Additional release for QPR ProcessAnalyzer 2024.2 (build 5509) (released 2024-02-27) ==<br />
<br />
'''Features:'''<br />
<br />
* B-06280: User management dialog shows whether users have password defined and unnecessary passwords can be removed to improve security.<br />
<br />
'''Fixed issues:'''<br />
<br />
* D-14045: Fixed issue where users with Viewer or Analyzer role couldn't create filters in Snowflake models.<br />
<br />
== QPR ProcessAnalyzer 2024.2 (build 5438) (released 2024-02-21) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue: Snowflake models and dashboards don't work with Viewer and Analyzer role permisions. The reason is that cache tables created to Snowflake incorrectly require the write permissions. Workaround is to give users the Designer role which will give the needed permissions. Note that the Designer role gives many permissions to the user for the project [[Roles_and_Permissions#Roles_and_Permissions|(more information)]]. This issue has been fixed in the next release (D-14045).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
The legacy User permissions report (analysis number 11) and Filters report (analysis number 30) used in SQL scripts have been removed. Use instead the expressions language to query filters and user permissions, e.g., [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|Models.Filters]] and [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
New version of the Design diagram component has been improved with object-specific measures, and the previous common measures are not migrated into object-specific measures. Thus, the measures need to be configured again, or manually edit the chart json settings (if needed please ask instructions from QPR CustomerCare).<br />
</div><br />
<br />
'''Features:'''<br />
* B-08022: Design diagram supports now BPMN notation, elbow style flows and object-specific measures.<br />
* B-08232: Entire future eventlogs can be [[Create_Predicted_Eventlog|predicted]] based on generative AI models running in Snowflake.<br />
* B-08166: Added expression language function [[Generic_Functions_in_QPR_ProcessAnalyzer#OpenAIChatCompletion|OpenAIChatCompletion]] to answer natural language prompts based on OpenAI ChatGPT API.<br />
* B-08177: Snowflake query performance has been improved by introducing caching of filtered eventlogs using Snowflake tables.<br />
* B-08196: Conditional formatting rules can be defined for [[QPR_ProcessAnalyzer_Table#Textual_equal_rules_for_background_color|textual and boolean values]].<br />
* B-08213: Big data chart expressions event type selections to be multi-select where applicable.<br />
* B-08205: Expression language API is available for storing [[Storing_Secrets_for_Scripts|secrets]] for scripts.<br />
* B-07780: Chart [[QPR_ProcessAnalyzer_Chart#Variable_mappings|variable mappings]] has been removed - use the [[Chart_Linked_Settings|linked settings]] instead. Dashboards using variable mappings are automatically converted to use linked settings.<br />
* B-08117: Added ToSqlDataFrame function to convert in-memory dataframe into SQL dataframes.<br />
* B-08174: Only non-default parameters values are written to the operation log.<br />
* B-08200: Timestamps in System reports are shown in user workstation local time.<br />
* B-08171: Dashboard id has been added to queries, to track from which dashboard queries are originating.<br />
* B-07144: Remove legacy User permissions report (analysis number 11) and Filters report (analysis number 30) in SQL scripts (see note above).<br />
* B-08193: Added retry mechanism to QPR ScriptLauncher to recover if connection to server breaks.<br />
* B-08202: Updated copyright for year 2024.<br />
* B-08199: Frontend components have been updated.<br />
* B-08203: Backend components have been updated.<br />
* B-08209: Translations updated for release 2024.2.<br />
<br />
'''Fixed issues:'''<br />
* D-13972: Some measures/dimensions/columns in Big data chart didn't show the expressions level filtering.<br />
* D-14015: Fixed business calendar incorrect calculation when business period covered entire day.<br />
* D-14014: Fixed issue where Snowflake business calendar could not have end time as 00:00.<br />
* D-13962: System variable values were interpreted incorrectly when used in linked settings.<br />
* D-13971: HiddenInNavigation and SortOrder variables didn't work in navigation menu dashboards list.<br />
* D-13959: Removed possibility to add datatable columns with the legacy "any" data type.<br />
* D-13991: Improved drop-down selector component to handle empty strings as variable values.<br />
* D-13965: Datatable column name length was validated incorrectly which may have caused error in saving with too long column names.<br />
* D-13958: Project names showed unnecessary html escaping in the "Move to" menu.<br />
* D-13964: Model attributes and notifications dialogs gave error when trying to use dashboard tags.<br />
* D-13960: Added missing translations for list of permission list and 12-hour clock format.<br />
* D-13966: Fixed issue were root causes chart tooltip sometimes didn't disappear.<br />
* D-13969: Datatable column schema export sometimes showed empty for the key column.<br />
* D-13862: Session token was not accepted when url path capitalization is different.<br />
* D-13942: Datatable could not be dimensioned if it has column named "CaseId".<br />
* D-13980: Business calendar dialog crashed when tried to open it for a model without access.<br />
* D-13983: Notifications dialog didn't validate situation when same name was used in a measure and dimension.<br />
* D-13981: Dashboard import set incorrect model id to dashboard if there was no access to any model.<br />
* D-11276: Translations were missing for 12-hour clock dates (AM and PM) in dashboards.<br />
* D-13977: Multi-select dropdown lists showed some special characters incorrectly.<br />
* D-13945: Syncfusion toast message didn't work when text contains ${[]}.<br />
* D-13930: Pivot table throws javascript error when certain clicks.<br />
* D-13273: Duplicate datatable row count didn't shown correctly.<br />
* D-13994: There was an error in the in-memory chart with some flow related measures about duplicate variable names when same measure was defined twice.<br />
* D-13985: Models list dots menu had texts misaligned in narrow screens.<br />
* D-13995: In Workspace, wrong datatable was selected after duplication when non-default sorting was applied.<br />
* D-13997: Workspace tables column filtering search caused JavaScript errors.<br />
* D-13978: In table Excel export, the last row representing other items appeared incorrectly for in-memory chart.<br />
* D-14007: In System reports, model related selections are hidden from the Analyzed objects lists.<br />
* D-14005: In big data chart, changing to custom expression caused crash with some expressions having case/event attribute.<br />
* D-14003: When dimensioning was not used, pivot table values were incorrectly rounded in the server side.<br />
* D-14004: Removed empty filters from queries to optimize them.<br />
* D-13988: Fixed issue where data grid context menu rendered initially as too high.<br />
* D-13979: BPMN model editor element settings use now Open Sans font.<br />
* D-14013: Fixed incorrect expression "Duration between first and last occurrence" in big data chart event types.<br />
* D-13984: Fixed the error of refusing to run the JavaScript URL.<br />
* D-14031: ThrownObject property was not included to http error response when error came from the script.<br />
<br />
== QPR ProcessAnalyzer 2024.1 (build 4784) (released 2024-01-10) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue fixed in QPR ProcessAnalyzer 2024.2: In Big data chart, some measures, dimensions and columns have the filtering option missing. The issue concerns for example Duration between events, Path starting/until between specific events, and Cases where event occurs before other selections. Workaround is to set the filter in the chart json settings: the filter can be configured to another expression and copied to the correct expression.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
QPR ProcessAnalyzer Server and QPR ScriptLauncher are now using .Net 8 (previous was .Net 6). When updating to this release, install the .Net 8 Runtime ([[Updating_QPR_ProcessAnalyzer_Server|see more]]). The .Net 6 doesn't need to be uninstalled immediately because .Net 6 and .Net 8 work side-by-side, but due to security reasons, the unused .Net 6 should eventually be uninstalled.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In this release, all filters that don't contain any filter rules, are removed. These are legacy filters which have not been visible in the UI.<br />
</div><br />
<br />
'''Features:'''<br />
* B-08019: New component [[Design_Diagram|Design Diagram]] for showing user-created diagrams in dashboards where to visualize process mining metrics.<br />
* B-08087: Generic [[Dropdown_List_Selector|dropdown list selector]] works with Snowflake models allowing to add selection lists for any values.<br />
* B-08163: Linked settings support for binding to [[Chart_Linked_Settings#Binding_to_case_attribute_filters_with_attribute_name_and_attribute_values|case attribute filter values without defining case attribute name]].<br />
* B-08170: Snowflake model filters can be [[Filtering_in_QPR_ProcessAnalyzer#Filter_actions|saved as new models]] which can be used to create snapshots of part of models.<br />
* B-08093: Multiple dashboards can be exported to same file, and model can be set for imported dashboards.<br />
* B-08161: Added [[Datatable_in_Expression_Language#Modify|Modify]] function to change datatable properties and improved [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#CreateDatatable|CreateDatatable]] function for creating datatables.<br />
* B-08122: Added new system report to list dashboards.<br />
* B-08173: Removed legacy filters that didn't have any filter rules.<br />
* B-07961: In OperationLog, changed parameters to json format and added request id.<br />
* B-08069: Added DashboardId property to [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog]] in expression language.<br />
* B-08139: Added [[Datatable_in_Expression_Language#UpdateRows|UpdateRows]] function to update existing rows in datatables with similar logic than SQL update.<br />
* B-08115: Added [[Datatable_in_Expression_Language#DeleteRows|DeleteRows]] function to delete rows in datatables with similar logic than SQL delete.<br />
* B-08149: QPR ProcessAnalyzer has been updated to .Net 8.<br />
* B-08054: Changed Scripts property in generic context to return all scripts, instead of legacy system level scripts.<br />
* B-08138: Changed Synchronize function to remove all columns when no Snowflake table exists.<br />
* B-07689: For datatables, [[Datatable_in_Expression_Language#ForeignKeys|foreign keys]] to other datatables can be defined using expression language.<br />
* B-08176: Translation updates for release 2024.1.<br />
* B-08175: Workspace should show timestamps in user's local time.<br />
<br />
'''Fixed issues:'''<br />
* D-13913: Datatable properties dialog incorrectly showed linked models from other projects.<br />
* D-13916: Chart filter could not be defined for some expressions in Big data chart.<br />
* D-13933: Navigation menu selected item wasn't highlighted when used Snowflake models.<br />
* D-13906: In Conformance Analysis, deviating flows were not translated.<br />
* D-13907: Improved translation related to datatable properties dialog "Used by models" field.<br />
* D-13904: There was an unclear error message in Snowflake, as exception code 1 was returned without AttributeName and ModelName properties when non-existing attribute was in filter.<br />
* D-13911: Fixed small glitches in the opening and closing of drop-down lists.<br />
* D-13918: Datatable could be configured incorrectly to use table for other datatable.<br />
* D-13932: Duplicating datatable with custom table in datasource losed all data.<br />
* D-11002: Removed legacy in-memory prediction preset.<br />
* D-13912: Added check that array cannot be stored to dashboard Content property.<br />
* D-13936: Query designer default query didn't work with Snowflake models.<br />
* D-13938: There was an incorrect logging with some operations related to ScriptLauncher.<br />
* D-13923: Snowflake expressions didn't work with Where function in root referring to case attribute.<br />
* D-13939: ApplyFilter function gave null reference error for non-existing attribute name.<br />
* D-13931: There were issues with AllowExternalDatasources and EnableFullFunctionality settings.<br />
<br />
== QPR ProcessAnalyzer 2023.7 (build 4326) (released 2023-11-28) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Limitation for the maximum amount of data (B-07636) causes a behavior change in in-memory charts that have the Maximum rows settings empty and have the sorting defined. In certain cases, the order in which measures are evaluated changes (due to an internal performance optimization). If there are custom expressions that define variables, the variables may not be available in other measures anymore. As a resolution, either redefine the variables in those measure expressions or add those measures secondarily to the sorting.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Default query timeout of 30 minutes has been added for --#ImportOdbcQuery, --#ImportSqlQuery and --#ImportOleDbQuery commands. If a query run is taking longer than the timeout, the query is stopped. The timeout can be adjusted using the '''QueryExecutionTimeout''' parameter. Previously, there has been no timeout, so queries that take more than 30 minutes require configuring a longer timeout.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Incorrectly configured [[Chart_Linked_Settings|linked settings]] in charts (available in the ''Advanced'' tab) give now an error message, if they are referring to non-existing measures, dimensions or columns. Previously, incorrect linked settings were ignored. To fix the error message, remove the incorrect linked settings.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07511: Datatables have a [[Datatable_Properties_Dialog|dialog]] to view datatable properties, write description, set the Snowflake source table, add/modify/delete columns, and set the datatable key.<br />
* B-08150: Added setting [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|Apply chart filters first]] to determine whether chart filter rules or dashboard filter rules are applied first when chart queries are filtered.<br />
* B-08091: When filtering charts in Snowflake, case attribute filter is created instead of case id filter.<br />
* B-08091: [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|New setting]] to define whether cases or events are filtered by default.<br />
* B-08091: New preset "Looping paths" to detect whether there are repeating patterns of events.<br />
* B-08091: Duration between events calculation ignores negative durations in Snowflake.<br />
* B-08091: Chart loading animation has been renewed.<br />
* B-07636: To prevent dashboards from jamming when querying too much data, added [[QPR_ProcessAnalyzer_Chart#Available_Visualizations|limitations]] to the amount of data that charts can visualize. Note that the limitation concerns the aggregated data that is visualized, not the source event log data.<br />
* B-08017: [[Dashboard_in_Expression_Language|Dashboards API]] has been added to expression language, allowing to create, modify and delete dashboards in scripts.<br />
* B-08056: Following properties have been added to [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#User.2FGroup|user objects]] in expression language: IsLocked, LastLockedDate, LastLoginDate.<br />
* B-08053: [[Navigation_Menu#System_Reports|User rights report]] has been refactored to use [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property in the expression language. The change also simplifies the report as now it only shows the direct role assignments that are visible in the [[Manage_Users_and_Groups|User Management]].<br />
* B-08151: For Snowflake expressions support for following [[SQL_Expressions#Window_functions|windowing functions]]: sum, average, median, min, and max.<br />
* B-08050: When a model is created, the default filter is not created anymore (this is a refactoring that doesn't have any impact on user interface).<br />
* B-08123: Translation updates for 2023.7.<br />
* B-08092: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13876: In CreateSnowflakeConnection function, ProjectId parameter is optional when OdbcConnectionStringKey is not specified.<br />
* D-13898: Snowflake: Exclude case attribute filter didn't work when there was null values and was selecting at least two values.<br />
* D-13890: Fixed XES file import to work.<br />
* D-13894: Business calendar based duration calculation was incorrect in some durations that spanned to several weeks (for Snowflake and in-memory models).<br />
* D-13899: Using broken OdbcConnectionString in a datatable prevented the datatable from being deleted.<br />
* D-13883: Script run stucked after running a script with error that uses client-side ODBC import.<br />
* D-13879: SqlExpressionValue filter when excluding events didn't work with filter rule root expression only.<br />
* D-13896: Adding or removing columns to datatable didn't change the LastModifiedDate.<br />
* D-13882: User details weren't written to operation log when creating or modifying users.<br />
* D-13771: User rights system report didn't give error when changing columns.<br />
* D-13893: Some event filtering caused null pointer error when primary key had been defined.<br />
* D-13873: Fixed pivot table visual issues after component update.<br />
* D-13900: When adding, renaming or removing columns for Snowflake table fails, operation is now rolled back without any changes.<br />
* D-13866: Querying GET api/uielements was quite slow right after server start.<br />
* D-13864: Combinations of translatable and hardcoded strings didn't get translated in UI.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.6 (build 3933) (released 2023-10-24) ==<br />
<br />
'''Features:'''<br />
* B-08055: Error message for locked account has been replaced with generic error message, so that username enumeration is not possible.<br />
<br />
'''Fixed issues:'''<br />
* D-13884: Attributes dialog crashed with some older model configurations.<br />
* D-13843: In charts, selected case and event attributes switched away when attribute data type was ShortString.<br />
* D-13877: Some Snowflake expressions gave error "exceeds maximum length limit of 255 characters" when selecting lot of items.<br />
* D-13878: Snowflake expression filters for case attribute values didn't accept other than string type of case attributes.<br />
* D-13871: Some statistical calculations with percentages didn't work with Last Row Aggregates Over-limit Rows setting.<br />
* D-13875: Using some case level filters in a model without cases datatable didn't work.<br />
* D-13861: Dashboard opens are now logged to the Task log (i.e., calling GET /api/dashboards/{dashboardid}).<br />
* D-13870: Workspace projects hierarchy focused project showed light grey background making the project name not readable.<br />
* D-13867: When starting datatable refresh and going to other tab, went back to Datatables tab when query completed.<br />
* D-13853: If chart Custom Layout settings had extra series defined, chart may have crashed.<br />
* D-13869: Export as CSV button didn't work in the datatable contents dialog when dialog was still loading.<br />
* D-13872: Main progress spinner had unnecessary small scrollbar on top right.<br />
* D-13863: In the REST API method GET /api/users, password field (that has always been null) has been removed.<br />
<br />
== QPR ProcessAnalyzer 2023.6 (build 3847) (released 2023-10-17) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is removed in this release. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
'''Features:'''<br />
* B-07992: Added 10 new presets including Queue analysis, Four eyes principle, Self-looping events, and Path until selected event. There are also presets for Individual Cases Flow and Range of event type occurrences which use Gantt chart.<br />
* B-08011: Added following date related operations for Snowflake: Day of year, Day of month, Day of week, Week of year, Half-year only, Quarter only, Month only, Hours only, Minutes only, Seconds only, and Milliseconds only. These are available when calculating with date type of data.<br />
* B-08016: [[QPR_ProcessAnalyzer_Table#Table_actions|Table actions to set variables]] can also be opened to a new browser tab. Also improved user interface for table actions.<br />
* B-08018: For Snowflake expressions, added Flows aggregations FromEventType and ToEventType to get starting/ending event type, and FlowOccurrences aggregations FromEvent and ToEvent to get starting/ending event.<br />
* B-08001: Added [[Generic_Functions_in_QPR_ProcessAnalyzer#CallStoredProcedure|CallStoredProcedure]] function to call Snowflake stored procedures. This allows to start ETL transformation in Snowflake orchestrated by QPR ProcessAnalyzer script.<br />
* B-08013: Added [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property to expression language to replace the legacy UserPermissions analysis (11).<br />
* B-07976: Snowflake [[Filtering_in_QPR_ProcessAnalyzer_Queries#Expression|expression based filter rules]] support additional expression columns allowing more Big data chart expressions to be filterable.<br />
* B-08015: Big data chart doesn't anymore support calculation in SQL Server (using local datatables).<br />
* B-06270: Improved error messages and made them translatable by taking into use exception codes provided by server.<br />
* B-08021: Added possibility to store [[Diagram_in_Expression_Language|designed diagrams]] for models and expression language API for reading and modifying diagrams.<br />
* B-08037: Dropped following unused tables database: PA_IDEA, PA_IDEA_VOTE, PA_REPORT, PA_REPORT_SETTING, PA_SESSION_SERVICE, PA_VIEW_FILTER_RULE, PA_VIEW_FILTER_RULE_PARAMETER.<br />
* B-08052: Language translations have been updated to 2023.6.<br />
* B-08051: Frontend side components have been updated.<br />
* B-08034: Backend side components have been updated.<br />
<br />
'''Fixed issues:'''<br />
* D-13830: Object counts indicator in header showed incorrect counts when there was disabled filter rules in Snowflake models.<br />
* D-13833: In-memory charts didn't work with boolean type of dimensions when filtering with the false value.<br />
* D-13858: Target value measures didn't update chart when controlled using an on-screen setting.<br />
* D-13827: Calculated attributes data type was incorrectly set as Any by the Attributes dialog.<br />
* D-13849: Multiselect list search didn't allow spaces.<br />
* D-13829: Multiselect dropdown lists height jumped couple of pixels when selecting values.<br />
* D-13835: Deselecting a selected data point didn't remove chart filter rule.<br />
* D-13702: Improved Snowflake query performance in situations when there are lot of filter rules (by decreasing number of CTE's).<br />
* D-13819: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13820: Fixed incorrect manifest.json file to avoid "not found" errors when fetching web site icon.<br />
* D-13865: Break, continue, and return statements didn't work properly when called from inside a catch block.<br />
* D-13795: There was a Python error in clustering analysis with Snowflake model.<br />
* D-13823: Some tooltips in Workspace project hierarchy didn't work and caused a JavaScript error.<br />
* D-13824: BPMN editor align context menu layout looked strange.<br />
* D-13813: QPR logo button in the top left was misaligned in Firefox.<br />
* D-13797: Snowflake query may have given following error when using sampling: ambiguous column name '_EventType_NotNull_1'.<br />
* D-13774: TakeSample function with certain columns caused SQL compilation error: ambiguous column name 'Case Name'.<br />
* D-13782: Snowflake: Aggregating from variations didn't work when using sampling.<br />
* D-13836: Some tooltips had a strange two-colored background.<br />
* D-13834: Removed Model statistics column from clustering and root causes analysis.<br />
* D-13860: Removed filter button from the custom expressions in Task log analyzed objects.<br />
* D-13838: Removed Split data by filtering column from clustering analysis.<br />
* D-13832: Script and model status updates incorrectly sent next update when previous was still pending.<br />
* D-13839: Charts reset zoom button font size was too small.<br />
* D-13817: Importing data to Snowflake datatable with Append=0 doesn't now drop the underlying Snowflake table.<br />
* D-13825: Some models could not have been deleted from recycle bin.<br />
* D-13852: Recycle bin Projects and Models tab didn't show correct content when Recycle bin only contained either models or projects.<br />
* D-13841: In-memory chart Data type selection type has been corrected to string.<br />
* D-13842: Second time and Third time selections has been hidden in in-memory chart measures.<br />
* D-13850: In Chrome, there were console errors related in incorrect text field autocomplete type and text field without form.<br />
* D-13847: Improved browser side performance by removing unnecessary operations.<br />
* D-13859: Chart without dimensions showed an unnecessary Remove dimension button.<br />
* D-12598: When script is stopped in server, ScriptLauncher could still incorrectly continue to import data.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.5 (build 3334) (released 2023-09-07) ==<br />
<br />
'''Fixed issues:'''<br />
* D-13826: Measures or dimensions with case or event attribute and value selections incorrectly removed calculated attributes when dashboard was opened or chart settings were changed.<br />
* D-13821: Font size of some Highcharts tooltips was too small. Issue appeared when there were tooltips mappings in measures or dimensions.<br />
* D-13810: Simplified help links: now all Help buttons go to the QPR ProcessAnalyzer wiki main page.<br />
* D-13822: Snowflake clustering analysis showed empty strings and nulls as case attribute values in an unclear way as just nothing.<br />
<br />
== QPR ProcessAnalyzer 2023.5 (build 3304) (released 2023-09-05) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In Big Data Chart, the '''Case conformance''' measure and dimension has changed in a way that now it provides boolean values (true/false) instead of integer values (1/0). If [[Measure,_Dimension_and_Column_Settings#Other_settings|colorMappings]] are used for this measure or dimension to set specific colors to visualize conformant and nonconformant cases, the mapped values need to be changed as follows: '''1''' -> '''true''' and '''0''' -> '''false'''. Without the change, the mapped colors are not effective.<br />
<br />
Exmaple: Old configuration:<br />
<pre><br />
"colorMappings": {<br />
"1": "#36d475ff",<br />
"0": "#f5403bff"<br />
}<br />
</pre><br />
New configuration:<br />
<pre><br />
"colorMappings": {<br />
"true": "#36d475ff",<br />
"false": "#f5403bff"<br />
}<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is deprecated. Big data chart has allowed to process data both in Snowflake and SQL Server. Now the support for SQL Server is deprecated and the Big data chart will only support calculation in Snowflake. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). The OperationLog analysis is replaced by the [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog function]] and the Infcluencers analysis is replaced by the [[FindRootCauses_Function|FindRootCauses function]].<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [12, 14, 15, 16, 29];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
By default, Snowflake ODBC driver generates quite much logging to files which might unnecessarily fill up the disk space. It's recommended to set the LogLevel parameter to value 0. The path where the logs are created can be seen in Windows registry (key LogPath). More information about configuring Snowflake ODBC parameters: https://docs.snowflake.com/en/developer-guide/odbc/odbc-parameters.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07971: Machine learning based [[Clustering_Analysis|Clustering analysis]] can be run in Snowflake.<br />
* B-07989: In dashboard designer the stacking order of charts can be changed with buttons [[QPR_ProcessAnalyzer_Dashboard_Designer#Viewing_and_Editing_Dashboards|Bring to front, Send to back, Bring forward and Send backward]].<br />
* B-07977: For [[Sankey_Chart|sankey diagram]], added Start level and End level mappings to define custom start and end level for the sankey flows. Implemented also color mappings to define specific colors for specific values.<br />
* B-08010: To improve performance, charts are loaded and updated only when they are visible in the dashboard.<br />
* B-07975: Added following [[SQL_Expressions#Date_functions|date related functions]] to Snowflake: DayOfYear, DayOfWeek, WeekOfYear, Quarter.<br />
* B-07908: When [[QPR_ProcessAnalyzer_Project_Workspace#Duplicating_Model|model is duplicated]], also filters in the model are also duplicated.<br />
* B-07904: Filters and models API for expression language has been completed.<br />
* B-07991: In [[Filter_Selectors|case and event type filter selectors]], threshold whether the dropdown list or search dialog is shown can be defined using the ''Maximum Rows'' setting. Also the search dialog filters search results by other filter rules in the dashboard.<br />
* B-07999: Filters report has been changed to use the [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|expression language API for filters]].<br />
* B-07540: Added [[QPR_ProcessAnalyzer_Expressions#Throwing_objects|throw statement]] to expression language.<br />
* B-07813: UI components are updated. There are small visual improvements, such as in flowchart flows are routed a bit differently and in charts the hidden series is shown as strike-through in the legend.<br />
* B-07963: Following legacy analysis types have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29) (see more information in the note above).<br />
<br />
'''Fixed issues:'''<br />
* D-13777: Filters could not be created in charts when "Update Filter During Selection" setting was disabled.<br />
* D-13767: Automation per Event Types preset in in-memory incorrectly showed only one event type.<br />
* D-13756: Changing background color in KPI card didn't have any effect.<br />
* D-13812: "Exclude events" was incorrectly translated to "Exclure les cas" in French.<br />
* D-13815: Dashboard designer background grid was not visible in entire area in edit mode. Improved also the grid to match to snapping in move and resize.<br />
* D-13674: Business calendar dialog layout was incorrect when a model with a long name was selected to copy holidays.<br />
* D-13811: Table actions link to a new window didn't go to dashboard if there were other parameters in the link.<br />
* D-13601: Fixed issue where some presets may have given error when attribute value selection and the automatically selected attribute conflicted by the data type.<br />
* D-13753: While Snowflake model was selected, in Filters and User Rights reports the Columns list could not be opened.<br />
* D-13720: Now table column filter and sorting are preserved when resizing or zooming page.<br />
* D-13785: In tables increased number of rows to 20000 that are inspected to get available items shown in Excel-style column filter.<br />
* D-13759: Some statistical calculations had bad performance with large number of rows.<br />
* D-13787: Conformance statistics component didn't have scrollbars when text didn't fit to the visible area.<br />
* D-13788: In-memory "Nonconformance reason" selection caused error when two of them was selected in the same chart.<br />
* D-13783: When Analyzed objects was Generic analysis, column selection incorrectly caused "Analysis has not been selected" error.<br />
* D-13776: When measure name contained quotation mark, notification preview didn't work.<br />
* D-13747: Filtering with integer type of case id with case attribute value filter caused error in Snowflake.<br />
* D-13791: In Firefox, model selection in chart settings didn't show models in the first open.<br />
* D-11984: Recycle bin buttons didn't fit to the screen when screen width was small.<br />
* D-13780: Using CaseId case attribute in clustering analysis did not work with Snowflake 106 cases standard model.<br />
* D-13781: Clustering analysis produced Python error with a certain simple Snowflake model.<br />
* D-13730: Snowflake: Case attribute filtering didn't work when there are cases without row in cases table.<br />
* D-13803: There was chart configuration validation error in browser console when measures were moved into dimensions in Big data chart.<br />
* D-13758: There was performance issue with the Recent tasks system preset.<br />
* D-13793: Snowflake clustering failed when cluster count is larger than case count.<br />
* D-13763: SQL expression based filter rule with Where function to filter events didn't filter anything in Snowflake.<br />
* D-13804: Added missing Millisecond function to Snowflake.<br />
* D-13772: Expression EventLog.Cases.Events caused error "Value cannot be null".<br />
* D-13755: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13739: When switching between System reports there was error: "Uncaught Error: 2nd dimension not found. at y.getExpressionConfiguration".<br />
* D-12109: Sometimes flowcharts showed message "Error in querying event type measures. Input string was not in a correct format".<br />
* D-12473: Cost Savings by Automation preset gave sometimes error "Unable to cast object of type 'System.Double' to type 'System.String'".<br />
* D-13750: Snowflake model didn't work with the Case Duration vs. Manual Activities preset.<br />
* D-13657: There was error converting data type nvarchar to bigint.<br />
* D-13796: Some Snowflake operations didn't work with zero rows and columns.<br />
* D-12494: Now when chart size changes, the table column filters and sorting are preserved.<br />
* D-13736: In Performance benchmarking dialog, the Export result button exported wrong benchmark performance analysis result.<br />
* D-13609: Improved conformance analysis related filter names.<br />
* D-13594: Recycle bin buttons were not visible when opening recycle bin in a narrow screen.<br />
* D-13226: Tooltips in the model properties dialog are now translated.<br />
* D-12569: Table incorrectly showed ellipsis for narrow boolean type of columns showing checkboxes.<br />
* D-13391: Emptying date or datetime picker value was not registered and it didn't trigger functionality.<br />
* D-12621: Value search dialog didn't work with values containing backslashes.<br />
* D-13796: Some Snowflake operation didn't work with zero rows/columns.<br />
<br />
== QPR ProcessAnalyzer 2023.4 (build 2628) (released 2023-06-14) ==<br />
<br />
'''Features:'''<br />
* B-07767: Added [[Gantt_Chart|Gantt chart]] to visualize timeline of cases and events divided into swimlanes.<br />
* B-06383: Added [[Sankey_Chart|Sankey chart]] to visualize flow from one set of values to another.<br />
* B-07941: Implemented many more presets running in Snowflake models for compliance and operational excellence use cases. There are also presets for the path analysis and process bottlenecks identification.<br />
* B-07864: Snowflake conformance analysis shows now [[Conformance_Analysis#Top_Deviations_(in-memory)_/_Deviating_Flows_(Snowflake)|reasons for conformance deviations]], such as which event occurrences deviated from the design model.<br />
* B-07909: Snowflake conformance analysis visualizes [[Conformance_Analysis#Undesired_Events_(Snowflake)|undesired event types]] in table and flowchart.<br />
* B-07823: Flowchart Bottlenecks preset has been changed to show bottlenecks for event types. Also renewed the [[QPR_ProcessAnalyzer_Logs#Task_Log|Tasks reports]] to use expression language based interface.<br />
* B-07891: User interface has been [[Languages_and_Localization|translated into Portuguese]].<br />
* B-07873: Improved [[QPR_ProcessAnalyzer_Pivot_Table|pivot table]] visual layout to highlight totals and aggregated rows. Also the row titles are now visible in the top left.<br />
* B-07905: Added [[SQL_Expressions#Rank_functions|Rank related functions]] to Snowflake for writing more versatile custom KPI's, e.g., FirstValue, LastValue, NthValue, Lead and Lag.<br />
* B-07912: Added more SQL expression [[SQL_Expressions#Array_functions|array functions ArrayToString and ArrayOverlap]] to Snowflake.<br />
* B-06449: Added SQL expression functions ToTimestamp and TryToTimestamp for parsing timestamps from strings using provided format.<br />
* B-07959: Added new functions Base64Encode and Base64Decode to help using basic HTTP authentication when calling web services.<br />
* B-07206: SQL expressions support data [[SqlDataFrame_in_Expression_Language#WithClusterColumn|clustering]] which is an unsupervised machine learning algorithm to group data based on similarities.<br />
* B-07848: Data can be extracted from SAP using the encrypted [[Importing_Data_from_SAP#SNC_encrypted_connection|SNC connection]].<br />
* B-07903: Added expression language API to create and modify filters and models.<br />
* B-03103: [[QPR_ProcessAnalyzer_Logs#Task_Log|Task log]] (operation log) can be accessed in expression language.<br />
* B-07872: List aggregation with Distinct=true orders now items by their value.<br />
* B-07940: Removed "Count" aggregation from textual values in Big data chart (you can use the Case count, Event count, etc. selection instead).<br />
* B-07757: Backend support for datatables linking to user-definable Snowflake database, schema and table.<br />
* B-07825: Improved error message when trying to use non-existing attributes in Snowflake queries.<br />
* B-03101: To expression language, added try-catch-finally statement to handle thrown exceptions.<br />
* B-07861: Removed available and total virtual memory information from User settings dialog.<br />
* B-07902: Optimized sequences of joins in Snowflake queries to improve performance.<br />
* B-07837: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13709: If image width-to-height ratio was lower than container's ratio, image was incorrectly stretched to fit the container.<br />
* D-13660: Disabling filter rules didn't work in Snowflake models.<br />
* D-13526: Passing dataframes from SQL scripts to expression scripts didn't work.<br />
* D-13661: Snowflake conformance analysis crashed when there was no access to conformance related Snowflake UDF's.<br />
* D-13693: Resolved major Snowflake conformance analysis performance issues in the BPMN model handling.<br />
* D-13716: Snowflake root causes analysis incorrectly bypassed Snowflake cache.<br />
* D-13707: In SQL Scripting, the datatable analysis (number 18) didn't always copy the data table contents to the target table correctly.<br />
* D-13653: Big data flowchart Root causes preset showed incorrect legend.<br />
* D-13626: Flowchart froze when converting into big data flowchart and vice versa by modifying chart json settings.<br />
* D-13656: Root causes for attribute gave error "Failed to compare two elements in the array" in some situations.<br />
* D-11563: Pivot table had a minimum height of 300px, which caused bottom part of it to be out of view.<br />
* D-13704: In CSV file import, parsing now allows spaces between column separator and text quotation mark.<br />
* D-13598: Chart gave unclear error message when events datatable was not defined.<br />
* D-13655: Improved error messages for BPMN editor and conformance statistics.<br />
* D-13528: Error message for certain erroneous SQL expressions was unclear.<br />
* D-13677: "Flow occurrences with specific case attribute value" selection didn't work for in-memory chart.<br />
* D-13663: Pivot table border line was slightly broken in the header area.<br />
* D-13608: There was incorrect alignment of items in the table paging controls.<br />
* D-13703: Importing CSV file with some special characters to Snowflake failed (due to incorrect escaping in Snowflake staging files).<br />
* D-13708: Duplicating datatable using user defined table, removed data the source table.<br />
* D-13717: Dependency wheel crashed when there were zero weights and showing data labels.<br />
* D-13348: There was an unclear error message when Snowflake query had a certain incorrect expression.<br />
* D-13732: Pivot table Excel export contained headers formatted incorrectly.<br />
* D-13729: There was a JavaScript error when limited user tried to access business calendar.<br />
* D-13662: Percentile function didn't always work with timespan types.<br />
* D-13646: Using incorrectly configured model without cases datatable caused null reference error.<br />
* D-13629: When tried to use chart with a non-existing model, there is now a proper translated error message.<br />
<br />
== QPR ProcessAnalyzer 2023.3 (build 1990) (released 2023-05-03) ==<br />
<br />
'''Features:'''<br />
* B-07818: [[Conformance_Analysis|Conformance analysis]] is supported in Snowflake with following dashboard components: Big data chart, BPMN editor, Conformance statistics, and Design model selector.<br />
* B-07833: [[Root_Causes#Root_causes_in_flowchart|Root causes analysis for flowchart]] is available for Snowflake showing how the event and flow occurrences explain selected phenomena.<br />
* B-07786: Big data chart has more [[Big_Data_Chart#Measure_aggregations|measure aggregations]], such as median, percentile, standard deviation and variance. Also for textual items, unique values can be listed.<br />
* B-07795: [[QPR_ProcessAnalyzer_Table#Conditional_formatting|Conditional formatting]] supports also columns with non-numerical contents.<br />
* B-07830: [[Big_Data_Chart#Measure_aggregations|None and Any aggregations]] for Snowflake and user-friendly formatting for conformance violations.<br />
* B-06527: Error messages in [[Importing_Data_to_Datatable_from_CSV_File|CSV file import]] show also the column number to help working with CSV files with lot of columns.<br />
* B-07747: In-memory conformance checking accepts design models with multiple tasks having same name (same is followed by the Snowflake implementation).<br />
* B-07659: In-memory flowchart preset Case Conformance to visualize conformance checking violations.<br />
* B-07571: Added function IsConformant to backend to check whether cases are conformant.<br />
* B-07863: Added function ConformanceViolationsFlows to backend to return nonconformance reasons for violating cases.<br />
* B-07844: Support for "array" aggregation to return aggregated items as array.<br />
* B-07856: Support for creating and accessing arrays and objects in SQL expressions.<br />
* B-07860: Array handling functions and Tasks property for DesignModel entity.<br />
* B-07847: Added throttling for QPR ScriptLauncher client-side imports to limit memory usage.<br />
* B-07811: Snowflake query optimization to omit columns that are not used by the query.<br />
<br />
'''Fixed issues:'''<br />
* D-13632: Going from variations to event types led to very poor performance with certain models.<br />
* D-13628: Statistical calculations were incorrectly not applied in chart CSV export.<br />
* D-13575: SQL script may have given error "Operand type clash: nvarchar(max) was incompatible with sql_variant".<br />
* D-13597: UI supports now datatable column type "ShortString" (previously datatable contents preview and CSV import didn't work).<br />
* D-13536: Using business calendar sometimes gave error "System.InvalidOperationException: Collection was modified".<br />
* D-13477: Chart types without y-axis mapping caused an error when series mapping was used.<br />
* D-13453: _model variable was not available for Snowflake expression filter rules.<br />
* D-13527: Checkbox height didn't increase when long label needed to span to multiple lines.<br />
* D-13363: Snowflake query with EvaluateAfterAggregations and IsHidden failed when dimensioning by case id column.<br />
* D-13383: Snowflake query gave error "Invalid column name 'FromCase Name'".<br />
* D-13523: Request id was incorrectly shown as zeros in error messages.<br />
* D-13541: In CSV import, error message for maximum number of columns exceeded is improved (maximum is 300 column for SQL Server).<br />
* D-13583: Objects count in header didn't work for empty Snowflake model.<br />
* D-13553: Larger pacm files can now be imported, as there isn't error "Request body too large. The max request body size is 30000000 bytes".<br />
* D-13306: Stack overflow error was given when using SqlDataFrames.<br />
* D-13487: When Flows root and there was filter in Values expression, some flows were lost.<br />
* D-13540: SqlDataFrame query with 300 columns failed to error "WithExpressionColumn: No name given for the new column".<br />
* D-13429: Ordering in List aggregation couldn't find columns in dataframe query.<br />
* D-13406: Dataframe query with root FlowOccurrences and get value from cases caused error.<br />
* D-13538: There was incorrect handling of escaping characters in column names used in dimensions.<br />
* D-13633: Fixed ordering in List aggregation with null and empty values.<br />
* D-13636: Query that dimensions by numeric case attribute with AggregateOthers true, caused error.<br />
* D-13589: Creating Snowflake datatable did not connect to Snowflake.<br />
* D-13623: Value expressions without aggregation didn't work with AggregateOthers setting.<br />
* D-13554: In in-memory chart, percentile function might have return both Int64 and Double type of objects which cannot be sorted.<br />
* D-13481: Improved error message when trying to use deleted model.<br />
* D-13621: Dynamic value search dialog had incorrect font in lists.<br />
* D-13610: Some invalid BPMN files crashed BPMN editor.<br />
* D-13614: Checkbox label texts overflowed to right.<br />
* D-13520: Removed excessive parameters from the Query Designer for generic context queries.<br />
* D-12998: QPR icon was incorrectly positioned in header in Safari.<br />
* D-13480: Import to duration data type is removed from Snowflake datatables, and for local datatables duration type maximum size is checked.<br />
* D-13517: In Highcharts-based visualizationsm conditional formatting didn't work for other than the first y-axis mapping.<br />
* D-13529: In some presets containing several on-screen settings, when chart showed in error message, on-screen settings showed invalid selection.<br />
* D-13530: Opening dropdown list caused JavaScript error when the list contents should be empty after it previously contained items.<br />
* D-13486: Removed unreachable error message in CSV import.<br />
* D-13524: Fixed in-memory chart flow occurrences root measures "Event attribute (text)" and "Event attribute (number)" that caused error.<br />
<br />
== QPR ProcessAnalyzer 2023.2 (build 1478) (released 2023-03-22) ==<br />
<br />
'''Features:'''<br />
* B-07755: [[Business_Calendar|Business calendar]] for duration calculation is available for Snowflake models.<br />
* B-07719: In Snowflake dashboards, [[Big_Data_Chart#Using_measure_variables|measures can be assigned to variables]] and use the variables in other measures to create combined measures.<br />
* B-07746: Changed in-memory conformance checking to not show invalid flow violations where starting or ending event type is invalid.<br />
* B-07743: [[PA_Configuration_database_table#General_Settings|Default datasource]] can be configured for datatables created by scripts, allowing to set Snowflake as default.<br />
* B-07740: System memory indicator moved from the header to User settings Version information dialog.<br />
* B-07776: New SQL expressions functions Unicode, Char and Regexp, as a basis for future rule-based process mining.<br />
* B-07741: Backend support for aggregation operations Median, Percentile, Stdev, Stdevp, Var and Varp to Snowflake.<br />
* B-07742: Backend support for aggregation operation to list unique items in Snowflake.<br />
* B-07770: Optimized Snowflake SQL generation by combining consecutive WithColumn function calls into one select.<br />
<br />
'''Fixed issues:'''<br />
* D-13491: QPR ProcessAnalyzer server crashed now and then when sorting was in progress and the query was cancelled.<br />
* D-13380: Dimensioning integers in in-memory core calculation didn't work correctly as 0 and -1 were put to same bucket.<br />
* D-13385: In Workspace Bin, Delete Forever and Restore from Bin buttons were misaligned.<br />
* D-13332: Conformance checking didn't show in violations when there were multiple undesired events in same case.<br />
* D-13405: Images take now always all available space in image component area.<br />
* D-13417: KPI card without title was slightly misaligned vertically.<br />
* D-13438: Clicking selected event type or flow in flowchart didn't cancel the filter selection.<br />
* D-13350: Task log and Script log default filter end date is now empty by default.<br />
* D-13381: Disabled browser auto-complete from flowchart variation stepper and Workspace create/rename object dialog.<br />
* D-13347: Improved performance for in-memory business calendar calculation.<br />
* D-13335: In in-memory chart, filtering didn't work in "Flow occurrences" root "Flow occurrences with specific event attribute value" dimension.<br />
* D-13367: Percentage value wasn't displayed properly with German or Spanish language when event types were shown in object counts indicator.<br />
* D-13451: Exported filter file is now named based on selected filter name.<br />
* D-13378: In Big data chart, prevented error "Unable to aggregate from level RootCauses to level Custom".<br />
* D-13293: DataFrame query with root Flows and IncludeEvents and ExcludeEvents filter rules failed.<br />
* D-13370: Fixed issue where on-screen settings that didn't have any selectable items, showed a strange selection.<br />
* D-13392: Clustering analysis was incorrectly shown when originally in-memory chart was converted into big data chart by changing chart json settings.<br />
* D-12784: Some Snowflake queries incorrectly bypassed Snowflake caching because they used unique object names.<br />
* D-13456: Improved error messages for incorrectly configured on-screen settings.<br />
* D-13445: Conformance violations related translated terms have been fine-tuned for better translations into different languages.<br />
* D-13421: Improved error messages when trying to use model having some column mappings missing.<br />
* D-13485: Snowflake business calendar gave error when calendar contained Sunday.<br />
* D-13218: Windows event viewer incorrectly contained log entries that are not errors.<br />
* D-12634: Multiline text boxes width is set to non-changeable.<br />
* D-13034: Confirmation dialog to delete items permanently has been updated.<br />
* D-13288: In dialogs, the Create button didn't show the disabled state correctly.<br />
* D-13427: When dropdown lists didn't have any selectable items, the "N/A" text appeared and the list incorrectly took more space vertically.<br />
* D-13483: In Workspace, the new items menu was too narrow for Spanish texts.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.1 (build 1449) (released 2023-02-24) ==<br />
<br />
'''Features:'''<br />
* B-07690: System setting [[PA_Configuration_database_table#General_Settings|DatabaseId]] can be defined by administrator to get more simple table names in Snowflake.<br />
* B-07737: In flowchart Bottlenecks preset, originally used flow colors has been recovered.<br />
* B-07748: For Analyzed objects "Conformance checking findings" in charts, terminology has been revised and issue with the case count calculation fixed.<br />
* B-07663: In [[Chart_On-screen_Settings|on-screen settings]], when case/event attribute is selected, related attribute values list are reset.<br />
* B-07570: Backend support for [[Business_Calendar|business calendars]] in Snowflake.<br />
* B-07660: Backend support for conformance checking to show also the last event index and event type in NotCompleted reason.<br />
* B-07610: Memory counter related technical properties have been removed from expression language.<br />
<br />
'''Fixed issues:'''<br />
* D-13349: Opening dashboard containing Root causes preset with default settings jammed the system by generating lot of calculations (for more information, see previous release notes).<br />
* D-13277: Stacked charts with date type of data as series did incorrectly show gaps in columns/bars.<br />
* D-13270: Flowchart conditional formatting didn't work with duration multi-unit format.<br />
* D-13358: Calculation results caching works also across different user sessions.<br />
* D-13250: Dashboard with two charts connected with linked settings using variables ended up to to a never ending loop.<br />
* D-13230: SAP import did not automatically create columns to use the correct column types.<br />
* D-12857: Deeply recursive functions caused a crash without any trace.<br />
* D-12994: In Workspace, some buttons were not clickable due to breadcrumb covering them.<br />
* D-13249: In Workspace, there was incorrect error message for duplicate datatable names when there were items with only letter capitalization was different.<br />
* D-13232: In-memory chart Top variations preset is now sorted secondarily by average duration descending.<br />
* D-13300: Setting DashboardFilter variable to empty value didn't have any effect in dashboard but old value was incorrectly used.<br />
* D-12834: Limited the maximum number of dimensions to 20, to avoid too demanding queries for SQL Server.<br />
* D-12917: Changed visual indication of missing items in dropdown lists (it's no longer showing "***").<br />
* D-13111: In Root causes preset, there is now error message when trying to use weighting related columns when weighting isn't in use.<br />
* D-13124: SQLDataFrame query containing filter rule EventTypes aggregating from cases failed.<br />
* D-13207: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed.<br />
* D-13292: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed (rev.2).<br />
* D-12991: Dropdown list texts had some translations missing.<br />
<br />
== QPR ProcessAnalyzer 2023.1 (build 1433) (released 2023-02-07) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release contains a potentially severe issue, where some dashboards completely jam the system by generating lot of calculations. The issue may appear in dashboards that have been created in earlier releases and containing the Root causes preset with default settings. The issue will be fixed by the next release. The issue can be worked around by exporting the affected dashboard, modifying the dashboard file manually and importing the dashboard back. The required modification is to remove line(s) containing <pre>"preset": "RootCauses"</pre> and the comma from the preceding line.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Cases (analysis number: 5), Events (6), and EventTypes (7). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). Note that the legacy analyses removal don't affect the dashboarding functionality.<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [5, 6, 7];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2023.1, the '''.NET Desktop Runtime''' is not needed anymore for QPR ProcessAnalyzer Server, so it can be uninstalled. Also for QPR ScriptLauncher, ''.NET Desktop Runtime'' is not needed, but instead install the '''.NET Runtime''' (which is more lightweight). ''.NET Desktop Runtime'' contains the ''.NET Runtime'', so the actions are not mandatory when updating to QPR ProcessAnalyzer 2023.1.<br />
</div><br />
<br />
'''Features:'''<br />
* B-06997: Expression-based filter rules for Snowflake dashboards to allow versatile filtering and filtering from custom expressions.<br />
* B-07383: Improvements to linked settings to allow binding to variables, tags and filter rules [[Chart_Linked_Settings|(more information)]].<br />
* B-07508: Flowchart preset colors have been renewed to be more intuitive.<br />
* B-07184: Automation preset in flowchart has now options for selecting the Automation attribute and value.<br />
* B-07512: Changed datatable metadata can be refreshed from Snowflake, and all rows in the datatable can be deleted easily in Workspace [[QPR_ProcessAnalyzer_Project_Workspace#Datatables|(more information)]].<br />
* B-07440: Date when the release was made is now shown in User settings.<br />
* B-07595: WeekOfYear property for DateTime objects in expression language to get the week number of a year (between 1 and 53).<br />
* B-07623: In-memory expression language functions Random (to get random numbers) and Hash (to get hash value of string).<br />
* B-07612: Breadcrumb in Workspace has now a Home button to quickly navigate to the top level of the projects hierarchy.<br />
* B-07637: Language selector now shows the language options in local languages.<br />
* B-07228: Remove following deprecated analyses: Cases, Events, and EventTypes (see the release note above).<br />
* B-07538: Backend support: Snowflake root causes analysis can find event attribute related root causes.<br />
* B-07706: Backend support: Snowflake expression-based filter rules support for roots containing Where function.<br />
* B-07611: Removed following legacy filter rules: CaseAttributeTrend, EventAttributeTrend, EventTypeTrend, and Duration.<br />
* B-07598: Refactored client-side import for SQL scripting to use generic client-side task mechanism.<br />
* B-07716: ShortString columns are now properly detected in SQL Server queries.<br />
* B-07652: Now it's possible to pipe multiline expression strings to QPR ScriptLauncher.<br />
* B-07688: AddColumns function for Datatables to create multiple columns in one call.<br />
<br />
'''Fixed issues:'''<br />
* D-13092: Table conditional formatting didn't work when color code was fetched from other column.<br />
* D-13105: Some charts created in earlier release referring to non-existing presets names appeared as empty after software update.<br />
* D-13107: Flowcharts crashed and showed loading animation forever when setting color or flow thickness to non-numerical measure.<br />
* D-13104: In BPMN model editor, context menus to edit elements didn't appear.<br />
* D-12939: Script editor tabs Close buttons didn't work.<br />
* D-13154: "Search by case ID" didn't work in in-memory chart.<br />
* D-12933: CSV columns with only empty values were incorrectly auto-detected as integers.<br />
* D-12929: In-memory chart Root causes for case duration and Root causes for case attributes (weighted) had Custom expression missing.<br />
* D-12928: Pivot table headers were empty when there were two column levels and two values.<br />
* D-12924: Pivot table columns with Count and Distinct Count aggregations are now numeric and aligned right.<br />
* D-13033: Changing colors in chart settings Color palette caused "Item already exists" error and prevented changing colors.<br />
* D-12996: Tags referring to dashboard variables didn't work in Additional root expression.<br />
* D-12877: UI gave error in some situations: Uncaught TypeError: Cannot read properties of undefined (reading 'min').<br />
* D-13071: Prevented selecting two or more of the Y-axis, X-axis and series mappings at the same time for the same measure or dimension.<br />
* D-12895: Big data chart crashed when on-screen setting contained event type selector and there were no event type filter set.<br />
* D-13231: Tooltips for dashboard name, model selector and filter selector in header show now the content text instead of generic instruction.<br />
* D-13139: There was an error when tried to create filter for a custom expression where selected data type didn't match with the actual type of data.<br />
* D-12988: Chart presets selection in chart settings showed unnecessary tooltip.<br />
* D-12901: When set sampling over 1 million, Snowflake models gave error: parameter value out of range: size of fixed sample. Must be between 0 and 1,000,000.<br />
* D-12904: Creating expression filter having lower/greater logic with root objects sampling failed.<br />
* D-12923: Chart schema didn't accept pivotAggregation in dimensions/columns.<br />
* D-12926: Root causes columns Selected weight, Compared weight and Total weight have now correct float data type.<br />
* D-12880: In out-of-the box dashboards, chart titles and subtitles were not translated.<br />
* D-12916: Improved filter rule description text in Filter rule editor dialog for expression filter rules.<br />
* D-12889: No clear error message was given when user tried to export corrupted model from .pacm file.<br />
* D-12869: Date selector in on-screen settings had inconsistent vertical alignment.<br />
* D-12938: When creating a filter with lasso and selecting a single data point only, "equals" kind of filter rule is now created.<br />
* D-12989: "Running tasks as specific time" system report may have ended up in loop causing following error: Maximum call stack size exceeded error.<br />
* D-13010: Pivot table sometimes ended up to never-ending resizing loop when browser zoom was more than 100%.<br />
* D-12790: Expression language: DataFrame.SetColumns: Initializing and using variables defined in closure of SetColumns function parameter didn't work<br />
* D-12927: All on-screen settings were not be visible in narrow charts having several on-screen settings.<br />
* D-12937: Added maximum value limitation to several number input fields in charts.<br />
* D-12947: Message dialog didn't show line breaks correctly (e.g., in CSV file import).<br />
* D-12948: Defining column setting caused error when Measure Expression was not defined.<br />
* D-12946: Filter rule text couldn't be seen entirely from tooltip.<br />
* D-12983: When range filtering using integer values in Highcharts chart, filter is now shown as integer value.<br />
* D-12984: When range filtering in Highcharts charts and there is category axis, filter rule is now based on individual (category) values.<br />
* D-12930: When creating filters from charts using date type of X-axis with lasso, "greater than or equal" and "less than or equal" filter rules are not created.<br />
* D-12920: "Where" function in DataFrame lost column data types of the original DataFrame.<br />
* D-13048: Model notifications failed with certain measures that define variables in root expression leading to error: Variable "sampleSize" already exists in this context.<br />
* D-13116: BPMN editor had some translations missing.<br />
* D-13019: Datatable and script selectors show now datatable/script name instead of id, when opening selector having existing selections.<br />
* D-12951: Changing additional root expression in flowchart didn't refresh the flowchart.<br />
* D-13147: Filter rule boxes in header had different widths, and Add filter rule button vertical alignment was incorrect.<br />
* D-12907: Sometimes case attribute selection showed incorrect attribute name for empty model.<br />
* D-13148: Filters and Datatables system reports loaded unnecessarily twice which could be seen as blinking.<br />
* D-12844: In dataframe query, FlowOccurrences in root and GetValueFrom Cases with filter gave null reference exception<br />
* D-12915: Repeating certain query twice with aggregations in Events root generated invalid SQL<br />
* D-12728: Was huge amount logs in server during client side import (manual testing required as identification)<br />
* D-13156: Persist function failed to snowflake: Invalid unicode escape sequence '\u0027ACCE'; should be at most '\u0010FFFF'.<br />
* D-12876: Flows/FlowOccurrences in root didn't work with SqlExpressionValue filtering.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2022.8 (build 1397) (released 2023-01-11) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release fixes an issue where extracting large datasets from SAP increases memory consumption considerably and may lead to out-of-memory error. This release contains packages for both QPR ScriptLauncher and QPR ProcessAnalyzer Server. If SAP extractions are done using QPR ScriptLauncher in client side mode (ExecuteInClientSide=1), it's enough to update QPR ScriptLauncher to fix this issue.<br />
</div><br />
<br />
'''Fixed issues:'''<br />
* D-12941: Extracting data from SAP consumed unnecessary lot of memory and may have led to out-of-memory error (both when running using QPR ScriptLauncher and in server side).<br />
<br />
== QPR ProcessAnalyzer 2022.8 (build 1396) (released 2022-12-30) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Creating datatables with duplicate names in the same project is prevented, and possible existing duplicate names are automatically changed to unique names with a random suffix. If there are duplicate names, they can be renamed either before updating QPR ProcessAnalyzer (to avoid automatic renaming) or after the update (by changing suffixed names). If the renamed datatables are used by models, the linkage will break because it's based on the datatable name. Creating duplicate datatables has already been prevented in the UI, but the improved method works also in the API level.<br />
<br />
Following SQL query can be used to list datatables (and project id) having duplicate names:<br />
SELECT ITA_NAME, ITA_PROJECT_ID<br />
FROM PA_INTEGRATION_TABLE<br />
GROUP BY ITA_NAME, ITA_PROJECT_ID<br />
HAVING Count(*) > 1<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
If trying to use business calendar for a model that doesn't have the business calendar defined, there will now be an error message instead of showing the chart. Either unselect the business calendar checkbox for the measure or dimension, or define a business calendar to the model. In this situation in earlier releases the business calendar was ignored and full time calculation used.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07498: Automation and Operational Excellence presets and Root causes analysis (for Snowflake), Weighted root causes analysis and Event scattering preset (for Snowflake and in-memory), Root causes for case duration (in-memory).<br />
* B-07177: Flexible mappings, user selectable aggregations and conditional formatting for Pivot table, and flexible mappings for KPI Card.<br />
* B-07518: New function named Query to run call /api/expression/query.<br />
* B-07294: In Workspace, the left side projects hierarchy can be collapsed and expanded to make more space to project contents.<br />
* B-06814: In SQL expressions, new function DurationBetweenDates to calculate duration between timestamps precisely.<br />
* B-07519: Replaced DateDiff function with the new DurationBetweenDates function in big data chart.<br />
* B-07531: In SQL expressions, new mathematical functions Abs, Log, Mod, Power, Rand, Sign and Sqrt.<br />
* B-07297: To optimize performance, Snowflake queries are automatically cancelled if they are not needed by UI.<br />
* B-07569: To optimize performance, TakeSample function implementation is improved for Snowflake.<br />
* B-07198: Several performance improvements to DataFrame queries (used in Snowflake).<br />
* B-07464: Added Lead and Lag functions to SqlDataFrames to support getting previous and next event.<br />
* B-07470: New ExtractSap function to fetch data from SAP using expression language.<br />
* B-07536: New Pivot function to SqlDataFrames to enable root causes analysis.<br />
* B-07488: Primary keys can be set to datatables to improve calculation performance (UI will follow later).<br />
* B-07515: Added RootCauseAnalysis function to SqlDataFrames.<br />
* B-07546: RootCauseAnalysis function support for complex weighting expressions.<br />
* B-03052: Support for user-defined variables in /api/expression/query.<br />
* B-07565: Support for NumberPrecision, DatetimeTruncation and TimespanPrecision properties for Values section in in-memory query.<br />
* B-07513: For product activation file handling, replaced mutex based implementation with exclusive file lock.<br />
* B-07480: Expression language support for DataFlows for data extraction.<br />
* B-07613: Removed support for SQL Server based R scripting.<br />
* B-07567: Take datatable primary keys into use in expression builder to improve performance (part 2).<br />
* B-07588: Remove total memory information from log writing and DateDiff function for in-memory.<br />
<br />
'''Fixed issues:'''<br />
* D-12715: Snowflake calculated imprecisely some operations containing division and aggregation.<br />
* D-12761: Progress bar of the CSV import dialog didn't show any progress.<br />
* D-12799: Opening datatable contents dialog settings was slow when there were lot of rows in the datatable.<br />
* D-12089: Include conforming/nonconforming cases made BPMN editor no responding.<br />
* D-12496: Datagrid filter search keyword didn't work for rounded values, so the search was hidden for other than textual data.<br />
* D-12704: Durations as quarters was calculated incorrectly in charts.<br />
* D-12662: Fixed issue where some special literals in custom expressions didn't work.<br />
* D-12403: Setting Notifications on a model had some visual issues.<br />
* D-12859: Dependency wheel visualization crashed with nulls values in From and To mappings.<br />
* D-12660: Removed unnecessary float conversions in SQL expressions.<br />
* D-12653: In-memory datafram OrderByColumns function with mixed values failed.<br />
* D-12657: When trying to use milliseconds period in some presets, frontend frozed.<br />
* D-12706: Line breaks in data were shown in many places where it's undesired.<br />
* D-12719: Syncfusion dialog headers showed backslaces incorrectly.<br />
* D-12372: Refused to run the JavaScript URL because it violated the Content Security Policy directive.<br />
* D-12730: Logging out when filter selection is in progress, gave javascript error.<br />
* D-12705: Header object counts tooltip was sometimes messed after logout.<br />
* D-12384: Selected project was not highlighted for whole project name string.<br />
* D-12581: Prevented creating duplicate datatable names in same project in parallel execution.<br />
* D-12722: There was incorrect syntax near '<' when running SqlDataFrame expressions.<br />
* D-12736: Swedish and Finnish translation improvements for object counter tooltips.<br />
* D-12702: For BPMN Editor component "Something went wrong" error was given when switching from in-memory to Snowflake model.<br />
* D-12712: UI gave error: TypeError: Cannot read properties of undefined (reading 'id').<br />
* D-12738: Business calendar showed total business time when calendar configuration was invalid.<br />
* D-12776: Special character filter caused JavaScript SyntaxError.<br />
* D-12785: Unnecessary vertical scrollbar displayed for main header toolbar.<br />
* D-12164: There was unnecessary UnauthorizedAccess errors in logs.<br />
* D-12580: Case duration was not same when comparing Big data chart with in-memory chart for same data.<br />
* D-12768: Data grid links and variable change actions didn't work when grouping was used.<br />
* D-12735: FindRootCauses (in-memory) function filtered out cases with zero contribution.<br />
* D-12763: --#CallWebService didn't work from ScriptLauncher.<br />
* D-12789: There was timeout in SQL queries to scripting sandbox.<br />
<br />
== QPR ProcessAnalyzer 2022.7 (build 1331) (released 2022-11-15) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2022.7, to improve security expression language operations that modify data or connect to external datasources are prevented in dashboard custom expressions. The limitation is required, because when a dashboard is opened, its expressions are run with the user's permissions, and the user need to trust the expressions don't perform any unexpected operations, such as delete data. The full functionality of the expression language is available in the scripts and in the Expression Designer.<br />
<br />
The following functions and operations are prevented in dashboards: SendEmail(), CallWebService(), ImportOdbc(), ImportOdbcSecure(), Model.DeletePermanently(), Model.Restore(), Model.TriggerNotifications(), Project.DeletePermanently(), Project.Restore(), Project.CreateDatatable(), Datatable.AddColumn(), Datatable.DeletePermanently(), Datatable.Import(), Datatable.Merge(), Datatable.RemoveColumns(), Datatable.RenameColumns(), Datatable.Truncate(), RecycleBin.DeletePermanently(), and call SQL script. Calling expression scripts is allowed, but in the script all previously mentioned operations are prevented.<br />
<br />
Following SQL query can be executed in the QPR ProcessAnalyzer metadata database to reveal dashboards that potentially have prevented expressions:<br />
SELECT * FROM [PA_UI_ELEMENT] WHERE [UIE_PROPERTIES] LIKE '%SendEmail(%' OR [UIE_PROPERTIES] LIKE '%CallWebService(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbc(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbcSecure(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Restore(%' OR [UIE_PROPERTIES] LIKE '%TriggerNotifications(%' OR [UIE_PROPERTIES] LIKE '%CreateDatatable(%' OR [UIE_PROPERTIES] LIKE '%AddColumn(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Import(%' OR [UIE_PROPERTIES] LIKE '%Merge(%' OR [UIE_PROPERTIES] LIKE '%RemoveColumns(%' OR [UIE_PROPERTIES] LIKE '%RenameColumns(%'<br />
</div><br />
<br />
'''Features:'''<br />
* B-07287: Process Discovery and most important presets for Snowflake.<br />
* B-07271: "Last Row Aggregates Over-limit Rows" setting for big data chart.<br />
* B-06431: Snowflake datatables support for database views in the datasource.<br />
* B-07266: Security: "limited mode" to prevent data modifications and external calls from dashboard expressions.<br />
* B-07097: Improved flowchart root causes color scales.<br />
* B-07363: SQL LIKE function support for escape character.<br />
* B-06877: Improved variation queries performance in Snowflake, part 1.<br />
* B-07444: Improved variation queries performance in Snowflake, part 2.<br />
* B-07382: Support for empty strings and nulls in event type names in dataframe processing.<br />
* B-07273: WithRowNumberColumn, WithRankColumn, WithDenseRankColumn support for descending sorting.<br />
* B-07303: FindRootCauses function support for weighting expression.<br />
* B-07327: Unpivot function for SqlDataFrames (for root cause analysis).<br />
* B-07385: Align token lifetime with SESSION_MAXIMUM_DURATION setting.<br />
* B-07500: ColumnMappings property for IDataFrame and DataTables.<br />
* B-07499: IDataFrame.ApplyFilter function to filter events data using a JSON-based filter.<br />
* B-07469: Translation updates for release 2022.7.<br />
<br />
'''Fixed issues:'''<br />
* D-11630: Drag and drop from chart settings to main header was working incorrectly for filter and root cause rules.<br />
* D-12455: Moving a chart filter from one chart to another created a root cause analysis filter.<br />
* D-12266: Root causes analysis showed incorrect results when certain combination of filters.<br />
* D-12525: Numerical values in Excel export in data grid was formatted incorrectly.<br />
* D-12534: Restoring item from recycle bin changed project from Bin to previous project.<br />
* D-12529: Measure specific datalabel mapping did not work correctly when also mapped to Y-axis.<br />
* D-12532: Multi-selection options caused layout issue for Chart setting.<br />
* D-12541: Layout issue for Polish in multiselect list search dialog.<br />
* D-11277: Increase/decrease Icons were missing in the dimension sorting for Mac.<br />
* D-12552: Uncaught Error: Diagram.selectCollection given something that is not a Part: null.<br />
* D-12567: Tooltip incorrectly showed for label component containing only spaces.<br />
* D-12438: Operation was cancelled because it was replaced by a new operation.<br />
* D-12551: Some expressions didn't work as calculated case/event attributes.<br />
* D-11720: Chart buttons were not visible in Apple Safari and iPad.<br />
* D-12544: On-screen settings "options" parameter did not work.<br />
* D-12528: Multi-unit time unit selection appeared where it's not applicable.<br />
* D-12583: Error message should be provided for invalid settings input than just display JS errors.<br />
* D-12599: Tooltips didn't show correct measures/dimensions when "Show in tooltip" mappings are used.<br />
* D-12561: Chart settings content was incorrectly drawn outside of the chart dialog.<br />
* D-12568: Reload UI sometimes crashed chart having multiselect on-screen settings.<br />
* D-12572: Main header toolbar lost when refresh maximized PA chart.<br />
* D-12612: Drop Unused Filters After setting incorrectly allowed zero seconds.<br />
* D-12533: Error message keeped blinking in Analysis view.<br />
* D-12608: User could not select or add new case attribute when current select attribute doesn't exist.<br />
* D-12451: Prevented deleting running script.<br />
* D-12516: Windows event viewer warning: Failed to gracefully shutdown application.<br />
* D-12523: Business calendar performance - part 2.<br />
* D-12538: Column with same name could be added multiple times to datatable using expression language.<br />
* D-12582: Improved EMS mutex code to support multiple PA service in one server.<br />
* D-12624: Synchronize new (empty) data table generated failed queries in Snowflake.<br />
* D-12622: Advanced setting page reserved room for the expression editor frame that did not exist.<br />
* D-11295: In on-screen settings, some UI controls were vertically misaligned.<br />
* D-11625: The heights of the parameter option menu in the clustering tab was not well aligned.<br />
* D-12103: Small dropdown list layout issue.<br />
* D-12633: Align issue for Column related Advanced settings.<br />
* D-12505: Search dialog didn't escape % and _ characters correctly in dataframe processing.<br />
* D-12645: Tabs in expression settings dialog were partly hidden when dialog is narrow.<br />
* D-11382: Moving of flowchart was sometimes shaky.<br />
* D-12655: Filter rule tooltips in header were styled incorrectly.<br />
* D-12656: Large integer values in filter jsons were incorrectly presented as small integers.<br />
* D-12661: Some exported filters contained unnecessary "invert" property.<br />
* D-12500: Model with numeric case id's and filtering with the attribute mapped as case id: ERROR [22018] Numeric value <nowiki>''</nowiki> is not recognized.<br />
* D-12509: Filtering null values didn't work in boolean attributes in Snowflake.<br />
* D-12571: In dataframe processing in SQL Server, dividing two integers should not make rounding to integer.<br />
* D-12610: Setting for global DropUnusedFiltersAfter was missing.<br />
* D-12613: Filtering with case/event attributes with null values didn't match in Snowflake models.<br />
* D-12617: Model didn't work when DropUnusedFiltersAfter is 00:00:00.<br />
* D-12618: If model ConfigurationJson is null, Configuration property didn't work.<br />
* D-12620: Filtering didn't work when there are backslaces in attribute names in Snowflake models.<br />
* D-12643: AttributeFunctionCallExpression did not always work properly in array context.<br />
* D-12647: SqlDataFrame with SQL Server: Comparing literals to variant column values failed.<br />
* D-12648: Models that have DropUnusedModelsAfter setting caused "The sliding expiration value must be positive" error.<br />
* D-11526: It was unable to translate Unicode character \uD83D at index 176 to specified code page.<br />
* D-12637: In application startup arised FATAL Application startup exception System.UnauthorizedAccessException: Access to the path 'Global\MutexQPRPAActivation' is denied.<br />
<br />
== Old Releases ==<br />
See older releases in [[QPR ProcessAnalyzer Release Archive]]<br />
__NOTOC__<br />
<br />
[[Category: QPR ProcessAnalyzer]]</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&diff=24490QPR ProcessAnalyzer Release Notes2024-03-21T09:24:14Z<p>Ollvihe: </p>
<hr />
<div>This page lists all new features and fixed issues for each QPR ProcessAnalyzer release.<br />
<br />
== Next Release: QPR ProcessAnalyzer 2024.3 (planned release date 2024-04-02) ==<br />
<br />
'''Features:'''<br />
* B-08242: [[Actions_to_Run_Script_in_Table|Custom actions]] in scripts can be started from dashboard table context menu, e.g., create tickets, trigger automation, and fetch external information.<br />
* B-08252: When Analyzed objects is cases, event attribute values are filtered with the native event attribute filter rules instead of expression based filter rules.<br />
* B-08231: Snowflake performance improved by splitting object counts (shown in header) query into two, so that the filtered object count query uses eventlog caching.<br />
* B-07906: Implemented cross joins to SQL dataframes.<br />
* B-03047: Removed support for dashboard panels.<br />
* B-08214: Removed unused columns from the PA_VIEW table.<br />
* B-08254: Frontend components have been updated.<br />
<br />
'''Fixed issues:'''<br />
* D-14048: Fixed issue where in-memory root causes analysis for case attributes didn't show attributes with ShortString data type.<br />
* D-14049: Added some missing translations for table column filter and BPMN editor.<br />
* D-14021: FindRootCauses function WeightingExpression was run in incorrect context for in-memory model.<br />
* D-14020: Query which goes from EventTypes to Cases did not show the error when using GetValueFrom function.<br />
* D-13976: Fixed issue where gateway-based imports were not synchronous.<br />
* D-13689: Fixed JavaScript error in Highcharts polar chart with tooltips.<br />
* D-12614: Highcharts gives "Maximum call stack size exceeded" error in bar chart with polar and data labels.<br />
* D-14060: Highcharts custom layout translatable properties incorrectly changed chart configuration by translating the labels.<br />
* D-14071: Business calendar button press caused error when user didn't have access to any model.<br />
* D-14041: Manager Users dialog "Has password" field filter shows now Yes/No texts instead of true/false.<br />
* D-11268: There were inconsistent button colors in Workspace.<br />
* D-12264: Disabled stacked and polar charts for donut, packed bubble, sankey, dependency wheel, word cloud, and gantt charts.<br />
<br />
== Latest: Additional release for QPR ProcessAnalyzer 2024.2 (build 5509) (released 2024-02-27) ==<br />
<br />
'''Features:'''<br />
<br />
* B-06280: User management dialog shows whether users have password defined and unnecessary passwords can be removed to improve security.<br />
<br />
'''Fixed issues:'''<br />
<br />
* D-14045: Fixed issue where users with Viewer or Analyzer role couldn't create filters in Snowflake models.<br />
<br />
== QPR ProcessAnalyzer 2024.2 (build 5438) (released 2024-02-21) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue: Snowflake models and dashboards don't work with Viewer and Analyzer role permisions. The reason is that cache tables created to Snowflake incorrectly require the write permissions. Workaround is to give users the Designer role which will give the needed permissions. Note that the Designer role gives many permissions to the user for the project [[Roles_and_Permissions#Roles_and_Permissions|(more information)]]. This issue has been fixed in the next release (D-14045).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
The legacy User permissions report (analysis number 11) and Filters report (analysis number 30) used in SQL scripts have been removed. Use instead the expressions language to query filters and user permissions, e.g., [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|Models.Filters]] and [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
New version of the Design diagram component has been improved with object-specific measures, and the previous common measures are not migrated into object-specific measures. Thus, the measures need to be configured again, or manually edit the chart json settings (if needed please ask instructions from QPR CustomerCare).<br />
</div><br />
<br />
'''Features:'''<br />
* B-08022: Design diagram supports now BPMN notation, elbow style flows and object-specific measures.<br />
* B-08232: Entire future eventlogs can be [[Create_Predicted_Eventlog|predicted]] based on generative AI models running in Snowflake.<br />
* B-08166: Added expression language function [[Generic_Functions_in_QPR_ProcessAnalyzer#OpenAIChatCompletion|OpenAIChatCompletion]] to answer natural language prompts based on OpenAI ChatGPT API.<br />
* B-08177: Snowflake query performance has been improved by introducing caching of filtered eventlogs using Snowflake tables.<br />
* B-08196: Conditional formatting rules can be defined for [[QPR_ProcessAnalyzer_Table#Textual_equal_rules_for_background_color|textual and boolean values]].<br />
* B-08213: Big data chart expressions event type selections to be multi-select where applicable.<br />
* B-08205: Expression language API is available for storing [[Storing_Secrets_for_Scripts|secrets]] for scripts.<br />
* B-07780: Chart [[QPR_ProcessAnalyzer_Chart#Variable_mappings|variable mappings]] has been removed - use the [[Chart_Linked_Settings|linked settings]] instead. Dashboards using variable mappings are automatically converted to use linked settings.<br />
* B-08117: Added ToSqlDataFrame function to convert in-memory dataframe into SQL dataframes.<br />
* B-08174: Only non-default parameters values are written to the operation log.<br />
* B-08200: Timestamps in System reports are shown in user workstation local time.<br />
* B-08171: Dashboard id has been added to queries, to track from which dashboard queries are originating.<br />
* B-07144: Remove legacy User permissions report (analysis number 11) and Filters report (analysis number 30) in SQL scripts (see note above).<br />
* B-08193: Added retry mechanism to QPR ScriptLauncher to recover if connection to server breaks.<br />
* B-08202: Updated copyright for year 2024.<br />
* B-08199: Frontend components have been updated.<br />
* B-08203: Backend components have been updated.<br />
* B-08209: Translations updated for release 2024.2.<br />
<br />
'''Fixed issues:'''<br />
* D-13972: Some measures/dimensions/columns in Big data chart didn't show the expressions level filtering.<br />
* D-14015: Fixed business calendar incorrect calculation when business period covered entire day.<br />
* D-14014: Fixed issue where Snowflake business calendar could not have end time as 00:00.<br />
* D-13962: System variable values were interpreted incorrectly when used in linked settings.<br />
* D-13971: HiddenInNavigation and SortOrder variables didn't work in navigation menu dashboards list.<br />
* D-13959: Removed possibility to add datatable columns with the legacy "any" data type.<br />
* D-13991: Improved drop-down selector component to handle empty strings as variable values.<br />
* D-13965: Datatable column name length was validated incorrectly which may have caused error in saving with too long column names.<br />
* D-13958: Project names showed unnecessary html escaping in the "Move to" menu.<br />
* D-13964: Model attributes and notifications dialogs gave error when trying to use dashboard tags.<br />
* D-13960: Added missing translations for list of permission list and 12-hour clock format.<br />
* D-13966: Fixed issue were root causes chart tooltip sometimes didn't disappear.<br />
* D-13969: Datatable column schema export sometimes showed empty for the key column.<br />
* D-13862: Session token was not accepted when url path capitalization is different.<br />
* D-13942: Datatable could not be dimensioned if it has column named "CaseId".<br />
* D-13980: Business calendar dialog crashed when tried to open it for a model without access.<br />
* D-13983: Notifications dialog didn't validate situation when same name was used in a measure and dimension.<br />
* D-13981: Dashboard import set incorrect model id to dashboard if there was no access to any model.<br />
* D-11276: Translations were missing for 12-hour clock dates (AM and PM) in dashboards.<br />
* D-13977: Multi-select dropdown lists showed some special characters incorrectly.<br />
* D-13945: Syncfusion toast message didn't work when text contains ${[]}.<br />
* D-13930: Pivot table throws javascript error when certain clicks.<br />
* D-13273: Duplicate datatable row count didn't shown correctly.<br />
* D-13994: There was an error in the in-memory chart with some flow related measures about duplicate variable names when same measure was defined twice.<br />
* D-13985: Models list dots menu had texts misaligned in narrow screens.<br />
* D-13995: In Workspace, wrong datatable was selected after duplication when non-default sorting was applied.<br />
* D-13997: Workspace tables column filtering search caused JavaScript errors.<br />
* D-13978: In table Excel export, the last row representing other items appeared incorrectly for in-memory chart.<br />
* D-14007: In System reports, model related selections are hidden from the Analyzed objects lists.<br />
* D-14005: In big data chart, changing to custom expression caused crash with some expressions having case/event attribute.<br />
* D-14003: When dimensioning was not used, pivot table values were incorrectly rounded in the server side.<br />
* D-14004: Removed empty filters from queries to optimize them.<br />
* D-13988: Fixed issue where data grid context menu rendered initially as too high.<br />
* D-13979: BPMN model editor element settings use now Open Sans font.<br />
* D-14013: Fixed incorrect expression "Duration between first and last occurrence" in big data chart event types.<br />
* D-13984: Fixed the error of refusing to run the JavaScript URL.<br />
* D-14031: ThrownObject property was not included to http error response when error came from the script.<br />
<br />
== QPR ProcessAnalyzer 2024.1 (build 4784) (released 2024-01-10) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue fixed in QPR ProcessAnalyzer 2024.2: In Big data chart, some measures, dimensions and columns have the filtering option missing. The issue concerns for example Duration between events, Path starting/until between specific events, and Cases where event occurs before other selections. Workaround is to set the filter in the chart json settings: the filter can be configured to another expression and copied to the correct expression.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
QPR ProcessAnalyzer Server and QPR ScriptLauncher are now using .Net 8 (previous was .Net 6). When updating to this release, install the .Net 8 Runtime ([[Updating_QPR_ProcessAnalyzer_Server|see more]]). The .Net 6 doesn't need to be uninstalled immediately because .Net 6 and .Net 8 work side-by-side, but due to security reasons, the unused .Net 6 should eventually be uninstalled.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In this release, all filters that don't contain any filter rules, are removed. These are legacy filters which have not been visible in the UI.<br />
</div><br />
<br />
'''Features:'''<br />
* B-08019: New component [[Design_Diagram|Design Diagram]] for showing user-created diagrams in dashboards where to visualize process mining metrics.<br />
* B-08087: Generic [[Dropdown_List_Selector|dropdown list selector]] works with Snowflake models allowing to add selection lists for any values.<br />
* B-08163: Linked settings support for binding to [[Chart_Linked_Settings#Binding_to_case_attribute_filters_with_attribute_name_and_attribute_values|case attribute filter values without defining case attribute name]].<br />
* B-08170: Snowflake model filters can be [[Filtering_in_QPR_ProcessAnalyzer#Filter_actions|saved as new models]] which can be used to create snapshots of part of models.<br />
* B-08093: Multiple dashboards can be exported to same file, and model can be set for imported dashboards.<br />
* B-08161: Added [[Datatable_in_Expression_Language#Modify|Modify]] function to change datatable properties and improved [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#CreateDatatable|CreateDatatable]] function for creating datatables.<br />
* B-08122: Added new system report to list dashboards.<br />
* B-08173: Removed legacy filters that didn't have any filter rules.<br />
* B-07961: In OperationLog, changed parameters to json format and added request id.<br />
* B-08069: Added DashboardId property to [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog]] in expression language.<br />
* B-08139: Added [[Datatable_in_Expression_Language#UpdateRows|UpdateRows]] function to update existing rows in datatables with similar logic than SQL update.<br />
* B-08115: Added [[Datatable_in_Expression_Language#DeleteRows|DeleteRows]] function to delete rows in datatables with similar logic than SQL delete.<br />
* B-08149: QPR ProcessAnalyzer has been updated to .Net 8.<br />
* B-08054: Changed Scripts property in generic context to return all scripts, instead of legacy system level scripts.<br />
* B-08138: Changed Synchronize function to remove all columns when no Snowflake table exists.<br />
* B-07689: For datatables, [[Datatable_in_Expression_Language#ForeignKeys|foreign keys]] to other datatables can be defined using expression language.<br />
* B-08176: Translation updates for release 2024.1.<br />
* B-08175: Workspace should show timestamps in user's local time.<br />
<br />
'''Fixed issues:'''<br />
* D-13913: Datatable properties dialog incorrectly showed linked models from other projects.<br />
* D-13916: Chart filter could not be defined for some expressions in Big data chart.<br />
* D-13933: Navigation menu selected item wasn't highlighted when used Snowflake models.<br />
* D-13906: In Conformance Analysis, deviating flows were not translated.<br />
* D-13907: Improved translation related to datatable properties dialog "Used by models" field.<br />
* D-13904: There was an unclear error message in Snowflake, as exception code 1 was returned without AttributeName and ModelName properties when non-existing attribute was in filter.<br />
* D-13911: Fixed small glitches in the opening and closing of drop-down lists.<br />
* D-13918: Datatable could be configured incorrectly to use table for other datatable.<br />
* D-13932: Duplicating datatable with custom table in datasource losed all data.<br />
* D-11002: Removed legacy in-memory prediction preset.<br />
* D-13912: Added check that array cannot be stored to dashboard Content property.<br />
* D-13936: Query designer default query didn't work with Snowflake models.<br />
* D-13938: There was an incorrect logging with some operations related to ScriptLauncher.<br />
* D-13923: Snowflake expressions didn't work with Where function in root referring to case attribute.<br />
* D-13939: ApplyFilter function gave null reference error for non-existing attribute name.<br />
* D-13931: There were issues with AllowExternalDatasources and EnableFullFunctionality settings.<br />
<br />
== QPR ProcessAnalyzer 2023.7 (build 4326) (released 2023-11-28) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Limitation for the maximum amount of data (B-07636) causes a behavior change in in-memory charts that have the Maximum rows settings empty and have the sorting defined. In certain cases, the order in which measures are evaluated changes (due to an internal performance optimization). If there are custom expressions that define variables, the variables may not be available in other measures anymore. As a resolution, either redefine the variables in those measure expressions or add those measures secondarily to the sorting.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Default query timeout of 30 minutes has been added for --#ImportOdbcQuery, --#ImportSqlQuery and --#ImportOleDbQuery commands. If a query run is taking longer than the timeout, the query is stopped. The timeout can be adjusted using the '''QueryExecutionTimeout''' parameter. Previously, there has been no timeout, so queries that take more than 30 minutes require configuring a longer timeout.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Incorrectly configured [[Chart_Linked_Settings|linked settings]] in charts (available in the ''Advanced'' tab) give now an error message, if they are referring to non-existing measures, dimensions or columns. Previously, incorrect linked settings were ignored. To fix the error message, remove the incorrect linked settings.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07511: Datatables have a [[Datatable_Properties_Dialog|dialog]] to view datatable properties, write description, set the Snowflake source table, add/modify/delete columns, and set the datatable key.<br />
* B-08150: Added setting [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|Apply chart filters first]] to determine whether chart filter rules or dashboard filter rules are applied first when chart queries are filtered.<br />
* B-08091: When filtering charts in Snowflake, case attribute filter is created instead of case id filter.<br />
* B-08091: [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|New setting]] to define whether cases or events are filtered by default.<br />
* B-08091: New preset "Looping paths" to detect whether there are repeating patterns of events.<br />
* B-08091: Duration between events calculation ignores negative durations in Snowflake.<br />
* B-08091: Chart loading animation has been renewed.<br />
* B-07636: To prevent dashboards from jamming when querying too much data, added [[QPR_ProcessAnalyzer_Chart#Available_Visualizations|limitations]] to the amount of data that charts can visualize. Note that the limitation concerns the aggregated data that is visualized, not the source event log data.<br />
* B-08017: [[Dashboard_in_Expression_Language|Dashboards API]] has been added to expression language, allowing to create, modify and delete dashboards in scripts.<br />
* B-08056: Following properties have been added to [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#User.2FGroup|user objects]] in expression language: IsLocked, LastLockedDate, LastLoginDate.<br />
* B-08053: [[Navigation_Menu#System_Reports|User rights report]] has been refactored to use [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property in the expression language. The change also simplifies the report as now it only shows the direct role assignments that are visible in the [[Manage_Users_and_Groups|User Management]].<br />
* B-08151: For Snowflake expressions support for following [[SQL_Expressions#Window_functions|windowing functions]]: sum, average, median, min, and max.<br />
* B-08050: When a model is created, the default filter is not created anymore (this is a refactoring that doesn't have any impact on user interface).<br />
* B-08123: Translation updates for 2023.7.<br />
* B-08092: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13876: In CreateSnowflakeConnection function, ProjectId parameter is optional when OdbcConnectionStringKey is not specified.<br />
* D-13898: Snowflake: Exclude case attribute filter didn't work when there was null values and was selecting at least two values.<br />
* D-13890: Fixed XES file import to work.<br />
* D-13894: Business calendar based duration calculation was incorrect in some durations that spanned to several weeks (for Snowflake and in-memory models).<br />
* D-13899: Using broken OdbcConnectionString in a datatable prevented the datatable from being deleted.<br />
* D-13883: Script run stucked after running a script with error that uses client-side ODBC import.<br />
* D-13879: SqlExpressionValue filter when excluding events didn't work with filter rule root expression only.<br />
* D-13896: Adding or removing columns to datatable didn't change the LastModifiedDate.<br />
* D-13882: User details weren't written to operation log when creating or modifying users.<br />
* D-13771: User rights system report didn't give error when changing columns.<br />
* D-13893: Some event filtering caused null pointer error when primary key had been defined.<br />
* D-13873: Fixed pivot table visual issues after component update.<br />
* D-13900: When adding, renaming or removing columns for Snowflake table fails, operation is now rolled back without any changes.<br />
* D-13866: Querying GET api/uielements was quite slow right after server start.<br />
* D-13864: Combinations of translatable and hardcoded strings didn't get translated in UI.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.6 (build 3933) (released 2023-10-24) ==<br />
<br />
'''Features:'''<br />
* B-08055: Error message for locked account has been replaced with generic error message, so that username enumeration is not possible.<br />
<br />
'''Fixed issues:'''<br />
* D-13884: Attributes dialog crashed with some older model configurations.<br />
* D-13843: In charts, selected case and event attributes switched away when attribute data type was ShortString.<br />
* D-13877: Some Snowflake expressions gave error "exceeds maximum length limit of 255 characters" when selecting lot of items.<br />
* D-13878: Snowflake expression filters for case attribute values didn't accept other than string type of case attributes.<br />
* D-13871: Some statistical calculations with percentages didn't work with Last Row Aggregates Over-limit Rows setting.<br />
* D-13875: Using some case level filters in a model without cases datatable didn't work.<br />
* D-13861: Dashboard opens are now logged to the Task log (i.e., calling GET /api/dashboards/{dashboardid}).<br />
* D-13870: Workspace projects hierarchy focused project showed light grey background making the project name not readable.<br />
* D-13867: When starting datatable refresh and going to other tab, went back to Datatables tab when query completed.<br />
* D-13853: If chart Custom Layout settings had extra series defined, chart may have crashed.<br />
* D-13869: Export as CSV button didn't work in the datatable contents dialog when dialog was still loading.<br />
* D-13872: Main progress spinner had unnecessary small scrollbar on top right.<br />
* D-13863: In the REST API method GET /api/users, password field (that has always been null) has been removed.<br />
<br />
== QPR ProcessAnalyzer 2023.6 (build 3847) (released 2023-10-17) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is removed in this release. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
'''Features:'''<br />
* B-07992: Added 10 new presets including Queue analysis, Four eyes principle, Self-looping events, and Path until selected event. There are also presets for Individual Cases Flow and Range of event type occurrences which use Gantt chart.<br />
* B-08011: Added following date related operations for Snowflake: Day of year, Day of month, Day of week, Week of year, Half-year only, Quarter only, Month only, Hours only, Minutes only, Seconds only, and Milliseconds only. These are available when calculating with date type of data.<br />
* B-08016: [[QPR_ProcessAnalyzer_Table#Table_actions|Table actions to set variables]] can also be opened to a new browser tab. Also improved user interface for table actions.<br />
* B-08018: For Snowflake expressions, added Flows aggregations FromEventType and ToEventType to get starting/ending event type, and FlowOccurrences aggregations FromEvent and ToEvent to get starting/ending event.<br />
* B-08001: Added [[Generic_Functions_in_QPR_ProcessAnalyzer#CallStoredProcedure|CallStoredProcedure]] function to call Snowflake stored procedures. This allows to start ETL transformation in Snowflake orchestrated by QPR ProcessAnalyzer script.<br />
* B-08013: Added [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property to expression language to replace the legacy UserPermissions analysis (11).<br />
* B-07976: Snowflake [[Filtering_in_QPR_ProcessAnalyzer_Queries#Expression|expression based filter rules]] support additional expression columns allowing more Big data chart expressions to be filterable.<br />
* B-08015: Big data chart doesn't anymore support calculation in SQL Server (using local datatables).<br />
* B-06270: Improved error messages and made them translatable by taking into use exception codes provided by server.<br />
* B-08021: Added possibility to store [[Diagram_in_Expression_Language|designed diagrams]] for models and expression language API for reading and modifying diagrams.<br />
* B-08037: Dropped following unused tables database: PA_IDEA, PA_IDEA_VOTE, PA_REPORT, PA_REPORT_SETTING, PA_SESSION_SERVICE, PA_VIEW_FILTER_RULE, PA_VIEW_FILTER_RULE_PARAMETER.<br />
* B-08052: Language translations have been updated to 2023.6.<br />
* B-08051: Frontend side components have been updated.<br />
* B-08034: Backend side components have been updated.<br />
<br />
'''Fixed issues:'''<br />
* D-13830: Object counts indicator in header showed incorrect counts when there was disabled filter rules in Snowflake models.<br />
* D-13833: In-memory charts didn't work with boolean type of dimensions when filtering with the false value.<br />
* D-13858: Target value measures didn't update chart when controlled using an on-screen setting.<br />
* D-13827: Calculated attributes data type was incorrectly set as Any by the Attributes dialog.<br />
* D-13849: Multiselect list search didn't allow spaces.<br />
* D-13829: Multiselect dropdown lists height jumped couple of pixels when selecting values.<br />
* D-13835: Deselecting a selected data point didn't remove chart filter rule.<br />
* D-13702: Improved Snowflake query performance in situations when there are lot of filter rules (by decreasing number of CTE's).<br />
* D-13819: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13820: Fixed incorrect manifest.json file to avoid "not found" errors when fetching web site icon.<br />
* D-13865: Break, continue, and return statements didn't work properly when called from inside a catch block.<br />
* D-13795: There was a Python error in clustering analysis with Snowflake model.<br />
* D-13823: Some tooltips in Workspace project hierarchy didn't work and caused a JavaScript error.<br />
* D-13824: BPMN editor align context menu layout looked strange.<br />
* D-13813: QPR logo button in the top left was misaligned in Firefox.<br />
* D-13797: Snowflake query may have given following error when using sampling: ambiguous column name '_EventType_NotNull_1'.<br />
* D-13774: TakeSample function with certain columns caused SQL compilation error: ambiguous column name 'Case Name'.<br />
* D-13782: Snowflake: Aggregating from variations didn't work when using sampling.<br />
* D-13836: Some tooltips had a strange two-colored background.<br />
* D-13834: Removed Model statistics column from clustering and root causes analysis.<br />
* D-13860: Removed filter button from the custom expressions in Task log analyzed objects.<br />
* D-13838: Removed Split data by filtering column from clustering analysis.<br />
* D-13832: Script and model status updates incorrectly sent next update when previous was still pending.<br />
* D-13839: Charts reset zoom button font size was too small.<br />
* D-13817: Importing data to Snowflake datatable with Append=0 doesn't now drop the underlying Snowflake table.<br />
* D-13825: Some models could not have been deleted from recycle bin.<br />
* D-13852: Recycle bin Projects and Models tab didn't show correct content when Recycle bin only contained either models or projects.<br />
* D-13841: In-memory chart Data type selection type has been corrected to string.<br />
* D-13842: Second time and Third time selections has been hidden in in-memory chart measures.<br />
* D-13850: In Chrome, there were console errors related in incorrect text field autocomplete type and text field without form.<br />
* D-13847: Improved browser side performance by removing unnecessary operations.<br />
* D-13859: Chart without dimensions showed an unnecessary Remove dimension button.<br />
* D-12598: When script is stopped in server, ScriptLauncher could still incorrectly continue to import data.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.5 (build 3334) (released 2023-09-07) ==<br />
<br />
'''Fixed issues:'''<br />
* D-13826: Measures or dimensions with case or event attribute and value selections incorrectly removed calculated attributes when dashboard was opened or chart settings were changed.<br />
* D-13821: Font size of some Highcharts tooltips was too small. Issue appeared when there were tooltips mappings in measures or dimensions.<br />
* D-13810: Simplified help links: now all Help buttons go to the QPR ProcessAnalyzer wiki main page.<br />
* D-13822: Snowflake clustering analysis showed empty strings and nulls as case attribute values in an unclear way as just nothing.<br />
<br />
== QPR ProcessAnalyzer 2023.5 (build 3304) (released 2023-09-05) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In Big Data Chart, the '''Case conformance''' measure and dimension has changed in a way that now it provides boolean values (true/false) instead of integer values (1/0). If [[Measure,_Dimension_and_Column_Settings#Other_settings|colorMappings]] are used for this measure or dimension to set specific colors to visualize conformant and nonconformant cases, the mapped values need to be changed as follows: '''1''' -> '''true''' and '''0''' -> '''false'''. Without the change, the mapped colors are not effective.<br />
<br />
Exmaple: Old configuration:<br />
<pre><br />
"colorMappings": {<br />
"1": "#36d475ff",<br />
"0": "#f5403bff"<br />
}<br />
</pre><br />
New configuration:<br />
<pre><br />
"colorMappings": {<br />
"true": "#36d475ff",<br />
"false": "#f5403bff"<br />
}<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is deprecated. Big data chart has allowed to process data both in Snowflake and SQL Server. Now the support for SQL Server is deprecated and the Big data chart will only support calculation in Snowflake. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). The OperationLog analysis is replaced by the [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog function]] and the Infcluencers analysis is replaced by the [[FindRootCauses_Function|FindRootCauses function]].<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [12, 14, 15, 16, 29];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
By default, Snowflake ODBC driver generates quite much logging to files which might unnecessarily fill up the disk space. It's recommended to set the LogLevel parameter to value 0. The path where the logs are created can be seen in Windows registry (key LogPath). More information about configuring Snowflake ODBC parameters: https://docs.snowflake.com/en/developer-guide/odbc/odbc-parameters.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07971: Machine learning based [[Clustering_Analysis|Clustering analysis]] can be run in Snowflake.<br />
* B-07989: In dashboard designer the stacking order of charts can be changed with buttons [[QPR_ProcessAnalyzer_Dashboard_Designer#Viewing_and_Editing_Dashboards|Bring to front, Send to back, Bring forward and Send backward]].<br />
* B-07977: For [[Sankey_Chart|sankey diagram]], added Start level and End level mappings to define custom start and end level for the sankey flows. Implemented also color mappings to define specific colors for specific values.<br />
* B-08010: To improve performance, charts are loaded and updated only when they are visible in the dashboard.<br />
* B-07975: Added following [[SQL_Expressions#Date_functions|date related functions]] to Snowflake: DayOfYear, DayOfWeek, WeekOfYear, Quarter.<br />
* B-07908: When [[QPR_ProcessAnalyzer_Project_Workspace#Duplicating_Model|model is duplicated]], also filters in the model are also duplicated.<br />
* B-07904: Filters and models API for expression language has been completed.<br />
* B-07991: In [[Filter_Selectors|case and event type filter selectors]], threshold whether the dropdown list or search dialog is shown can be defined using the ''Maximum Rows'' setting. Also the search dialog filters search results by other filter rules in the dashboard.<br />
* B-07999: Filters report has been changed to use the [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|expression language API for filters]].<br />
* B-07540: Added [[QPR_ProcessAnalyzer_Expressions#Throwing_objects|throw statement]] to expression language.<br />
* B-07813: UI components are updated. There are small visual improvements, such as in flowchart flows are routed a bit differently and in charts the hidden series is shown as strike-through in the legend.<br />
* B-07963: Following legacy analysis types have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29) (see more information in the note above).<br />
<br />
'''Fixed issues:'''<br />
* D-13777: Filters could not be created in charts when "Update Filter During Selection" setting was disabled.<br />
* D-13767: Automation per Event Types preset in in-memory incorrectly showed only one event type.<br />
* D-13756: Changing background color in KPI card didn't have any effect.<br />
* D-13812: "Exclude events" was incorrectly translated to "Exclure les cas" in French.<br />
* D-13815: Dashboard designer background grid was not visible in entire area in edit mode. Improved also the grid to match to snapping in move and resize.<br />
* D-13674: Business calendar dialog layout was incorrect when a model with a long name was selected to copy holidays.<br />
* D-13811: Table actions link to a new window didn't go to dashboard if there were other parameters in the link.<br />
* D-13601: Fixed issue where some presets may have given error when attribute value selection and the automatically selected attribute conflicted by the data type.<br />
* D-13753: While Snowflake model was selected, in Filters and User Rights reports the Columns list could not be opened.<br />
* D-13720: Now table column filter and sorting are preserved when resizing or zooming page.<br />
* D-13785: In tables increased number of rows to 20000 that are inspected to get available items shown in Excel-style column filter.<br />
* D-13759: Some statistical calculations had bad performance with large number of rows.<br />
* D-13787: Conformance statistics component didn't have scrollbars when text didn't fit to the visible area.<br />
* D-13788: In-memory "Nonconformance reason" selection caused error when two of them was selected in the same chart.<br />
* D-13783: When Analyzed objects was Generic analysis, column selection incorrectly caused "Analysis has not been selected" error.<br />
* D-13776: When measure name contained quotation mark, notification preview didn't work.<br />
* D-13747: Filtering with integer type of case id with case attribute value filter caused error in Snowflake.<br />
* D-13791: In Firefox, model selection in chart settings didn't show models in the first open.<br />
* D-11984: Recycle bin buttons didn't fit to the screen when screen width was small.<br />
* D-13780: Using CaseId case attribute in clustering analysis did not work with Snowflake 106 cases standard model.<br />
* D-13781: Clustering analysis produced Python error with a certain simple Snowflake model.<br />
* D-13730: Snowflake: Case attribute filtering didn't work when there are cases without row in cases table.<br />
* D-13803: There was chart configuration validation error in browser console when measures were moved into dimensions in Big data chart.<br />
* D-13758: There was performance issue with the Recent tasks system preset.<br />
* D-13793: Snowflake clustering failed when cluster count is larger than case count.<br />
* D-13763: SQL expression based filter rule with Where function to filter events didn't filter anything in Snowflake.<br />
* D-13804: Added missing Millisecond function to Snowflake.<br />
* D-13772: Expression EventLog.Cases.Events caused error "Value cannot be null".<br />
* D-13755: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13739: When switching between System reports there was error: "Uncaught Error: 2nd dimension not found. at y.getExpressionConfiguration".<br />
* D-12109: Sometimes flowcharts showed message "Error in querying event type measures. Input string was not in a correct format".<br />
* D-12473: Cost Savings by Automation preset gave sometimes error "Unable to cast object of type 'System.Double' to type 'System.String'".<br />
* D-13750: Snowflake model didn't work with the Case Duration vs. Manual Activities preset.<br />
* D-13657: There was error converting data type nvarchar to bigint.<br />
* D-13796: Some Snowflake operations didn't work with zero rows and columns.<br />
* D-12494: Now when chart size changes, the table column filters and sorting are preserved.<br />
* D-13736: In Performance benchmarking dialog, the Export result button exported wrong benchmark performance analysis result.<br />
* D-13609: Improved conformance analysis related filter names.<br />
* D-13594: Recycle bin buttons were not visible when opening recycle bin in a narrow screen.<br />
* D-13226: Tooltips in the model properties dialog are now translated.<br />
* D-12569: Table incorrectly showed ellipsis for narrow boolean type of columns showing checkboxes.<br />
* D-13391: Emptying date or datetime picker value was not registered and it didn't trigger functionality.<br />
* D-12621: Value search dialog didn't work with values containing backslashes.<br />
* D-13796: Some Snowflake operation didn't work with zero rows/columns.<br />
<br />
== QPR ProcessAnalyzer 2023.4 (build 2628) (released 2023-06-14) ==<br />
<br />
'''Features:'''<br />
* B-07767: Added [[Gantt_Chart|Gantt chart]] to visualize timeline of cases and events divided into swimlanes.<br />
* B-06383: Added [[Sankey_Chart|Sankey chart]] to visualize flow from one set of values to another.<br />
* B-07941: Implemented many more presets running in Snowflake models for compliance and operational excellence use cases. There are also presets for the path analysis and process bottlenecks identification.<br />
* B-07864: Snowflake conformance analysis shows now [[Conformance_Analysis#Top_Deviations_(in-memory)_/_Deviating_Flows_(Snowflake)|reasons for conformance deviations]], such as which event occurrences deviated from the design model.<br />
* B-07909: Snowflake conformance analysis visualizes [[Conformance_Analysis#Undesired_Events_(Snowflake)|undesired event types]] in table and flowchart.<br />
* B-07823: Flowchart Bottlenecks preset has been changed to show bottlenecks for event types. Also renewed the [[QPR_ProcessAnalyzer_Logs#Task_Log|Tasks reports]] to use expression language based interface.<br />
* B-07891: User interface has been [[Languages_and_Localization|translated into Portuguese]].<br />
* B-07873: Improved [[QPR_ProcessAnalyzer_Pivot_Table|pivot table]] visual layout to highlight totals and aggregated rows. Also the row titles are now visible in the top left.<br />
* B-07905: Added [[SQL_Expressions#Rank_functions|Rank related functions]] to Snowflake for writing more versatile custom KPI's, e.g., FirstValue, LastValue, NthValue, Lead and Lag.<br />
* B-07912: Added more SQL expression [[SQL_Expressions#Array_functions|array functions ArrayToString and ArrayOverlap]] to Snowflake.<br />
* B-06449: Added SQL expression functions ToTimestamp and TryToTimestamp for parsing timestamps from strings using provided format.<br />
* B-07959: Added new functions Base64Encode and Base64Decode to help using basic HTTP authentication when calling web services.<br />
* B-07206: SQL expressions support data [[SqlDataFrame_in_Expression_Language#WithClusterColumn|clustering]] which is an unsupervised machine learning algorithm to group data based on similarities.<br />
* B-07848: Data can be extracted from SAP using the encrypted [[Importing_Data_from_SAP#SNC_encrypted_connection|SNC connection]].<br />
* B-07903: Added expression language API to create and modify filters and models.<br />
* B-03103: [[QPR_ProcessAnalyzer_Logs#Task_Log|Task log]] (operation log) can be accessed in expression language.<br />
* B-07872: List aggregation with Distinct=true orders now items by their value.<br />
* B-07940: Removed "Count" aggregation from textual values in Big data chart (you can use the Case count, Event count, etc. selection instead).<br />
* B-07757: Backend support for datatables linking to user-definable Snowflake database, schema and table.<br />
* B-07825: Improved error message when trying to use non-existing attributes in Snowflake queries.<br />
* B-03101: To expression language, added try-catch-finally statement to handle thrown exceptions.<br />
* B-07861: Removed available and total virtual memory information from User settings dialog.<br />
* B-07902: Optimized sequences of joins in Snowflake queries to improve performance.<br />
* B-07837: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13709: If image width-to-height ratio was lower than container's ratio, image was incorrectly stretched to fit the container.<br />
* D-13660: Disabling filter rules didn't work in Snowflake models.<br />
* D-13526: Passing dataframes from SQL scripts to expression scripts didn't work.<br />
* D-13661: Snowflake conformance analysis crashed when there was no access to conformance related Snowflake UDF's.<br />
* D-13693: Resolved major Snowflake conformance analysis performance issues in the BPMN model handling.<br />
* D-13716: Snowflake root causes analysis incorrectly bypassed Snowflake cache.<br />
* D-13707: In SQL Scripting, the datatable analysis (number 18) didn't always copy the data table contents to the target table correctly.<br />
* D-13653: Big data flowchart Root causes preset showed incorrect legend.<br />
* D-13626: Flowchart froze when converting into big data flowchart and vice versa by modifying chart json settings.<br />
* D-13656: Root causes for attribute gave error "Failed to compare two elements in the array" in some situations.<br />
* D-11563: Pivot table had a minimum height of 300px, which caused bottom part of it to be out of view.<br />
* D-13704: In CSV file import, parsing now allows spaces between column separator and text quotation mark.<br />
* D-13598: Chart gave unclear error message when events datatable was not defined.<br />
* D-13655: Improved error messages for BPMN editor and conformance statistics.<br />
* D-13528: Error message for certain erroneous SQL expressions was unclear.<br />
* D-13677: "Flow occurrences with specific case attribute value" selection didn't work for in-memory chart.<br />
* D-13663: Pivot table border line was slightly broken in the header area.<br />
* D-13608: There was incorrect alignment of items in the table paging controls.<br />
* D-13703: Importing CSV file with some special characters to Snowflake failed (due to incorrect escaping in Snowflake staging files).<br />
* D-13708: Duplicating datatable using user defined table, removed data the source table.<br />
* D-13717: Dependency wheel crashed when there were zero weights and showing data labels.<br />
* D-13348: There was an unclear error message when Snowflake query had a certain incorrect expression.<br />
* D-13732: Pivot table Excel export contained headers formatted incorrectly.<br />
* D-13729: There was a JavaScript error when limited user tried to access business calendar.<br />
* D-13662: Percentile function didn't always work with timespan types.<br />
* D-13646: Using incorrectly configured model without cases datatable caused null reference error.<br />
* D-13629: When tried to use chart with a non-existing model, there is now a proper translated error message.<br />
<br />
== QPR ProcessAnalyzer 2023.3 (build 1990) (released 2023-05-03) ==<br />
<br />
'''Features:'''<br />
* B-07818: [[Conformance_Analysis|Conformance analysis]] is supported in Snowflake with following dashboard components: Big data chart, BPMN editor, Conformance statistics, and Design model selector.<br />
* B-07833: [[Root_Causes#Root_causes_in_flowchart|Root causes analysis for flowchart]] is available for Snowflake showing how the event and flow occurrences explain selected phenomena.<br />
* B-07786: Big data chart has more [[Big_Data_Chart#Measure_aggregations|measure aggregations]], such as median, percentile, standard deviation and variance. Also for textual items, unique values can be listed.<br />
* B-07795: [[QPR_ProcessAnalyzer_Table#Conditional_formatting|Conditional formatting]] supports also columns with non-numerical contents.<br />
* B-07830: [[Big_Data_Chart#Measure_aggregations|None and Any aggregations]] for Snowflake and user-friendly formatting for conformance violations.<br />
* B-06527: Error messages in [[Importing_Data_to_Datatable_from_CSV_File|CSV file import]] show also the column number to help working with CSV files with lot of columns.<br />
* B-07747: In-memory conformance checking accepts design models with multiple tasks having same name (same is followed by the Snowflake implementation).<br />
* B-07659: In-memory flowchart preset Case Conformance to visualize conformance checking violations.<br />
* B-07571: Added function IsConformant to backend to check whether cases are conformant.<br />
* B-07863: Added function ConformanceViolationsFlows to backend to return nonconformance reasons for violating cases.<br />
* B-07844: Support for "array" aggregation to return aggregated items as array.<br />
* B-07856: Support for creating and accessing arrays and objects in SQL expressions.<br />
* B-07860: Array handling functions and Tasks property for DesignModel entity.<br />
* B-07847: Added throttling for QPR ScriptLauncher client-side imports to limit memory usage.<br />
* B-07811: Snowflake query optimization to omit columns that are not used by the query.<br />
<br />
'''Fixed issues:'''<br />
* D-13632: Going from variations to event types led to very poor performance with certain models.<br />
* D-13628: Statistical calculations were incorrectly not applied in chart CSV export.<br />
* D-13575: SQL script may have given error "Operand type clash: nvarchar(max) was incompatible with sql_variant".<br />
* D-13597: UI supports now datatable column type "ShortString" (previously datatable contents preview and CSV import didn't work).<br />
* D-13536: Using business calendar sometimes gave error "System.InvalidOperationException: Collection was modified".<br />
* D-13477: Chart types without y-axis mapping caused an error when series mapping was used.<br />
* D-13453: _model variable was not available for Snowflake expression filter rules.<br />
* D-13527: Checkbox height didn't increase when long label needed to span to multiple lines.<br />
* D-13363: Snowflake query with EvaluateAfterAggregations and IsHidden failed when dimensioning by case id column.<br />
* D-13383: Snowflake query gave error "Invalid column name 'FromCase Name'".<br />
* D-13523: Request id was incorrectly shown as zeros in error messages.<br />
* D-13541: In CSV import, error message for maximum number of columns exceeded is improved (maximum is 300 column for SQL Server).<br />
* D-13583: Objects count in header didn't work for empty Snowflake model.<br />
* D-13553: Larger pacm files can now be imported, as there isn't error "Request body too large. The max request body size is 30000000 bytes".<br />
* D-13306: Stack overflow error was given when using SqlDataFrames.<br />
* D-13487: When Flows root and there was filter in Values expression, some flows were lost.<br />
* D-13540: SqlDataFrame query with 300 columns failed to error "WithExpressionColumn: No name given for the new column".<br />
* D-13429: Ordering in List aggregation couldn't find columns in dataframe query.<br />
* D-13406: Dataframe query with root FlowOccurrences and get value from cases caused error.<br />
* D-13538: There was incorrect handling of escaping characters in column names used in dimensions.<br />
* D-13633: Fixed ordering in List aggregation with null and empty values.<br />
* D-13636: Query that dimensions by numeric case attribute with AggregateOthers true, caused error.<br />
* D-13589: Creating Snowflake datatable did not connect to Snowflake.<br />
* D-13623: Value expressions without aggregation didn't work with AggregateOthers setting.<br />
* D-13554: In in-memory chart, percentile function might have return both Int64 and Double type of objects which cannot be sorted.<br />
* D-13481: Improved error message when trying to use deleted model.<br />
* D-13621: Dynamic value search dialog had incorrect font in lists.<br />
* D-13610: Some invalid BPMN files crashed BPMN editor.<br />
* D-13614: Checkbox label texts overflowed to right.<br />
* D-13520: Removed excessive parameters from the Query Designer for generic context queries.<br />
* D-12998: QPR icon was incorrectly positioned in header in Safari.<br />
* D-13480: Import to duration data type is removed from Snowflake datatables, and for local datatables duration type maximum size is checked.<br />
* D-13517: In Highcharts-based visualizationsm conditional formatting didn't work for other than the first y-axis mapping.<br />
* D-13529: In some presets containing several on-screen settings, when chart showed in error message, on-screen settings showed invalid selection.<br />
* D-13530: Opening dropdown list caused JavaScript error when the list contents should be empty after it previously contained items.<br />
* D-13486: Removed unreachable error message in CSV import.<br />
* D-13524: Fixed in-memory chart flow occurrences root measures "Event attribute (text)" and "Event attribute (number)" that caused error.<br />
<br />
== QPR ProcessAnalyzer 2023.2 (build 1478) (released 2023-03-22) ==<br />
<br />
'''Features:'''<br />
* B-07755: [[Business_Calendar|Business calendar]] for duration calculation is available for Snowflake models.<br />
* B-07719: In Snowflake dashboards, [[Big_Data_Chart#Using_measure_variables|measures can be assigned to variables]] and use the variables in other measures to create combined measures.<br />
* B-07746: Changed in-memory conformance checking to not show invalid flow violations where starting or ending event type is invalid.<br />
* B-07743: [[PA_Configuration_database_table#General_Settings|Default datasource]] can be configured for datatables created by scripts, allowing to set Snowflake as default.<br />
* B-07740: System memory indicator moved from the header to User settings Version information dialog.<br />
* B-07776: New SQL expressions functions Unicode, Char and Regexp, as a basis for future rule-based process mining.<br />
* B-07741: Backend support for aggregation operations Median, Percentile, Stdev, Stdevp, Var and Varp to Snowflake.<br />
* B-07742: Backend support for aggregation operation to list unique items in Snowflake.<br />
* B-07770: Optimized Snowflake SQL generation by combining consecutive WithColumn function calls into one select.<br />
<br />
'''Fixed issues:'''<br />
* D-13491: QPR ProcessAnalyzer server crashed now and then when sorting was in progress and the query was cancelled.<br />
* D-13380: Dimensioning integers in in-memory core calculation didn't work correctly as 0 and -1 were put to same bucket.<br />
* D-13385: In Workspace Bin, Delete Forever and Restore from Bin buttons were misaligned.<br />
* D-13332: Conformance checking didn't show in violations when there were multiple undesired events in same case.<br />
* D-13405: Images take now always all available space in image component area.<br />
* D-13417: KPI card without title was slightly misaligned vertically.<br />
* D-13438: Clicking selected event type or flow in flowchart didn't cancel the filter selection.<br />
* D-13350: Task log and Script log default filter end date is now empty by default.<br />
* D-13381: Disabled browser auto-complete from flowchart variation stepper and Workspace create/rename object dialog.<br />
* D-13347: Improved performance for in-memory business calendar calculation.<br />
* D-13335: In in-memory chart, filtering didn't work in "Flow occurrences" root "Flow occurrences with specific event attribute value" dimension.<br />
* D-13367: Percentage value wasn't displayed properly with German or Spanish language when event types were shown in object counts indicator.<br />
* D-13451: Exported filter file is now named based on selected filter name.<br />
* D-13378: In Big data chart, prevented error "Unable to aggregate from level RootCauses to level Custom".<br />
* D-13293: DataFrame query with root Flows and IncludeEvents and ExcludeEvents filter rules failed.<br />
* D-13370: Fixed issue where on-screen settings that didn't have any selectable items, showed a strange selection.<br />
* D-13392: Clustering analysis was incorrectly shown when originally in-memory chart was converted into big data chart by changing chart json settings.<br />
* D-12784: Some Snowflake queries incorrectly bypassed Snowflake caching because they used unique object names.<br />
* D-13456: Improved error messages for incorrectly configured on-screen settings.<br />
* D-13445: Conformance violations related translated terms have been fine-tuned for better translations into different languages.<br />
* D-13421: Improved error messages when trying to use model having some column mappings missing.<br />
* D-13485: Snowflake business calendar gave error when calendar contained Sunday.<br />
* D-13218: Windows event viewer incorrectly contained log entries that are not errors.<br />
* D-12634: Multiline text boxes width is set to non-changeable.<br />
* D-13034: Confirmation dialog to delete items permanently has been updated.<br />
* D-13288: In dialogs, the Create button didn't show the disabled state correctly.<br />
* D-13427: When dropdown lists didn't have any selectable items, the "N/A" text appeared and the list incorrectly took more space vertically.<br />
* D-13483: In Workspace, the new items menu was too narrow for Spanish texts.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.1 (build 1449) (released 2023-02-24) ==<br />
<br />
'''Features:'''<br />
* B-07690: System setting [[PA_Configuration_database_table#General_Settings|DatabaseId]] can be defined by administrator to get more simple table names in Snowflake.<br />
* B-07737: In flowchart Bottlenecks preset, originally used flow colors has been recovered.<br />
* B-07748: For Analyzed objects "Conformance checking findings" in charts, terminology has been revised and issue with the case count calculation fixed.<br />
* B-07663: In [[Chart_On-screen_Settings|on-screen settings]], when case/event attribute is selected, related attribute values list are reset.<br />
* B-07570: Backend support for [[Business_Calendar|business calendars]] in Snowflake.<br />
* B-07660: Backend support for conformance checking to show also the last event index and event type in NotCompleted reason.<br />
* B-07610: Memory counter related technical properties have been removed from expression language.<br />
<br />
'''Fixed issues:'''<br />
* D-13349: Opening dashboard containing Root causes preset with default settings jammed the system by generating lot of calculations (for more information, see previous release notes).<br />
* D-13277: Stacked charts with date type of data as series did incorrectly show gaps in columns/bars.<br />
* D-13270: Flowchart conditional formatting didn't work with duration multi-unit format.<br />
* D-13358: Calculation results caching works also across different user sessions.<br />
* D-13250: Dashboard with two charts connected with linked settings using variables ended up to to a never ending loop.<br />
* D-13230: SAP import did not automatically create columns to use the correct column types.<br />
* D-12857: Deeply recursive functions caused a crash without any trace.<br />
* D-12994: In Workspace, some buttons were not clickable due to breadcrumb covering them.<br />
* D-13249: In Workspace, there was incorrect error message for duplicate datatable names when there were items with only letter capitalization was different.<br />
* D-13232: In-memory chart Top variations preset is now sorted secondarily by average duration descending.<br />
* D-13300: Setting DashboardFilter variable to empty value didn't have any effect in dashboard but old value was incorrectly used.<br />
* D-12834: Limited the maximum number of dimensions to 20, to avoid too demanding queries for SQL Server.<br />
* D-12917: Changed visual indication of missing items in dropdown lists (it's no longer showing "***").<br />
* D-13111: In Root causes preset, there is now error message when trying to use weighting related columns when weighting isn't in use.<br />
* D-13124: SQLDataFrame query containing filter rule EventTypes aggregating from cases failed.<br />
* D-13207: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed.<br />
* D-13292: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed (rev.2).<br />
* D-12991: Dropdown list texts had some translations missing.<br />
<br />
== QPR ProcessAnalyzer 2023.1 (build 1433) (released 2023-02-07) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release contains a potentially severe issue, where some dashboards completely jam the system by generating lot of calculations. The issue may appear in dashboards that have been created in earlier releases and containing the Root causes preset with default settings. The issue will be fixed by the next release. The issue can be worked around by exporting the affected dashboard, modifying the dashboard file manually and importing the dashboard back. The required modification is to remove line(s) containing <pre>"preset": "RootCauses"</pre> and the comma from the preceding line.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Cases (analysis number: 5), Events (6), and EventTypes (7). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). Note that the legacy analyses removal don't affect the dashboarding functionality.<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [5, 6, 7];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2023.1, the '''.NET Desktop Runtime''' is not needed anymore for QPR ProcessAnalyzer Server, so it can be uninstalled. Also for QPR ScriptLauncher, ''.NET Desktop Runtime'' is not needed, but instead install the '''.NET Runtime''' (which is more lightweight). ''.NET Desktop Runtime'' contains the ''.NET Runtime'', so the actions are not mandatory when updating to QPR ProcessAnalyzer 2023.1.<br />
</div><br />
<br />
'''Features:'''<br />
* B-06997: Expression-based filter rules for Snowflake dashboards to allow versatile filtering and filtering from custom expressions.<br />
* B-07383: Improvements to linked settings to allow binding to variables, tags and filter rules [[Chart_Linked_Settings|(more information)]].<br />
* B-07508: Flowchart preset colors have been renewed to be more intuitive.<br />
* B-07184: Automation preset in flowchart has now options for selecting the Automation attribute and value.<br />
* B-07512: Changed datatable metadata can be refreshed from Snowflake, and all rows in the datatable can be deleted easily in Workspace [[QPR_ProcessAnalyzer_Project_Workspace#Datatables|(more information)]].<br />
* B-07440: Date when the release was made is now shown in User settings.<br />
* B-07595: WeekOfYear property for DateTime objects in expression language to get the week number of a year (between 1 and 53).<br />
* B-07623: In-memory expression language functions Random (to get random numbers) and Hash (to get hash value of string).<br />
* B-07612: Breadcrumb in Workspace has now a Home button to quickly navigate to the top level of the projects hierarchy.<br />
* B-07637: Language selector now shows the language options in local languages.<br />
* B-07228: Remove following deprecated analyses: Cases, Events, and EventTypes (see the release note above).<br />
* B-07538: Backend support: Snowflake root causes analysis can find event attribute related root causes.<br />
* B-07706: Backend support: Snowflake expression-based filter rules support for roots containing Where function.<br />
* B-07611: Removed following legacy filter rules: CaseAttributeTrend, EventAttributeTrend, EventTypeTrend, and Duration.<br />
* B-07598: Refactored client-side import for SQL scripting to use generic client-side task mechanism.<br />
* B-07716: ShortString columns are now properly detected in SQL Server queries.<br />
* B-07652: Now it's possible to pipe multiline expression strings to QPR ScriptLauncher.<br />
* B-07688: AddColumns function for Datatables to create multiple columns in one call.<br />
<br />
'''Fixed issues:'''<br />
* D-13092: Table conditional formatting didn't work when color code was fetched from other column.<br />
* D-13105: Some charts created in earlier release referring to non-existing presets names appeared as empty after software update.<br />
* D-13107: Flowcharts crashed and showed loading animation forever when setting color or flow thickness to non-numerical measure.<br />
* D-13104: In BPMN model editor, context menus to edit elements didn't appear.<br />
* D-12939: Script editor tabs Close buttons didn't work.<br />
* D-13154: "Search by case ID" didn't work in in-memory chart.<br />
* D-12933: CSV columns with only empty values were incorrectly auto-detected as integers.<br />
* D-12929: In-memory chart Root causes for case duration and Root causes for case attributes (weighted) had Custom expression missing.<br />
* D-12928: Pivot table headers were empty when there were two column levels and two values.<br />
* D-12924: Pivot table columns with Count and Distinct Count aggregations are now numeric and aligned right.<br />
* D-13033: Changing colors in chart settings Color palette caused "Item already exists" error and prevented changing colors.<br />
* D-12996: Tags referring to dashboard variables didn't work in Additional root expression.<br />
* D-12877: UI gave error in some situations: Uncaught TypeError: Cannot read properties of undefined (reading 'min').<br />
* D-13071: Prevented selecting two or more of the Y-axis, X-axis and series mappings at the same time for the same measure or dimension.<br />
* D-12895: Big data chart crashed when on-screen setting contained event type selector and there were no event type filter set.<br />
* D-13231: Tooltips for dashboard name, model selector and filter selector in header show now the content text instead of generic instruction.<br />
* D-13139: There was an error when tried to create filter for a custom expression where selected data type didn't match with the actual type of data.<br />
* D-12988: Chart presets selection in chart settings showed unnecessary tooltip.<br />
* D-12901: When set sampling over 1 million, Snowflake models gave error: parameter value out of range: size of fixed sample. Must be between 0 and 1,000,000.<br />
* D-12904: Creating expression filter having lower/greater logic with root objects sampling failed.<br />
* D-12923: Chart schema didn't accept pivotAggregation in dimensions/columns.<br />
* D-12926: Root causes columns Selected weight, Compared weight and Total weight have now correct float data type.<br />
* D-12880: In out-of-the box dashboards, chart titles and subtitles were not translated.<br />
* D-12916: Improved filter rule description text in Filter rule editor dialog for expression filter rules.<br />
* D-12889: No clear error message was given when user tried to export corrupted model from .pacm file.<br />
* D-12869: Date selector in on-screen settings had inconsistent vertical alignment.<br />
* D-12938: When creating a filter with lasso and selecting a single data point only, "equals" kind of filter rule is now created.<br />
* D-12989: "Running tasks as specific time" system report may have ended up in loop causing following error: Maximum call stack size exceeded error.<br />
* D-13010: Pivot table sometimes ended up to never-ending resizing loop when browser zoom was more than 100%.<br />
* D-12790: Expression language: DataFrame.SetColumns: Initializing and using variables defined in closure of SetColumns function parameter didn't work<br />
* D-12927: All on-screen settings were not be visible in narrow charts having several on-screen settings.<br />
* D-12937: Added maximum value limitation to several number input fields in charts.<br />
* D-12947: Message dialog didn't show line breaks correctly (e.g., in CSV file import).<br />
* D-12948: Defining column setting caused error when Measure Expression was not defined.<br />
* D-12946: Filter rule text couldn't be seen entirely from tooltip.<br />
* D-12983: When range filtering using integer values in Highcharts chart, filter is now shown as integer value.<br />
* D-12984: When range filtering in Highcharts charts and there is category axis, filter rule is now based on individual (category) values.<br />
* D-12930: When creating filters from charts using date type of X-axis with lasso, "greater than or equal" and "less than or equal" filter rules are not created.<br />
* D-12920: "Where" function in DataFrame lost column data types of the original DataFrame.<br />
* D-13048: Model notifications failed with certain measures that define variables in root expression leading to error: Variable "sampleSize" already exists in this context.<br />
* D-13116: BPMN editor had some translations missing.<br />
* D-13019: Datatable and script selectors show now datatable/script name instead of id, when opening selector having existing selections.<br />
* D-12951: Changing additional root expression in flowchart didn't refresh the flowchart.<br />
* D-13147: Filter rule boxes in header had different widths, and Add filter rule button vertical alignment was incorrect.<br />
* D-12907: Sometimes case attribute selection showed incorrect attribute name for empty model.<br />
* D-13148: Filters and Datatables system reports loaded unnecessarily twice which could be seen as blinking.<br />
* D-12844: In dataframe query, FlowOccurrences in root and GetValueFrom Cases with filter gave null reference exception<br />
* D-12915: Repeating certain query twice with aggregations in Events root generated invalid SQL<br />
* D-12728: Was huge amount logs in server during client side import (manual testing required as identification)<br />
* D-13156: Persist function failed to snowflake: Invalid unicode escape sequence '\u0027ACCE'; should be at most '\u0010FFFF'.<br />
* D-12876: Flows/FlowOccurrences in root didn't work with SqlExpressionValue filtering.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2022.8 (build 1397) (released 2023-01-11) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release fixes an issue where extracting large datasets from SAP increases memory consumption considerably and may lead to out-of-memory error. This release contains packages for both QPR ScriptLauncher and QPR ProcessAnalyzer Server. If SAP extractions are done using QPR ScriptLauncher in client side mode (ExecuteInClientSide=1), it's enough to update QPR ScriptLauncher to fix this issue.<br />
</div><br />
<br />
'''Fixed issues:'''<br />
* D-12941: Extracting data from SAP consumed unnecessary lot of memory and may have led to out-of-memory error (both when running using QPR ScriptLauncher and in server side).<br />
<br />
== QPR ProcessAnalyzer 2022.8 (build 1396) (released 2022-12-30) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Creating datatables with duplicate names in the same project is prevented, and possible existing duplicate names are automatically changed to unique names with a random suffix. If there are duplicate names, they can be renamed either before updating QPR ProcessAnalyzer (to avoid automatic renaming) or after the update (by changing suffixed names). If the renamed datatables are used by models, the linkage will break because it's based on the datatable name. Creating duplicate datatables has already been prevented in the UI, but the improved method works also in the API level.<br />
<br />
Following SQL query can be used to list datatables (and project id) having duplicate names:<br />
SELECT ITA_NAME, ITA_PROJECT_ID<br />
FROM PA_INTEGRATION_TABLE<br />
GROUP BY ITA_NAME, ITA_PROJECT_ID<br />
HAVING Count(*) > 1<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
If trying to use business calendar for a model that doesn't have the business calendar defined, there will now be an error message instead of showing the chart. Either unselect the business calendar checkbox for the measure or dimension, or define a business calendar to the model. In this situation in earlier releases the business calendar was ignored and full time calculation used.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07498: Automation and Operational Excellence presets and Root causes analysis (for Snowflake), Weighted root causes analysis and Event scattering preset (for Snowflake and in-memory), Root causes for case duration (in-memory).<br />
* B-07177: Flexible mappings, user selectable aggregations and conditional formatting for Pivot table, and flexible mappings for KPI Card.<br />
* B-07518: New function named Query to run call /api/expression/query.<br />
* B-07294: In Workspace, the left side projects hierarchy can be collapsed and expanded to make more space to project contents.<br />
* B-06814: In SQL expressions, new function DurationBetweenDates to calculate duration between timestamps precisely.<br />
* B-07519: Replaced DateDiff function with the new DurationBetweenDates function in big data chart.<br />
* B-07531: In SQL expressions, new mathematical functions Abs, Log, Mod, Power, Rand, Sign and Sqrt.<br />
* B-07297: To optimize performance, Snowflake queries are automatically cancelled if they are not needed by UI.<br />
* B-07569: To optimize performance, TakeSample function implementation is improved for Snowflake.<br />
* B-07198: Several performance improvements to DataFrame queries (used in Snowflake).<br />
* B-07464: Added Lead and Lag functions to SqlDataFrames to support getting previous and next event.<br />
* B-07470: New ExtractSap function to fetch data from SAP using expression language.<br />
* B-07536: New Pivot function to SqlDataFrames to enable root causes analysis.<br />
* B-07488: Primary keys can be set to datatables to improve calculation performance (UI will follow later).<br />
* B-07515: Added RootCauseAnalysis function to SqlDataFrames.<br />
* B-07546: RootCauseAnalysis function support for complex weighting expressions.<br />
* B-03052: Support for user-defined variables in /api/expression/query.<br />
* B-07565: Support for NumberPrecision, DatetimeTruncation and TimespanPrecision properties for Values section in in-memory query.<br />
* B-07513: For product activation file handling, replaced mutex based implementation with exclusive file lock.<br />
* B-07480: Expression language support for DataFlows for data extraction.<br />
* B-07613: Removed support for SQL Server based R scripting.<br />
* B-07567: Take datatable primary keys into use in expression builder to improve performance (part 2).<br />
* B-07588: Remove total memory information from log writing and DateDiff function for in-memory.<br />
<br />
'''Fixed issues:'''<br />
* D-12715: Snowflake calculated imprecisely some operations containing division and aggregation.<br />
* D-12761: Progress bar of the CSV import dialog didn't show any progress.<br />
* D-12799: Opening datatable contents dialog settings was slow when there were lot of rows in the datatable.<br />
* D-12089: Include conforming/nonconforming cases made BPMN editor no responding.<br />
* D-12496: Datagrid filter search keyword didn't work for rounded values, so the search was hidden for other than textual data.<br />
* D-12704: Durations as quarters was calculated incorrectly in charts.<br />
* D-12662: Fixed issue where some special literals in custom expressions didn't work.<br />
* D-12403: Setting Notifications on a model had some visual issues.<br />
* D-12859: Dependency wheel visualization crashed with nulls values in From and To mappings.<br />
* D-12660: Removed unnecessary float conversions in SQL expressions.<br />
* D-12653: In-memory datafram OrderByColumns function with mixed values failed.<br />
* D-12657: When trying to use milliseconds period in some presets, frontend frozed.<br />
* D-12706: Line breaks in data were shown in many places where it's undesired.<br />
* D-12719: Syncfusion dialog headers showed backslaces incorrectly.<br />
* D-12372: Refused to run the JavaScript URL because it violated the Content Security Policy directive.<br />
* D-12730: Logging out when filter selection is in progress, gave javascript error.<br />
* D-12705: Header object counts tooltip was sometimes messed after logout.<br />
* D-12384: Selected project was not highlighted for whole project name string.<br />
* D-12581: Prevented creating duplicate datatable names in same project in parallel execution.<br />
* D-12722: There was incorrect syntax near '<' when running SqlDataFrame expressions.<br />
* D-12736: Swedish and Finnish translation improvements for object counter tooltips.<br />
* D-12702: For BPMN Editor component "Something went wrong" error was given when switching from in-memory to Snowflake model.<br />
* D-12712: UI gave error: TypeError: Cannot read properties of undefined (reading 'id').<br />
* D-12738: Business calendar showed total business time when calendar configuration was invalid.<br />
* D-12776: Special character filter caused JavaScript SyntaxError.<br />
* D-12785: Unnecessary vertical scrollbar displayed for main header toolbar.<br />
* D-12164: There was unnecessary UnauthorizedAccess errors in logs.<br />
* D-12580: Case duration was not same when comparing Big data chart with in-memory chart for same data.<br />
* D-12768: Data grid links and variable change actions didn't work when grouping was used.<br />
* D-12735: FindRootCauses (in-memory) function filtered out cases with zero contribution.<br />
* D-12763: --#CallWebService didn't work from ScriptLauncher.<br />
* D-12789: There was timeout in SQL queries to scripting sandbox.<br />
<br />
== QPR ProcessAnalyzer 2022.7 (build 1331) (released 2022-11-15) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2022.7, to improve security expression language operations that modify data or connect to external datasources are prevented in dashboard custom expressions. The limitation is required, because when a dashboard is opened, its expressions are run with the user's permissions, and the user need to trust the expressions don't perform any unexpected operations, such as delete data. The full functionality of the expression language is available in the scripts and in the Expression Designer.<br />
<br />
The following functions and operations are prevented in dashboards: SendEmail(), CallWebService(), ImportOdbc(), ImportOdbcSecure(), Model.DeletePermanently(), Model.Restore(), Model.TriggerNotifications(), Project.DeletePermanently(), Project.Restore(), Project.CreateDatatable(), Datatable.AddColumn(), Datatable.DeletePermanently(), Datatable.Import(), Datatable.Merge(), Datatable.RemoveColumns(), Datatable.RenameColumns(), Datatable.Truncate(), RecycleBin.DeletePermanently(), and call SQL script. Calling expression scripts is allowed, but in the script all previously mentioned operations are prevented.<br />
<br />
Following SQL query can be executed in the QPR ProcessAnalyzer metadata database to reveal dashboards that potentially have prevented expressions:<br />
SELECT * FROM [PA_UI_ELEMENT] WHERE [UIE_PROPERTIES] LIKE '%SendEmail(%' OR [UIE_PROPERTIES] LIKE '%CallWebService(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbc(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbcSecure(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Restore(%' OR [UIE_PROPERTIES] LIKE '%TriggerNotifications(%' OR [UIE_PROPERTIES] LIKE '%CreateDatatable(%' OR [UIE_PROPERTIES] LIKE '%AddColumn(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Import(%' OR [UIE_PROPERTIES] LIKE '%Merge(%' OR [UIE_PROPERTIES] LIKE '%RemoveColumns(%' OR [UIE_PROPERTIES] LIKE '%RenameColumns(%'<br />
</div><br />
<br />
'''Features:'''<br />
* B-07287: Process Discovery and most important presets for Snowflake.<br />
* B-07271: "Last Row Aggregates Over-limit Rows" setting for big data chart.<br />
* B-06431: Snowflake datatables support for database views in the datasource.<br />
* B-07266: Security: "limited mode" to prevent data modifications and external calls from dashboard expressions.<br />
* B-07097: Improved flowchart root causes color scales.<br />
* B-07363: SQL LIKE function support for escape character.<br />
* B-06877: Improved variation queries performance in Snowflake, part 1.<br />
* B-07444: Improved variation queries performance in Snowflake, part 2.<br />
* B-07382: Support for empty strings and nulls in event type names in dataframe processing.<br />
* B-07273: WithRowNumberColumn, WithRankColumn, WithDenseRankColumn support for descending sorting.<br />
* B-07303: FindRootCauses function support for weighting expression.<br />
* B-07327: Unpivot function for SqlDataFrames (for root cause analysis).<br />
* B-07385: Align token lifetime with SESSION_MAXIMUM_DURATION setting.<br />
* B-07500: ColumnMappings property for IDataFrame and DataTables.<br />
* B-07499: IDataFrame.ApplyFilter function to filter events data using a JSON-based filter.<br />
* B-07469: Translation updates for release 2022.7.<br />
<br />
'''Fixed issues:'''<br />
* D-11630: Drag and drop from chart settings to main header was working incorrectly for filter and root cause rules.<br />
* D-12455: Moving a chart filter from one chart to another created a root cause analysis filter.<br />
* D-12266: Root causes analysis showed incorrect results when certain combination of filters.<br />
* D-12525: Numerical values in Excel export in data grid was formatted incorrectly.<br />
* D-12534: Restoring item from recycle bin changed project from Bin to previous project.<br />
* D-12529: Measure specific datalabel mapping did not work correctly when also mapped to Y-axis.<br />
* D-12532: Multi-selection options caused layout issue for Chart setting.<br />
* D-12541: Layout issue for Polish in multiselect list search dialog.<br />
* D-11277: Increase/decrease Icons were missing in the dimension sorting for Mac.<br />
* D-12552: Uncaught Error: Diagram.selectCollection given something that is not a Part: null.<br />
* D-12567: Tooltip incorrectly showed for label component containing only spaces.<br />
* D-12438: Operation was cancelled because it was replaced by a new operation.<br />
* D-12551: Some expressions didn't work as calculated case/event attributes.<br />
* D-11720: Chart buttons were not visible in Apple Safari and iPad.<br />
* D-12544: On-screen settings "options" parameter did not work.<br />
* D-12528: Multi-unit time unit selection appeared where it's not applicable.<br />
* D-12583: Error message should be provided for invalid settings input than just display JS errors.<br />
* D-12599: Tooltips didn't show correct measures/dimensions when "Show in tooltip" mappings are used.<br />
* D-12561: Chart settings content was incorrectly drawn outside of the chart dialog.<br />
* D-12568: Reload UI sometimes crashed chart having multiselect on-screen settings.<br />
* D-12572: Main header toolbar lost when refresh maximized PA chart.<br />
* D-12612: Drop Unused Filters After setting incorrectly allowed zero seconds.<br />
* D-12533: Error message keeped blinking in Analysis view.<br />
* D-12608: User could not select or add new case attribute when current select attribute doesn't exist.<br />
* D-12451: Prevented deleting running script.<br />
* D-12516: Windows event viewer warning: Failed to gracefully shutdown application.<br />
* D-12523: Business calendar performance - part 2.<br />
* D-12538: Column with same name could be added multiple times to datatable using expression language.<br />
* D-12582: Improved EMS mutex code to support multiple PA service in one server.<br />
* D-12624: Synchronize new (empty) data table generated failed queries in Snowflake.<br />
* D-12622: Advanced setting page reserved room for the expression editor frame that did not exist.<br />
* D-11295: In on-screen settings, some UI controls were vertically misaligned.<br />
* D-11625: The heights of the parameter option menu in the clustering tab was not well aligned.<br />
* D-12103: Small dropdown list layout issue.<br />
* D-12633: Align issue for Column related Advanced settings.<br />
* D-12505: Search dialog didn't escape % and _ characters correctly in dataframe processing.<br />
* D-12645: Tabs in expression settings dialog were partly hidden when dialog is narrow.<br />
* D-11382: Moving of flowchart was sometimes shaky.<br />
* D-12655: Filter rule tooltips in header were styled incorrectly.<br />
* D-12656: Large integer values in filter jsons were incorrectly presented as small integers.<br />
* D-12661: Some exported filters contained unnecessary "invert" property.<br />
* D-12500: Model with numeric case id's and filtering with the attribute mapped as case id: ERROR [22018] Numeric value <nowiki>''</nowiki> is not recognized.<br />
* D-12509: Filtering null values didn't work in boolean attributes in Snowflake.<br />
* D-12571: In dataframe processing in SQL Server, dividing two integers should not make rounding to integer.<br />
* D-12610: Setting for global DropUnusedFiltersAfter was missing.<br />
* D-12613: Filtering with case/event attributes with null values didn't match in Snowflake models.<br />
* D-12617: Model didn't work when DropUnusedFiltersAfter is 00:00:00.<br />
* D-12618: If model ConfigurationJson is null, Configuration property didn't work.<br />
* D-12620: Filtering didn't work when there are backslaces in attribute names in Snowflake models.<br />
* D-12643: AttributeFunctionCallExpression did not always work properly in array context.<br />
* D-12647: SqlDataFrame with SQL Server: Comparing literals to variant column values failed.<br />
* D-12648: Models that have DropUnusedModelsAfter setting caused "The sliding expiration value must be positive" error.<br />
* D-11526: It was unable to translate Unicode character \uD83D at index 176 to specified code page.<br />
* D-12637: In application startup arised FATAL Application startup exception System.UnauthorizedAccessException: Access to the path 'Global\MutexQPRPAActivation' is denied.<br />
<br />
== Old Releases ==<br />
See older releases in [[QPR ProcessAnalyzer Release Archive]]<br />
__NOTOC__<br />
<br />
[[Category: QPR ProcessAnalyzer]]</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&diff=24489QPR ProcessAnalyzer Release Notes2024-03-20T13:39:55Z<p>Ollvihe: /* Next Release: QPR ProcessAnalyzer 2024.3 (planned release date 2024-04-02) */</p>
<hr />
<div>This page lists all new features and fixed issues for each QPR ProcessAnalyzer release.<br />
<br />
== Next Release: QPR ProcessAnalyzer 2024.3 (planned release date 2024-04-02) ==<br />
<br />
'''Features:'''<br />
* B-08242: [[Actions_to_Run_Script_in_Table|Custom actions]] in scripts can be started from dashboard table context menu, e.g., create tickets, trigger automation, and fetch external information.<br />
* B-08252: When Analyzed objects is cases, event attribute values are filtered with the native event attribute filter rules instead of expression based filter rules.<br />
* B-08231: Snowflake performance improved by splitting object counts (shown in header) query into two, so that the filtered object count query uses eventlog caching.<br />
* B-07906: Implemented cross joins to SQL dataframes.<br />
* B-03047: Removed support for dashboard panels.<br />
* B-08214: Removed unused columns from the PA_VIEW table.<br />
* B-08254: Frontend components have been updated.<br />
<br />
'''Fixed issues:'''<br />
* D-14048: Fixed issue where in-memory root causes analysis for case attributes didn't show attributes with ShortString data type.<br />
* D-14049: Added some missing translations for table column filter and BPMN editor.<br />
* D-14021: FindRootCauses function WeightingExpression was run in incorrect context for in-memory model.<br />
* D-14020: Query which goes from EventTypes to Cases did not show the error when using GetValueFrom function.<br />
* D-13976: Fixed issue where gateway-based imports were not synchronous.<br />
* D-13689: Fixed JavaScript error in Highcharts polar chart with tooltips.<br />
* D-12614: Highcharts gives "Maximum call stack size exceeded" error in bar chart with polar and data labels.<br />
* D-14060: Highcharts custom layout translatable properties incorrectly changed chart configuration by translating the labels.<br />
* D-14071: Business calendar button press caused error when user didn't have access to any model.<br />
* D-14041: Manager Users dialog "Has password" field filter shows now Yes/No texts instead of true/false.<br />
* D-11268: There were inconsistent button colors in Workspace.<br />
<br />
== Latest: Additional release for QPR ProcessAnalyzer 2024.2 (build 5509) (released 2024-02-27) ==<br />
<br />
'''Features:'''<br />
<br />
* B-06280: User management dialog shows whether users have password defined and unnecessary passwords can be removed to improve security.<br />
<br />
'''Fixed issues:'''<br />
<br />
* D-14045: Fixed issue where users with Viewer or Analyzer role couldn't create filters in Snowflake models.<br />
<br />
== QPR ProcessAnalyzer 2024.2 (build 5438) (released 2024-02-21) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue: Snowflake models and dashboards don't work with Viewer and Analyzer role permisions. The reason is that cache tables created to Snowflake incorrectly require the write permissions. Workaround is to give users the Designer role which will give the needed permissions. Note that the Designer role gives many permissions to the user for the project [[Roles_and_Permissions#Roles_and_Permissions|(more information)]]. This issue has been fixed in the next release (D-14045).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
The legacy User permissions report (analysis number 11) and Filters report (analysis number 30) used in SQL scripts have been removed. Use instead the expressions language to query filters and user permissions, e.g., [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|Models.Filters]] and [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
New version of the Design diagram component has been improved with object-specific measures, and the previous common measures are not migrated into object-specific measures. Thus, the measures need to be configured again, or manually edit the chart json settings (if needed please ask instructions from QPR CustomerCare).<br />
</div><br />
<br />
'''Features:'''<br />
* B-08022: Design diagram supports now BPMN notation, elbow style flows and object-specific measures.<br />
* B-08232: Entire future eventlogs can be [[Create_Predicted_Eventlog|predicted]] based on generative AI models running in Snowflake.<br />
* B-08166: Added expression language function [[Generic_Functions_in_QPR_ProcessAnalyzer#OpenAIChatCompletion|OpenAIChatCompletion]] to answer natural language prompts based on OpenAI ChatGPT API.<br />
* B-08177: Snowflake query performance has been improved by introducing caching of filtered eventlogs using Snowflake tables.<br />
* B-08196: Conditional formatting rules can be defined for [[QPR_ProcessAnalyzer_Table#Textual_equal_rules_for_background_color|textual and boolean values]].<br />
* B-08213: Big data chart expressions event type selections to be multi-select where applicable.<br />
* B-08205: Expression language API is available for storing [[Storing_Secrets_for_Scripts|secrets]] for scripts.<br />
* B-07780: Chart [[QPR_ProcessAnalyzer_Chart#Variable_mappings|variable mappings]] has been removed - use the [[Chart_Linked_Settings|linked settings]] instead. Dashboards using variable mappings are automatically converted to use linked settings.<br />
* B-08117: Added ToSqlDataFrame function to convert in-memory dataframe into SQL dataframes.<br />
* B-08174: Only non-default parameters values are written to the operation log.<br />
* B-08200: Timestamps in System reports are shown in user workstation local time.<br />
* B-08171: Dashboard id has been added to queries, to track from which dashboard queries are originating.<br />
* B-07144: Remove legacy User permissions report (analysis number 11) and Filters report (analysis number 30) in SQL scripts (see note above).<br />
* B-08193: Added retry mechanism to QPR ScriptLauncher to recover if connection to server breaks.<br />
* B-08202: Updated copyright for year 2024.<br />
* B-08199: Frontend components have been updated.<br />
* B-08203: Backend components have been updated.<br />
* B-08209: Translations updated for release 2024.2.<br />
<br />
'''Fixed issues:'''<br />
* D-13972: Some measures/dimensions/columns in Big data chart didn't show the expressions level filtering.<br />
* D-14015: Fixed business calendar incorrect calculation when business period covered entire day.<br />
* D-14014: Fixed issue where Snowflake business calendar could not have end time as 00:00.<br />
* D-13962: System variable values were interpreted incorrectly when used in linked settings.<br />
* D-13971: HiddenInNavigation and SortOrder variables didn't work in navigation menu dashboards list.<br />
* D-13959: Removed possibility to add datatable columns with the legacy "any" data type.<br />
* D-13991: Improved drop-down selector component to handle empty strings as variable values.<br />
* D-13965: Datatable column name length was validated incorrectly which may have caused error in saving with too long column names.<br />
* D-13958: Project names showed unnecessary html escaping in the "Move to" menu.<br />
* D-13964: Model attributes and notifications dialogs gave error when trying to use dashboard tags.<br />
* D-13960: Added missing translations for list of permission list and 12-hour clock format.<br />
* D-13966: Fixed issue were root causes chart tooltip sometimes didn't disappear.<br />
* D-13969: Datatable column schema export sometimes showed empty for the key column.<br />
* D-13862: Session token was not accepted when url path capitalization is different.<br />
* D-13942: Datatable could not be dimensioned if it has column named "CaseId".<br />
* D-13980: Business calendar dialog crashed when tried to open it for a model without access.<br />
* D-13983: Notifications dialog didn't validate situation when same name was used in a measure and dimension.<br />
* D-13981: Dashboard import set incorrect model id to dashboard if there was no access to any model.<br />
* D-11276: Translations were missing for 12-hour clock dates (AM and PM) in dashboards.<br />
* D-13977: Multi-select dropdown lists showed some special characters incorrectly.<br />
* D-13945: Syncfusion toast message didn't work when text contains ${[]}.<br />
* D-13930: Pivot table throws javascript error when certain clicks.<br />
* D-13273: Duplicate datatable row count didn't shown correctly.<br />
* D-13994: There was an error in the in-memory chart with some flow related measures about duplicate variable names when same measure was defined twice.<br />
* D-13985: Models list dots menu had texts misaligned in narrow screens.<br />
* D-13995: In Workspace, wrong datatable was selected after duplication when non-default sorting was applied.<br />
* D-13997: Workspace tables column filtering search caused JavaScript errors.<br />
* D-13978: In table Excel export, the last row representing other items appeared incorrectly for in-memory chart.<br />
* D-14007: In System reports, model related selections are hidden from the Analyzed objects lists.<br />
* D-14005: In big data chart, changing to custom expression caused crash with some expressions having case/event attribute.<br />
* D-14003: When dimensioning was not used, pivot table values were incorrectly rounded in the server side.<br />
* D-14004: Removed empty filters from queries to optimize them.<br />
* D-13988: Fixed issue where data grid context menu rendered initially as too high.<br />
* D-13979: BPMN model editor element settings use now Open Sans font.<br />
* D-14013: Fixed incorrect expression "Duration between first and last occurrence" in big data chart event types.<br />
* D-13984: Fixed the error of refusing to run the JavaScript URL.<br />
* D-14031: ThrownObject property was not included to http error response when error came from the script.<br />
<br />
== QPR ProcessAnalyzer 2024.1 (build 4784) (released 2024-01-10) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue fixed in QPR ProcessAnalyzer 2024.2: In Big data chart, some measures, dimensions and columns have the filtering option missing. The issue concerns for example Duration between events, Path starting/until between specific events, and Cases where event occurs before other selections. Workaround is to set the filter in the chart json settings: the filter can be configured to another expression and copied to the correct expression.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
QPR ProcessAnalyzer Server and QPR ScriptLauncher are now using .Net 8 (previous was .Net 6). When updating to this release, install the .Net 8 Runtime ([[Updating_QPR_ProcessAnalyzer_Server|see more]]). The .Net 6 doesn't need to be uninstalled immediately because .Net 6 and .Net 8 work side-by-side, but due to security reasons, the unused .Net 6 should eventually be uninstalled.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In this release, all filters that don't contain any filter rules, are removed. These are legacy filters which have not been visible in the UI.<br />
</div><br />
<br />
'''Features:'''<br />
* B-08019: New component [[Design_Diagram|Design Diagram]] for showing user-created diagrams in dashboards where to visualize process mining metrics.<br />
* B-08087: Generic [[Dropdown_List_Selector|dropdown list selector]] works with Snowflake models allowing to add selection lists for any values.<br />
* B-08163: Linked settings support for binding to [[Chart_Linked_Settings#Binding_to_case_attribute_filters_with_attribute_name_and_attribute_values|case attribute filter values without defining case attribute name]].<br />
* B-08170: Snowflake model filters can be [[Filtering_in_QPR_ProcessAnalyzer#Filter_actions|saved as new models]] which can be used to create snapshots of part of models.<br />
* B-08093: Multiple dashboards can be exported to same file, and model can be set for imported dashboards.<br />
* B-08161: Added [[Datatable_in_Expression_Language#Modify|Modify]] function to change datatable properties and improved [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#CreateDatatable|CreateDatatable]] function for creating datatables.<br />
* B-08122: Added new system report to list dashboards.<br />
* B-08173: Removed legacy filters that didn't have any filter rules.<br />
* B-07961: In OperationLog, changed parameters to json format and added request id.<br />
* B-08069: Added DashboardId property to [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog]] in expression language.<br />
* B-08139: Added [[Datatable_in_Expression_Language#UpdateRows|UpdateRows]] function to update existing rows in datatables with similar logic than SQL update.<br />
* B-08115: Added [[Datatable_in_Expression_Language#DeleteRows|DeleteRows]] function to delete rows in datatables with similar logic than SQL delete.<br />
* B-08149: QPR ProcessAnalyzer has been updated to .Net 8.<br />
* B-08054: Changed Scripts property in generic context to return all scripts, instead of legacy system level scripts.<br />
* B-08138: Changed Synchronize function to remove all columns when no Snowflake table exists.<br />
* B-07689: For datatables, [[Datatable_in_Expression_Language#ForeignKeys|foreign keys]] to other datatables can be defined using expression language.<br />
* B-08176: Translation updates for release 2024.1.<br />
* B-08175: Workspace should show timestamps in user's local time.<br />
<br />
'''Fixed issues:'''<br />
* D-13913: Datatable properties dialog incorrectly showed linked models from other projects.<br />
* D-13916: Chart filter could not be defined for some expressions in Big data chart.<br />
* D-13933: Navigation menu selected item wasn't highlighted when used Snowflake models.<br />
* D-13906: In Conformance Analysis, deviating flows were not translated.<br />
* D-13907: Improved translation related to datatable properties dialog "Used by models" field.<br />
* D-13904: There was an unclear error message in Snowflake, as exception code 1 was returned without AttributeName and ModelName properties when non-existing attribute was in filter.<br />
* D-13911: Fixed small glitches in the opening and closing of drop-down lists.<br />
* D-13918: Datatable could be configured incorrectly to use table for other datatable.<br />
* D-13932: Duplicating datatable with custom table in datasource losed all data.<br />
* D-11002: Removed legacy in-memory prediction preset.<br />
* D-13912: Added check that array cannot be stored to dashboard Content property.<br />
* D-13936: Query designer default query didn't work with Snowflake models.<br />
* D-13938: There was an incorrect logging with some operations related to ScriptLauncher.<br />
* D-13923: Snowflake expressions didn't work with Where function in root referring to case attribute.<br />
* D-13939: ApplyFilter function gave null reference error for non-existing attribute name.<br />
* D-13931: There were issues with AllowExternalDatasources and EnableFullFunctionality settings.<br />
<br />
== QPR ProcessAnalyzer 2023.7 (build 4326) (released 2023-11-28) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Limitation for the maximum amount of data (B-07636) causes a behavior change in in-memory charts that have the Maximum rows settings empty and have the sorting defined. In certain cases, the order in which measures are evaluated changes (due to an internal performance optimization). If there are custom expressions that define variables, the variables may not be available in other measures anymore. As a resolution, either redefine the variables in those measure expressions or add those measures secondarily to the sorting.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Default query timeout of 30 minutes has been added for --#ImportOdbcQuery, --#ImportSqlQuery and --#ImportOleDbQuery commands. If a query run is taking longer than the timeout, the query is stopped. The timeout can be adjusted using the '''QueryExecutionTimeout''' parameter. Previously, there has been no timeout, so queries that take more than 30 minutes require configuring a longer timeout.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Incorrectly configured [[Chart_Linked_Settings|linked settings]] in charts (available in the ''Advanced'' tab) give now an error message, if they are referring to non-existing measures, dimensions or columns. Previously, incorrect linked settings were ignored. To fix the error message, remove the incorrect linked settings.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07511: Datatables have a [[Datatable_Properties_Dialog|dialog]] to view datatable properties, write description, set the Snowflake source table, add/modify/delete columns, and set the datatable key.<br />
* B-08150: Added setting [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|Apply chart filters first]] to determine whether chart filter rules or dashboard filter rules are applied first when chart queries are filtered.<br />
* B-08091: When filtering charts in Snowflake, case attribute filter is created instead of case id filter.<br />
* B-08091: [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|New setting]] to define whether cases or events are filtered by default.<br />
* B-08091: New preset "Looping paths" to detect whether there are repeating patterns of events.<br />
* B-08091: Duration between events calculation ignores negative durations in Snowflake.<br />
* B-08091: Chart loading animation has been renewed.<br />
* B-07636: To prevent dashboards from jamming when querying too much data, added [[QPR_ProcessAnalyzer_Chart#Available_Visualizations|limitations]] to the amount of data that charts can visualize. Note that the limitation concerns the aggregated data that is visualized, not the source event log data.<br />
* B-08017: [[Dashboard_in_Expression_Language|Dashboards API]] has been added to expression language, allowing to create, modify and delete dashboards in scripts.<br />
* B-08056: Following properties have been added to [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#User.2FGroup|user objects]] in expression language: IsLocked, LastLockedDate, LastLoginDate.<br />
* B-08053: [[Navigation_Menu#System_Reports|User rights report]] has been refactored to use [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property in the expression language. The change also simplifies the report as now it only shows the direct role assignments that are visible in the [[Manage_Users_and_Groups|User Management]].<br />
* B-08151: For Snowflake expressions support for following [[SQL_Expressions#Window_functions|windowing functions]]: sum, average, median, min, and max.<br />
* B-08050: When a model is created, the default filter is not created anymore (this is a refactoring that doesn't have any impact on user interface).<br />
* B-08123: Translation updates for 2023.7.<br />
* B-08092: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13876: In CreateSnowflakeConnection function, ProjectId parameter is optional when OdbcConnectionStringKey is not specified.<br />
* D-13898: Snowflake: Exclude case attribute filter didn't work when there was null values and was selecting at least two values.<br />
* D-13890: Fixed XES file import to work.<br />
* D-13894: Business calendar based duration calculation was incorrect in some durations that spanned to several weeks (for Snowflake and in-memory models).<br />
* D-13899: Using broken OdbcConnectionString in a datatable prevented the datatable from being deleted.<br />
* D-13883: Script run stucked after running a script with error that uses client-side ODBC import.<br />
* D-13879: SqlExpressionValue filter when excluding events didn't work with filter rule root expression only.<br />
* D-13896: Adding or removing columns to datatable didn't change the LastModifiedDate.<br />
* D-13882: User details weren't written to operation log when creating or modifying users.<br />
* D-13771: User rights system report didn't give error when changing columns.<br />
* D-13893: Some event filtering caused null pointer error when primary key had been defined.<br />
* D-13873: Fixed pivot table visual issues after component update.<br />
* D-13900: When adding, renaming or removing columns for Snowflake table fails, operation is now rolled back without any changes.<br />
* D-13866: Querying GET api/uielements was quite slow right after server start.<br />
* D-13864: Combinations of translatable and hardcoded strings didn't get translated in UI.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.6 (build 3933) (released 2023-10-24) ==<br />
<br />
'''Features:'''<br />
* B-08055: Error message for locked account has been replaced with generic error message, so that username enumeration is not possible.<br />
<br />
'''Fixed issues:'''<br />
* D-13884: Attributes dialog crashed with some older model configurations.<br />
* D-13843: In charts, selected case and event attributes switched away when attribute data type was ShortString.<br />
* D-13877: Some Snowflake expressions gave error "exceeds maximum length limit of 255 characters" when selecting lot of items.<br />
* D-13878: Snowflake expression filters for case attribute values didn't accept other than string type of case attributes.<br />
* D-13871: Some statistical calculations with percentages didn't work with Last Row Aggregates Over-limit Rows setting.<br />
* D-13875: Using some case level filters in a model without cases datatable didn't work.<br />
* D-13861: Dashboard opens are now logged to the Task log (i.e., calling GET /api/dashboards/{dashboardid}).<br />
* D-13870: Workspace projects hierarchy focused project showed light grey background making the project name not readable.<br />
* D-13867: When starting datatable refresh and going to other tab, went back to Datatables tab when query completed.<br />
* D-13853: If chart Custom Layout settings had extra series defined, chart may have crashed.<br />
* D-13869: Export as CSV button didn't work in the datatable contents dialog when dialog was still loading.<br />
* D-13872: Main progress spinner had unnecessary small scrollbar on top right.<br />
* D-13863: In the REST API method GET /api/users, password field (that has always been null) has been removed.<br />
<br />
== QPR ProcessAnalyzer 2023.6 (build 3847) (released 2023-10-17) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is removed in this release. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
'''Features:'''<br />
* B-07992: Added 10 new presets including Queue analysis, Four eyes principle, Self-looping events, and Path until selected event. There are also presets for Individual Cases Flow and Range of event type occurrences which use Gantt chart.<br />
* B-08011: Added following date related operations for Snowflake: Day of year, Day of month, Day of week, Week of year, Half-year only, Quarter only, Month only, Hours only, Minutes only, Seconds only, and Milliseconds only. These are available when calculating with date type of data.<br />
* B-08016: [[QPR_ProcessAnalyzer_Table#Table_actions|Table actions to set variables]] can also be opened to a new browser tab. Also improved user interface for table actions.<br />
* B-08018: For Snowflake expressions, added Flows aggregations FromEventType and ToEventType to get starting/ending event type, and FlowOccurrences aggregations FromEvent and ToEvent to get starting/ending event.<br />
* B-08001: Added [[Generic_Functions_in_QPR_ProcessAnalyzer#CallStoredProcedure|CallStoredProcedure]] function to call Snowflake stored procedures. This allows to start ETL transformation in Snowflake orchestrated by QPR ProcessAnalyzer script.<br />
* B-08013: Added [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property to expression language to replace the legacy UserPermissions analysis (11).<br />
* B-07976: Snowflake [[Filtering_in_QPR_ProcessAnalyzer_Queries#Expression|expression based filter rules]] support additional expression columns allowing more Big data chart expressions to be filterable.<br />
* B-08015: Big data chart doesn't anymore support calculation in SQL Server (using local datatables).<br />
* B-06270: Improved error messages and made them translatable by taking into use exception codes provided by server.<br />
* B-08021: Added possibility to store [[Diagram_in_Expression_Language|designed diagrams]] for models and expression language API for reading and modifying diagrams.<br />
* B-08037: Dropped following unused tables database: PA_IDEA, PA_IDEA_VOTE, PA_REPORT, PA_REPORT_SETTING, PA_SESSION_SERVICE, PA_VIEW_FILTER_RULE, PA_VIEW_FILTER_RULE_PARAMETER.<br />
* B-08052: Language translations have been updated to 2023.6.<br />
* B-08051: Frontend side components have been updated.<br />
* B-08034: Backend side components have been updated.<br />
<br />
'''Fixed issues:'''<br />
* D-13830: Object counts indicator in header showed incorrect counts when there was disabled filter rules in Snowflake models.<br />
* D-13833: In-memory charts didn't work with boolean type of dimensions when filtering with the false value.<br />
* D-13858: Target value measures didn't update chart when controlled using an on-screen setting.<br />
* D-13827: Calculated attributes data type was incorrectly set as Any by the Attributes dialog.<br />
* D-13849: Multiselect list search didn't allow spaces.<br />
* D-13829: Multiselect dropdown lists height jumped couple of pixels when selecting values.<br />
* D-13835: Deselecting a selected data point didn't remove chart filter rule.<br />
* D-13702: Improved Snowflake query performance in situations when there are lot of filter rules (by decreasing number of CTE's).<br />
* D-13819: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13820: Fixed incorrect manifest.json file to avoid "not found" errors when fetching web site icon.<br />
* D-13865: Break, continue, and return statements didn't work properly when called from inside a catch block.<br />
* D-13795: There was a Python error in clustering analysis with Snowflake model.<br />
* D-13823: Some tooltips in Workspace project hierarchy didn't work and caused a JavaScript error.<br />
* D-13824: BPMN editor align context menu layout looked strange.<br />
* D-13813: QPR logo button in the top left was misaligned in Firefox.<br />
* D-13797: Snowflake query may have given following error when using sampling: ambiguous column name '_EventType_NotNull_1'.<br />
* D-13774: TakeSample function with certain columns caused SQL compilation error: ambiguous column name 'Case Name'.<br />
* D-13782: Snowflake: Aggregating from variations didn't work when using sampling.<br />
* D-13836: Some tooltips had a strange two-colored background.<br />
* D-13834: Removed Model statistics column from clustering and root causes analysis.<br />
* D-13860: Removed filter button from the custom expressions in Task log analyzed objects.<br />
* D-13838: Removed Split data by filtering column from clustering analysis.<br />
* D-13832: Script and model status updates incorrectly sent next update when previous was still pending.<br />
* D-13839: Charts reset zoom button font size was too small.<br />
* D-13817: Importing data to Snowflake datatable with Append=0 doesn't now drop the underlying Snowflake table.<br />
* D-13825: Some models could not have been deleted from recycle bin.<br />
* D-13852: Recycle bin Projects and Models tab didn't show correct content when Recycle bin only contained either models or projects.<br />
* D-13841: In-memory chart Data type selection type has been corrected to string.<br />
* D-13842: Second time and Third time selections has been hidden in in-memory chart measures.<br />
* D-13850: In Chrome, there were console errors related in incorrect text field autocomplete type and text field without form.<br />
* D-13847: Improved browser side performance by removing unnecessary operations.<br />
* D-13859: Chart without dimensions showed an unnecessary Remove dimension button.<br />
* D-12598: When script is stopped in server, ScriptLauncher could still incorrectly continue to import data.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.5 (build 3334) (released 2023-09-07) ==<br />
<br />
'''Fixed issues:'''<br />
* D-13826: Measures or dimensions with case or event attribute and value selections incorrectly removed calculated attributes when dashboard was opened or chart settings were changed.<br />
* D-13821: Font size of some Highcharts tooltips was too small. Issue appeared when there were tooltips mappings in measures or dimensions.<br />
* D-13810: Simplified help links: now all Help buttons go to the QPR ProcessAnalyzer wiki main page.<br />
* D-13822: Snowflake clustering analysis showed empty strings and nulls as case attribute values in an unclear way as just nothing.<br />
<br />
== QPR ProcessAnalyzer 2023.5 (build 3304) (released 2023-09-05) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In Big Data Chart, the '''Case conformance''' measure and dimension has changed in a way that now it provides boolean values (true/false) instead of integer values (1/0). If [[Measure,_Dimension_and_Column_Settings#Other_settings|colorMappings]] are used for this measure or dimension to set specific colors to visualize conformant and nonconformant cases, the mapped values need to be changed as follows: '''1''' -> '''true''' and '''0''' -> '''false'''. Without the change, the mapped colors are not effective.<br />
<br />
Exmaple: Old configuration:<br />
<pre><br />
"colorMappings": {<br />
"1": "#36d475ff",<br />
"0": "#f5403bff"<br />
}<br />
</pre><br />
New configuration:<br />
<pre><br />
"colorMappings": {<br />
"true": "#36d475ff",<br />
"false": "#f5403bff"<br />
}<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is deprecated. Big data chart has allowed to process data both in Snowflake and SQL Server. Now the support for SQL Server is deprecated and the Big data chart will only support calculation in Snowflake. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). The OperationLog analysis is replaced by the [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog function]] and the Infcluencers analysis is replaced by the [[FindRootCauses_Function|FindRootCauses function]].<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [12, 14, 15, 16, 29];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
By default, Snowflake ODBC driver generates quite much logging to files which might unnecessarily fill up the disk space. It's recommended to set the LogLevel parameter to value 0. The path where the logs are created can be seen in Windows registry (key LogPath). More information about configuring Snowflake ODBC parameters: https://docs.snowflake.com/en/developer-guide/odbc/odbc-parameters.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07971: Machine learning based [[Clustering_Analysis|Clustering analysis]] can be run in Snowflake.<br />
* B-07989: In dashboard designer the stacking order of charts can be changed with buttons [[QPR_ProcessAnalyzer_Dashboard_Designer#Viewing_and_Editing_Dashboards|Bring to front, Send to back, Bring forward and Send backward]].<br />
* B-07977: For [[Sankey_Chart|sankey diagram]], added Start level and End level mappings to define custom start and end level for the sankey flows. Implemented also color mappings to define specific colors for specific values.<br />
* B-08010: To improve performance, charts are loaded and updated only when they are visible in the dashboard.<br />
* B-07975: Added following [[SQL_Expressions#Date_functions|date related functions]] to Snowflake: DayOfYear, DayOfWeek, WeekOfYear, Quarter.<br />
* B-07908: When [[QPR_ProcessAnalyzer_Project_Workspace#Duplicating_Model|model is duplicated]], also filters in the model are also duplicated.<br />
* B-07904: Filters and models API for expression language has been completed.<br />
* B-07991: In [[Filter_Selectors|case and event type filter selectors]], threshold whether the dropdown list or search dialog is shown can be defined using the ''Maximum Rows'' setting. Also the search dialog filters search results by other filter rules in the dashboard.<br />
* B-07999: Filters report has been changed to use the [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|expression language API for filters]].<br />
* B-07540: Added [[QPR_ProcessAnalyzer_Expressions#Throwing_objects|throw statement]] to expression language.<br />
* B-07813: UI components are updated. There are small visual improvements, such as in flowchart flows are routed a bit differently and in charts the hidden series is shown as strike-through in the legend.<br />
* B-07963: Following legacy analysis types have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29) (see more information in the note above).<br />
<br />
'''Fixed issues:'''<br />
* D-13777: Filters could not be created in charts when "Update Filter During Selection" setting was disabled.<br />
* D-13767: Automation per Event Types preset in in-memory incorrectly showed only one event type.<br />
* D-13756: Changing background color in KPI card didn't have any effect.<br />
* D-13812: "Exclude events" was incorrectly translated to "Exclure les cas" in French.<br />
* D-13815: Dashboard designer background grid was not visible in entire area in edit mode. Improved also the grid to match to snapping in move and resize.<br />
* D-13674: Business calendar dialog layout was incorrect when a model with a long name was selected to copy holidays.<br />
* D-13811: Table actions link to a new window didn't go to dashboard if there were other parameters in the link.<br />
* D-13601: Fixed issue where some presets may have given error when attribute value selection and the automatically selected attribute conflicted by the data type.<br />
* D-13753: While Snowflake model was selected, in Filters and User Rights reports the Columns list could not be opened.<br />
* D-13720: Now table column filter and sorting are preserved when resizing or zooming page.<br />
* D-13785: In tables increased number of rows to 20000 that are inspected to get available items shown in Excel-style column filter.<br />
* D-13759: Some statistical calculations had bad performance with large number of rows.<br />
* D-13787: Conformance statistics component didn't have scrollbars when text didn't fit to the visible area.<br />
* D-13788: In-memory "Nonconformance reason" selection caused error when two of them was selected in the same chart.<br />
* D-13783: When Analyzed objects was Generic analysis, column selection incorrectly caused "Analysis has not been selected" error.<br />
* D-13776: When measure name contained quotation mark, notification preview didn't work.<br />
* D-13747: Filtering with integer type of case id with case attribute value filter caused error in Snowflake.<br />
* D-13791: In Firefox, model selection in chart settings didn't show models in the first open.<br />
* D-11984: Recycle bin buttons didn't fit to the screen when screen width was small.<br />
* D-13780: Using CaseId case attribute in clustering analysis did not work with Snowflake 106 cases standard model.<br />
* D-13781: Clustering analysis produced Python error with a certain simple Snowflake model.<br />
* D-13730: Snowflake: Case attribute filtering didn't work when there are cases without row in cases table.<br />
* D-13803: There was chart configuration validation error in browser console when measures were moved into dimensions in Big data chart.<br />
* D-13758: There was performance issue with the Recent tasks system preset.<br />
* D-13793: Snowflake clustering failed when cluster count is larger than case count.<br />
* D-13763: SQL expression based filter rule with Where function to filter events didn't filter anything in Snowflake.<br />
* D-13804: Added missing Millisecond function to Snowflake.<br />
* D-13772: Expression EventLog.Cases.Events caused error "Value cannot be null".<br />
* D-13755: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13739: When switching between System reports there was error: "Uncaught Error: 2nd dimension not found. at y.getExpressionConfiguration".<br />
* D-12109: Sometimes flowcharts showed message "Error in querying event type measures. Input string was not in a correct format".<br />
* D-12473: Cost Savings by Automation preset gave sometimes error "Unable to cast object of type 'System.Double' to type 'System.String'".<br />
* D-13750: Snowflake model didn't work with the Case Duration vs. Manual Activities preset.<br />
* D-13657: There was error converting data type nvarchar to bigint.<br />
* D-13796: Some Snowflake operations didn't work with zero rows and columns.<br />
* D-12494: Now when chart size changes, the table column filters and sorting are preserved.<br />
* D-13736: In Performance benchmarking dialog, the Export result button exported wrong benchmark performance analysis result.<br />
* D-13609: Improved conformance analysis related filter names.<br />
* D-13594: Recycle bin buttons were not visible when opening recycle bin in a narrow screen.<br />
* D-13226: Tooltips in the model properties dialog are now translated.<br />
* D-12569: Table incorrectly showed ellipsis for narrow boolean type of columns showing checkboxes.<br />
* D-13391: Emptying date or datetime picker value was not registered and it didn't trigger functionality.<br />
* D-12621: Value search dialog didn't work with values containing backslashes.<br />
* D-13796: Some Snowflake operation didn't work with zero rows/columns.<br />
<br />
== QPR ProcessAnalyzer 2023.4 (build 2628) (released 2023-06-14) ==<br />
<br />
'''Features:'''<br />
* B-07767: Added [[Gantt_Chart|Gantt chart]] to visualize timeline of cases and events divided into swimlanes.<br />
* B-06383: Added [[Sankey_Chart|Sankey chart]] to visualize flow from one set of values to another.<br />
* B-07941: Implemented many more presets running in Snowflake models for compliance and operational excellence use cases. There are also presets for the path analysis and process bottlenecks identification.<br />
* B-07864: Snowflake conformance analysis shows now [[Conformance_Analysis#Top_Deviations_(in-memory)_/_Deviating_Flows_(Snowflake)|reasons for conformance deviations]], such as which event occurrences deviated from the design model.<br />
* B-07909: Snowflake conformance analysis visualizes [[Conformance_Analysis#Undesired_Events_(Snowflake)|undesired event types]] in table and flowchart.<br />
* B-07823: Flowchart Bottlenecks preset has been changed to show bottlenecks for event types. Also renewed the [[QPR_ProcessAnalyzer_Logs#Task_Log|Tasks reports]] to use expression language based interface.<br />
* B-07891: User interface has been [[Languages_and_Localization|translated into Portuguese]].<br />
* B-07873: Improved [[QPR_ProcessAnalyzer_Pivot_Table|pivot table]] visual layout to highlight totals and aggregated rows. Also the row titles are now visible in the top left.<br />
* B-07905: Added [[SQL_Expressions#Rank_functions|Rank related functions]] to Snowflake for writing more versatile custom KPI's, e.g., FirstValue, LastValue, NthValue, Lead and Lag.<br />
* B-07912: Added more SQL expression [[SQL_Expressions#Array_functions|array functions ArrayToString and ArrayOverlap]] to Snowflake.<br />
* B-06449: Added SQL expression functions ToTimestamp and TryToTimestamp for parsing timestamps from strings using provided format.<br />
* B-07959: Added new functions Base64Encode and Base64Decode to help using basic HTTP authentication when calling web services.<br />
* B-07206: SQL expressions support data [[SqlDataFrame_in_Expression_Language#WithClusterColumn|clustering]] which is an unsupervised machine learning algorithm to group data based on similarities.<br />
* B-07848: Data can be extracted from SAP using the encrypted [[Importing_Data_from_SAP#SNC_encrypted_connection|SNC connection]].<br />
* B-07903: Added expression language API to create and modify filters and models.<br />
* B-03103: [[QPR_ProcessAnalyzer_Logs#Task_Log|Task log]] (operation log) can be accessed in expression language.<br />
* B-07872: List aggregation with Distinct=true orders now items by their value.<br />
* B-07940: Removed "Count" aggregation from textual values in Big data chart (you can use the Case count, Event count, etc. selection instead).<br />
* B-07757: Backend support for datatables linking to user-definable Snowflake database, schema and table.<br />
* B-07825: Improved error message when trying to use non-existing attributes in Snowflake queries.<br />
* B-03101: To expression language, added try-catch-finally statement to handle thrown exceptions.<br />
* B-07861: Removed available and total virtual memory information from User settings dialog.<br />
* B-07902: Optimized sequences of joins in Snowflake queries to improve performance.<br />
* B-07837: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13709: If image width-to-height ratio was lower than container's ratio, image was incorrectly stretched to fit the container.<br />
* D-13660: Disabling filter rules didn't work in Snowflake models.<br />
* D-13526: Passing dataframes from SQL scripts to expression scripts didn't work.<br />
* D-13661: Snowflake conformance analysis crashed when there was no access to conformance related Snowflake UDF's.<br />
* D-13693: Resolved major Snowflake conformance analysis performance issues in the BPMN model handling.<br />
* D-13716: Snowflake root causes analysis incorrectly bypassed Snowflake cache.<br />
* D-13707: In SQL Scripting, the datatable analysis (number 18) didn't always copy the data table contents to the target table correctly.<br />
* D-13653: Big data flowchart Root causes preset showed incorrect legend.<br />
* D-13626: Flowchart froze when converting into big data flowchart and vice versa by modifying chart json settings.<br />
* D-13656: Root causes for attribute gave error "Failed to compare two elements in the array" in some situations.<br />
* D-11563: Pivot table had a minimum height of 300px, which caused bottom part of it to be out of view.<br />
* D-13704: In CSV file import, parsing now allows spaces between column separator and text quotation mark.<br />
* D-13598: Chart gave unclear error message when events datatable was not defined.<br />
* D-13655: Improved error messages for BPMN editor and conformance statistics.<br />
* D-13528: Error message for certain erroneous SQL expressions was unclear.<br />
* D-13677: "Flow occurrences with specific case attribute value" selection didn't work for in-memory chart.<br />
* D-13663: Pivot table border line was slightly broken in the header area.<br />
* D-13608: There was incorrect alignment of items in the table paging controls.<br />
* D-13703: Importing CSV file with some special characters to Snowflake failed (due to incorrect escaping in Snowflake staging files).<br />
* D-13708: Duplicating datatable using user defined table, removed data the source table.<br />
* D-13717: Dependency wheel crashed when there were zero weights and showing data labels.<br />
* D-13348: There was an unclear error message when Snowflake query had a certain incorrect expression.<br />
* D-13732: Pivot table Excel export contained headers formatted incorrectly.<br />
* D-13729: There was a JavaScript error when limited user tried to access business calendar.<br />
* D-13662: Percentile function didn't always work with timespan types.<br />
* D-13646: Using incorrectly configured model without cases datatable caused null reference error.<br />
* D-13629: When tried to use chart with a non-existing model, there is now a proper translated error message.<br />
<br />
== QPR ProcessAnalyzer 2023.3 (build 1990) (released 2023-05-03) ==<br />
<br />
'''Features:'''<br />
* B-07818: [[Conformance_Analysis|Conformance analysis]] is supported in Snowflake with following dashboard components: Big data chart, BPMN editor, Conformance statistics, and Design model selector.<br />
* B-07833: [[Root_Causes#Root_causes_in_flowchart|Root causes analysis for flowchart]] is available for Snowflake showing how the event and flow occurrences explain selected phenomena.<br />
* B-07786: Big data chart has more [[Big_Data_Chart#Measure_aggregations|measure aggregations]], such as median, percentile, standard deviation and variance. Also for textual items, unique values can be listed.<br />
* B-07795: [[QPR_ProcessAnalyzer_Table#Conditional_formatting|Conditional formatting]] supports also columns with non-numerical contents.<br />
* B-07830: [[Big_Data_Chart#Measure_aggregations|None and Any aggregations]] for Snowflake and user-friendly formatting for conformance violations.<br />
* B-06527: Error messages in [[Importing_Data_to_Datatable_from_CSV_File|CSV file import]] show also the column number to help working with CSV files with lot of columns.<br />
* B-07747: In-memory conformance checking accepts design models with multiple tasks having same name (same is followed by the Snowflake implementation).<br />
* B-07659: In-memory flowchart preset Case Conformance to visualize conformance checking violations.<br />
* B-07571: Added function IsConformant to backend to check whether cases are conformant.<br />
* B-07863: Added function ConformanceViolationsFlows to backend to return nonconformance reasons for violating cases.<br />
* B-07844: Support for "array" aggregation to return aggregated items as array.<br />
* B-07856: Support for creating and accessing arrays and objects in SQL expressions.<br />
* B-07860: Array handling functions and Tasks property for DesignModel entity.<br />
* B-07847: Added throttling for QPR ScriptLauncher client-side imports to limit memory usage.<br />
* B-07811: Snowflake query optimization to omit columns that are not used by the query.<br />
<br />
'''Fixed issues:'''<br />
* D-13632: Going from variations to event types led to very poor performance with certain models.<br />
* D-13628: Statistical calculations were incorrectly not applied in chart CSV export.<br />
* D-13575: SQL script may have given error "Operand type clash: nvarchar(max) was incompatible with sql_variant".<br />
* D-13597: UI supports now datatable column type "ShortString" (previously datatable contents preview and CSV import didn't work).<br />
* D-13536: Using business calendar sometimes gave error "System.InvalidOperationException: Collection was modified".<br />
* D-13477: Chart types without y-axis mapping caused an error when series mapping was used.<br />
* D-13453: _model variable was not available for Snowflake expression filter rules.<br />
* D-13527: Checkbox height didn't increase when long label needed to span to multiple lines.<br />
* D-13363: Snowflake query with EvaluateAfterAggregations and IsHidden failed when dimensioning by case id column.<br />
* D-13383: Snowflake query gave error "Invalid column name 'FromCase Name'".<br />
* D-13523: Request id was incorrectly shown as zeros in error messages.<br />
* D-13541: In CSV import, error message for maximum number of columns exceeded is improved (maximum is 300 column for SQL Server).<br />
* D-13583: Objects count in header didn't work for empty Snowflake model.<br />
* D-13553: Larger pacm files can now be imported, as there isn't error "Request body too large. The max request body size is 30000000 bytes".<br />
* D-13306: Stack overflow error was given when using SqlDataFrames.<br />
* D-13487: When Flows root and there was filter in Values expression, some flows were lost.<br />
* D-13540: SqlDataFrame query with 300 columns failed to error "WithExpressionColumn: No name given for the new column".<br />
* D-13429: Ordering in List aggregation couldn't find columns in dataframe query.<br />
* D-13406: Dataframe query with root FlowOccurrences and get value from cases caused error.<br />
* D-13538: There was incorrect handling of escaping characters in column names used in dimensions.<br />
* D-13633: Fixed ordering in List aggregation with null and empty values.<br />
* D-13636: Query that dimensions by numeric case attribute with AggregateOthers true, caused error.<br />
* D-13589: Creating Snowflake datatable did not connect to Snowflake.<br />
* D-13623: Value expressions without aggregation didn't work with AggregateOthers setting.<br />
* D-13554: In in-memory chart, percentile function might have return both Int64 and Double type of objects which cannot be sorted.<br />
* D-13481: Improved error message when trying to use deleted model.<br />
* D-13621: Dynamic value search dialog had incorrect font in lists.<br />
* D-13610: Some invalid BPMN files crashed BPMN editor.<br />
* D-13614: Checkbox label texts overflowed to right.<br />
* D-13520: Removed excessive parameters from the Query Designer for generic context queries.<br />
* D-12998: QPR icon was incorrectly positioned in header in Safari.<br />
* D-13480: Import to duration data type is removed from Snowflake datatables, and for local datatables duration type maximum size is checked.<br />
* D-13517: In Highcharts-based visualizationsm conditional formatting didn't work for other than the first y-axis mapping.<br />
* D-13529: In some presets containing several on-screen settings, when chart showed in error message, on-screen settings showed invalid selection.<br />
* D-13530: Opening dropdown list caused JavaScript error when the list contents should be empty after it previously contained items.<br />
* D-13486: Removed unreachable error message in CSV import.<br />
* D-13524: Fixed in-memory chart flow occurrences root measures "Event attribute (text)" and "Event attribute (number)" that caused error.<br />
<br />
== QPR ProcessAnalyzer 2023.2 (build 1478) (released 2023-03-22) ==<br />
<br />
'''Features:'''<br />
* B-07755: [[Business_Calendar|Business calendar]] for duration calculation is available for Snowflake models.<br />
* B-07719: In Snowflake dashboards, [[Big_Data_Chart#Using_measure_variables|measures can be assigned to variables]] and use the variables in other measures to create combined measures.<br />
* B-07746: Changed in-memory conformance checking to not show invalid flow violations where starting or ending event type is invalid.<br />
* B-07743: [[PA_Configuration_database_table#General_Settings|Default datasource]] can be configured for datatables created by scripts, allowing to set Snowflake as default.<br />
* B-07740: System memory indicator moved from the header to User settings Version information dialog.<br />
* B-07776: New SQL expressions functions Unicode, Char and Regexp, as a basis for future rule-based process mining.<br />
* B-07741: Backend support for aggregation operations Median, Percentile, Stdev, Stdevp, Var and Varp to Snowflake.<br />
* B-07742: Backend support for aggregation operation to list unique items in Snowflake.<br />
* B-07770: Optimized Snowflake SQL generation by combining consecutive WithColumn function calls into one select.<br />
<br />
'''Fixed issues:'''<br />
* D-13491: QPR ProcessAnalyzer server crashed now and then when sorting was in progress and the query was cancelled.<br />
* D-13380: Dimensioning integers in in-memory core calculation didn't work correctly as 0 and -1 were put to same bucket.<br />
* D-13385: In Workspace Bin, Delete Forever and Restore from Bin buttons were misaligned.<br />
* D-13332: Conformance checking didn't show in violations when there were multiple undesired events in same case.<br />
* D-13405: Images take now always all available space in image component area.<br />
* D-13417: KPI card without title was slightly misaligned vertically.<br />
* D-13438: Clicking selected event type or flow in flowchart didn't cancel the filter selection.<br />
* D-13350: Task log and Script log default filter end date is now empty by default.<br />
* D-13381: Disabled browser auto-complete from flowchart variation stepper and Workspace create/rename object dialog.<br />
* D-13347: Improved performance for in-memory business calendar calculation.<br />
* D-13335: In in-memory chart, filtering didn't work in "Flow occurrences" root "Flow occurrences with specific event attribute value" dimension.<br />
* D-13367: Percentage value wasn't displayed properly with German or Spanish language when event types were shown in object counts indicator.<br />
* D-13451: Exported filter file is now named based on selected filter name.<br />
* D-13378: In Big data chart, prevented error "Unable to aggregate from level RootCauses to level Custom".<br />
* D-13293: DataFrame query with root Flows and IncludeEvents and ExcludeEvents filter rules failed.<br />
* D-13370: Fixed issue where on-screen settings that didn't have any selectable items, showed a strange selection.<br />
* D-13392: Clustering analysis was incorrectly shown when originally in-memory chart was converted into big data chart by changing chart json settings.<br />
* D-12784: Some Snowflake queries incorrectly bypassed Snowflake caching because they used unique object names.<br />
* D-13456: Improved error messages for incorrectly configured on-screen settings.<br />
* D-13445: Conformance violations related translated terms have been fine-tuned for better translations into different languages.<br />
* D-13421: Improved error messages when trying to use model having some column mappings missing.<br />
* D-13485: Snowflake business calendar gave error when calendar contained Sunday.<br />
* D-13218: Windows event viewer incorrectly contained log entries that are not errors.<br />
* D-12634: Multiline text boxes width is set to non-changeable.<br />
* D-13034: Confirmation dialog to delete items permanently has been updated.<br />
* D-13288: In dialogs, the Create button didn't show the disabled state correctly.<br />
* D-13427: When dropdown lists didn't have any selectable items, the "N/A" text appeared and the list incorrectly took more space vertically.<br />
* D-13483: In Workspace, the new items menu was too narrow for Spanish texts.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.1 (build 1449) (released 2023-02-24) ==<br />
<br />
'''Features:'''<br />
* B-07690: System setting [[PA_Configuration_database_table#General_Settings|DatabaseId]] can be defined by administrator to get more simple table names in Snowflake.<br />
* B-07737: In flowchart Bottlenecks preset, originally used flow colors has been recovered.<br />
* B-07748: For Analyzed objects "Conformance checking findings" in charts, terminology has been revised and issue with the case count calculation fixed.<br />
* B-07663: In [[Chart_On-screen_Settings|on-screen settings]], when case/event attribute is selected, related attribute values list are reset.<br />
* B-07570: Backend support for [[Business_Calendar|business calendars]] in Snowflake.<br />
* B-07660: Backend support for conformance checking to show also the last event index and event type in NotCompleted reason.<br />
* B-07610: Memory counter related technical properties have been removed from expression language.<br />
<br />
'''Fixed issues:'''<br />
* D-13349: Opening dashboard containing Root causes preset with default settings jammed the system by generating lot of calculations (for more information, see previous release notes).<br />
* D-13277: Stacked charts with date type of data as series did incorrectly show gaps in columns/bars.<br />
* D-13270: Flowchart conditional formatting didn't work with duration multi-unit format.<br />
* D-13358: Calculation results caching works also across different user sessions.<br />
* D-13250: Dashboard with two charts connected with linked settings using variables ended up to to a never ending loop.<br />
* D-13230: SAP import did not automatically create columns to use the correct column types.<br />
* D-12857: Deeply recursive functions caused a crash without any trace.<br />
* D-12994: In Workspace, some buttons were not clickable due to breadcrumb covering them.<br />
* D-13249: In Workspace, there was incorrect error message for duplicate datatable names when there were items with only letter capitalization was different.<br />
* D-13232: In-memory chart Top variations preset is now sorted secondarily by average duration descending.<br />
* D-13300: Setting DashboardFilter variable to empty value didn't have any effect in dashboard but old value was incorrectly used.<br />
* D-12834: Limited the maximum number of dimensions to 20, to avoid too demanding queries for SQL Server.<br />
* D-12917: Changed visual indication of missing items in dropdown lists (it's no longer showing "***").<br />
* D-13111: In Root causes preset, there is now error message when trying to use weighting related columns when weighting isn't in use.<br />
* D-13124: SQLDataFrame query containing filter rule EventTypes aggregating from cases failed.<br />
* D-13207: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed.<br />
* D-13292: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed (rev.2).<br />
* D-12991: Dropdown list texts had some translations missing.<br />
<br />
== QPR ProcessAnalyzer 2023.1 (build 1433) (released 2023-02-07) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release contains a potentially severe issue, where some dashboards completely jam the system by generating lot of calculations. The issue may appear in dashboards that have been created in earlier releases and containing the Root causes preset with default settings. The issue will be fixed by the next release. The issue can be worked around by exporting the affected dashboard, modifying the dashboard file manually and importing the dashboard back. The required modification is to remove line(s) containing <pre>"preset": "RootCauses"</pre> and the comma from the preceding line.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Cases (analysis number: 5), Events (6), and EventTypes (7). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). Note that the legacy analyses removal don't affect the dashboarding functionality.<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [5, 6, 7];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2023.1, the '''.NET Desktop Runtime''' is not needed anymore for QPR ProcessAnalyzer Server, so it can be uninstalled. Also for QPR ScriptLauncher, ''.NET Desktop Runtime'' is not needed, but instead install the '''.NET Runtime''' (which is more lightweight). ''.NET Desktop Runtime'' contains the ''.NET Runtime'', so the actions are not mandatory when updating to QPR ProcessAnalyzer 2023.1.<br />
</div><br />
<br />
'''Features:'''<br />
* B-06997: Expression-based filter rules for Snowflake dashboards to allow versatile filtering and filtering from custom expressions.<br />
* B-07383: Improvements to linked settings to allow binding to variables, tags and filter rules [[Chart_Linked_Settings|(more information)]].<br />
* B-07508: Flowchart preset colors have been renewed to be more intuitive.<br />
* B-07184: Automation preset in flowchart has now options for selecting the Automation attribute and value.<br />
* B-07512: Changed datatable metadata can be refreshed from Snowflake, and all rows in the datatable can be deleted easily in Workspace [[QPR_ProcessAnalyzer_Project_Workspace#Datatables|(more information)]].<br />
* B-07440: Date when the release was made is now shown in User settings.<br />
* B-07595: WeekOfYear property for DateTime objects in expression language to get the week number of a year (between 1 and 53).<br />
* B-07623: In-memory expression language functions Random (to get random numbers) and Hash (to get hash value of string).<br />
* B-07612: Breadcrumb in Workspace has now a Home button to quickly navigate to the top level of the projects hierarchy.<br />
* B-07637: Language selector now shows the language options in local languages.<br />
* B-07228: Remove following deprecated analyses: Cases, Events, and EventTypes (see the release note above).<br />
* B-07538: Backend support: Snowflake root causes analysis can find event attribute related root causes.<br />
* B-07706: Backend support: Snowflake expression-based filter rules support for roots containing Where function.<br />
* B-07611: Removed following legacy filter rules: CaseAttributeTrend, EventAttributeTrend, EventTypeTrend, and Duration.<br />
* B-07598: Refactored client-side import for SQL scripting to use generic client-side task mechanism.<br />
* B-07716: ShortString columns are now properly detected in SQL Server queries.<br />
* B-07652: Now it's possible to pipe multiline expression strings to QPR ScriptLauncher.<br />
* B-07688: AddColumns function for Datatables to create multiple columns in one call.<br />
<br />
'''Fixed issues:'''<br />
* D-13092: Table conditional formatting didn't work when color code was fetched from other column.<br />
* D-13105: Some charts created in earlier release referring to non-existing presets names appeared as empty after software update.<br />
* D-13107: Flowcharts crashed and showed loading animation forever when setting color or flow thickness to non-numerical measure.<br />
* D-13104: In BPMN model editor, context menus to edit elements didn't appear.<br />
* D-12939: Script editor tabs Close buttons didn't work.<br />
* D-13154: "Search by case ID" didn't work in in-memory chart.<br />
* D-12933: CSV columns with only empty values were incorrectly auto-detected as integers.<br />
* D-12929: In-memory chart Root causes for case duration and Root causes for case attributes (weighted) had Custom expression missing.<br />
* D-12928: Pivot table headers were empty when there were two column levels and two values.<br />
* D-12924: Pivot table columns with Count and Distinct Count aggregations are now numeric and aligned right.<br />
* D-13033: Changing colors in chart settings Color palette caused "Item already exists" error and prevented changing colors.<br />
* D-12996: Tags referring to dashboard variables didn't work in Additional root expression.<br />
* D-12877: UI gave error in some situations: Uncaught TypeError: Cannot read properties of undefined (reading 'min').<br />
* D-13071: Prevented selecting two or more of the Y-axis, X-axis and series mappings at the same time for the same measure or dimension.<br />
* D-12895: Big data chart crashed when on-screen setting contained event type selector and there were no event type filter set.<br />
* D-13231: Tooltips for dashboard name, model selector and filter selector in header show now the content text instead of generic instruction.<br />
* D-13139: There was an error when tried to create filter for a custom expression where selected data type didn't match with the actual type of data.<br />
* D-12988: Chart presets selection in chart settings showed unnecessary tooltip.<br />
* D-12901: When set sampling over 1 million, Snowflake models gave error: parameter value out of range: size of fixed sample. Must be between 0 and 1,000,000.<br />
* D-12904: Creating expression filter having lower/greater logic with root objects sampling failed.<br />
* D-12923: Chart schema didn't accept pivotAggregation in dimensions/columns.<br />
* D-12926: Root causes columns Selected weight, Compared weight and Total weight have now correct float data type.<br />
* D-12880: In out-of-the box dashboards, chart titles and subtitles were not translated.<br />
* D-12916: Improved filter rule description text in Filter rule editor dialog for expression filter rules.<br />
* D-12889: No clear error message was given when user tried to export corrupted model from .pacm file.<br />
* D-12869: Date selector in on-screen settings had inconsistent vertical alignment.<br />
* D-12938: When creating a filter with lasso and selecting a single data point only, "equals" kind of filter rule is now created.<br />
* D-12989: "Running tasks as specific time" system report may have ended up in loop causing following error: Maximum call stack size exceeded error.<br />
* D-13010: Pivot table sometimes ended up to never-ending resizing loop when browser zoom was more than 100%.<br />
* D-12790: Expression language: DataFrame.SetColumns: Initializing and using variables defined in closure of SetColumns function parameter didn't work<br />
* D-12927: All on-screen settings were not be visible in narrow charts having several on-screen settings.<br />
* D-12937: Added maximum value limitation to several number input fields in charts.<br />
* D-12947: Message dialog didn't show line breaks correctly (e.g., in CSV file import).<br />
* D-12948: Defining column setting caused error when Measure Expression was not defined.<br />
* D-12946: Filter rule text couldn't be seen entirely from tooltip.<br />
* D-12983: When range filtering using integer values in Highcharts chart, filter is now shown as integer value.<br />
* D-12984: When range filtering in Highcharts charts and there is category axis, filter rule is now based on individual (category) values.<br />
* D-12930: When creating filters from charts using date type of X-axis with lasso, "greater than or equal" and "less than or equal" filter rules are not created.<br />
* D-12920: "Where" function in DataFrame lost column data types of the original DataFrame.<br />
* D-13048: Model notifications failed with certain measures that define variables in root expression leading to error: Variable "sampleSize" already exists in this context.<br />
* D-13116: BPMN editor had some translations missing.<br />
* D-13019: Datatable and script selectors show now datatable/script name instead of id, when opening selector having existing selections.<br />
* D-12951: Changing additional root expression in flowchart didn't refresh the flowchart.<br />
* D-13147: Filter rule boxes in header had different widths, and Add filter rule button vertical alignment was incorrect.<br />
* D-12907: Sometimes case attribute selection showed incorrect attribute name for empty model.<br />
* D-13148: Filters and Datatables system reports loaded unnecessarily twice which could be seen as blinking.<br />
* D-12844: In dataframe query, FlowOccurrences in root and GetValueFrom Cases with filter gave null reference exception<br />
* D-12915: Repeating certain query twice with aggregations in Events root generated invalid SQL<br />
* D-12728: Was huge amount logs in server during client side import (manual testing required as identification)<br />
* D-13156: Persist function failed to snowflake: Invalid unicode escape sequence '\u0027ACCE'; should be at most '\u0010FFFF'.<br />
* D-12876: Flows/FlowOccurrences in root didn't work with SqlExpressionValue filtering.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2022.8 (build 1397) (released 2023-01-11) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release fixes an issue where extracting large datasets from SAP increases memory consumption considerably and may lead to out-of-memory error. This release contains packages for both QPR ScriptLauncher and QPR ProcessAnalyzer Server. If SAP extractions are done using QPR ScriptLauncher in client side mode (ExecuteInClientSide=1), it's enough to update QPR ScriptLauncher to fix this issue.<br />
</div><br />
<br />
'''Fixed issues:'''<br />
* D-12941: Extracting data from SAP consumed unnecessary lot of memory and may have led to out-of-memory error (both when running using QPR ScriptLauncher and in server side).<br />
<br />
== QPR ProcessAnalyzer 2022.8 (build 1396) (released 2022-12-30) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Creating datatables with duplicate names in the same project is prevented, and possible existing duplicate names are automatically changed to unique names with a random suffix. If there are duplicate names, they can be renamed either before updating QPR ProcessAnalyzer (to avoid automatic renaming) or after the update (by changing suffixed names). If the renamed datatables are used by models, the linkage will break because it's based on the datatable name. Creating duplicate datatables has already been prevented in the UI, but the improved method works also in the API level.<br />
<br />
Following SQL query can be used to list datatables (and project id) having duplicate names:<br />
SELECT ITA_NAME, ITA_PROJECT_ID<br />
FROM PA_INTEGRATION_TABLE<br />
GROUP BY ITA_NAME, ITA_PROJECT_ID<br />
HAVING Count(*) > 1<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
If trying to use business calendar for a model that doesn't have the business calendar defined, there will now be an error message instead of showing the chart. Either unselect the business calendar checkbox for the measure or dimension, or define a business calendar to the model. In this situation in earlier releases the business calendar was ignored and full time calculation used.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07498: Automation and Operational Excellence presets and Root causes analysis (for Snowflake), Weighted root causes analysis and Event scattering preset (for Snowflake and in-memory), Root causes for case duration (in-memory).<br />
* B-07177: Flexible mappings, user selectable aggregations and conditional formatting for Pivot table, and flexible mappings for KPI Card.<br />
* B-07518: New function named Query to run call /api/expression/query.<br />
* B-07294: In Workspace, the left side projects hierarchy can be collapsed and expanded to make more space to project contents.<br />
* B-06814: In SQL expressions, new function DurationBetweenDates to calculate duration between timestamps precisely.<br />
* B-07519: Replaced DateDiff function with the new DurationBetweenDates function in big data chart.<br />
* B-07531: In SQL expressions, new mathematical functions Abs, Log, Mod, Power, Rand, Sign and Sqrt.<br />
* B-07297: To optimize performance, Snowflake queries are automatically cancelled if they are not needed by UI.<br />
* B-07569: To optimize performance, TakeSample function implementation is improved for Snowflake.<br />
* B-07198: Several performance improvements to DataFrame queries (used in Snowflake).<br />
* B-07464: Added Lead and Lag functions to SqlDataFrames to support getting previous and next event.<br />
* B-07470: New ExtractSap function to fetch data from SAP using expression language.<br />
* B-07536: New Pivot function to SqlDataFrames to enable root causes analysis.<br />
* B-07488: Primary keys can be set to datatables to improve calculation performance (UI will follow later).<br />
* B-07515: Added RootCauseAnalysis function to SqlDataFrames.<br />
* B-07546: RootCauseAnalysis function support for complex weighting expressions.<br />
* B-03052: Support for user-defined variables in /api/expression/query.<br />
* B-07565: Support for NumberPrecision, DatetimeTruncation and TimespanPrecision properties for Values section in in-memory query.<br />
* B-07513: For product activation file handling, replaced mutex based implementation with exclusive file lock.<br />
* B-07480: Expression language support for DataFlows for data extraction.<br />
* B-07613: Removed support for SQL Server based R scripting.<br />
* B-07567: Take datatable primary keys into use in expression builder to improve performance (part 2).<br />
* B-07588: Remove total memory information from log writing and DateDiff function for in-memory.<br />
<br />
'''Fixed issues:'''<br />
* D-12715: Snowflake calculated imprecisely some operations containing division and aggregation.<br />
* D-12761: Progress bar of the CSV import dialog didn't show any progress.<br />
* D-12799: Opening datatable contents dialog settings was slow when there were lot of rows in the datatable.<br />
* D-12089: Include conforming/nonconforming cases made BPMN editor no responding.<br />
* D-12496: Datagrid filter search keyword didn't work for rounded values, so the search was hidden for other than textual data.<br />
* D-12704: Durations as quarters was calculated incorrectly in charts.<br />
* D-12662: Fixed issue where some special literals in custom expressions didn't work.<br />
* D-12403: Setting Notifications on a model had some visual issues.<br />
* D-12859: Dependency wheel visualization crashed with nulls values in From and To mappings.<br />
* D-12660: Removed unnecessary float conversions in SQL expressions.<br />
* D-12653: In-memory datafram OrderByColumns function with mixed values failed.<br />
* D-12657: When trying to use milliseconds period in some presets, frontend frozed.<br />
* D-12706: Line breaks in data were shown in many places where it's undesired.<br />
* D-12719: Syncfusion dialog headers showed backslaces incorrectly.<br />
* D-12372: Refused to run the JavaScript URL because it violated the Content Security Policy directive.<br />
* D-12730: Logging out when filter selection is in progress, gave javascript error.<br />
* D-12705: Header object counts tooltip was sometimes messed after logout.<br />
* D-12384: Selected project was not highlighted for whole project name string.<br />
* D-12581: Prevented creating duplicate datatable names in same project in parallel execution.<br />
* D-12722: There was incorrect syntax near '<' when running SqlDataFrame expressions.<br />
* D-12736: Swedish and Finnish translation improvements for object counter tooltips.<br />
* D-12702: For BPMN Editor component "Something went wrong" error was given when switching from in-memory to Snowflake model.<br />
* D-12712: UI gave error: TypeError: Cannot read properties of undefined (reading 'id').<br />
* D-12738: Business calendar showed total business time when calendar configuration was invalid.<br />
* D-12776: Special character filter caused JavaScript SyntaxError.<br />
* D-12785: Unnecessary vertical scrollbar displayed for main header toolbar.<br />
* D-12164: There was unnecessary UnauthorizedAccess errors in logs.<br />
* D-12580: Case duration was not same when comparing Big data chart with in-memory chart for same data.<br />
* D-12768: Data grid links and variable change actions didn't work when grouping was used.<br />
* D-12735: FindRootCauses (in-memory) function filtered out cases with zero contribution.<br />
* D-12763: --#CallWebService didn't work from ScriptLauncher.<br />
* D-12789: There was timeout in SQL queries to scripting sandbox.<br />
<br />
== QPR ProcessAnalyzer 2022.7 (build 1331) (released 2022-11-15) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2022.7, to improve security expression language operations that modify data or connect to external datasources are prevented in dashboard custom expressions. The limitation is required, because when a dashboard is opened, its expressions are run with the user's permissions, and the user need to trust the expressions don't perform any unexpected operations, such as delete data. The full functionality of the expression language is available in the scripts and in the Expression Designer.<br />
<br />
The following functions and operations are prevented in dashboards: SendEmail(), CallWebService(), ImportOdbc(), ImportOdbcSecure(), Model.DeletePermanently(), Model.Restore(), Model.TriggerNotifications(), Project.DeletePermanently(), Project.Restore(), Project.CreateDatatable(), Datatable.AddColumn(), Datatable.DeletePermanently(), Datatable.Import(), Datatable.Merge(), Datatable.RemoveColumns(), Datatable.RenameColumns(), Datatable.Truncate(), RecycleBin.DeletePermanently(), and call SQL script. Calling expression scripts is allowed, but in the script all previously mentioned operations are prevented.<br />
<br />
Following SQL query can be executed in the QPR ProcessAnalyzer metadata database to reveal dashboards that potentially have prevented expressions:<br />
SELECT * FROM [PA_UI_ELEMENT] WHERE [UIE_PROPERTIES] LIKE '%SendEmail(%' OR [UIE_PROPERTIES] LIKE '%CallWebService(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbc(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbcSecure(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Restore(%' OR [UIE_PROPERTIES] LIKE '%TriggerNotifications(%' OR [UIE_PROPERTIES] LIKE '%CreateDatatable(%' OR [UIE_PROPERTIES] LIKE '%AddColumn(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Import(%' OR [UIE_PROPERTIES] LIKE '%Merge(%' OR [UIE_PROPERTIES] LIKE '%RemoveColumns(%' OR [UIE_PROPERTIES] LIKE '%RenameColumns(%'<br />
</div><br />
<br />
'''Features:'''<br />
* B-07287: Process Discovery and most important presets for Snowflake.<br />
* B-07271: "Last Row Aggregates Over-limit Rows" setting for big data chart.<br />
* B-06431: Snowflake datatables support for database views in the datasource.<br />
* B-07266: Security: "limited mode" to prevent data modifications and external calls from dashboard expressions.<br />
* B-07097: Improved flowchart root causes color scales.<br />
* B-07363: SQL LIKE function support for escape character.<br />
* B-06877: Improved variation queries performance in Snowflake, part 1.<br />
* B-07444: Improved variation queries performance in Snowflake, part 2.<br />
* B-07382: Support for empty strings and nulls in event type names in dataframe processing.<br />
* B-07273: WithRowNumberColumn, WithRankColumn, WithDenseRankColumn support for descending sorting.<br />
* B-07303: FindRootCauses function support for weighting expression.<br />
* B-07327: Unpivot function for SqlDataFrames (for root cause analysis).<br />
* B-07385: Align token lifetime with SESSION_MAXIMUM_DURATION setting.<br />
* B-07500: ColumnMappings property for IDataFrame and DataTables.<br />
* B-07499: IDataFrame.ApplyFilter function to filter events data using a JSON-based filter.<br />
* B-07469: Translation updates for release 2022.7.<br />
<br />
'''Fixed issues:'''<br />
* D-11630: Drag and drop from chart settings to main header was working incorrectly for filter and root cause rules.<br />
* D-12455: Moving a chart filter from one chart to another created a root cause analysis filter.<br />
* D-12266: Root causes analysis showed incorrect results when certain combination of filters.<br />
* D-12525: Numerical values in Excel export in data grid was formatted incorrectly.<br />
* D-12534: Restoring item from recycle bin changed project from Bin to previous project.<br />
* D-12529: Measure specific datalabel mapping did not work correctly when also mapped to Y-axis.<br />
* D-12532: Multi-selection options caused layout issue for Chart setting.<br />
* D-12541: Layout issue for Polish in multiselect list search dialog.<br />
* D-11277: Increase/decrease Icons were missing in the dimension sorting for Mac.<br />
* D-12552: Uncaught Error: Diagram.selectCollection given something that is not a Part: null.<br />
* D-12567: Tooltip incorrectly showed for label component containing only spaces.<br />
* D-12438: Operation was cancelled because it was replaced by a new operation.<br />
* D-12551: Some expressions didn't work as calculated case/event attributes.<br />
* D-11720: Chart buttons were not visible in Apple Safari and iPad.<br />
* D-12544: On-screen settings "options" parameter did not work.<br />
* D-12528: Multi-unit time unit selection appeared where it's not applicable.<br />
* D-12583: Error message should be provided for invalid settings input than just display JS errors.<br />
* D-12599: Tooltips didn't show correct measures/dimensions when "Show in tooltip" mappings are used.<br />
* D-12561: Chart settings content was incorrectly drawn outside of the chart dialog.<br />
* D-12568: Reload UI sometimes crashed chart having multiselect on-screen settings.<br />
* D-12572: Main header toolbar lost when refresh maximized PA chart.<br />
* D-12612: Drop Unused Filters After setting incorrectly allowed zero seconds.<br />
* D-12533: Error message keeped blinking in Analysis view.<br />
* D-12608: User could not select or add new case attribute when current select attribute doesn't exist.<br />
* D-12451: Prevented deleting running script.<br />
* D-12516: Windows event viewer warning: Failed to gracefully shutdown application.<br />
* D-12523: Business calendar performance - part 2.<br />
* D-12538: Column with same name could be added multiple times to datatable using expression language.<br />
* D-12582: Improved EMS mutex code to support multiple PA service in one server.<br />
* D-12624: Synchronize new (empty) data table generated failed queries in Snowflake.<br />
* D-12622: Advanced setting page reserved room for the expression editor frame that did not exist.<br />
* D-11295: In on-screen settings, some UI controls were vertically misaligned.<br />
* D-11625: The heights of the parameter option menu in the clustering tab was not well aligned.<br />
* D-12103: Small dropdown list layout issue.<br />
* D-12633: Align issue for Column related Advanced settings.<br />
* D-12505: Search dialog didn't escape % and _ characters correctly in dataframe processing.<br />
* D-12645: Tabs in expression settings dialog were partly hidden when dialog is narrow.<br />
* D-11382: Moving of flowchart was sometimes shaky.<br />
* D-12655: Filter rule tooltips in header were styled incorrectly.<br />
* D-12656: Large integer values in filter jsons were incorrectly presented as small integers.<br />
* D-12661: Some exported filters contained unnecessary "invert" property.<br />
* D-12500: Model with numeric case id's and filtering with the attribute mapped as case id: ERROR [22018] Numeric value <nowiki>''</nowiki> is not recognized.<br />
* D-12509: Filtering null values didn't work in boolean attributes in Snowflake.<br />
* D-12571: In dataframe processing in SQL Server, dividing two integers should not make rounding to integer.<br />
* D-12610: Setting for global DropUnusedFiltersAfter was missing.<br />
* D-12613: Filtering with case/event attributes with null values didn't match in Snowflake models.<br />
* D-12617: Model didn't work when DropUnusedFiltersAfter is 00:00:00.<br />
* D-12618: If model ConfigurationJson is null, Configuration property didn't work.<br />
* D-12620: Filtering didn't work when there are backslaces in attribute names in Snowflake models.<br />
* D-12643: AttributeFunctionCallExpression did not always work properly in array context.<br />
* D-12647: SqlDataFrame with SQL Server: Comparing literals to variant column values failed.<br />
* D-12648: Models that have DropUnusedModelsAfter setting caused "The sliding expiration value must be positive" error.<br />
* D-11526: It was unable to translate Unicode character \uD83D at index 176 to specified code page.<br />
* D-12637: In application startup arised FATAL Application startup exception System.UnauthorizedAccessException: Access to the path 'Global\MutexQPRPAActivation' is denied.<br />
<br />
== Old Releases ==<br />
See older releases in [[QPR ProcessAnalyzer Release Archive]]<br />
__NOTOC__<br />
<br />
[[Category: QPR ProcessAnalyzer]]</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&diff=24488QPR ProcessAnalyzer Release Notes2024-03-20T11:51:05Z<p>Ollvihe: /* Next Release: QPR ProcessAnalyzer 2024.3 (planned release date 2024-04-02) */</p>
<hr />
<div>This page lists all new features and fixed issues for each QPR ProcessAnalyzer release.<br />
<br />
== Next Release: QPR ProcessAnalyzer 2024.3 (planned release date 2024-04-02) ==<br />
<br />
'''Features:'''<br />
* B-08242: [[Actions_to_Run_Script_in_Table|Custom actions]] in scripts can be started from dashboard table context menu, e.g., create tickets, trigger automation, and fetch external information.<br />
* B-08252: When Analyzed objects is cases, event attribute values are filtered with the native event attribute filter rules instead of expression based filter rules.<br />
* B-08231: Snowflake performance improved by splitting object counts (shown in header) query into two, so that the filtered object count query uses eventlog caching.<br />
* B-07906: Implemented cross joins to SQL dataframes.<br />
* B-03047: Removed support for dashboard panels.<br />
* B-08214: Removed unused columns from the PA_VIEW table.<br />
* B-08254: Frontend components have been updated.<br />
<br />
'''Fixed issues:'''<br />
* D-14048: Fixed issue where in-memory root causes analysis for case attributes didn't show attributes with ShortString data type.<br />
* D-14049: Added some missing translations for table column filter and BPMN editor.<br />
* D-14021: FindRootCauses function WeightingExpression was run in incorrect context for in-memory model.<br />
* D-14020: Query which goes from EventTypes to Cases did not show the error when using GetValueFrom function.<br />
* D-13976: Fixed issue where gateway-based imports were not synchronous.<br />
* D-13689: Fixed JavaScript error in Highcharts polar chart with tooltips.<br />
* D-12614: Highcharts gives "Maximum call stack size exceeded" error in bar chart with polar and data labels.<br />
* D-14060: Highcharts custom layout translatable properties incorrectly changed chart configuration by translating the labels.<br />
* D-14071: Business calendar button press caused error when user didn't have access to any model.<br />
<br />
== Latest: Additional release for QPR ProcessAnalyzer 2024.2 (build 5509) (released 2024-02-27) ==<br />
<br />
'''Features:'''<br />
<br />
* B-06280: User management dialog shows whether users have password defined and unnecessary passwords can be removed to improve security.<br />
<br />
'''Fixed issues:'''<br />
<br />
* D-14045: Fixed issue where users with Viewer or Analyzer role couldn't create filters in Snowflake models.<br />
<br />
== QPR ProcessAnalyzer 2024.2 (build 5438) (released 2024-02-21) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue: Snowflake models and dashboards don't work with Viewer and Analyzer role permisions. The reason is that cache tables created to Snowflake incorrectly require the write permissions. Workaround is to give users the Designer role which will give the needed permissions. Note that the Designer role gives many permissions to the user for the project [[Roles_and_Permissions#Roles_and_Permissions|(more information)]]. This issue has been fixed in the next release (D-14045).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
The legacy User permissions report (analysis number 11) and Filters report (analysis number 30) used in SQL scripts have been removed. Use instead the expressions language to query filters and user permissions, e.g., [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|Models.Filters]] and [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
New version of the Design diagram component has been improved with object-specific measures, and the previous common measures are not migrated into object-specific measures. Thus, the measures need to be configured again, or manually edit the chart json settings (if needed please ask instructions from QPR CustomerCare).<br />
</div><br />
<br />
'''Features:'''<br />
* B-08022: Design diagram supports now BPMN notation, elbow style flows and object-specific measures.<br />
* B-08232: Entire future eventlogs can be [[Create_Predicted_Eventlog|predicted]] based on generative AI models running in Snowflake.<br />
* B-08166: Added expression language function [[Generic_Functions_in_QPR_ProcessAnalyzer#OpenAIChatCompletion|OpenAIChatCompletion]] to answer natural language prompts based on OpenAI ChatGPT API.<br />
* B-08177: Snowflake query performance has been improved by introducing caching of filtered eventlogs using Snowflake tables.<br />
* B-08196: Conditional formatting rules can be defined for [[QPR_ProcessAnalyzer_Table#Textual_equal_rules_for_background_color|textual and boolean values]].<br />
* B-08213: Big data chart expressions event type selections to be multi-select where applicable.<br />
* B-08205: Expression language API is available for storing [[Storing_Secrets_for_Scripts|secrets]] for scripts.<br />
* B-07780: Chart [[QPR_ProcessAnalyzer_Chart#Variable_mappings|variable mappings]] has been removed - use the [[Chart_Linked_Settings|linked settings]] instead. Dashboards using variable mappings are automatically converted to use linked settings.<br />
* B-08117: Added ToSqlDataFrame function to convert in-memory dataframe into SQL dataframes.<br />
* B-08174: Only non-default parameters values are written to the operation log.<br />
* B-08200: Timestamps in System reports are shown in user workstation local time.<br />
* B-08171: Dashboard id has been added to queries, to track from which dashboard queries are originating.<br />
* B-07144: Remove legacy User permissions report (analysis number 11) and Filters report (analysis number 30) in SQL scripts (see note above).<br />
* B-08193: Added retry mechanism to QPR ScriptLauncher to recover if connection to server breaks.<br />
* B-08202: Updated copyright for year 2024.<br />
* B-08199: Frontend components have been updated.<br />
* B-08203: Backend components have been updated.<br />
* B-08209: Translations updated for release 2024.2.<br />
<br />
'''Fixed issues:'''<br />
* D-13972: Some measures/dimensions/columns in Big data chart didn't show the expressions level filtering.<br />
* D-14015: Fixed business calendar incorrect calculation when business period covered entire day.<br />
* D-14014: Fixed issue where Snowflake business calendar could not have end time as 00:00.<br />
* D-13962: System variable values were interpreted incorrectly when used in linked settings.<br />
* D-13971: HiddenInNavigation and SortOrder variables didn't work in navigation menu dashboards list.<br />
* D-13959: Removed possibility to add datatable columns with the legacy "any" data type.<br />
* D-13991: Improved drop-down selector component to handle empty strings as variable values.<br />
* D-13965: Datatable column name length was validated incorrectly which may have caused error in saving with too long column names.<br />
* D-13958: Project names showed unnecessary html escaping in the "Move to" menu.<br />
* D-13964: Model attributes and notifications dialogs gave error when trying to use dashboard tags.<br />
* D-13960: Added missing translations for list of permission list and 12-hour clock format.<br />
* D-13966: Fixed issue were root causes chart tooltip sometimes didn't disappear.<br />
* D-13969: Datatable column schema export sometimes showed empty for the key column.<br />
* D-13862: Session token was not accepted when url path capitalization is different.<br />
* D-13942: Datatable could not be dimensioned if it has column named "CaseId".<br />
* D-13980: Business calendar dialog crashed when tried to open it for a model without access.<br />
* D-13983: Notifications dialog didn't validate situation when same name was used in a measure and dimension.<br />
* D-13981: Dashboard import set incorrect model id to dashboard if there was no access to any model.<br />
* D-11276: Translations were missing for 12-hour clock dates (AM and PM) in dashboards.<br />
* D-13977: Multi-select dropdown lists showed some special characters incorrectly.<br />
* D-13945: Syncfusion toast message didn't work when text contains ${[]}.<br />
* D-13930: Pivot table throws javascript error when certain clicks.<br />
* D-13273: Duplicate datatable row count didn't shown correctly.<br />
* D-13994: There was an error in the in-memory chart with some flow related measures about duplicate variable names when same measure was defined twice.<br />
* D-13985: Models list dots menu had texts misaligned in narrow screens.<br />
* D-13995: In Workspace, wrong datatable was selected after duplication when non-default sorting was applied.<br />
* D-13997: Workspace tables column filtering search caused JavaScript errors.<br />
* D-13978: In table Excel export, the last row representing other items appeared incorrectly for in-memory chart.<br />
* D-14007: In System reports, model related selections are hidden from the Analyzed objects lists.<br />
* D-14005: In big data chart, changing to custom expression caused crash with some expressions having case/event attribute.<br />
* D-14003: When dimensioning was not used, pivot table values were incorrectly rounded in the server side.<br />
* D-14004: Removed empty filters from queries to optimize them.<br />
* D-13988: Fixed issue where data grid context menu rendered initially as too high.<br />
* D-13979: BPMN model editor element settings use now Open Sans font.<br />
* D-14013: Fixed incorrect expression "Duration between first and last occurrence" in big data chart event types.<br />
* D-13984: Fixed the error of refusing to run the JavaScript URL.<br />
* D-14031: ThrownObject property was not included to http error response when error came from the script.<br />
<br />
== QPR ProcessAnalyzer 2024.1 (build 4784) (released 2024-01-10) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue fixed in QPR ProcessAnalyzer 2024.2: In Big data chart, some measures, dimensions and columns have the filtering option missing. The issue concerns for example Duration between events, Path starting/until between specific events, and Cases where event occurs before other selections. Workaround is to set the filter in the chart json settings: the filter can be configured to another expression and copied to the correct expression.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
QPR ProcessAnalyzer Server and QPR ScriptLauncher are now using .Net 8 (previous was .Net 6). When updating to this release, install the .Net 8 Runtime ([[Updating_QPR_ProcessAnalyzer_Server|see more]]). The .Net 6 doesn't need to be uninstalled immediately because .Net 6 and .Net 8 work side-by-side, but due to security reasons, the unused .Net 6 should eventually be uninstalled.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In this release, all filters that don't contain any filter rules, are removed. These are legacy filters which have not been visible in the UI.<br />
</div><br />
<br />
'''Features:'''<br />
* B-08019: New component [[Design_Diagram|Design Diagram]] for showing user-created diagrams in dashboards where to visualize process mining metrics.<br />
* B-08087: Generic [[Dropdown_List_Selector|dropdown list selector]] works with Snowflake models allowing to add selection lists for any values.<br />
* B-08163: Linked settings support for binding to [[Chart_Linked_Settings#Binding_to_case_attribute_filters_with_attribute_name_and_attribute_values|case attribute filter values without defining case attribute name]].<br />
* B-08170: Snowflake model filters can be [[Filtering_in_QPR_ProcessAnalyzer#Filter_actions|saved as new models]] which can be used to create snapshots of part of models.<br />
* B-08093: Multiple dashboards can be exported to same file, and model can be set for imported dashboards.<br />
* B-08161: Added [[Datatable_in_Expression_Language#Modify|Modify]] function to change datatable properties and improved [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#CreateDatatable|CreateDatatable]] function for creating datatables.<br />
* B-08122: Added new system report to list dashboards.<br />
* B-08173: Removed legacy filters that didn't have any filter rules.<br />
* B-07961: In OperationLog, changed parameters to json format and added request id.<br />
* B-08069: Added DashboardId property to [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog]] in expression language.<br />
* B-08139: Added [[Datatable_in_Expression_Language#UpdateRows|UpdateRows]] function to update existing rows in datatables with similar logic than SQL update.<br />
* B-08115: Added [[Datatable_in_Expression_Language#DeleteRows|DeleteRows]] function to delete rows in datatables with similar logic than SQL delete.<br />
* B-08149: QPR ProcessAnalyzer has been updated to .Net 8.<br />
* B-08054: Changed Scripts property in generic context to return all scripts, instead of legacy system level scripts.<br />
* B-08138: Changed Synchronize function to remove all columns when no Snowflake table exists.<br />
* B-07689: For datatables, [[Datatable_in_Expression_Language#ForeignKeys|foreign keys]] to other datatables can be defined using expression language.<br />
* B-08176: Translation updates for release 2024.1.<br />
* B-08175: Workspace should show timestamps in user's local time.<br />
<br />
'''Fixed issues:'''<br />
* D-13913: Datatable properties dialog incorrectly showed linked models from other projects.<br />
* D-13916: Chart filter could not be defined for some expressions in Big data chart.<br />
* D-13933: Navigation menu selected item wasn't highlighted when used Snowflake models.<br />
* D-13906: In Conformance Analysis, deviating flows were not translated.<br />
* D-13907: Improved translation related to datatable properties dialog "Used by models" field.<br />
* D-13904: There was an unclear error message in Snowflake, as exception code 1 was returned without AttributeName and ModelName properties when non-existing attribute was in filter.<br />
* D-13911: Fixed small glitches in the opening and closing of drop-down lists.<br />
* D-13918: Datatable could be configured incorrectly to use table for other datatable.<br />
* D-13932: Duplicating datatable with custom table in datasource losed all data.<br />
* D-11002: Removed legacy in-memory prediction preset.<br />
* D-13912: Added check that array cannot be stored to dashboard Content property.<br />
* D-13936: Query designer default query didn't work with Snowflake models.<br />
* D-13938: There was an incorrect logging with some operations related to ScriptLauncher.<br />
* D-13923: Snowflake expressions didn't work with Where function in root referring to case attribute.<br />
* D-13939: ApplyFilter function gave null reference error for non-existing attribute name.<br />
* D-13931: There were issues with AllowExternalDatasources and EnableFullFunctionality settings.<br />
<br />
== QPR ProcessAnalyzer 2023.7 (build 4326) (released 2023-11-28) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Limitation for the maximum amount of data (B-07636) causes a behavior change in in-memory charts that have the Maximum rows settings empty and have the sorting defined. In certain cases, the order in which measures are evaluated changes (due to an internal performance optimization). If there are custom expressions that define variables, the variables may not be available in other measures anymore. As a resolution, either redefine the variables in those measure expressions or add those measures secondarily to the sorting.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Default query timeout of 30 minutes has been added for --#ImportOdbcQuery, --#ImportSqlQuery and --#ImportOleDbQuery commands. If a query run is taking longer than the timeout, the query is stopped. The timeout can be adjusted using the '''QueryExecutionTimeout''' parameter. Previously, there has been no timeout, so queries that take more than 30 minutes require configuring a longer timeout.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Incorrectly configured [[Chart_Linked_Settings|linked settings]] in charts (available in the ''Advanced'' tab) give now an error message, if they are referring to non-existing measures, dimensions or columns. Previously, incorrect linked settings were ignored. To fix the error message, remove the incorrect linked settings.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07511: Datatables have a [[Datatable_Properties_Dialog|dialog]] to view datatable properties, write description, set the Snowflake source table, add/modify/delete columns, and set the datatable key.<br />
* B-08150: Added setting [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|Apply chart filters first]] to determine whether chart filter rules or dashboard filter rules are applied first when chart queries are filtered.<br />
* B-08091: When filtering charts in Snowflake, case attribute filter is created instead of case id filter.<br />
* B-08091: [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|New setting]] to define whether cases or events are filtered by default.<br />
* B-08091: New preset "Looping paths" to detect whether there are repeating patterns of events.<br />
* B-08091: Duration between events calculation ignores negative durations in Snowflake.<br />
* B-08091: Chart loading animation has been renewed.<br />
* B-07636: To prevent dashboards from jamming when querying too much data, added [[QPR_ProcessAnalyzer_Chart#Available_Visualizations|limitations]] to the amount of data that charts can visualize. Note that the limitation concerns the aggregated data that is visualized, not the source event log data.<br />
* B-08017: [[Dashboard_in_Expression_Language|Dashboards API]] has been added to expression language, allowing to create, modify and delete dashboards in scripts.<br />
* B-08056: Following properties have been added to [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#User.2FGroup|user objects]] in expression language: IsLocked, LastLockedDate, LastLoginDate.<br />
* B-08053: [[Navigation_Menu#System_Reports|User rights report]] has been refactored to use [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property in the expression language. The change also simplifies the report as now it only shows the direct role assignments that are visible in the [[Manage_Users_and_Groups|User Management]].<br />
* B-08151: For Snowflake expressions support for following [[SQL_Expressions#Window_functions|windowing functions]]: sum, average, median, min, and max.<br />
* B-08050: When a model is created, the default filter is not created anymore (this is a refactoring that doesn't have any impact on user interface).<br />
* B-08123: Translation updates for 2023.7.<br />
* B-08092: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13876: In CreateSnowflakeConnection function, ProjectId parameter is optional when OdbcConnectionStringKey is not specified.<br />
* D-13898: Snowflake: Exclude case attribute filter didn't work when there was null values and was selecting at least two values.<br />
* D-13890: Fixed XES file import to work.<br />
* D-13894: Business calendar based duration calculation was incorrect in some durations that spanned to several weeks (for Snowflake and in-memory models).<br />
* D-13899: Using broken OdbcConnectionString in a datatable prevented the datatable from being deleted.<br />
* D-13883: Script run stucked after running a script with error that uses client-side ODBC import.<br />
* D-13879: SqlExpressionValue filter when excluding events didn't work with filter rule root expression only.<br />
* D-13896: Adding or removing columns to datatable didn't change the LastModifiedDate.<br />
* D-13882: User details weren't written to operation log when creating or modifying users.<br />
* D-13771: User rights system report didn't give error when changing columns.<br />
* D-13893: Some event filtering caused null pointer error when primary key had been defined.<br />
* D-13873: Fixed pivot table visual issues after component update.<br />
* D-13900: When adding, renaming or removing columns for Snowflake table fails, operation is now rolled back without any changes.<br />
* D-13866: Querying GET api/uielements was quite slow right after server start.<br />
* D-13864: Combinations of translatable and hardcoded strings didn't get translated in UI.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.6 (build 3933) (released 2023-10-24) ==<br />
<br />
'''Features:'''<br />
* B-08055: Error message for locked account has been replaced with generic error message, so that username enumeration is not possible.<br />
<br />
'''Fixed issues:'''<br />
* D-13884: Attributes dialog crashed with some older model configurations.<br />
* D-13843: In charts, selected case and event attributes switched away when attribute data type was ShortString.<br />
* D-13877: Some Snowflake expressions gave error "exceeds maximum length limit of 255 characters" when selecting lot of items.<br />
* D-13878: Snowflake expression filters for case attribute values didn't accept other than string type of case attributes.<br />
* D-13871: Some statistical calculations with percentages didn't work with Last Row Aggregates Over-limit Rows setting.<br />
* D-13875: Using some case level filters in a model without cases datatable didn't work.<br />
* D-13861: Dashboard opens are now logged to the Task log (i.e., calling GET /api/dashboards/{dashboardid}).<br />
* D-13870: Workspace projects hierarchy focused project showed light grey background making the project name not readable.<br />
* D-13867: When starting datatable refresh and going to other tab, went back to Datatables tab when query completed.<br />
* D-13853: If chart Custom Layout settings had extra series defined, chart may have crashed.<br />
* D-13869: Export as CSV button didn't work in the datatable contents dialog when dialog was still loading.<br />
* D-13872: Main progress spinner had unnecessary small scrollbar on top right.<br />
* D-13863: In the REST API method GET /api/users, password field (that has always been null) has been removed.<br />
<br />
== QPR ProcessAnalyzer 2023.6 (build 3847) (released 2023-10-17) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is removed in this release. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
'''Features:'''<br />
* B-07992: Added 10 new presets including Queue analysis, Four eyes principle, Self-looping events, and Path until selected event. There are also presets for Individual Cases Flow and Range of event type occurrences which use Gantt chart.<br />
* B-08011: Added following date related operations for Snowflake: Day of year, Day of month, Day of week, Week of year, Half-year only, Quarter only, Month only, Hours only, Minutes only, Seconds only, and Milliseconds only. These are available when calculating with date type of data.<br />
* B-08016: [[QPR_ProcessAnalyzer_Table#Table_actions|Table actions to set variables]] can also be opened to a new browser tab. Also improved user interface for table actions.<br />
* B-08018: For Snowflake expressions, added Flows aggregations FromEventType and ToEventType to get starting/ending event type, and FlowOccurrences aggregations FromEvent and ToEvent to get starting/ending event.<br />
* B-08001: Added [[Generic_Functions_in_QPR_ProcessAnalyzer#CallStoredProcedure|CallStoredProcedure]] function to call Snowflake stored procedures. This allows to start ETL transformation in Snowflake orchestrated by QPR ProcessAnalyzer script.<br />
* B-08013: Added [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property to expression language to replace the legacy UserPermissions analysis (11).<br />
* B-07976: Snowflake [[Filtering_in_QPR_ProcessAnalyzer_Queries#Expression|expression based filter rules]] support additional expression columns allowing more Big data chart expressions to be filterable.<br />
* B-08015: Big data chart doesn't anymore support calculation in SQL Server (using local datatables).<br />
* B-06270: Improved error messages and made them translatable by taking into use exception codes provided by server.<br />
* B-08021: Added possibility to store [[Diagram_in_Expression_Language|designed diagrams]] for models and expression language API for reading and modifying diagrams.<br />
* B-08037: Dropped following unused tables database: PA_IDEA, PA_IDEA_VOTE, PA_REPORT, PA_REPORT_SETTING, PA_SESSION_SERVICE, PA_VIEW_FILTER_RULE, PA_VIEW_FILTER_RULE_PARAMETER.<br />
* B-08052: Language translations have been updated to 2023.6.<br />
* B-08051: Frontend side components have been updated.<br />
* B-08034: Backend side components have been updated.<br />
<br />
'''Fixed issues:'''<br />
* D-13830: Object counts indicator in header showed incorrect counts when there was disabled filter rules in Snowflake models.<br />
* D-13833: In-memory charts didn't work with boolean type of dimensions when filtering with the false value.<br />
* D-13858: Target value measures didn't update chart when controlled using an on-screen setting.<br />
* D-13827: Calculated attributes data type was incorrectly set as Any by the Attributes dialog.<br />
* D-13849: Multiselect list search didn't allow spaces.<br />
* D-13829: Multiselect dropdown lists height jumped couple of pixels when selecting values.<br />
* D-13835: Deselecting a selected data point didn't remove chart filter rule.<br />
* D-13702: Improved Snowflake query performance in situations when there are lot of filter rules (by decreasing number of CTE's).<br />
* D-13819: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13820: Fixed incorrect manifest.json file to avoid "not found" errors when fetching web site icon.<br />
* D-13865: Break, continue, and return statements didn't work properly when called from inside a catch block.<br />
* D-13795: There was a Python error in clustering analysis with Snowflake model.<br />
* D-13823: Some tooltips in Workspace project hierarchy didn't work and caused a JavaScript error.<br />
* D-13824: BPMN editor align context menu layout looked strange.<br />
* D-13813: QPR logo button in the top left was misaligned in Firefox.<br />
* D-13797: Snowflake query may have given following error when using sampling: ambiguous column name '_EventType_NotNull_1'.<br />
* D-13774: TakeSample function with certain columns caused SQL compilation error: ambiguous column name 'Case Name'.<br />
* D-13782: Snowflake: Aggregating from variations didn't work when using sampling.<br />
* D-13836: Some tooltips had a strange two-colored background.<br />
* D-13834: Removed Model statistics column from clustering and root causes analysis.<br />
* D-13860: Removed filter button from the custom expressions in Task log analyzed objects.<br />
* D-13838: Removed Split data by filtering column from clustering analysis.<br />
* D-13832: Script and model status updates incorrectly sent next update when previous was still pending.<br />
* D-13839: Charts reset zoom button font size was too small.<br />
* D-13817: Importing data to Snowflake datatable with Append=0 doesn't now drop the underlying Snowflake table.<br />
* D-13825: Some models could not have been deleted from recycle bin.<br />
* D-13852: Recycle bin Projects and Models tab didn't show correct content when Recycle bin only contained either models or projects.<br />
* D-13841: In-memory chart Data type selection type has been corrected to string.<br />
* D-13842: Second time and Third time selections has been hidden in in-memory chart measures.<br />
* D-13850: In Chrome, there were console errors related in incorrect text field autocomplete type and text field without form.<br />
* D-13847: Improved browser side performance by removing unnecessary operations.<br />
* D-13859: Chart without dimensions showed an unnecessary Remove dimension button.<br />
* D-12598: When script is stopped in server, ScriptLauncher could still incorrectly continue to import data.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.5 (build 3334) (released 2023-09-07) ==<br />
<br />
'''Fixed issues:'''<br />
* D-13826: Measures or dimensions with case or event attribute and value selections incorrectly removed calculated attributes when dashboard was opened or chart settings were changed.<br />
* D-13821: Font size of some Highcharts tooltips was too small. Issue appeared when there were tooltips mappings in measures or dimensions.<br />
* D-13810: Simplified help links: now all Help buttons go to the QPR ProcessAnalyzer wiki main page.<br />
* D-13822: Snowflake clustering analysis showed empty strings and nulls as case attribute values in an unclear way as just nothing.<br />
<br />
== QPR ProcessAnalyzer 2023.5 (build 3304) (released 2023-09-05) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In Big Data Chart, the '''Case conformance''' measure and dimension has changed in a way that now it provides boolean values (true/false) instead of integer values (1/0). If [[Measure,_Dimension_and_Column_Settings#Other_settings|colorMappings]] are used for this measure or dimension to set specific colors to visualize conformant and nonconformant cases, the mapped values need to be changed as follows: '''1''' -> '''true''' and '''0''' -> '''false'''. Without the change, the mapped colors are not effective.<br />
<br />
Exmaple: Old configuration:<br />
<pre><br />
"colorMappings": {<br />
"1": "#36d475ff",<br />
"0": "#f5403bff"<br />
}<br />
</pre><br />
New configuration:<br />
<pre><br />
"colorMappings": {<br />
"true": "#36d475ff",<br />
"false": "#f5403bff"<br />
}<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is deprecated. Big data chart has allowed to process data both in Snowflake and SQL Server. Now the support for SQL Server is deprecated and the Big data chart will only support calculation in Snowflake. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). The OperationLog analysis is replaced by the [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog function]] and the Infcluencers analysis is replaced by the [[FindRootCauses_Function|FindRootCauses function]].<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [12, 14, 15, 16, 29];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
By default, Snowflake ODBC driver generates quite much logging to files which might unnecessarily fill up the disk space. It's recommended to set the LogLevel parameter to value 0. The path where the logs are created can be seen in Windows registry (key LogPath). More information about configuring Snowflake ODBC parameters: https://docs.snowflake.com/en/developer-guide/odbc/odbc-parameters.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07971: Machine learning based [[Clustering_Analysis|Clustering analysis]] can be run in Snowflake.<br />
* B-07989: In dashboard designer the stacking order of charts can be changed with buttons [[QPR_ProcessAnalyzer_Dashboard_Designer#Viewing_and_Editing_Dashboards|Bring to front, Send to back, Bring forward and Send backward]].<br />
* B-07977: For [[Sankey_Chart|sankey diagram]], added Start level and End level mappings to define custom start and end level for the sankey flows. Implemented also color mappings to define specific colors for specific values.<br />
* B-08010: To improve performance, charts are loaded and updated only when they are visible in the dashboard.<br />
* B-07975: Added following [[SQL_Expressions#Date_functions|date related functions]] to Snowflake: DayOfYear, DayOfWeek, WeekOfYear, Quarter.<br />
* B-07908: When [[QPR_ProcessAnalyzer_Project_Workspace#Duplicating_Model|model is duplicated]], also filters in the model are also duplicated.<br />
* B-07904: Filters and models API for expression language has been completed.<br />
* B-07991: In [[Filter_Selectors|case and event type filter selectors]], threshold whether the dropdown list or search dialog is shown can be defined using the ''Maximum Rows'' setting. Also the search dialog filters search results by other filter rules in the dashboard.<br />
* B-07999: Filters report has been changed to use the [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|expression language API for filters]].<br />
* B-07540: Added [[QPR_ProcessAnalyzer_Expressions#Throwing_objects|throw statement]] to expression language.<br />
* B-07813: UI components are updated. There are small visual improvements, such as in flowchart flows are routed a bit differently and in charts the hidden series is shown as strike-through in the legend.<br />
* B-07963: Following legacy analysis types have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29) (see more information in the note above).<br />
<br />
'''Fixed issues:'''<br />
* D-13777: Filters could not be created in charts when "Update Filter During Selection" setting was disabled.<br />
* D-13767: Automation per Event Types preset in in-memory incorrectly showed only one event type.<br />
* D-13756: Changing background color in KPI card didn't have any effect.<br />
* D-13812: "Exclude events" was incorrectly translated to "Exclure les cas" in French.<br />
* D-13815: Dashboard designer background grid was not visible in entire area in edit mode. Improved also the grid to match to snapping in move and resize.<br />
* D-13674: Business calendar dialog layout was incorrect when a model with a long name was selected to copy holidays.<br />
* D-13811: Table actions link to a new window didn't go to dashboard if there were other parameters in the link.<br />
* D-13601: Fixed issue where some presets may have given error when attribute value selection and the automatically selected attribute conflicted by the data type.<br />
* D-13753: While Snowflake model was selected, in Filters and User Rights reports the Columns list could not be opened.<br />
* D-13720: Now table column filter and sorting are preserved when resizing or zooming page.<br />
* D-13785: In tables increased number of rows to 20000 that are inspected to get available items shown in Excel-style column filter.<br />
* D-13759: Some statistical calculations had bad performance with large number of rows.<br />
* D-13787: Conformance statistics component didn't have scrollbars when text didn't fit to the visible area.<br />
* D-13788: In-memory "Nonconformance reason" selection caused error when two of them was selected in the same chart.<br />
* D-13783: When Analyzed objects was Generic analysis, column selection incorrectly caused "Analysis has not been selected" error.<br />
* D-13776: When measure name contained quotation mark, notification preview didn't work.<br />
* D-13747: Filtering with integer type of case id with case attribute value filter caused error in Snowflake.<br />
* D-13791: In Firefox, model selection in chart settings didn't show models in the first open.<br />
* D-11984: Recycle bin buttons didn't fit to the screen when screen width was small.<br />
* D-13780: Using CaseId case attribute in clustering analysis did not work with Snowflake 106 cases standard model.<br />
* D-13781: Clustering analysis produced Python error with a certain simple Snowflake model.<br />
* D-13730: Snowflake: Case attribute filtering didn't work when there are cases without row in cases table.<br />
* D-13803: There was chart configuration validation error in browser console when measures were moved into dimensions in Big data chart.<br />
* D-13758: There was performance issue with the Recent tasks system preset.<br />
* D-13793: Snowflake clustering failed when cluster count is larger than case count.<br />
* D-13763: SQL expression based filter rule with Where function to filter events didn't filter anything in Snowflake.<br />
* D-13804: Added missing Millisecond function to Snowflake.<br />
* D-13772: Expression EventLog.Cases.Events caused error "Value cannot be null".<br />
* D-13755: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13739: When switching between System reports there was error: "Uncaught Error: 2nd dimension not found. at y.getExpressionConfiguration".<br />
* D-12109: Sometimes flowcharts showed message "Error in querying event type measures. Input string was not in a correct format".<br />
* D-12473: Cost Savings by Automation preset gave sometimes error "Unable to cast object of type 'System.Double' to type 'System.String'".<br />
* D-13750: Snowflake model didn't work with the Case Duration vs. Manual Activities preset.<br />
* D-13657: There was error converting data type nvarchar to bigint.<br />
* D-13796: Some Snowflake operations didn't work with zero rows and columns.<br />
* D-12494: Now when chart size changes, the table column filters and sorting are preserved.<br />
* D-13736: In Performance benchmarking dialog, the Export result button exported wrong benchmark performance analysis result.<br />
* D-13609: Improved conformance analysis related filter names.<br />
* D-13594: Recycle bin buttons were not visible when opening recycle bin in a narrow screen.<br />
* D-13226: Tooltips in the model properties dialog are now translated.<br />
* D-12569: Table incorrectly showed ellipsis for narrow boolean type of columns showing checkboxes.<br />
* D-13391: Emptying date or datetime picker value was not registered and it didn't trigger functionality.<br />
* D-12621: Value search dialog didn't work with values containing backslashes.<br />
* D-13796: Some Snowflake operation didn't work with zero rows/columns.<br />
<br />
== QPR ProcessAnalyzer 2023.4 (build 2628) (released 2023-06-14) ==<br />
<br />
'''Features:'''<br />
* B-07767: Added [[Gantt_Chart|Gantt chart]] to visualize timeline of cases and events divided into swimlanes.<br />
* B-06383: Added [[Sankey_Chart|Sankey chart]] to visualize flow from one set of values to another.<br />
* B-07941: Implemented many more presets running in Snowflake models for compliance and operational excellence use cases. There are also presets for the path analysis and process bottlenecks identification.<br />
* B-07864: Snowflake conformance analysis shows now [[Conformance_Analysis#Top_Deviations_(in-memory)_/_Deviating_Flows_(Snowflake)|reasons for conformance deviations]], such as which event occurrences deviated from the design model.<br />
* B-07909: Snowflake conformance analysis visualizes [[Conformance_Analysis#Undesired_Events_(Snowflake)|undesired event types]] in table and flowchart.<br />
* B-07823: Flowchart Bottlenecks preset has been changed to show bottlenecks for event types. Also renewed the [[QPR_ProcessAnalyzer_Logs#Task_Log|Tasks reports]] to use expression language based interface.<br />
* B-07891: User interface has been [[Languages_and_Localization|translated into Portuguese]].<br />
* B-07873: Improved [[QPR_ProcessAnalyzer_Pivot_Table|pivot table]] visual layout to highlight totals and aggregated rows. Also the row titles are now visible in the top left.<br />
* B-07905: Added [[SQL_Expressions#Rank_functions|Rank related functions]] to Snowflake for writing more versatile custom KPI's, e.g., FirstValue, LastValue, NthValue, Lead and Lag.<br />
* B-07912: Added more SQL expression [[SQL_Expressions#Array_functions|array functions ArrayToString and ArrayOverlap]] to Snowflake.<br />
* B-06449: Added SQL expression functions ToTimestamp and TryToTimestamp for parsing timestamps from strings using provided format.<br />
* B-07959: Added new functions Base64Encode and Base64Decode to help using basic HTTP authentication when calling web services.<br />
* B-07206: SQL expressions support data [[SqlDataFrame_in_Expression_Language#WithClusterColumn|clustering]] which is an unsupervised machine learning algorithm to group data based on similarities.<br />
* B-07848: Data can be extracted from SAP using the encrypted [[Importing_Data_from_SAP#SNC_encrypted_connection|SNC connection]].<br />
* B-07903: Added expression language API to create and modify filters and models.<br />
* B-03103: [[QPR_ProcessAnalyzer_Logs#Task_Log|Task log]] (operation log) can be accessed in expression language.<br />
* B-07872: List aggregation with Distinct=true orders now items by their value.<br />
* B-07940: Removed "Count" aggregation from textual values in Big data chart (you can use the Case count, Event count, etc. selection instead).<br />
* B-07757: Backend support for datatables linking to user-definable Snowflake database, schema and table.<br />
* B-07825: Improved error message when trying to use non-existing attributes in Snowflake queries.<br />
* B-03101: To expression language, added try-catch-finally statement to handle thrown exceptions.<br />
* B-07861: Removed available and total virtual memory information from User settings dialog.<br />
* B-07902: Optimized sequences of joins in Snowflake queries to improve performance.<br />
* B-07837: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13709: If image width-to-height ratio was lower than container's ratio, image was incorrectly stretched to fit the container.<br />
* D-13660: Disabling filter rules didn't work in Snowflake models.<br />
* D-13526: Passing dataframes from SQL scripts to expression scripts didn't work.<br />
* D-13661: Snowflake conformance analysis crashed when there was no access to conformance related Snowflake UDF's.<br />
* D-13693: Resolved major Snowflake conformance analysis performance issues in the BPMN model handling.<br />
* D-13716: Snowflake root causes analysis incorrectly bypassed Snowflake cache.<br />
* D-13707: In SQL Scripting, the datatable analysis (number 18) didn't always copy the data table contents to the target table correctly.<br />
* D-13653: Big data flowchart Root causes preset showed incorrect legend.<br />
* D-13626: Flowchart froze when converting into big data flowchart and vice versa by modifying chart json settings.<br />
* D-13656: Root causes for attribute gave error "Failed to compare two elements in the array" in some situations.<br />
* D-11563: Pivot table had a minimum height of 300px, which caused bottom part of it to be out of view.<br />
* D-13704: In CSV file import, parsing now allows spaces between column separator and text quotation mark.<br />
* D-13598: Chart gave unclear error message when events datatable was not defined.<br />
* D-13655: Improved error messages for BPMN editor and conformance statistics.<br />
* D-13528: Error message for certain erroneous SQL expressions was unclear.<br />
* D-13677: "Flow occurrences with specific case attribute value" selection didn't work for in-memory chart.<br />
* D-13663: Pivot table border line was slightly broken in the header area.<br />
* D-13608: There was incorrect alignment of items in the table paging controls.<br />
* D-13703: Importing CSV file with some special characters to Snowflake failed (due to incorrect escaping in Snowflake staging files).<br />
* D-13708: Duplicating datatable using user defined table, removed data the source table.<br />
* D-13717: Dependency wheel crashed when there were zero weights and showing data labels.<br />
* D-13348: There was an unclear error message when Snowflake query had a certain incorrect expression.<br />
* D-13732: Pivot table Excel export contained headers formatted incorrectly.<br />
* D-13729: There was a JavaScript error when limited user tried to access business calendar.<br />
* D-13662: Percentile function didn't always work with timespan types.<br />
* D-13646: Using incorrectly configured model without cases datatable caused null reference error.<br />
* D-13629: When tried to use chart with a non-existing model, there is now a proper translated error message.<br />
<br />
== QPR ProcessAnalyzer 2023.3 (build 1990) (released 2023-05-03) ==<br />
<br />
'''Features:'''<br />
* B-07818: [[Conformance_Analysis|Conformance analysis]] is supported in Snowflake with following dashboard components: Big data chart, BPMN editor, Conformance statistics, and Design model selector.<br />
* B-07833: [[Root_Causes#Root_causes_in_flowchart|Root causes analysis for flowchart]] is available for Snowflake showing how the event and flow occurrences explain selected phenomena.<br />
* B-07786: Big data chart has more [[Big_Data_Chart#Measure_aggregations|measure aggregations]], such as median, percentile, standard deviation and variance. Also for textual items, unique values can be listed.<br />
* B-07795: [[QPR_ProcessAnalyzer_Table#Conditional_formatting|Conditional formatting]] supports also columns with non-numerical contents.<br />
* B-07830: [[Big_Data_Chart#Measure_aggregations|None and Any aggregations]] for Snowflake and user-friendly formatting for conformance violations.<br />
* B-06527: Error messages in [[Importing_Data_to_Datatable_from_CSV_File|CSV file import]] show also the column number to help working with CSV files with lot of columns.<br />
* B-07747: In-memory conformance checking accepts design models with multiple tasks having same name (same is followed by the Snowflake implementation).<br />
* B-07659: In-memory flowchart preset Case Conformance to visualize conformance checking violations.<br />
* B-07571: Added function IsConformant to backend to check whether cases are conformant.<br />
* B-07863: Added function ConformanceViolationsFlows to backend to return nonconformance reasons for violating cases.<br />
* B-07844: Support for "array" aggregation to return aggregated items as array.<br />
* B-07856: Support for creating and accessing arrays and objects in SQL expressions.<br />
* B-07860: Array handling functions and Tasks property for DesignModel entity.<br />
* B-07847: Added throttling for QPR ScriptLauncher client-side imports to limit memory usage.<br />
* B-07811: Snowflake query optimization to omit columns that are not used by the query.<br />
<br />
'''Fixed issues:'''<br />
* D-13632: Going from variations to event types led to very poor performance with certain models.<br />
* D-13628: Statistical calculations were incorrectly not applied in chart CSV export.<br />
* D-13575: SQL script may have given error "Operand type clash: nvarchar(max) was incompatible with sql_variant".<br />
* D-13597: UI supports now datatable column type "ShortString" (previously datatable contents preview and CSV import didn't work).<br />
* D-13536: Using business calendar sometimes gave error "System.InvalidOperationException: Collection was modified".<br />
* D-13477: Chart types without y-axis mapping caused an error when series mapping was used.<br />
* D-13453: _model variable was not available for Snowflake expression filter rules.<br />
* D-13527: Checkbox height didn't increase when long label needed to span to multiple lines.<br />
* D-13363: Snowflake query with EvaluateAfterAggregations and IsHidden failed when dimensioning by case id column.<br />
* D-13383: Snowflake query gave error "Invalid column name 'FromCase Name'".<br />
* D-13523: Request id was incorrectly shown as zeros in error messages.<br />
* D-13541: In CSV import, error message for maximum number of columns exceeded is improved (maximum is 300 column for SQL Server).<br />
* D-13583: Objects count in header didn't work for empty Snowflake model.<br />
* D-13553: Larger pacm files can now be imported, as there isn't error "Request body too large. The max request body size is 30000000 bytes".<br />
* D-13306: Stack overflow error was given when using SqlDataFrames.<br />
* D-13487: When Flows root and there was filter in Values expression, some flows were lost.<br />
* D-13540: SqlDataFrame query with 300 columns failed to error "WithExpressionColumn: No name given for the new column".<br />
* D-13429: Ordering in List aggregation couldn't find columns in dataframe query.<br />
* D-13406: Dataframe query with root FlowOccurrences and get value from cases caused error.<br />
* D-13538: There was incorrect handling of escaping characters in column names used in dimensions.<br />
* D-13633: Fixed ordering in List aggregation with null and empty values.<br />
* D-13636: Query that dimensions by numeric case attribute with AggregateOthers true, caused error.<br />
* D-13589: Creating Snowflake datatable did not connect to Snowflake.<br />
* D-13623: Value expressions without aggregation didn't work with AggregateOthers setting.<br />
* D-13554: In in-memory chart, percentile function might have return both Int64 and Double type of objects which cannot be sorted.<br />
* D-13481: Improved error message when trying to use deleted model.<br />
* D-13621: Dynamic value search dialog had incorrect font in lists.<br />
* D-13610: Some invalid BPMN files crashed BPMN editor.<br />
* D-13614: Checkbox label texts overflowed to right.<br />
* D-13520: Removed excessive parameters from the Query Designer for generic context queries.<br />
* D-12998: QPR icon was incorrectly positioned in header in Safari.<br />
* D-13480: Import to duration data type is removed from Snowflake datatables, and for local datatables duration type maximum size is checked.<br />
* D-13517: In Highcharts-based visualizationsm conditional formatting didn't work for other than the first y-axis mapping.<br />
* D-13529: In some presets containing several on-screen settings, when chart showed in error message, on-screen settings showed invalid selection.<br />
* D-13530: Opening dropdown list caused JavaScript error when the list contents should be empty after it previously contained items.<br />
* D-13486: Removed unreachable error message in CSV import.<br />
* D-13524: Fixed in-memory chart flow occurrences root measures "Event attribute (text)" and "Event attribute (number)" that caused error.<br />
<br />
== QPR ProcessAnalyzer 2023.2 (build 1478) (released 2023-03-22) ==<br />
<br />
'''Features:'''<br />
* B-07755: [[Business_Calendar|Business calendar]] for duration calculation is available for Snowflake models.<br />
* B-07719: In Snowflake dashboards, [[Big_Data_Chart#Using_measure_variables|measures can be assigned to variables]] and use the variables in other measures to create combined measures.<br />
* B-07746: Changed in-memory conformance checking to not show invalid flow violations where starting or ending event type is invalid.<br />
* B-07743: [[PA_Configuration_database_table#General_Settings|Default datasource]] can be configured for datatables created by scripts, allowing to set Snowflake as default.<br />
* B-07740: System memory indicator moved from the header to User settings Version information dialog.<br />
* B-07776: New SQL expressions functions Unicode, Char and Regexp, as a basis for future rule-based process mining.<br />
* B-07741: Backend support for aggregation operations Median, Percentile, Stdev, Stdevp, Var and Varp to Snowflake.<br />
* B-07742: Backend support for aggregation operation to list unique items in Snowflake.<br />
* B-07770: Optimized Snowflake SQL generation by combining consecutive WithColumn function calls into one select.<br />
<br />
'''Fixed issues:'''<br />
* D-13491: QPR ProcessAnalyzer server crashed now and then when sorting was in progress and the query was cancelled.<br />
* D-13380: Dimensioning integers in in-memory core calculation didn't work correctly as 0 and -1 were put to same bucket.<br />
* D-13385: In Workspace Bin, Delete Forever and Restore from Bin buttons were misaligned.<br />
* D-13332: Conformance checking didn't show in violations when there were multiple undesired events in same case.<br />
* D-13405: Images take now always all available space in image component area.<br />
* D-13417: KPI card without title was slightly misaligned vertically.<br />
* D-13438: Clicking selected event type or flow in flowchart didn't cancel the filter selection.<br />
* D-13350: Task log and Script log default filter end date is now empty by default.<br />
* D-13381: Disabled browser auto-complete from flowchart variation stepper and Workspace create/rename object dialog.<br />
* D-13347: Improved performance for in-memory business calendar calculation.<br />
* D-13335: In in-memory chart, filtering didn't work in "Flow occurrences" root "Flow occurrences with specific event attribute value" dimension.<br />
* D-13367: Percentage value wasn't displayed properly with German or Spanish language when event types were shown in object counts indicator.<br />
* D-13451: Exported filter file is now named based on selected filter name.<br />
* D-13378: In Big data chart, prevented error "Unable to aggregate from level RootCauses to level Custom".<br />
* D-13293: DataFrame query with root Flows and IncludeEvents and ExcludeEvents filter rules failed.<br />
* D-13370: Fixed issue where on-screen settings that didn't have any selectable items, showed a strange selection.<br />
* D-13392: Clustering analysis was incorrectly shown when originally in-memory chart was converted into big data chart by changing chart json settings.<br />
* D-12784: Some Snowflake queries incorrectly bypassed Snowflake caching because they used unique object names.<br />
* D-13456: Improved error messages for incorrectly configured on-screen settings.<br />
* D-13445: Conformance violations related translated terms have been fine-tuned for better translations into different languages.<br />
* D-13421: Improved error messages when trying to use model having some column mappings missing.<br />
* D-13485: Snowflake business calendar gave error when calendar contained Sunday.<br />
* D-13218: Windows event viewer incorrectly contained log entries that are not errors.<br />
* D-12634: Multiline text boxes width is set to non-changeable.<br />
* D-13034: Confirmation dialog to delete items permanently has been updated.<br />
* D-13288: In dialogs, the Create button didn't show the disabled state correctly.<br />
* D-13427: When dropdown lists didn't have any selectable items, the "N/A" text appeared and the list incorrectly took more space vertically.<br />
* D-13483: In Workspace, the new items menu was too narrow for Spanish texts.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.1 (build 1449) (released 2023-02-24) ==<br />
<br />
'''Features:'''<br />
* B-07690: System setting [[PA_Configuration_database_table#General_Settings|DatabaseId]] can be defined by administrator to get more simple table names in Snowflake.<br />
* B-07737: In flowchart Bottlenecks preset, originally used flow colors has been recovered.<br />
* B-07748: For Analyzed objects "Conformance checking findings" in charts, terminology has been revised and issue with the case count calculation fixed.<br />
* B-07663: In [[Chart_On-screen_Settings|on-screen settings]], when case/event attribute is selected, related attribute values list are reset.<br />
* B-07570: Backend support for [[Business_Calendar|business calendars]] in Snowflake.<br />
* B-07660: Backend support for conformance checking to show also the last event index and event type in NotCompleted reason.<br />
* B-07610: Memory counter related technical properties have been removed from expression language.<br />
<br />
'''Fixed issues:'''<br />
* D-13349: Opening dashboard containing Root causes preset with default settings jammed the system by generating lot of calculations (for more information, see previous release notes).<br />
* D-13277: Stacked charts with date type of data as series did incorrectly show gaps in columns/bars.<br />
* D-13270: Flowchart conditional formatting didn't work with duration multi-unit format.<br />
* D-13358: Calculation results caching works also across different user sessions.<br />
* D-13250: Dashboard with two charts connected with linked settings using variables ended up to to a never ending loop.<br />
* D-13230: SAP import did not automatically create columns to use the correct column types.<br />
* D-12857: Deeply recursive functions caused a crash without any trace.<br />
* D-12994: In Workspace, some buttons were not clickable due to breadcrumb covering them.<br />
* D-13249: In Workspace, there was incorrect error message for duplicate datatable names when there were items with only letter capitalization was different.<br />
* D-13232: In-memory chart Top variations preset is now sorted secondarily by average duration descending.<br />
* D-13300: Setting DashboardFilter variable to empty value didn't have any effect in dashboard but old value was incorrectly used.<br />
* D-12834: Limited the maximum number of dimensions to 20, to avoid too demanding queries for SQL Server.<br />
* D-12917: Changed visual indication of missing items in dropdown lists (it's no longer showing "***").<br />
* D-13111: In Root causes preset, there is now error message when trying to use weighting related columns when weighting isn't in use.<br />
* D-13124: SQLDataFrame query containing filter rule EventTypes aggregating from cases failed.<br />
* D-13207: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed.<br />
* D-13292: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed (rev.2).<br />
* D-12991: Dropdown list texts had some translations missing.<br />
<br />
== QPR ProcessAnalyzer 2023.1 (build 1433) (released 2023-02-07) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release contains a potentially severe issue, where some dashboards completely jam the system by generating lot of calculations. The issue may appear in dashboards that have been created in earlier releases and containing the Root causes preset with default settings. The issue will be fixed by the next release. The issue can be worked around by exporting the affected dashboard, modifying the dashboard file manually and importing the dashboard back. The required modification is to remove line(s) containing <pre>"preset": "RootCauses"</pre> and the comma from the preceding line.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Cases (analysis number: 5), Events (6), and EventTypes (7). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). Note that the legacy analyses removal don't affect the dashboarding functionality.<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [5, 6, 7];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2023.1, the '''.NET Desktop Runtime''' is not needed anymore for QPR ProcessAnalyzer Server, so it can be uninstalled. Also for QPR ScriptLauncher, ''.NET Desktop Runtime'' is not needed, but instead install the '''.NET Runtime''' (which is more lightweight). ''.NET Desktop Runtime'' contains the ''.NET Runtime'', so the actions are not mandatory when updating to QPR ProcessAnalyzer 2023.1.<br />
</div><br />
<br />
'''Features:'''<br />
* B-06997: Expression-based filter rules for Snowflake dashboards to allow versatile filtering and filtering from custom expressions.<br />
* B-07383: Improvements to linked settings to allow binding to variables, tags and filter rules [[Chart_Linked_Settings|(more information)]].<br />
* B-07508: Flowchart preset colors have been renewed to be more intuitive.<br />
* B-07184: Automation preset in flowchart has now options for selecting the Automation attribute and value.<br />
* B-07512: Changed datatable metadata can be refreshed from Snowflake, and all rows in the datatable can be deleted easily in Workspace [[QPR_ProcessAnalyzer_Project_Workspace#Datatables|(more information)]].<br />
* B-07440: Date when the release was made is now shown in User settings.<br />
* B-07595: WeekOfYear property for DateTime objects in expression language to get the week number of a year (between 1 and 53).<br />
* B-07623: In-memory expression language functions Random (to get random numbers) and Hash (to get hash value of string).<br />
* B-07612: Breadcrumb in Workspace has now a Home button to quickly navigate to the top level of the projects hierarchy.<br />
* B-07637: Language selector now shows the language options in local languages.<br />
* B-07228: Remove following deprecated analyses: Cases, Events, and EventTypes (see the release note above).<br />
* B-07538: Backend support: Snowflake root causes analysis can find event attribute related root causes.<br />
* B-07706: Backend support: Snowflake expression-based filter rules support for roots containing Where function.<br />
* B-07611: Removed following legacy filter rules: CaseAttributeTrend, EventAttributeTrend, EventTypeTrend, and Duration.<br />
* B-07598: Refactored client-side import for SQL scripting to use generic client-side task mechanism.<br />
* B-07716: ShortString columns are now properly detected in SQL Server queries.<br />
* B-07652: Now it's possible to pipe multiline expression strings to QPR ScriptLauncher.<br />
* B-07688: AddColumns function for Datatables to create multiple columns in one call.<br />
<br />
'''Fixed issues:'''<br />
* D-13092: Table conditional formatting didn't work when color code was fetched from other column.<br />
* D-13105: Some charts created in earlier release referring to non-existing presets names appeared as empty after software update.<br />
* D-13107: Flowcharts crashed and showed loading animation forever when setting color or flow thickness to non-numerical measure.<br />
* D-13104: In BPMN model editor, context menus to edit elements didn't appear.<br />
* D-12939: Script editor tabs Close buttons didn't work.<br />
* D-13154: "Search by case ID" didn't work in in-memory chart.<br />
* D-12933: CSV columns with only empty values were incorrectly auto-detected as integers.<br />
* D-12929: In-memory chart Root causes for case duration and Root causes for case attributes (weighted) had Custom expression missing.<br />
* D-12928: Pivot table headers were empty when there were two column levels and two values.<br />
* D-12924: Pivot table columns with Count and Distinct Count aggregations are now numeric and aligned right.<br />
* D-13033: Changing colors in chart settings Color palette caused "Item already exists" error and prevented changing colors.<br />
* D-12996: Tags referring to dashboard variables didn't work in Additional root expression.<br />
* D-12877: UI gave error in some situations: Uncaught TypeError: Cannot read properties of undefined (reading 'min').<br />
* D-13071: Prevented selecting two or more of the Y-axis, X-axis and series mappings at the same time for the same measure or dimension.<br />
* D-12895: Big data chart crashed when on-screen setting contained event type selector and there were no event type filter set.<br />
* D-13231: Tooltips for dashboard name, model selector and filter selector in header show now the content text instead of generic instruction.<br />
* D-13139: There was an error when tried to create filter for a custom expression where selected data type didn't match with the actual type of data.<br />
* D-12988: Chart presets selection in chart settings showed unnecessary tooltip.<br />
* D-12901: When set sampling over 1 million, Snowflake models gave error: parameter value out of range: size of fixed sample. Must be between 0 and 1,000,000.<br />
* D-12904: Creating expression filter having lower/greater logic with root objects sampling failed.<br />
* D-12923: Chart schema didn't accept pivotAggregation in dimensions/columns.<br />
* D-12926: Root causes columns Selected weight, Compared weight and Total weight have now correct float data type.<br />
* D-12880: In out-of-the box dashboards, chart titles and subtitles were not translated.<br />
* D-12916: Improved filter rule description text in Filter rule editor dialog for expression filter rules.<br />
* D-12889: No clear error message was given when user tried to export corrupted model from .pacm file.<br />
* D-12869: Date selector in on-screen settings had inconsistent vertical alignment.<br />
* D-12938: When creating a filter with lasso and selecting a single data point only, "equals" kind of filter rule is now created.<br />
* D-12989: "Running tasks as specific time" system report may have ended up in loop causing following error: Maximum call stack size exceeded error.<br />
* D-13010: Pivot table sometimes ended up to never-ending resizing loop when browser zoom was more than 100%.<br />
* D-12790: Expression language: DataFrame.SetColumns: Initializing and using variables defined in closure of SetColumns function parameter didn't work<br />
* D-12927: All on-screen settings were not be visible in narrow charts having several on-screen settings.<br />
* D-12937: Added maximum value limitation to several number input fields in charts.<br />
* D-12947: Message dialog didn't show line breaks correctly (e.g., in CSV file import).<br />
* D-12948: Defining column setting caused error when Measure Expression was not defined.<br />
* D-12946: Filter rule text couldn't be seen entirely from tooltip.<br />
* D-12983: When range filtering using integer values in Highcharts chart, filter is now shown as integer value.<br />
* D-12984: When range filtering in Highcharts charts and there is category axis, filter rule is now based on individual (category) values.<br />
* D-12930: When creating filters from charts using date type of X-axis with lasso, "greater than or equal" and "less than or equal" filter rules are not created.<br />
* D-12920: "Where" function in DataFrame lost column data types of the original DataFrame.<br />
* D-13048: Model notifications failed with certain measures that define variables in root expression leading to error: Variable "sampleSize" already exists in this context.<br />
* D-13116: BPMN editor had some translations missing.<br />
* D-13019: Datatable and script selectors show now datatable/script name instead of id, when opening selector having existing selections.<br />
* D-12951: Changing additional root expression in flowchart didn't refresh the flowchart.<br />
* D-13147: Filter rule boxes in header had different widths, and Add filter rule button vertical alignment was incorrect.<br />
* D-12907: Sometimes case attribute selection showed incorrect attribute name for empty model.<br />
* D-13148: Filters and Datatables system reports loaded unnecessarily twice which could be seen as blinking.<br />
* D-12844: In dataframe query, FlowOccurrences in root and GetValueFrom Cases with filter gave null reference exception<br />
* D-12915: Repeating certain query twice with aggregations in Events root generated invalid SQL<br />
* D-12728: Was huge amount logs in server during client side import (manual testing required as identification)<br />
* D-13156: Persist function failed to snowflake: Invalid unicode escape sequence '\u0027ACCE'; should be at most '\u0010FFFF'.<br />
* D-12876: Flows/FlowOccurrences in root didn't work with SqlExpressionValue filtering.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2022.8 (build 1397) (released 2023-01-11) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release fixes an issue where extracting large datasets from SAP increases memory consumption considerably and may lead to out-of-memory error. This release contains packages for both QPR ScriptLauncher and QPR ProcessAnalyzer Server. If SAP extractions are done using QPR ScriptLauncher in client side mode (ExecuteInClientSide=1), it's enough to update QPR ScriptLauncher to fix this issue.<br />
</div><br />
<br />
'''Fixed issues:'''<br />
* D-12941: Extracting data from SAP consumed unnecessary lot of memory and may have led to out-of-memory error (both when running using QPR ScriptLauncher and in server side).<br />
<br />
== QPR ProcessAnalyzer 2022.8 (build 1396) (released 2022-12-30) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Creating datatables with duplicate names in the same project is prevented, and possible existing duplicate names are automatically changed to unique names with a random suffix. If there are duplicate names, they can be renamed either before updating QPR ProcessAnalyzer (to avoid automatic renaming) or after the update (by changing suffixed names). If the renamed datatables are used by models, the linkage will break because it's based on the datatable name. Creating duplicate datatables has already been prevented in the UI, but the improved method works also in the API level.<br />
<br />
Following SQL query can be used to list datatables (and project id) having duplicate names:<br />
SELECT ITA_NAME, ITA_PROJECT_ID<br />
FROM PA_INTEGRATION_TABLE<br />
GROUP BY ITA_NAME, ITA_PROJECT_ID<br />
HAVING Count(*) > 1<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
If trying to use business calendar for a model that doesn't have the business calendar defined, there will now be an error message instead of showing the chart. Either unselect the business calendar checkbox for the measure or dimension, or define a business calendar to the model. In this situation in earlier releases the business calendar was ignored and full time calculation used.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07498: Automation and Operational Excellence presets and Root causes analysis (for Snowflake), Weighted root causes analysis and Event scattering preset (for Snowflake and in-memory), Root causes for case duration (in-memory).<br />
* B-07177: Flexible mappings, user selectable aggregations and conditional formatting for Pivot table, and flexible mappings for KPI Card.<br />
* B-07518: New function named Query to run call /api/expression/query.<br />
* B-07294: In Workspace, the left side projects hierarchy can be collapsed and expanded to make more space to project contents.<br />
* B-06814: In SQL expressions, new function DurationBetweenDates to calculate duration between timestamps precisely.<br />
* B-07519: Replaced DateDiff function with the new DurationBetweenDates function in big data chart.<br />
* B-07531: In SQL expressions, new mathematical functions Abs, Log, Mod, Power, Rand, Sign and Sqrt.<br />
* B-07297: To optimize performance, Snowflake queries are automatically cancelled if they are not needed by UI.<br />
* B-07569: To optimize performance, TakeSample function implementation is improved for Snowflake.<br />
* B-07198: Several performance improvements to DataFrame queries (used in Snowflake).<br />
* B-07464: Added Lead and Lag functions to SqlDataFrames to support getting previous and next event.<br />
* B-07470: New ExtractSap function to fetch data from SAP using expression language.<br />
* B-07536: New Pivot function to SqlDataFrames to enable root causes analysis.<br />
* B-07488: Primary keys can be set to datatables to improve calculation performance (UI will follow later).<br />
* B-07515: Added RootCauseAnalysis function to SqlDataFrames.<br />
* B-07546: RootCauseAnalysis function support for complex weighting expressions.<br />
* B-03052: Support for user-defined variables in /api/expression/query.<br />
* B-07565: Support for NumberPrecision, DatetimeTruncation and TimespanPrecision properties for Values section in in-memory query.<br />
* B-07513: For product activation file handling, replaced mutex based implementation with exclusive file lock.<br />
* B-07480: Expression language support for DataFlows for data extraction.<br />
* B-07613: Removed support for SQL Server based R scripting.<br />
* B-07567: Take datatable primary keys into use in expression builder to improve performance (part 2).<br />
* B-07588: Remove total memory information from log writing and DateDiff function for in-memory.<br />
<br />
'''Fixed issues:'''<br />
* D-12715: Snowflake calculated imprecisely some operations containing division and aggregation.<br />
* D-12761: Progress bar of the CSV import dialog didn't show any progress.<br />
* D-12799: Opening datatable contents dialog settings was slow when there were lot of rows in the datatable.<br />
* D-12089: Include conforming/nonconforming cases made BPMN editor no responding.<br />
* D-12496: Datagrid filter search keyword didn't work for rounded values, so the search was hidden for other than textual data.<br />
* D-12704: Durations as quarters was calculated incorrectly in charts.<br />
* D-12662: Fixed issue where some special literals in custom expressions didn't work.<br />
* D-12403: Setting Notifications on a model had some visual issues.<br />
* D-12859: Dependency wheel visualization crashed with nulls values in From and To mappings.<br />
* D-12660: Removed unnecessary float conversions in SQL expressions.<br />
* D-12653: In-memory datafram OrderByColumns function with mixed values failed.<br />
* D-12657: When trying to use milliseconds period in some presets, frontend frozed.<br />
* D-12706: Line breaks in data were shown in many places where it's undesired.<br />
* D-12719: Syncfusion dialog headers showed backslaces incorrectly.<br />
* D-12372: Refused to run the JavaScript URL because it violated the Content Security Policy directive.<br />
* D-12730: Logging out when filter selection is in progress, gave javascript error.<br />
* D-12705: Header object counts tooltip was sometimes messed after logout.<br />
* D-12384: Selected project was not highlighted for whole project name string.<br />
* D-12581: Prevented creating duplicate datatable names in same project in parallel execution.<br />
* D-12722: There was incorrect syntax near '<' when running SqlDataFrame expressions.<br />
* D-12736: Swedish and Finnish translation improvements for object counter tooltips.<br />
* D-12702: For BPMN Editor component "Something went wrong" error was given when switching from in-memory to Snowflake model.<br />
* D-12712: UI gave error: TypeError: Cannot read properties of undefined (reading 'id').<br />
* D-12738: Business calendar showed total business time when calendar configuration was invalid.<br />
* D-12776: Special character filter caused JavaScript SyntaxError.<br />
* D-12785: Unnecessary vertical scrollbar displayed for main header toolbar.<br />
* D-12164: There was unnecessary UnauthorizedAccess errors in logs.<br />
* D-12580: Case duration was not same when comparing Big data chart with in-memory chart for same data.<br />
* D-12768: Data grid links and variable change actions didn't work when grouping was used.<br />
* D-12735: FindRootCauses (in-memory) function filtered out cases with zero contribution.<br />
* D-12763: --#CallWebService didn't work from ScriptLauncher.<br />
* D-12789: There was timeout in SQL queries to scripting sandbox.<br />
<br />
== QPR ProcessAnalyzer 2022.7 (build 1331) (released 2022-11-15) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2022.7, to improve security expression language operations that modify data or connect to external datasources are prevented in dashboard custom expressions. The limitation is required, because when a dashboard is opened, its expressions are run with the user's permissions, and the user need to trust the expressions don't perform any unexpected operations, such as delete data. The full functionality of the expression language is available in the scripts and in the Expression Designer.<br />
<br />
The following functions and operations are prevented in dashboards: SendEmail(), CallWebService(), ImportOdbc(), ImportOdbcSecure(), Model.DeletePermanently(), Model.Restore(), Model.TriggerNotifications(), Project.DeletePermanently(), Project.Restore(), Project.CreateDatatable(), Datatable.AddColumn(), Datatable.DeletePermanently(), Datatable.Import(), Datatable.Merge(), Datatable.RemoveColumns(), Datatable.RenameColumns(), Datatable.Truncate(), RecycleBin.DeletePermanently(), and call SQL script. Calling expression scripts is allowed, but in the script all previously mentioned operations are prevented.<br />
<br />
Following SQL query can be executed in the QPR ProcessAnalyzer metadata database to reveal dashboards that potentially have prevented expressions:<br />
SELECT * FROM [PA_UI_ELEMENT] WHERE [UIE_PROPERTIES] LIKE '%SendEmail(%' OR [UIE_PROPERTIES] LIKE '%CallWebService(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbc(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbcSecure(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Restore(%' OR [UIE_PROPERTIES] LIKE '%TriggerNotifications(%' OR [UIE_PROPERTIES] LIKE '%CreateDatatable(%' OR [UIE_PROPERTIES] LIKE '%AddColumn(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Import(%' OR [UIE_PROPERTIES] LIKE '%Merge(%' OR [UIE_PROPERTIES] LIKE '%RemoveColumns(%' OR [UIE_PROPERTIES] LIKE '%RenameColumns(%'<br />
</div><br />
<br />
'''Features:'''<br />
* B-07287: Process Discovery and most important presets for Snowflake.<br />
* B-07271: "Last Row Aggregates Over-limit Rows" setting for big data chart.<br />
* B-06431: Snowflake datatables support for database views in the datasource.<br />
* B-07266: Security: "limited mode" to prevent data modifications and external calls from dashboard expressions.<br />
* B-07097: Improved flowchart root causes color scales.<br />
* B-07363: SQL LIKE function support for escape character.<br />
* B-06877: Improved variation queries performance in Snowflake, part 1.<br />
* B-07444: Improved variation queries performance in Snowflake, part 2.<br />
* B-07382: Support for empty strings and nulls in event type names in dataframe processing.<br />
* B-07273: WithRowNumberColumn, WithRankColumn, WithDenseRankColumn support for descending sorting.<br />
* B-07303: FindRootCauses function support for weighting expression.<br />
* B-07327: Unpivot function for SqlDataFrames (for root cause analysis).<br />
* B-07385: Align token lifetime with SESSION_MAXIMUM_DURATION setting.<br />
* B-07500: ColumnMappings property for IDataFrame and DataTables.<br />
* B-07499: IDataFrame.ApplyFilter function to filter events data using a JSON-based filter.<br />
* B-07469: Translation updates for release 2022.7.<br />
<br />
'''Fixed issues:'''<br />
* D-11630: Drag and drop from chart settings to main header was working incorrectly for filter and root cause rules.<br />
* D-12455: Moving a chart filter from one chart to another created a root cause analysis filter.<br />
* D-12266: Root causes analysis showed incorrect results when certain combination of filters.<br />
* D-12525: Numerical values in Excel export in data grid was formatted incorrectly.<br />
* D-12534: Restoring item from recycle bin changed project from Bin to previous project.<br />
* D-12529: Measure specific datalabel mapping did not work correctly when also mapped to Y-axis.<br />
* D-12532: Multi-selection options caused layout issue for Chart setting.<br />
* D-12541: Layout issue for Polish in multiselect list search dialog.<br />
* D-11277: Increase/decrease Icons were missing in the dimension sorting for Mac.<br />
* D-12552: Uncaught Error: Diagram.selectCollection given something that is not a Part: null.<br />
* D-12567: Tooltip incorrectly showed for label component containing only spaces.<br />
* D-12438: Operation was cancelled because it was replaced by a new operation.<br />
* D-12551: Some expressions didn't work as calculated case/event attributes.<br />
* D-11720: Chart buttons were not visible in Apple Safari and iPad.<br />
* D-12544: On-screen settings "options" parameter did not work.<br />
* D-12528: Multi-unit time unit selection appeared where it's not applicable.<br />
* D-12583: Error message should be provided for invalid settings input than just display JS errors.<br />
* D-12599: Tooltips didn't show correct measures/dimensions when "Show in tooltip" mappings are used.<br />
* D-12561: Chart settings content was incorrectly drawn outside of the chart dialog.<br />
* D-12568: Reload UI sometimes crashed chart having multiselect on-screen settings.<br />
* D-12572: Main header toolbar lost when refresh maximized PA chart.<br />
* D-12612: Drop Unused Filters After setting incorrectly allowed zero seconds.<br />
* D-12533: Error message keeped blinking in Analysis view.<br />
* D-12608: User could not select or add new case attribute when current select attribute doesn't exist.<br />
* D-12451: Prevented deleting running script.<br />
* D-12516: Windows event viewer warning: Failed to gracefully shutdown application.<br />
* D-12523: Business calendar performance - part 2.<br />
* D-12538: Column with same name could be added multiple times to datatable using expression language.<br />
* D-12582: Improved EMS mutex code to support multiple PA service in one server.<br />
* D-12624: Synchronize new (empty) data table generated failed queries in Snowflake.<br />
* D-12622: Advanced setting page reserved room for the expression editor frame that did not exist.<br />
* D-11295: In on-screen settings, some UI controls were vertically misaligned.<br />
* D-11625: The heights of the parameter option menu in the clustering tab was not well aligned.<br />
* D-12103: Small dropdown list layout issue.<br />
* D-12633: Align issue for Column related Advanced settings.<br />
* D-12505: Search dialog didn't escape % and _ characters correctly in dataframe processing.<br />
* D-12645: Tabs in expression settings dialog were partly hidden when dialog is narrow.<br />
* D-11382: Moving of flowchart was sometimes shaky.<br />
* D-12655: Filter rule tooltips in header were styled incorrectly.<br />
* D-12656: Large integer values in filter jsons were incorrectly presented as small integers.<br />
* D-12661: Some exported filters contained unnecessary "invert" property.<br />
* D-12500: Model with numeric case id's and filtering with the attribute mapped as case id: ERROR [22018] Numeric value <nowiki>''</nowiki> is not recognized.<br />
* D-12509: Filtering null values didn't work in boolean attributes in Snowflake.<br />
* D-12571: In dataframe processing in SQL Server, dividing two integers should not make rounding to integer.<br />
* D-12610: Setting for global DropUnusedFiltersAfter was missing.<br />
* D-12613: Filtering with case/event attributes with null values didn't match in Snowflake models.<br />
* D-12617: Model didn't work when DropUnusedFiltersAfter is 00:00:00.<br />
* D-12618: If model ConfigurationJson is null, Configuration property didn't work.<br />
* D-12620: Filtering didn't work when there are backslaces in attribute names in Snowflake models.<br />
* D-12643: AttributeFunctionCallExpression did not always work properly in array context.<br />
* D-12647: SqlDataFrame with SQL Server: Comparing literals to variant column values failed.<br />
* D-12648: Models that have DropUnusedModelsAfter setting caused "The sliding expiration value must be positive" error.<br />
* D-11526: It was unable to translate Unicode character \uD83D at index 176 to specified code page.<br />
* D-12637: In application startup arised FATAL Application startup exception System.UnauthorizedAccessException: Access to the path 'Global\MutexQPRPAActivation' is denied.<br />
<br />
== Old Releases ==<br />
See older releases in [[QPR ProcessAnalyzer Release Archive]]<br />
__NOTOC__<br />
<br />
[[Category: QPR ProcessAnalyzer]]</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&diff=24487QPR ProcessAnalyzer Release Notes2024-03-18T16:10:32Z<p>Ollvihe: </p>
<hr />
<div>This page lists all new features and fixed issues for each QPR ProcessAnalyzer release.<br />
<br />
== Next Release: QPR ProcessAnalyzer 2024.3 (planned release date 2024-04-02) ==<br />
<br />
'''Features:'''<br />
* B-08242: [[Actions_to_Run_Script_in_Table|Custom actions]] in scripts can be started from dashboard table context menu, e.g., create tickets, trigger automation, and fetch external information.<br />
* B-08252: When Analyzed objects is cases, event attribute values are filtered with the native event attribute filter rules instead of expression based filter rules.<br />
* B-08231: Snowflake performance improved by splitting object counts (shown in header) query into two, so that the filtered object count query uses eventlog caching.<br />
* B-07906: Implemented cross joins to SQL dataframes.<br />
* B-03047: Removed support for dashboard panels.<br />
* B-08214: Removed unused columns from the PA_VIEW table.<br />
<br />
'''Fixed issues:'''<br />
* D-14048: Fixed issue where in-memory root causes analysis for case attributes didn't show attributes with ShortString data type.<br />
* D-14049: Added some missing translations for table column filter and BPMN editor.<br />
* D-14021: FindRootCauses function WeightingExpression was run in incorrect context for in-memory model.<br />
* D-14020: Query which goes from EventTypes to Cases did not show the error when using GetValueFrom function.<br />
* D-13976: Fixed issue where gateway-based imports were not synchronous.<br />
* D-13689: Fixed JavaScript error in Highcharts polar chart with tooltips.<br />
* D-12614: Highcharts gives "Maximum call stack size exceeded" error in bar chart with polar and data labels.<br />
* D-14060: Highcharts custom layout translatable properties incorrectly changed chart configuration by translating the labels.<br />
* D-14071: Business calendar button press caused error when user didn't have access to any model.<br />
<br />
== Latest: Additional release for QPR ProcessAnalyzer 2024.2 (build 5509) (released 2024-02-27) ==<br />
<br />
'''Features:'''<br />
<br />
* B-06280: User management dialog shows whether users have password defined and unnecessary passwords can be removed to improve security.<br />
<br />
'''Fixed issues:'''<br />
<br />
* D-14045: Fixed issue where users with Viewer or Analyzer role couldn't create filters in Snowflake models.<br />
<br />
== QPR ProcessAnalyzer 2024.2 (build 5438) (released 2024-02-21) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue: Snowflake models and dashboards don't work with Viewer and Analyzer role permisions. The reason is that cache tables created to Snowflake incorrectly require the write permissions. Workaround is to give users the Designer role which will give the needed permissions. Note that the Designer role gives many permissions to the user for the project [[Roles_and_Permissions#Roles_and_Permissions|(more information)]]. This issue has been fixed in the next release (D-14045).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
The legacy User permissions report (analysis number 11) and Filters report (analysis number 30) used in SQL scripts have been removed. Use instead the expressions language to query filters and user permissions, e.g., [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|Models.Filters]] and [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
New version of the Design diagram component has been improved with object-specific measures, and the previous common measures are not migrated into object-specific measures. Thus, the measures need to be configured again, or manually edit the chart json settings (if needed please ask instructions from QPR CustomerCare).<br />
</div><br />
<br />
'''Features:'''<br />
* B-08022: Design diagram supports now BPMN notation, elbow style flows and object-specific measures.<br />
* B-08232: Entire future eventlogs can be [[Create_Predicted_Eventlog|predicted]] based on generative AI models running in Snowflake.<br />
* B-08166: Added expression language function [[Generic_Functions_in_QPR_ProcessAnalyzer#OpenAIChatCompletion|OpenAIChatCompletion]] to answer natural language prompts based on OpenAI ChatGPT API.<br />
* B-08177: Snowflake query performance has been improved by introducing caching of filtered eventlogs using Snowflake tables.<br />
* B-08196: Conditional formatting rules can be defined for [[QPR_ProcessAnalyzer_Table#Textual_equal_rules_for_background_color|textual and boolean values]].<br />
* B-08213: Big data chart expressions event type selections to be multi-select where applicable.<br />
* B-08205: Expression language API is available for storing [[Storing_Secrets_for_Scripts|secrets]] for scripts.<br />
* B-07780: Chart [[QPR_ProcessAnalyzer_Chart#Variable_mappings|variable mappings]] has been removed - use the [[Chart_Linked_Settings|linked settings]] instead. Dashboards using variable mappings are automatically converted to use linked settings.<br />
* B-08117: Added ToSqlDataFrame function to convert in-memory dataframe into SQL dataframes.<br />
* B-08174: Only non-default parameters values are written to the operation log.<br />
* B-08200: Timestamps in System reports are shown in user workstation local time.<br />
* B-08171: Dashboard id has been added to queries, to track from which dashboard queries are originating.<br />
* B-07144: Remove legacy User permissions report (analysis number 11) and Filters report (analysis number 30) in SQL scripts (see note above).<br />
* B-08193: Added retry mechanism to QPR ScriptLauncher to recover if connection to server breaks.<br />
* B-08202: Updated copyright for year 2024.<br />
* B-08199: Frontend components have been updated.<br />
* B-08203: Backend components have been updated.<br />
* B-08209: Translations updated for release 2024.2.<br />
<br />
'''Fixed issues:'''<br />
* D-13972: Some measures/dimensions/columns in Big data chart didn't show the expressions level filtering.<br />
* D-14015: Fixed business calendar incorrect calculation when business period covered entire day.<br />
* D-14014: Fixed issue where Snowflake business calendar could not have end time as 00:00.<br />
* D-13962: System variable values were interpreted incorrectly when used in linked settings.<br />
* D-13971: HiddenInNavigation and SortOrder variables didn't work in navigation menu dashboards list.<br />
* D-13959: Removed possibility to add datatable columns with the legacy "any" data type.<br />
* D-13991: Improved drop-down selector component to handle empty strings as variable values.<br />
* D-13965: Datatable column name length was validated incorrectly which may have caused error in saving with too long column names.<br />
* D-13958: Project names showed unnecessary html escaping in the "Move to" menu.<br />
* D-13964: Model attributes and notifications dialogs gave error when trying to use dashboard tags.<br />
* D-13960: Added missing translations for list of permission list and 12-hour clock format.<br />
* D-13966: Fixed issue were root causes chart tooltip sometimes didn't disappear.<br />
* D-13969: Datatable column schema export sometimes showed empty for the key column.<br />
* D-13862: Session token was not accepted when url path capitalization is different.<br />
* D-13942: Datatable could not be dimensioned if it has column named "CaseId".<br />
* D-13980: Business calendar dialog crashed when tried to open it for a model without access.<br />
* D-13983: Notifications dialog didn't validate situation when same name was used in a measure and dimension.<br />
* D-13981: Dashboard import set incorrect model id to dashboard if there was no access to any model.<br />
* D-11276: Translations were missing for 12-hour clock dates (AM and PM) in dashboards.<br />
* D-13977: Multi-select dropdown lists showed some special characters incorrectly.<br />
* D-13945: Syncfusion toast message didn't work when text contains ${[]}.<br />
* D-13930: Pivot table throws javascript error when certain clicks.<br />
* D-13273: Duplicate datatable row count didn't shown correctly.<br />
* D-13994: There was an error in the in-memory chart with some flow related measures about duplicate variable names when same measure was defined twice.<br />
* D-13985: Models list dots menu had texts misaligned in narrow screens.<br />
* D-13995: In Workspace, wrong datatable was selected after duplication when non-default sorting was applied.<br />
* D-13997: Workspace tables column filtering search caused JavaScript errors.<br />
* D-13978: In table Excel export, the last row representing other items appeared incorrectly for in-memory chart.<br />
* D-14007: In System reports, model related selections are hidden from the Analyzed objects lists.<br />
* D-14005: In big data chart, changing to custom expression caused crash with some expressions having case/event attribute.<br />
* D-14003: When dimensioning was not used, pivot table values were incorrectly rounded in the server side.<br />
* D-14004: Removed empty filters from queries to optimize them.<br />
* D-13988: Fixed issue where data grid context menu rendered initially as too high.<br />
* D-13979: BPMN model editor element settings use now Open Sans font.<br />
* D-14013: Fixed incorrect expression "Duration between first and last occurrence" in big data chart event types.<br />
* D-13984: Fixed the error of refusing to run the JavaScript URL.<br />
* D-14031: ThrownObject property was not included to http error response when error came from the script.<br />
<br />
== QPR ProcessAnalyzer 2024.1 (build 4784) (released 2024-01-10) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue fixed in QPR ProcessAnalyzer 2024.2: In Big data chart, some measures, dimensions and columns have the filtering option missing. The issue concerns for example Duration between events, Path starting/until between specific events, and Cases where event occurs before other selections. Workaround is to set the filter in the chart json settings: the filter can be configured to another expression and copied to the correct expression.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
QPR ProcessAnalyzer Server and QPR ScriptLauncher are now using .Net 8 (previous was .Net 6). When updating to this release, install the .Net 8 Runtime ([[Updating_QPR_ProcessAnalyzer_Server|see more]]). The .Net 6 doesn't need to be uninstalled immediately because .Net 6 and .Net 8 work side-by-side, but due to security reasons, the unused .Net 6 should eventually be uninstalled.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In this release, all filters that don't contain any filter rules, are removed. These are legacy filters which have not been visible in the UI.<br />
</div><br />
<br />
'''Features:'''<br />
* B-08019: New component [[Design_Diagram|Design Diagram]] for showing user-created diagrams in dashboards where to visualize process mining metrics.<br />
* B-08087: Generic [[Dropdown_List_Selector|dropdown list selector]] works with Snowflake models allowing to add selection lists for any values.<br />
* B-08163: Linked settings support for binding to [[Chart_Linked_Settings#Binding_to_case_attribute_filters_with_attribute_name_and_attribute_values|case attribute filter values without defining case attribute name]].<br />
* B-08170: Snowflake model filters can be [[Filtering_in_QPR_ProcessAnalyzer#Filter_actions|saved as new models]] which can be used to create snapshots of part of models.<br />
* B-08093: Multiple dashboards can be exported to same file, and model can be set for imported dashboards.<br />
* B-08161: Added [[Datatable_in_Expression_Language#Modify|Modify]] function to change datatable properties and improved [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#CreateDatatable|CreateDatatable]] function for creating datatables.<br />
* B-08122: Added new system report to list dashboards.<br />
* B-08173: Removed legacy filters that didn't have any filter rules.<br />
* B-07961: In OperationLog, changed parameters to json format and added request id.<br />
* B-08069: Added DashboardId property to [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog]] in expression language.<br />
* B-08139: Added [[Datatable_in_Expression_Language#UpdateRows|UpdateRows]] function to update existing rows in datatables with similar logic than SQL update.<br />
* B-08115: Added [[Datatable_in_Expression_Language#DeleteRows|DeleteRows]] function to delete rows in datatables with similar logic than SQL delete.<br />
* B-08149: QPR ProcessAnalyzer has been updated to .Net 8.<br />
* B-08054: Changed Scripts property in generic context to return all scripts, instead of legacy system level scripts.<br />
* B-08138: Changed Synchronize function to remove all columns when no Snowflake table exists.<br />
* B-07689: For datatables, [[Datatable_in_Expression_Language#ForeignKeys|foreign keys]] to other datatables can be defined using expression language.<br />
* B-08176: Translation updates for release 2024.1.<br />
* B-08175: Workspace should show timestamps in user's local time.<br />
<br />
'''Fixed issues:'''<br />
* D-13913: Datatable properties dialog incorrectly showed linked models from other projects.<br />
* D-13916: Chart filter could not be defined for some expressions in Big data chart.<br />
* D-13933: Navigation menu selected item wasn't highlighted when used Snowflake models.<br />
* D-13906: In Conformance Analysis, deviating flows were not translated.<br />
* D-13907: Improved translation related to datatable properties dialog "Used by models" field.<br />
* D-13904: There was an unclear error message in Snowflake, as exception code 1 was returned without AttributeName and ModelName properties when non-existing attribute was in filter.<br />
* D-13911: Fixed small glitches in the opening and closing of drop-down lists.<br />
* D-13918: Datatable could be configured incorrectly to use table for other datatable.<br />
* D-13932: Duplicating datatable with custom table in datasource losed all data.<br />
* D-11002: Removed legacy in-memory prediction preset.<br />
* D-13912: Added check that array cannot be stored to dashboard Content property.<br />
* D-13936: Query designer default query didn't work with Snowflake models.<br />
* D-13938: There was an incorrect logging with some operations related to ScriptLauncher.<br />
* D-13923: Snowflake expressions didn't work with Where function in root referring to case attribute.<br />
* D-13939: ApplyFilter function gave null reference error for non-existing attribute name.<br />
* D-13931: There were issues with AllowExternalDatasources and EnableFullFunctionality settings.<br />
<br />
== QPR ProcessAnalyzer 2023.7 (build 4326) (released 2023-11-28) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Limitation for the maximum amount of data (B-07636) causes a behavior change in in-memory charts that have the Maximum rows settings empty and have the sorting defined. In certain cases, the order in which measures are evaluated changes (due to an internal performance optimization). If there are custom expressions that define variables, the variables may not be available in other measures anymore. As a resolution, either redefine the variables in those measure expressions or add those measures secondarily to the sorting.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Default query timeout of 30 minutes has been added for --#ImportOdbcQuery, --#ImportSqlQuery and --#ImportOleDbQuery commands. If a query run is taking longer than the timeout, the query is stopped. The timeout can be adjusted using the '''QueryExecutionTimeout''' parameter. Previously, there has been no timeout, so queries that take more than 30 minutes require configuring a longer timeout.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Incorrectly configured [[Chart_Linked_Settings|linked settings]] in charts (available in the ''Advanced'' tab) give now an error message, if they are referring to non-existing measures, dimensions or columns. Previously, incorrect linked settings were ignored. To fix the error message, remove the incorrect linked settings.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07511: Datatables have a [[Datatable_Properties_Dialog|dialog]] to view datatable properties, write description, set the Snowflake source table, add/modify/delete columns, and set the datatable key.<br />
* B-08150: Added setting [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|Apply chart filters first]] to determine whether chart filter rules or dashboard filter rules are applied first when chart queries are filtered.<br />
* B-08091: When filtering charts in Snowflake, case attribute filter is created instead of case id filter.<br />
* B-08091: [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|New setting]] to define whether cases or events are filtered by default.<br />
* B-08091: New preset "Looping paths" to detect whether there are repeating patterns of events.<br />
* B-08091: Duration between events calculation ignores negative durations in Snowflake.<br />
* B-08091: Chart loading animation has been renewed.<br />
* B-07636: To prevent dashboards from jamming when querying too much data, added [[QPR_ProcessAnalyzer_Chart#Available_Visualizations|limitations]] to the amount of data that charts can visualize. Note that the limitation concerns the aggregated data that is visualized, not the source event log data.<br />
* B-08017: [[Dashboard_in_Expression_Language|Dashboards API]] has been added to expression language, allowing to create, modify and delete dashboards in scripts.<br />
* B-08056: Following properties have been added to [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#User.2FGroup|user objects]] in expression language: IsLocked, LastLockedDate, LastLoginDate.<br />
* B-08053: [[Navigation_Menu#System_Reports|User rights report]] has been refactored to use [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property in the expression language. The change also simplifies the report as now it only shows the direct role assignments that are visible in the [[Manage_Users_and_Groups|User Management]].<br />
* B-08151: For Snowflake expressions support for following [[SQL_Expressions#Window_functions|windowing functions]]: sum, average, median, min, and max.<br />
* B-08050: When a model is created, the default filter is not created anymore (this is a refactoring that doesn't have any impact on user interface).<br />
* B-08123: Translation updates for 2023.7.<br />
* B-08092: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13876: In CreateSnowflakeConnection function, ProjectId parameter is optional when OdbcConnectionStringKey is not specified.<br />
* D-13898: Snowflake: Exclude case attribute filter didn't work when there was null values and was selecting at least two values.<br />
* D-13890: Fixed XES file import to work.<br />
* D-13894: Business calendar based duration calculation was incorrect in some durations that spanned to several weeks (for Snowflake and in-memory models).<br />
* D-13899: Using broken OdbcConnectionString in a datatable prevented the datatable from being deleted.<br />
* D-13883: Script run stucked after running a script with error that uses client-side ODBC import.<br />
* D-13879: SqlExpressionValue filter when excluding events didn't work with filter rule root expression only.<br />
* D-13896: Adding or removing columns to datatable didn't change the LastModifiedDate.<br />
* D-13882: User details weren't written to operation log when creating or modifying users.<br />
* D-13771: User rights system report didn't give error when changing columns.<br />
* D-13893: Some event filtering caused null pointer error when primary key had been defined.<br />
* D-13873: Fixed pivot table visual issues after component update.<br />
* D-13900: When adding, renaming or removing columns for Snowflake table fails, operation is now rolled back without any changes.<br />
* D-13866: Querying GET api/uielements was quite slow right after server start.<br />
* D-13864: Combinations of translatable and hardcoded strings didn't get translated in UI.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.6 (build 3933) (released 2023-10-24) ==<br />
<br />
'''Features:'''<br />
* B-08055: Error message for locked account has been replaced with generic error message, so that username enumeration is not possible.<br />
<br />
'''Fixed issues:'''<br />
* D-13884: Attributes dialog crashed with some older model configurations.<br />
* D-13843: In charts, selected case and event attributes switched away when attribute data type was ShortString.<br />
* D-13877: Some Snowflake expressions gave error "exceeds maximum length limit of 255 characters" when selecting lot of items.<br />
* D-13878: Snowflake expression filters for case attribute values didn't accept other than string type of case attributes.<br />
* D-13871: Some statistical calculations with percentages didn't work with Last Row Aggregates Over-limit Rows setting.<br />
* D-13875: Using some case level filters in a model without cases datatable didn't work.<br />
* D-13861: Dashboard opens are now logged to the Task log (i.e., calling GET /api/dashboards/{dashboardid}).<br />
* D-13870: Workspace projects hierarchy focused project showed light grey background making the project name not readable.<br />
* D-13867: When starting datatable refresh and going to other tab, went back to Datatables tab when query completed.<br />
* D-13853: If chart Custom Layout settings had extra series defined, chart may have crashed.<br />
* D-13869: Export as CSV button didn't work in the datatable contents dialog when dialog was still loading.<br />
* D-13872: Main progress spinner had unnecessary small scrollbar on top right.<br />
* D-13863: In the REST API method GET /api/users, password field (that has always been null) has been removed.<br />
<br />
== QPR ProcessAnalyzer 2023.6 (build 3847) (released 2023-10-17) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is removed in this release. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
'''Features:'''<br />
* B-07992: Added 10 new presets including Queue analysis, Four eyes principle, Self-looping events, and Path until selected event. There are also presets for Individual Cases Flow and Range of event type occurrences which use Gantt chart.<br />
* B-08011: Added following date related operations for Snowflake: Day of year, Day of month, Day of week, Week of year, Half-year only, Quarter only, Month only, Hours only, Minutes only, Seconds only, and Milliseconds only. These are available when calculating with date type of data.<br />
* B-08016: [[QPR_ProcessAnalyzer_Table#Table_actions|Table actions to set variables]] can also be opened to a new browser tab. Also improved user interface for table actions.<br />
* B-08018: For Snowflake expressions, added Flows aggregations FromEventType and ToEventType to get starting/ending event type, and FlowOccurrences aggregations FromEvent and ToEvent to get starting/ending event.<br />
* B-08001: Added [[Generic_Functions_in_QPR_ProcessAnalyzer#CallStoredProcedure|CallStoredProcedure]] function to call Snowflake stored procedures. This allows to start ETL transformation in Snowflake orchestrated by QPR ProcessAnalyzer script.<br />
* B-08013: Added [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property to expression language to replace the legacy UserPermissions analysis (11).<br />
* B-07976: Snowflake [[Filtering_in_QPR_ProcessAnalyzer_Queries#Expression|expression based filter rules]] support additional expression columns allowing more Big data chart expressions to be filterable.<br />
* B-08015: Big data chart doesn't anymore support calculation in SQL Server (using local datatables).<br />
* B-06270: Improved error messages and made them translatable by taking into use exception codes provided by server.<br />
* B-08021: Added possibility to store [[Diagram_in_Expression_Language|designed diagrams]] for models and expression language API for reading and modifying diagrams.<br />
* B-08037: Dropped following unused tables database: PA_IDEA, PA_IDEA_VOTE, PA_REPORT, PA_REPORT_SETTING, PA_SESSION_SERVICE, PA_VIEW_FILTER_RULE, PA_VIEW_FILTER_RULE_PARAMETER.<br />
* B-08052: Language translations have been updated to 2023.6.<br />
* B-08051: Frontend side components have been updated.<br />
* B-08034: Backend side components have been updated.<br />
<br />
'''Fixed issues:'''<br />
* D-13830: Object counts indicator in header showed incorrect counts when there was disabled filter rules in Snowflake models.<br />
* D-13833: In-memory charts didn't work with boolean type of dimensions when filtering with the false value.<br />
* D-13858: Target value measures didn't update chart when controlled using an on-screen setting.<br />
* D-13827: Calculated attributes data type was incorrectly set as Any by the Attributes dialog.<br />
* D-13849: Multiselect list search didn't allow spaces.<br />
* D-13829: Multiselect dropdown lists height jumped couple of pixels when selecting values.<br />
* D-13835: Deselecting a selected data point didn't remove chart filter rule.<br />
* D-13702: Improved Snowflake query performance in situations when there are lot of filter rules (by decreasing number of CTE's).<br />
* D-13819: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13820: Fixed incorrect manifest.json file to avoid "not found" errors when fetching web site icon.<br />
* D-13865: Break, continue, and return statements didn't work properly when called from inside a catch block.<br />
* D-13795: There was a Python error in clustering analysis with Snowflake model.<br />
* D-13823: Some tooltips in Workspace project hierarchy didn't work and caused a JavaScript error.<br />
* D-13824: BPMN editor align context menu layout looked strange.<br />
* D-13813: QPR logo button in the top left was misaligned in Firefox.<br />
* D-13797: Snowflake query may have given following error when using sampling: ambiguous column name '_EventType_NotNull_1'.<br />
* D-13774: TakeSample function with certain columns caused SQL compilation error: ambiguous column name 'Case Name'.<br />
* D-13782: Snowflake: Aggregating from variations didn't work when using sampling.<br />
* D-13836: Some tooltips had a strange two-colored background.<br />
* D-13834: Removed Model statistics column from clustering and root causes analysis.<br />
* D-13860: Removed filter button from the custom expressions in Task log analyzed objects.<br />
* D-13838: Removed Split data by filtering column from clustering analysis.<br />
* D-13832: Script and model status updates incorrectly sent next update when previous was still pending.<br />
* D-13839: Charts reset zoom button font size was too small.<br />
* D-13817: Importing data to Snowflake datatable with Append=0 doesn't now drop the underlying Snowflake table.<br />
* D-13825: Some models could not have been deleted from recycle bin.<br />
* D-13852: Recycle bin Projects and Models tab didn't show correct content when Recycle bin only contained either models or projects.<br />
* D-13841: In-memory chart Data type selection type has been corrected to string.<br />
* D-13842: Second time and Third time selections has been hidden in in-memory chart measures.<br />
* D-13850: In Chrome, there were console errors related in incorrect text field autocomplete type and text field without form.<br />
* D-13847: Improved browser side performance by removing unnecessary operations.<br />
* D-13859: Chart without dimensions showed an unnecessary Remove dimension button.<br />
* D-12598: When script is stopped in server, ScriptLauncher could still incorrectly continue to import data.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.5 (build 3334) (released 2023-09-07) ==<br />
<br />
'''Fixed issues:'''<br />
* D-13826: Measures or dimensions with case or event attribute and value selections incorrectly removed calculated attributes when dashboard was opened or chart settings were changed.<br />
* D-13821: Font size of some Highcharts tooltips was too small. Issue appeared when there were tooltips mappings in measures or dimensions.<br />
* D-13810: Simplified help links: now all Help buttons go to the QPR ProcessAnalyzer wiki main page.<br />
* D-13822: Snowflake clustering analysis showed empty strings and nulls as case attribute values in an unclear way as just nothing.<br />
<br />
== QPR ProcessAnalyzer 2023.5 (build 3304) (released 2023-09-05) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In Big Data Chart, the '''Case conformance''' measure and dimension has changed in a way that now it provides boolean values (true/false) instead of integer values (1/0). If [[Measure,_Dimension_and_Column_Settings#Other_settings|colorMappings]] are used for this measure or dimension to set specific colors to visualize conformant and nonconformant cases, the mapped values need to be changed as follows: '''1''' -> '''true''' and '''0''' -> '''false'''. Without the change, the mapped colors are not effective.<br />
<br />
Exmaple: Old configuration:<br />
<pre><br />
"colorMappings": {<br />
"1": "#36d475ff",<br />
"0": "#f5403bff"<br />
}<br />
</pre><br />
New configuration:<br />
<pre><br />
"colorMappings": {<br />
"true": "#36d475ff",<br />
"false": "#f5403bff"<br />
}<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is deprecated. Big data chart has allowed to process data both in Snowflake and SQL Server. Now the support for SQL Server is deprecated and the Big data chart will only support calculation in Snowflake. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). The OperationLog analysis is replaced by the [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog function]] and the Infcluencers analysis is replaced by the [[FindRootCauses_Function|FindRootCauses function]].<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [12, 14, 15, 16, 29];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
By default, Snowflake ODBC driver generates quite much logging to files which might unnecessarily fill up the disk space. It's recommended to set the LogLevel parameter to value 0. The path where the logs are created can be seen in Windows registry (key LogPath). More information about configuring Snowflake ODBC parameters: https://docs.snowflake.com/en/developer-guide/odbc/odbc-parameters.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07971: Machine learning based [[Clustering_Analysis|Clustering analysis]] can be run in Snowflake.<br />
* B-07989: In dashboard designer the stacking order of charts can be changed with buttons [[QPR_ProcessAnalyzer_Dashboard_Designer#Viewing_and_Editing_Dashboards|Bring to front, Send to back, Bring forward and Send backward]].<br />
* B-07977: For [[Sankey_Chart|sankey diagram]], added Start level and End level mappings to define custom start and end level for the sankey flows. Implemented also color mappings to define specific colors for specific values.<br />
* B-08010: To improve performance, charts are loaded and updated only when they are visible in the dashboard.<br />
* B-07975: Added following [[SQL_Expressions#Date_functions|date related functions]] to Snowflake: DayOfYear, DayOfWeek, WeekOfYear, Quarter.<br />
* B-07908: When [[QPR_ProcessAnalyzer_Project_Workspace#Duplicating_Model|model is duplicated]], also filters in the model are also duplicated.<br />
* B-07904: Filters and models API for expression language has been completed.<br />
* B-07991: In [[Filter_Selectors|case and event type filter selectors]], threshold whether the dropdown list or search dialog is shown can be defined using the ''Maximum Rows'' setting. Also the search dialog filters search results by other filter rules in the dashboard.<br />
* B-07999: Filters report has been changed to use the [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|expression language API for filters]].<br />
* B-07540: Added [[QPR_ProcessAnalyzer_Expressions#Throwing_objects|throw statement]] to expression language.<br />
* B-07813: UI components are updated. There are small visual improvements, such as in flowchart flows are routed a bit differently and in charts the hidden series is shown as strike-through in the legend.<br />
* B-07963: Following legacy analysis types have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29) (see more information in the note above).<br />
<br />
'''Fixed issues:'''<br />
* D-13777: Filters could not be created in charts when "Update Filter During Selection" setting was disabled.<br />
* D-13767: Automation per Event Types preset in in-memory incorrectly showed only one event type.<br />
* D-13756: Changing background color in KPI card didn't have any effect.<br />
* D-13812: "Exclude events" was incorrectly translated to "Exclure les cas" in French.<br />
* D-13815: Dashboard designer background grid was not visible in entire area in edit mode. Improved also the grid to match to snapping in move and resize.<br />
* D-13674: Business calendar dialog layout was incorrect when a model with a long name was selected to copy holidays.<br />
* D-13811: Table actions link to a new window didn't go to dashboard if there were other parameters in the link.<br />
* D-13601: Fixed issue where some presets may have given error when attribute value selection and the automatically selected attribute conflicted by the data type.<br />
* D-13753: While Snowflake model was selected, in Filters and User Rights reports the Columns list could not be opened.<br />
* D-13720: Now table column filter and sorting are preserved when resizing or zooming page.<br />
* D-13785: In tables increased number of rows to 20000 that are inspected to get available items shown in Excel-style column filter.<br />
* D-13759: Some statistical calculations had bad performance with large number of rows.<br />
* D-13787: Conformance statistics component didn't have scrollbars when text didn't fit to the visible area.<br />
* D-13788: In-memory "Nonconformance reason" selection caused error when two of them was selected in the same chart.<br />
* D-13783: When Analyzed objects was Generic analysis, column selection incorrectly caused "Analysis has not been selected" error.<br />
* D-13776: When measure name contained quotation mark, notification preview didn't work.<br />
* D-13747: Filtering with integer type of case id with case attribute value filter caused error in Snowflake.<br />
* D-13791: In Firefox, model selection in chart settings didn't show models in the first open.<br />
* D-11984: Recycle bin buttons didn't fit to the screen when screen width was small.<br />
* D-13780: Using CaseId case attribute in clustering analysis did not work with Snowflake 106 cases standard model.<br />
* D-13781: Clustering analysis produced Python error with a certain simple Snowflake model.<br />
* D-13730: Snowflake: Case attribute filtering didn't work when there are cases without row in cases table.<br />
* D-13803: There was chart configuration validation error in browser console when measures were moved into dimensions in Big data chart.<br />
* D-13758: There was performance issue with the Recent tasks system preset.<br />
* D-13793: Snowflake clustering failed when cluster count is larger than case count.<br />
* D-13763: SQL expression based filter rule with Where function to filter events didn't filter anything in Snowflake.<br />
* D-13804: Added missing Millisecond function to Snowflake.<br />
* D-13772: Expression EventLog.Cases.Events caused error "Value cannot be null".<br />
* D-13755: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13739: When switching between System reports there was error: "Uncaught Error: 2nd dimension not found. at y.getExpressionConfiguration".<br />
* D-12109: Sometimes flowcharts showed message "Error in querying event type measures. Input string was not in a correct format".<br />
* D-12473: Cost Savings by Automation preset gave sometimes error "Unable to cast object of type 'System.Double' to type 'System.String'".<br />
* D-13750: Snowflake model didn't work with the Case Duration vs. Manual Activities preset.<br />
* D-13657: There was error converting data type nvarchar to bigint.<br />
* D-13796: Some Snowflake operations didn't work with zero rows and columns.<br />
* D-12494: Now when chart size changes, the table column filters and sorting are preserved.<br />
* D-13736: In Performance benchmarking dialog, the Export result button exported wrong benchmark performance analysis result.<br />
* D-13609: Improved conformance analysis related filter names.<br />
* D-13594: Recycle bin buttons were not visible when opening recycle bin in a narrow screen.<br />
* D-13226: Tooltips in the model properties dialog are now translated.<br />
* D-12569: Table incorrectly showed ellipsis for narrow boolean type of columns showing checkboxes.<br />
* D-13391: Emptying date or datetime picker value was not registered and it didn't trigger functionality.<br />
* D-12621: Value search dialog didn't work with values containing backslashes.<br />
* D-13796: Some Snowflake operation didn't work with zero rows/columns.<br />
<br />
== QPR ProcessAnalyzer 2023.4 (build 2628) (released 2023-06-14) ==<br />
<br />
'''Features:'''<br />
* B-07767: Added [[Gantt_Chart|Gantt chart]] to visualize timeline of cases and events divided into swimlanes.<br />
* B-06383: Added [[Sankey_Chart|Sankey chart]] to visualize flow from one set of values to another.<br />
* B-07941: Implemented many more presets running in Snowflake models for compliance and operational excellence use cases. There are also presets for the path analysis and process bottlenecks identification.<br />
* B-07864: Snowflake conformance analysis shows now [[Conformance_Analysis#Top_Deviations_(in-memory)_/_Deviating_Flows_(Snowflake)|reasons for conformance deviations]], such as which event occurrences deviated from the design model.<br />
* B-07909: Snowflake conformance analysis visualizes [[Conformance_Analysis#Undesired_Events_(Snowflake)|undesired event types]] in table and flowchart.<br />
* B-07823: Flowchart Bottlenecks preset has been changed to show bottlenecks for event types. Also renewed the [[QPR_ProcessAnalyzer_Logs#Task_Log|Tasks reports]] to use expression language based interface.<br />
* B-07891: User interface has been [[Languages_and_Localization|translated into Portuguese]].<br />
* B-07873: Improved [[QPR_ProcessAnalyzer_Pivot_Table|pivot table]] visual layout to highlight totals and aggregated rows. Also the row titles are now visible in the top left.<br />
* B-07905: Added [[SQL_Expressions#Rank_functions|Rank related functions]] to Snowflake for writing more versatile custom KPI's, e.g., FirstValue, LastValue, NthValue, Lead and Lag.<br />
* B-07912: Added more SQL expression [[SQL_Expressions#Array_functions|array functions ArrayToString and ArrayOverlap]] to Snowflake.<br />
* B-06449: Added SQL expression functions ToTimestamp and TryToTimestamp for parsing timestamps from strings using provided format.<br />
* B-07959: Added new functions Base64Encode and Base64Decode to help using basic HTTP authentication when calling web services.<br />
* B-07206: SQL expressions support data [[SqlDataFrame_in_Expression_Language#WithClusterColumn|clustering]] which is an unsupervised machine learning algorithm to group data based on similarities.<br />
* B-07848: Data can be extracted from SAP using the encrypted [[Importing_Data_from_SAP#SNC_encrypted_connection|SNC connection]].<br />
* B-07903: Added expression language API to create and modify filters and models.<br />
* B-03103: [[QPR_ProcessAnalyzer_Logs#Task_Log|Task log]] (operation log) can be accessed in expression language.<br />
* B-07872: List aggregation with Distinct=true orders now items by their value.<br />
* B-07940: Removed "Count" aggregation from textual values in Big data chart (you can use the Case count, Event count, etc. selection instead).<br />
* B-07757: Backend support for datatables linking to user-definable Snowflake database, schema and table.<br />
* B-07825: Improved error message when trying to use non-existing attributes in Snowflake queries.<br />
* B-03101: To expression language, added try-catch-finally statement to handle thrown exceptions.<br />
* B-07861: Removed available and total virtual memory information from User settings dialog.<br />
* B-07902: Optimized sequences of joins in Snowflake queries to improve performance.<br />
* B-07837: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13709: If image width-to-height ratio was lower than container's ratio, image was incorrectly stretched to fit the container.<br />
* D-13660: Disabling filter rules didn't work in Snowflake models.<br />
* D-13526: Passing dataframes from SQL scripts to expression scripts didn't work.<br />
* D-13661: Snowflake conformance analysis crashed when there was no access to conformance related Snowflake UDF's.<br />
* D-13693: Resolved major Snowflake conformance analysis performance issues in the BPMN model handling.<br />
* D-13716: Snowflake root causes analysis incorrectly bypassed Snowflake cache.<br />
* D-13707: In SQL Scripting, the datatable analysis (number 18) didn't always copy the data table contents to the target table correctly.<br />
* D-13653: Big data flowchart Root causes preset showed incorrect legend.<br />
* D-13626: Flowchart froze when converting into big data flowchart and vice versa by modifying chart json settings.<br />
* D-13656: Root causes for attribute gave error "Failed to compare two elements in the array" in some situations.<br />
* D-11563: Pivot table had a minimum height of 300px, which caused bottom part of it to be out of view.<br />
* D-13704: In CSV file import, parsing now allows spaces between column separator and text quotation mark.<br />
* D-13598: Chart gave unclear error message when events datatable was not defined.<br />
* D-13655: Improved error messages for BPMN editor and conformance statistics.<br />
* D-13528: Error message for certain erroneous SQL expressions was unclear.<br />
* D-13677: "Flow occurrences with specific case attribute value" selection didn't work for in-memory chart.<br />
* D-13663: Pivot table border line was slightly broken in the header area.<br />
* D-13608: There was incorrect alignment of items in the table paging controls.<br />
* D-13703: Importing CSV file with some special characters to Snowflake failed (due to incorrect escaping in Snowflake staging files).<br />
* D-13708: Duplicating datatable using user defined table, removed data the source table.<br />
* D-13717: Dependency wheel crashed when there were zero weights and showing data labels.<br />
* D-13348: There was an unclear error message when Snowflake query had a certain incorrect expression.<br />
* D-13732: Pivot table Excel export contained headers formatted incorrectly.<br />
* D-13729: There was a JavaScript error when limited user tried to access business calendar.<br />
* D-13662: Percentile function didn't always work with timespan types.<br />
* D-13646: Using incorrectly configured model without cases datatable caused null reference error.<br />
* D-13629: When tried to use chart with a non-existing model, there is now a proper translated error message.<br />
<br />
== QPR ProcessAnalyzer 2023.3 (build 1990) (released 2023-05-03) ==<br />
<br />
'''Features:'''<br />
* B-07818: [[Conformance_Analysis|Conformance analysis]] is supported in Snowflake with following dashboard components: Big data chart, BPMN editor, Conformance statistics, and Design model selector.<br />
* B-07833: [[Root_Causes#Root_causes_in_flowchart|Root causes analysis for flowchart]] is available for Snowflake showing how the event and flow occurrences explain selected phenomena.<br />
* B-07786: Big data chart has more [[Big_Data_Chart#Measure_aggregations|measure aggregations]], such as median, percentile, standard deviation and variance. Also for textual items, unique values can be listed.<br />
* B-07795: [[QPR_ProcessAnalyzer_Table#Conditional_formatting|Conditional formatting]] supports also columns with non-numerical contents.<br />
* B-07830: [[Big_Data_Chart#Measure_aggregations|None and Any aggregations]] for Snowflake and user-friendly formatting for conformance violations.<br />
* B-06527: Error messages in [[Importing_Data_to_Datatable_from_CSV_File|CSV file import]] show also the column number to help working with CSV files with lot of columns.<br />
* B-07747: In-memory conformance checking accepts design models with multiple tasks having same name (same is followed by the Snowflake implementation).<br />
* B-07659: In-memory flowchart preset Case Conformance to visualize conformance checking violations.<br />
* B-07571: Added function IsConformant to backend to check whether cases are conformant.<br />
* B-07863: Added function ConformanceViolationsFlows to backend to return nonconformance reasons for violating cases.<br />
* B-07844: Support for "array" aggregation to return aggregated items as array.<br />
* B-07856: Support for creating and accessing arrays and objects in SQL expressions.<br />
* B-07860: Array handling functions and Tasks property for DesignModel entity.<br />
* B-07847: Added throttling for QPR ScriptLauncher client-side imports to limit memory usage.<br />
* B-07811: Snowflake query optimization to omit columns that are not used by the query.<br />
<br />
'''Fixed issues:'''<br />
* D-13632: Going from variations to event types led to very poor performance with certain models.<br />
* D-13628: Statistical calculations were incorrectly not applied in chart CSV export.<br />
* D-13575: SQL script may have given error "Operand type clash: nvarchar(max) was incompatible with sql_variant".<br />
* D-13597: UI supports now datatable column type "ShortString" (previously datatable contents preview and CSV import didn't work).<br />
* D-13536: Using business calendar sometimes gave error "System.InvalidOperationException: Collection was modified".<br />
* D-13477: Chart types without y-axis mapping caused an error when series mapping was used.<br />
* D-13453: _model variable was not available for Snowflake expression filter rules.<br />
* D-13527: Checkbox height didn't increase when long label needed to span to multiple lines.<br />
* D-13363: Snowflake query with EvaluateAfterAggregations and IsHidden failed when dimensioning by case id column.<br />
* D-13383: Snowflake query gave error "Invalid column name 'FromCase Name'".<br />
* D-13523: Request id was incorrectly shown as zeros in error messages.<br />
* D-13541: In CSV import, error message for maximum number of columns exceeded is improved (maximum is 300 column for SQL Server).<br />
* D-13583: Objects count in header didn't work for empty Snowflake model.<br />
* D-13553: Larger pacm files can now be imported, as there isn't error "Request body too large. The max request body size is 30000000 bytes".<br />
* D-13306: Stack overflow error was given when using SqlDataFrames.<br />
* D-13487: When Flows root and there was filter in Values expression, some flows were lost.<br />
* D-13540: SqlDataFrame query with 300 columns failed to error "WithExpressionColumn: No name given for the new column".<br />
* D-13429: Ordering in List aggregation couldn't find columns in dataframe query.<br />
* D-13406: Dataframe query with root FlowOccurrences and get value from cases caused error.<br />
* D-13538: There was incorrect handling of escaping characters in column names used in dimensions.<br />
* D-13633: Fixed ordering in List aggregation with null and empty values.<br />
* D-13636: Query that dimensions by numeric case attribute with AggregateOthers true, caused error.<br />
* D-13589: Creating Snowflake datatable did not connect to Snowflake.<br />
* D-13623: Value expressions without aggregation didn't work with AggregateOthers setting.<br />
* D-13554: In in-memory chart, percentile function might have return both Int64 and Double type of objects which cannot be sorted.<br />
* D-13481: Improved error message when trying to use deleted model.<br />
* D-13621: Dynamic value search dialog had incorrect font in lists.<br />
* D-13610: Some invalid BPMN files crashed BPMN editor.<br />
* D-13614: Checkbox label texts overflowed to right.<br />
* D-13520: Removed excessive parameters from the Query Designer for generic context queries.<br />
* D-12998: QPR icon was incorrectly positioned in header in Safari.<br />
* D-13480: Import to duration data type is removed from Snowflake datatables, and for local datatables duration type maximum size is checked.<br />
* D-13517: In Highcharts-based visualizationsm conditional formatting didn't work for other than the first y-axis mapping.<br />
* D-13529: In some presets containing several on-screen settings, when chart showed in error message, on-screen settings showed invalid selection.<br />
* D-13530: Opening dropdown list caused JavaScript error when the list contents should be empty after it previously contained items.<br />
* D-13486: Removed unreachable error message in CSV import.<br />
* D-13524: Fixed in-memory chart flow occurrences root measures "Event attribute (text)" and "Event attribute (number)" that caused error.<br />
<br />
== QPR ProcessAnalyzer 2023.2 (build 1478) (released 2023-03-22) ==<br />
<br />
'''Features:'''<br />
* B-07755: [[Business_Calendar|Business calendar]] for duration calculation is available for Snowflake models.<br />
* B-07719: In Snowflake dashboards, [[Big_Data_Chart#Using_measure_variables|measures can be assigned to variables]] and use the variables in other measures to create combined measures.<br />
* B-07746: Changed in-memory conformance checking to not show invalid flow violations where starting or ending event type is invalid.<br />
* B-07743: [[PA_Configuration_database_table#General_Settings|Default datasource]] can be configured for datatables created by scripts, allowing to set Snowflake as default.<br />
* B-07740: System memory indicator moved from the header to User settings Version information dialog.<br />
* B-07776: New SQL expressions functions Unicode, Char and Regexp, as a basis for future rule-based process mining.<br />
* B-07741: Backend support for aggregation operations Median, Percentile, Stdev, Stdevp, Var and Varp to Snowflake.<br />
* B-07742: Backend support for aggregation operation to list unique items in Snowflake.<br />
* B-07770: Optimized Snowflake SQL generation by combining consecutive WithColumn function calls into one select.<br />
<br />
'''Fixed issues:'''<br />
* D-13491: QPR ProcessAnalyzer server crashed now and then when sorting was in progress and the query was cancelled.<br />
* D-13380: Dimensioning integers in in-memory core calculation didn't work correctly as 0 and -1 were put to same bucket.<br />
* D-13385: In Workspace Bin, Delete Forever and Restore from Bin buttons were misaligned.<br />
* D-13332: Conformance checking didn't show in violations when there were multiple undesired events in same case.<br />
* D-13405: Images take now always all available space in image component area.<br />
* D-13417: KPI card without title was slightly misaligned vertically.<br />
* D-13438: Clicking selected event type or flow in flowchart didn't cancel the filter selection.<br />
* D-13350: Task log and Script log default filter end date is now empty by default.<br />
* D-13381: Disabled browser auto-complete from flowchart variation stepper and Workspace create/rename object dialog.<br />
* D-13347: Improved performance for in-memory business calendar calculation.<br />
* D-13335: In in-memory chart, filtering didn't work in "Flow occurrences" root "Flow occurrences with specific event attribute value" dimension.<br />
* D-13367: Percentage value wasn't displayed properly with German or Spanish language when event types were shown in object counts indicator.<br />
* D-13451: Exported filter file is now named based on selected filter name.<br />
* D-13378: In Big data chart, prevented error "Unable to aggregate from level RootCauses to level Custom".<br />
* D-13293: DataFrame query with root Flows and IncludeEvents and ExcludeEvents filter rules failed.<br />
* D-13370: Fixed issue where on-screen settings that didn't have any selectable items, showed a strange selection.<br />
* D-13392: Clustering analysis was incorrectly shown when originally in-memory chart was converted into big data chart by changing chart json settings.<br />
* D-12784: Some Snowflake queries incorrectly bypassed Snowflake caching because they used unique object names.<br />
* D-13456: Improved error messages for incorrectly configured on-screen settings.<br />
* D-13445: Conformance violations related translated terms have been fine-tuned for better translations into different languages.<br />
* D-13421: Improved error messages when trying to use model having some column mappings missing.<br />
* D-13485: Snowflake business calendar gave error when calendar contained Sunday.<br />
* D-13218: Windows event viewer incorrectly contained log entries that are not errors.<br />
* D-12634: Multiline text boxes width is set to non-changeable.<br />
* D-13034: Confirmation dialog to delete items permanently has been updated.<br />
* D-13288: In dialogs, the Create button didn't show the disabled state correctly.<br />
* D-13427: When dropdown lists didn't have any selectable items, the "N/A" text appeared and the list incorrectly took more space vertically.<br />
* D-13483: In Workspace, the new items menu was too narrow for Spanish texts.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.1 (build 1449) (released 2023-02-24) ==<br />
<br />
'''Features:'''<br />
* B-07690: System setting [[PA_Configuration_database_table#General_Settings|DatabaseId]] can be defined by administrator to get more simple table names in Snowflake.<br />
* B-07737: In flowchart Bottlenecks preset, originally used flow colors has been recovered.<br />
* B-07748: For Analyzed objects "Conformance checking findings" in charts, terminology has been revised and issue with the case count calculation fixed.<br />
* B-07663: In [[Chart_On-screen_Settings|on-screen settings]], when case/event attribute is selected, related attribute values list are reset.<br />
* B-07570: Backend support for [[Business_Calendar|business calendars]] in Snowflake.<br />
* B-07660: Backend support for conformance checking to show also the last event index and event type in NotCompleted reason.<br />
* B-07610: Memory counter related technical properties have been removed from expression language.<br />
<br />
'''Fixed issues:'''<br />
* D-13349: Opening dashboard containing Root causes preset with default settings jammed the system by generating lot of calculations (for more information, see previous release notes).<br />
* D-13277: Stacked charts with date type of data as series did incorrectly show gaps in columns/bars.<br />
* D-13270: Flowchart conditional formatting didn't work with duration multi-unit format.<br />
* D-13358: Calculation results caching works also across different user sessions.<br />
* D-13250: Dashboard with two charts connected with linked settings using variables ended up to to a never ending loop.<br />
* D-13230: SAP import did not automatically create columns to use the correct column types.<br />
* D-12857: Deeply recursive functions caused a crash without any trace.<br />
* D-12994: In Workspace, some buttons were not clickable due to breadcrumb covering them.<br />
* D-13249: In Workspace, there was incorrect error message for duplicate datatable names when there were items with only letter capitalization was different.<br />
* D-13232: In-memory chart Top variations preset is now sorted secondarily by average duration descending.<br />
* D-13300: Setting DashboardFilter variable to empty value didn't have any effect in dashboard but old value was incorrectly used.<br />
* D-12834: Limited the maximum number of dimensions to 20, to avoid too demanding queries for SQL Server.<br />
* D-12917: Changed visual indication of missing items in dropdown lists (it's no longer showing "***").<br />
* D-13111: In Root causes preset, there is now error message when trying to use weighting related columns when weighting isn't in use.<br />
* D-13124: SQLDataFrame query containing filter rule EventTypes aggregating from cases failed.<br />
* D-13207: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed.<br />
* D-13292: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed (rev.2).<br />
* D-12991: Dropdown list texts had some translations missing.<br />
<br />
== QPR ProcessAnalyzer 2023.1 (build 1433) (released 2023-02-07) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release contains a potentially severe issue, where some dashboards completely jam the system by generating lot of calculations. The issue may appear in dashboards that have been created in earlier releases and containing the Root causes preset with default settings. The issue will be fixed by the next release. The issue can be worked around by exporting the affected dashboard, modifying the dashboard file manually and importing the dashboard back. The required modification is to remove line(s) containing <pre>"preset": "RootCauses"</pre> and the comma from the preceding line.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Cases (analysis number: 5), Events (6), and EventTypes (7). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). Note that the legacy analyses removal don't affect the dashboarding functionality.<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [5, 6, 7];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2023.1, the '''.NET Desktop Runtime''' is not needed anymore for QPR ProcessAnalyzer Server, so it can be uninstalled. Also for QPR ScriptLauncher, ''.NET Desktop Runtime'' is not needed, but instead install the '''.NET Runtime''' (which is more lightweight). ''.NET Desktop Runtime'' contains the ''.NET Runtime'', so the actions are not mandatory when updating to QPR ProcessAnalyzer 2023.1.<br />
</div><br />
<br />
'''Features:'''<br />
* B-06997: Expression-based filter rules for Snowflake dashboards to allow versatile filtering and filtering from custom expressions.<br />
* B-07383: Improvements to linked settings to allow binding to variables, tags and filter rules [[Chart_Linked_Settings|(more information)]].<br />
* B-07508: Flowchart preset colors have been renewed to be more intuitive.<br />
* B-07184: Automation preset in flowchart has now options for selecting the Automation attribute and value.<br />
* B-07512: Changed datatable metadata can be refreshed from Snowflake, and all rows in the datatable can be deleted easily in Workspace [[QPR_ProcessAnalyzer_Project_Workspace#Datatables|(more information)]].<br />
* B-07440: Date when the release was made is now shown in User settings.<br />
* B-07595: WeekOfYear property for DateTime objects in expression language to get the week number of a year (between 1 and 53).<br />
* B-07623: In-memory expression language functions Random (to get random numbers) and Hash (to get hash value of string).<br />
* B-07612: Breadcrumb in Workspace has now a Home button to quickly navigate to the top level of the projects hierarchy.<br />
* B-07637: Language selector now shows the language options in local languages.<br />
* B-07228: Remove following deprecated analyses: Cases, Events, and EventTypes (see the release note above).<br />
* B-07538: Backend support: Snowflake root causes analysis can find event attribute related root causes.<br />
* B-07706: Backend support: Snowflake expression-based filter rules support for roots containing Where function.<br />
* B-07611: Removed following legacy filter rules: CaseAttributeTrend, EventAttributeTrend, EventTypeTrend, and Duration.<br />
* B-07598: Refactored client-side import for SQL scripting to use generic client-side task mechanism.<br />
* B-07716: ShortString columns are now properly detected in SQL Server queries.<br />
* B-07652: Now it's possible to pipe multiline expression strings to QPR ScriptLauncher.<br />
* B-07688: AddColumns function for Datatables to create multiple columns in one call.<br />
<br />
'''Fixed issues:'''<br />
* D-13092: Table conditional formatting didn't work when color code was fetched from other column.<br />
* D-13105: Some charts created in earlier release referring to non-existing presets names appeared as empty after software update.<br />
* D-13107: Flowcharts crashed and showed loading animation forever when setting color or flow thickness to non-numerical measure.<br />
* D-13104: In BPMN model editor, context menus to edit elements didn't appear.<br />
* D-12939: Script editor tabs Close buttons didn't work.<br />
* D-13154: "Search by case ID" didn't work in in-memory chart.<br />
* D-12933: CSV columns with only empty values were incorrectly auto-detected as integers.<br />
* D-12929: In-memory chart Root causes for case duration and Root causes for case attributes (weighted) had Custom expression missing.<br />
* D-12928: Pivot table headers were empty when there were two column levels and two values.<br />
* D-12924: Pivot table columns with Count and Distinct Count aggregations are now numeric and aligned right.<br />
* D-13033: Changing colors in chart settings Color palette caused "Item already exists" error and prevented changing colors.<br />
* D-12996: Tags referring to dashboard variables didn't work in Additional root expression.<br />
* D-12877: UI gave error in some situations: Uncaught TypeError: Cannot read properties of undefined (reading 'min').<br />
* D-13071: Prevented selecting two or more of the Y-axis, X-axis and series mappings at the same time for the same measure or dimension.<br />
* D-12895: Big data chart crashed when on-screen setting contained event type selector and there were no event type filter set.<br />
* D-13231: Tooltips for dashboard name, model selector and filter selector in header show now the content text instead of generic instruction.<br />
* D-13139: There was an error when tried to create filter for a custom expression where selected data type didn't match with the actual type of data.<br />
* D-12988: Chart presets selection in chart settings showed unnecessary tooltip.<br />
* D-12901: When set sampling over 1 million, Snowflake models gave error: parameter value out of range: size of fixed sample. Must be between 0 and 1,000,000.<br />
* D-12904: Creating expression filter having lower/greater logic with root objects sampling failed.<br />
* D-12923: Chart schema didn't accept pivotAggregation in dimensions/columns.<br />
* D-12926: Root causes columns Selected weight, Compared weight and Total weight have now correct float data type.<br />
* D-12880: In out-of-the box dashboards, chart titles and subtitles were not translated.<br />
* D-12916: Improved filter rule description text in Filter rule editor dialog for expression filter rules.<br />
* D-12889: No clear error message was given when user tried to export corrupted model from .pacm file.<br />
* D-12869: Date selector in on-screen settings had inconsistent vertical alignment.<br />
* D-12938: When creating a filter with lasso and selecting a single data point only, "equals" kind of filter rule is now created.<br />
* D-12989: "Running tasks as specific time" system report may have ended up in loop causing following error: Maximum call stack size exceeded error.<br />
* D-13010: Pivot table sometimes ended up to never-ending resizing loop when browser zoom was more than 100%.<br />
* D-12790: Expression language: DataFrame.SetColumns: Initializing and using variables defined in closure of SetColumns function parameter didn't work<br />
* D-12927: All on-screen settings were not be visible in narrow charts having several on-screen settings.<br />
* D-12937: Added maximum value limitation to several number input fields in charts.<br />
* D-12947: Message dialog didn't show line breaks correctly (e.g., in CSV file import).<br />
* D-12948: Defining column setting caused error when Measure Expression was not defined.<br />
* D-12946: Filter rule text couldn't be seen entirely from tooltip.<br />
* D-12983: When range filtering using integer values in Highcharts chart, filter is now shown as integer value.<br />
* D-12984: When range filtering in Highcharts charts and there is category axis, filter rule is now based on individual (category) values.<br />
* D-12930: When creating filters from charts using date type of X-axis with lasso, "greater than or equal" and "less than or equal" filter rules are not created.<br />
* D-12920: "Where" function in DataFrame lost column data types of the original DataFrame.<br />
* D-13048: Model notifications failed with certain measures that define variables in root expression leading to error: Variable "sampleSize" already exists in this context.<br />
* D-13116: BPMN editor had some translations missing.<br />
* D-13019: Datatable and script selectors show now datatable/script name instead of id, when opening selector having existing selections.<br />
* D-12951: Changing additional root expression in flowchart didn't refresh the flowchart.<br />
* D-13147: Filter rule boxes in header had different widths, and Add filter rule button vertical alignment was incorrect.<br />
* D-12907: Sometimes case attribute selection showed incorrect attribute name for empty model.<br />
* D-13148: Filters and Datatables system reports loaded unnecessarily twice which could be seen as blinking.<br />
* D-12844: In dataframe query, FlowOccurrences in root and GetValueFrom Cases with filter gave null reference exception<br />
* D-12915: Repeating certain query twice with aggregations in Events root generated invalid SQL<br />
* D-12728: Was huge amount logs in server during client side import (manual testing required as identification)<br />
* D-13156: Persist function failed to snowflake: Invalid unicode escape sequence '\u0027ACCE'; should be at most '\u0010FFFF'.<br />
* D-12876: Flows/FlowOccurrences in root didn't work with SqlExpressionValue filtering.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2022.8 (build 1397) (released 2023-01-11) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release fixes an issue where extracting large datasets from SAP increases memory consumption considerably and may lead to out-of-memory error. This release contains packages for both QPR ScriptLauncher and QPR ProcessAnalyzer Server. If SAP extractions are done using QPR ScriptLauncher in client side mode (ExecuteInClientSide=1), it's enough to update QPR ScriptLauncher to fix this issue.<br />
</div><br />
<br />
'''Fixed issues:'''<br />
* D-12941: Extracting data from SAP consumed unnecessary lot of memory and may have led to out-of-memory error (both when running using QPR ScriptLauncher and in server side).<br />
<br />
== QPR ProcessAnalyzer 2022.8 (build 1396) (released 2022-12-30) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Creating datatables with duplicate names in the same project is prevented, and possible existing duplicate names are automatically changed to unique names with a random suffix. If there are duplicate names, they can be renamed either before updating QPR ProcessAnalyzer (to avoid automatic renaming) or after the update (by changing suffixed names). If the renamed datatables are used by models, the linkage will break because it's based on the datatable name. Creating duplicate datatables has already been prevented in the UI, but the improved method works also in the API level.<br />
<br />
Following SQL query can be used to list datatables (and project id) having duplicate names:<br />
SELECT ITA_NAME, ITA_PROJECT_ID<br />
FROM PA_INTEGRATION_TABLE<br />
GROUP BY ITA_NAME, ITA_PROJECT_ID<br />
HAVING Count(*) > 1<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
If trying to use business calendar for a model that doesn't have the business calendar defined, there will now be an error message instead of showing the chart. Either unselect the business calendar checkbox for the measure or dimension, or define a business calendar to the model. In this situation in earlier releases the business calendar was ignored and full time calculation used.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07498: Automation and Operational Excellence presets and Root causes analysis (for Snowflake), Weighted root causes analysis and Event scattering preset (for Snowflake and in-memory), Root causes for case duration (in-memory).<br />
* B-07177: Flexible mappings, user selectable aggregations and conditional formatting for Pivot table, and flexible mappings for KPI Card.<br />
* B-07518: New function named Query to run call /api/expression/query.<br />
* B-07294: In Workspace, the left side projects hierarchy can be collapsed and expanded to make more space to project contents.<br />
* B-06814: In SQL expressions, new function DurationBetweenDates to calculate duration between timestamps precisely.<br />
* B-07519: Replaced DateDiff function with the new DurationBetweenDates function in big data chart.<br />
* B-07531: In SQL expressions, new mathematical functions Abs, Log, Mod, Power, Rand, Sign and Sqrt.<br />
* B-07297: To optimize performance, Snowflake queries are automatically cancelled if they are not needed by UI.<br />
* B-07569: To optimize performance, TakeSample function implementation is improved for Snowflake.<br />
* B-07198: Several performance improvements to DataFrame queries (used in Snowflake).<br />
* B-07464: Added Lead and Lag functions to SqlDataFrames to support getting previous and next event.<br />
* B-07470: New ExtractSap function to fetch data from SAP using expression language.<br />
* B-07536: New Pivot function to SqlDataFrames to enable root causes analysis.<br />
* B-07488: Primary keys can be set to datatables to improve calculation performance (UI will follow later).<br />
* B-07515: Added RootCauseAnalysis function to SqlDataFrames.<br />
* B-07546: RootCauseAnalysis function support for complex weighting expressions.<br />
* B-03052: Support for user-defined variables in /api/expression/query.<br />
* B-07565: Support for NumberPrecision, DatetimeTruncation and TimespanPrecision properties for Values section in in-memory query.<br />
* B-07513: For product activation file handling, replaced mutex based implementation with exclusive file lock.<br />
* B-07480: Expression language support for DataFlows for data extraction.<br />
* B-07613: Removed support for SQL Server based R scripting.<br />
* B-07567: Take datatable primary keys into use in expression builder to improve performance (part 2).<br />
* B-07588: Remove total memory information from log writing and DateDiff function for in-memory.<br />
<br />
'''Fixed issues:'''<br />
* D-12715: Snowflake calculated imprecisely some operations containing division and aggregation.<br />
* D-12761: Progress bar of the CSV import dialog didn't show any progress.<br />
* D-12799: Opening datatable contents dialog settings was slow when there were lot of rows in the datatable.<br />
* D-12089: Include conforming/nonconforming cases made BPMN editor no responding.<br />
* D-12496: Datagrid filter search keyword didn't work for rounded values, so the search was hidden for other than textual data.<br />
* D-12704: Durations as quarters was calculated incorrectly in charts.<br />
* D-12662: Fixed issue where some special literals in custom expressions didn't work.<br />
* D-12403: Setting Notifications on a model had some visual issues.<br />
* D-12859: Dependency wheel visualization crashed with nulls values in From and To mappings.<br />
* D-12660: Removed unnecessary float conversions in SQL expressions.<br />
* D-12653: In-memory datafram OrderByColumns function with mixed values failed.<br />
* D-12657: When trying to use milliseconds period in some presets, frontend frozed.<br />
* D-12706: Line breaks in data were shown in many places where it's undesired.<br />
* D-12719: Syncfusion dialog headers showed backslaces incorrectly.<br />
* D-12372: Refused to run the JavaScript URL because it violated the Content Security Policy directive.<br />
* D-12730: Logging out when filter selection is in progress, gave javascript error.<br />
* D-12705: Header object counts tooltip was sometimes messed after logout.<br />
* D-12384: Selected project was not highlighted for whole project name string.<br />
* D-12581: Prevented creating duplicate datatable names in same project in parallel execution.<br />
* D-12722: There was incorrect syntax near '<' when running SqlDataFrame expressions.<br />
* D-12736: Swedish and Finnish translation improvements for object counter tooltips.<br />
* D-12702: For BPMN Editor component "Something went wrong" error was given when switching from in-memory to Snowflake model.<br />
* D-12712: UI gave error: TypeError: Cannot read properties of undefined (reading 'id').<br />
* D-12738: Business calendar showed total business time when calendar configuration was invalid.<br />
* D-12776: Special character filter caused JavaScript SyntaxError.<br />
* D-12785: Unnecessary vertical scrollbar displayed for main header toolbar.<br />
* D-12164: There was unnecessary UnauthorizedAccess errors in logs.<br />
* D-12580: Case duration was not same when comparing Big data chart with in-memory chart for same data.<br />
* D-12768: Data grid links and variable change actions didn't work when grouping was used.<br />
* D-12735: FindRootCauses (in-memory) function filtered out cases with zero contribution.<br />
* D-12763: --#CallWebService didn't work from ScriptLauncher.<br />
* D-12789: There was timeout in SQL queries to scripting sandbox.<br />
<br />
== QPR ProcessAnalyzer 2022.7 (build 1331) (released 2022-11-15) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2022.7, to improve security expression language operations that modify data or connect to external datasources are prevented in dashboard custom expressions. The limitation is required, because when a dashboard is opened, its expressions are run with the user's permissions, and the user need to trust the expressions don't perform any unexpected operations, such as delete data. The full functionality of the expression language is available in the scripts and in the Expression Designer.<br />
<br />
The following functions and operations are prevented in dashboards: SendEmail(), CallWebService(), ImportOdbc(), ImportOdbcSecure(), Model.DeletePermanently(), Model.Restore(), Model.TriggerNotifications(), Project.DeletePermanently(), Project.Restore(), Project.CreateDatatable(), Datatable.AddColumn(), Datatable.DeletePermanently(), Datatable.Import(), Datatable.Merge(), Datatable.RemoveColumns(), Datatable.RenameColumns(), Datatable.Truncate(), RecycleBin.DeletePermanently(), and call SQL script. Calling expression scripts is allowed, but in the script all previously mentioned operations are prevented.<br />
<br />
Following SQL query can be executed in the QPR ProcessAnalyzer metadata database to reveal dashboards that potentially have prevented expressions:<br />
SELECT * FROM [PA_UI_ELEMENT] WHERE [UIE_PROPERTIES] LIKE '%SendEmail(%' OR [UIE_PROPERTIES] LIKE '%CallWebService(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbc(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbcSecure(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Restore(%' OR [UIE_PROPERTIES] LIKE '%TriggerNotifications(%' OR [UIE_PROPERTIES] LIKE '%CreateDatatable(%' OR [UIE_PROPERTIES] LIKE '%AddColumn(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Import(%' OR [UIE_PROPERTIES] LIKE '%Merge(%' OR [UIE_PROPERTIES] LIKE '%RemoveColumns(%' OR [UIE_PROPERTIES] LIKE '%RenameColumns(%'<br />
</div><br />
<br />
'''Features:'''<br />
* B-07287: Process Discovery and most important presets for Snowflake.<br />
* B-07271: "Last Row Aggregates Over-limit Rows" setting for big data chart.<br />
* B-06431: Snowflake datatables support for database views in the datasource.<br />
* B-07266: Security: "limited mode" to prevent data modifications and external calls from dashboard expressions.<br />
* B-07097: Improved flowchart root causes color scales.<br />
* B-07363: SQL LIKE function support for escape character.<br />
* B-06877: Improved variation queries performance in Snowflake, part 1.<br />
* B-07444: Improved variation queries performance in Snowflake, part 2.<br />
* B-07382: Support for empty strings and nulls in event type names in dataframe processing.<br />
* B-07273: WithRowNumberColumn, WithRankColumn, WithDenseRankColumn support for descending sorting.<br />
* B-07303: FindRootCauses function support for weighting expression.<br />
* B-07327: Unpivot function for SqlDataFrames (for root cause analysis).<br />
* B-07385: Align token lifetime with SESSION_MAXIMUM_DURATION setting.<br />
* B-07500: ColumnMappings property for IDataFrame and DataTables.<br />
* B-07499: IDataFrame.ApplyFilter function to filter events data using a JSON-based filter.<br />
* B-07469: Translation updates for release 2022.7.<br />
<br />
'''Fixed issues:'''<br />
* D-11630: Drag and drop from chart settings to main header was working incorrectly for filter and root cause rules.<br />
* D-12455: Moving a chart filter from one chart to another created a root cause analysis filter.<br />
* D-12266: Root causes analysis showed incorrect results when certain combination of filters.<br />
* D-12525: Numerical values in Excel export in data grid was formatted incorrectly.<br />
* D-12534: Restoring item from recycle bin changed project from Bin to previous project.<br />
* D-12529: Measure specific datalabel mapping did not work correctly when also mapped to Y-axis.<br />
* D-12532: Multi-selection options caused layout issue for Chart setting.<br />
* D-12541: Layout issue for Polish in multiselect list search dialog.<br />
* D-11277: Increase/decrease Icons were missing in the dimension sorting for Mac.<br />
* D-12552: Uncaught Error: Diagram.selectCollection given something that is not a Part: null.<br />
* D-12567: Tooltip incorrectly showed for label component containing only spaces.<br />
* D-12438: Operation was cancelled because it was replaced by a new operation.<br />
* D-12551: Some expressions didn't work as calculated case/event attributes.<br />
* D-11720: Chart buttons were not visible in Apple Safari and iPad.<br />
* D-12544: On-screen settings "options" parameter did not work.<br />
* D-12528: Multi-unit time unit selection appeared where it's not applicable.<br />
* D-12583: Error message should be provided for invalid settings input than just display JS errors.<br />
* D-12599: Tooltips didn't show correct measures/dimensions when "Show in tooltip" mappings are used.<br />
* D-12561: Chart settings content was incorrectly drawn outside of the chart dialog.<br />
* D-12568: Reload UI sometimes crashed chart having multiselect on-screen settings.<br />
* D-12572: Main header toolbar lost when refresh maximized PA chart.<br />
* D-12612: Drop Unused Filters After setting incorrectly allowed zero seconds.<br />
* D-12533: Error message keeped blinking in Analysis view.<br />
* D-12608: User could not select or add new case attribute when current select attribute doesn't exist.<br />
* D-12451: Prevented deleting running script.<br />
* D-12516: Windows event viewer warning: Failed to gracefully shutdown application.<br />
* D-12523: Business calendar performance - part 2.<br />
* D-12538: Column with same name could be added multiple times to datatable using expression language.<br />
* D-12582: Improved EMS mutex code to support multiple PA service in one server.<br />
* D-12624: Synchronize new (empty) data table generated failed queries in Snowflake.<br />
* D-12622: Advanced setting page reserved room for the expression editor frame that did not exist.<br />
* D-11295: In on-screen settings, some UI controls were vertically misaligned.<br />
* D-11625: The heights of the parameter option menu in the clustering tab was not well aligned.<br />
* D-12103: Small dropdown list layout issue.<br />
* D-12633: Align issue for Column related Advanced settings.<br />
* D-12505: Search dialog didn't escape % and _ characters correctly in dataframe processing.<br />
* D-12645: Tabs in expression settings dialog were partly hidden when dialog is narrow.<br />
* D-11382: Moving of flowchart was sometimes shaky.<br />
* D-12655: Filter rule tooltips in header were styled incorrectly.<br />
* D-12656: Large integer values in filter jsons were incorrectly presented as small integers.<br />
* D-12661: Some exported filters contained unnecessary "invert" property.<br />
* D-12500: Model with numeric case id's and filtering with the attribute mapped as case id: ERROR [22018] Numeric value <nowiki>''</nowiki> is not recognized.<br />
* D-12509: Filtering null values didn't work in boolean attributes in Snowflake.<br />
* D-12571: In dataframe processing in SQL Server, dividing two integers should not make rounding to integer.<br />
* D-12610: Setting for global DropUnusedFiltersAfter was missing.<br />
* D-12613: Filtering with case/event attributes with null values didn't match in Snowflake models.<br />
* D-12617: Model didn't work when DropUnusedFiltersAfter is 00:00:00.<br />
* D-12618: If model ConfigurationJson is null, Configuration property didn't work.<br />
* D-12620: Filtering didn't work when there are backslaces in attribute names in Snowflake models.<br />
* D-12643: AttributeFunctionCallExpression did not always work properly in array context.<br />
* D-12647: SqlDataFrame with SQL Server: Comparing literals to variant column values failed.<br />
* D-12648: Models that have DropUnusedModelsAfter setting caused "The sliding expiration value must be positive" error.<br />
* D-11526: It was unable to translate Unicode character \uD83D at index 176 to specified code page.<br />
* D-12637: In application startup arised FATAL Application startup exception System.UnauthorizedAccessException: Access to the path 'Global\MutexQPRPAActivation' is denied.<br />
<br />
== Old Releases ==<br />
See older releases in [[QPR ProcessAnalyzer Release Archive]]<br />
__NOTOC__<br />
<br />
[[Category: QPR ProcessAnalyzer]]</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=Create_Predicted_Eventlog&diff=24486Create Predicted Eventlog2024-03-13T11:41:48Z<p>Ollvihe: </p>
<hr />
<div>This article has instructions how to install, configure and use eventlog predictions. The prediction creates a new model that contains the source model data and the predictions. It's able to predict case attributes for the generated new cases and event attributes for the predicted events. To distinguish the real (source data) and predicted events and cases, there are following attributes in the model:<br />
* Event attribute '''Predicted''' denotes whether the event is from the source data (''false'') or whether it's predicted (''true'').<br />
* Case attribute '''Generated''' denotes whether the case is in the source data (''false'') or whether the prediction generated it as a new case (''true'').<br />
<br />
<br />
== Prerequisites for prediction ==<br />
Following prerequisites need to be fulfilled to run the eventlog prediction:<br />
* QPR ProcessAnalyzer 2024.2 or later in use<br />
* Snowflake connection is configured<br />
* Source models are stored to Snowflake<br />
<br />
== Install prediction to Snowflake ==<br />
To install the eventlog prediction to Snowflake:<br />
# Go to Snowflake, and create a Snowflake-managed stage with name '''PREDICTION''' to the same schema configured to QPR ProcessAnalyzer (in the Snowflake connection string). Use settings in the following image: [[File:Create_Snowflake_stage.png]]<br />
# Open the created stage and upload the '''predict.pyz''' file into the stage (ask the file from your QPR representative).<br />
# Create the following procedure to the same schema:<br />
<pre><br />
CREATE OR REPLACE PROCEDURE QPRPA_SP_PREDICTION("CONFIGURATION" OBJECT)<br />
RETURNS OBJECT<br />
LANGUAGE PYTHON<br />
STRICT<br />
RUNTIME_VERSION = '3.8'<br />
PACKAGES = ('nltk','numpy','pandas==1.5.3','scikit-learn','snowflake-snowpark-python','tensorflow','dill','prophet','holidays==0.18','python-kubernetes','docker-py')<br />
HANDLER = 'main'<br />
EXECUTE AS OWNER<br />
AS '<br />
import sys<br />
def main(session, parameters_in: dict) -> dict:<br />
session.file.get(''@decision_intelligence/predict.pyz'', ''/tmp'')<br />
sys.path.append(''/tmp/predict.pyz'')<br />
import predict<br />
return predict.main(session, parameters_in)<br />
';<br />
</pre><br />
<br />
== Create prediction script in QPR ProcessAnalyzer ==<br />
1. Go to QPR ProcessAnalyzer and create the following expression script with name '''ML library''':<br />
<pre><br />
let predictionProcedureName = "qprpa_sp_prediction";<br />
<br />
function RunFunctionWithParallelLogging(logTable, callbackFunc) <br />
{<br />
let state = #{};<br />
<br />
logTable.Truncate();<br />
<br />
_system.Parallel.Run([<br />
() => {<br />
try {<br />
state.Set("Result", callbackFunc());<br />
}<br />
finally {<br />
state.Set("Finished", true);<br />
}<br />
},<br />
() => {<br />
let readRows = 0;<br />
while (true) {<br />
try {<br />
let finished = state.TryGetValue("Finished");<br />
if (finished == true) {<br />
WriteLog(`Work finished. Log written to table ${logTable.Name} (id: ${logTable.Id})`);<br />
break;<br />
}<br />
<br />
let rowsDf = logTable.Synchronize().SqlDataFrame.Skip(readRows).Collect();<br />
readRows = readRows + rowsDf.NRows;<br />
rowsDf.Rows.{<br />
let row = _;<br />
WriteLog(`${row[0]} \t${row[1]}`);<br />
}<br />
}<br />
catch (ex) {<br />
if (ex.InnerExceptions?[0]?.Type == "UnauthorizedAccess") {<br />
WriteLog(`Log data table has disappeared. The generated log will not be complete!`);<br />
break;<br />
}<br />
WriteLog(`Log has not yet been created.`);<br />
}<br />
}<br />
Sleep(5000);<br />
}<br />
]);<br />
return state.TryGetValue("Result");<br />
}<br />
<br />
function Train(params, logTable)<br />
{<br />
function TrainCallback()<br />
{<br />
WriteLog("Starting training...");<br />
<br />
let connection = logTable.Project.CreateSnowflakeConnection();<br />
let finalParams = params.Clone();<br />
finalParams.Set("_typed", params["_typed"].Extend(#{<br />
"log_table": logTable<br />
}));<br />
let result = connection.CallStoredProcedure(predictionProcedureName, #{"configuration": finalParams});<br />
<br />
WriteLog("Finished training...")<br />
return result;<br />
}<br />
return RunFunctionWithParallelLogging(logTable, TrainCallback);<br />
}<br />
<br />
function Generate(params, logTable) <br />
{<br />
function GenerateCallback()<br />
{<br />
WriteLog("Starting generation...")<br />
<br />
let connection = logTable.Project.CreateSnowflakeConnection();<br />
<br />
let typedParams = params["_typed"];<br />
let resultEventsTable = typedParams["target_event_data_table"];<br />
let resultCasesTable = typedParams.TryGetValue("target_case_data_table");<br />
<br />
if (params["overwrite"]) {<br />
resultEventsTable.Truncate();<br />
resultCasesTable?.Truncate();<br />
}<br />
<br />
let finalParams = params.Clone();<br />
finalParams.Set("_typed", typedParams.Extend(#{<br />
"log_table": logTable<br />
}));<br />
<br />
let result = connection.CallStoredProcedure(predictionProcedureName, #{"configuration": finalParams});<br />
<br />
resultEventsTable.Synchronize();<br />
resultCasesTable?.Synchronize();<br />
<br />
WriteLog("Finished generation...")<br />
return result;<br />
}<br />
<br />
return RunFunctionWithParallelLogging(logTable, GenerateCallback);<br />
}<br />
<br />
function GetSampledEvents(sourceModel, sampledCaseCount, filter)<br />
{<br />
if (IsNull(sampledCaseCount) || sampledCaseCount < 1)<br />
return sourceModel.EventsDataTable.SqlDataFrame;<br />
let sampleFilterRule = sampledCaseCount == null <br />
? null<br />
: #{<br />
"Type":"IncludeCases",<br />
"Items":[#{<br />
"Type": "SqlExpressionValue",<br />
"Configuration": #{<br />
"Root": `Cases.WithColumn("_Random", Rand()).OrderByColumns(["_Random"], [true]).Head(${sampledCaseCount})`<br />
}<br />
}]<br />
};<br />
let filterRules = filter?["Items"];<br />
if (!IsNullTop(filterRules)) {<br />
if (!IsNullTop(sampleFilterRule))<br />
filterRules = Concat(filterRules, sampleFilterRule);<br />
}<br />
else {<br />
if (!IsNullTop(sampleFilterRule))<br />
filterRules = [sampleFilterRule];<br />
else<br />
filterRules = [];<br />
}<br />
<br />
let finalFilter = #{<br />
"Items":filterRules<br />
};<br />
sourceModel.CacheTableSqlDataFrame(finalFilter);<br />
}<br />
<br />
function TrainMLModelForModel(modelName, sourceModel, targetProject, trainingConfiguration, recreatePredictionModel, trainingDataFilter, logTable, trainingCaseSampleSize)<br />
{<br />
let sanitizedModelName = `${sourceModel.Id}-${modelName}`; <br />
<br />
let originalCaseCount = sourceModel.EventsDataTable.SqlDataFrame.SelectDistinct([sourceModel.EventsDataTable.ColumnMappings["CaseId"]]).NRows;<br />
let trainEventDataSdf = GetSampledEvents(sourceModel, trainingCaseSampleSize, trainingDataFilter);<br />
let actualTrainingCaseSampleSize = trainEventDataSdf.SelectDistinct([trainEventDataSdf.ColumnMappings["CaseId"]]).NRows;<br />
WriteLog(`Starting to train a prediction model using ${ToString(100*actualTrainingCaseSampleSize/originalCaseCount, "F")}% of the original cases (${actualTrainingCaseSampleSize}/${originalCaseCount}) found in source model ${sourceModel.Name}.`)<br />
<br />
let trainCaseDataSdf = sourceModel.CasesDataTable?.SqlDataFrame;<br />
<br />
let columnMappings = trainEventDataSdf.ColumnMappings;<br />
if (trainCaseDataSdf != null) {<br />
columnMappings = columnMappings.Extend(#{"Case_CaseId": trainCaseDataSdf.ColumnMappings["CaseId"]});<br />
}<br />
<br />
trainingConfiguration = trainingConfiguration.Extend(#{ <br />
"_typed": #{<br />
"event_data": trainEventDataSdf, <br />
"project": targetProject<br />
},<br />
"model_name": sanitizedModelName,<br />
"column_mappings": columnMappings,<br />
"overwrite_model": recreatePredictionModel,<br />
"case_start_time_probability_multiplier": originalCaseCount / actualTrainingCaseSampleSize<br />
});<br />
<br />
if (trainCaseDataSdf != null) {<br />
trainingConfiguration["_typed"].Set("case_data", trainCaseDataSdf);<br />
}<br />
<br />
Train(trainingConfiguration, logTable);<br />
}<br />
<br />
function GenerateNewModel(modelName, sourceModel, targetProject, generationConfiguration, incompleteCasesFilter, logTable)<br />
{<br />
let sanitizedModelName = `${sourceModel.Id}-${modelName}`; <br />
let eventsTableName = `${modelName} - events`;<br />
let casesTableName = `${modelName} - cases`;<br />
let m = targetProject.ModelByName(modelName);<br />
let eventsTable = null;<br />
let casesTable = null; <br />
if (m != null)<br />
{<br />
eventsTable = m.EventsDataTable;<br />
casesTable = m.CasesDataTable;<br />
}<br />
else {<br />
let eventsTableConfiguration = #{<br />
"Name": eventsTableName,<br />
"Type": "Snowflake"<br />
};<br />
eventsTable = targetProject.DataTableByName(eventsTableName) ?? targetProject.CreateDataTable(eventsTableConfiguration).Synchronize();<br />
if (sourceModel.CasesDataTable != null) {<br />
let casesTableConfiguration = #{<br />
"Name": casesTableName,<br />
"Type": "Snowflake"<br />
};<br />
casesTable = targetProject.DataTableByName(casesTableName) ?? targetProject.CreateDataTable(casesTableConfiguration).Synchronize();<br />
}<br />
}<br />
<br />
eventsTable.Truncate();<br />
casesTable?.Truncate();<br />
<br />
let generationParams, result;<br />
<br />
if (generationConfiguration.TryGetValue("cases_to_generate") != 0) {<br />
WriteLog(`Generating new cases with new events...`);<br />
<br />
generationParams = generationConfiguration.Extend(#{ <br />
"_typed": #{<br />
"target_event_data_table": eventsTable,<br />
"project": targetProject<br />
},<br />
"model_name": sanitizedModelName,<br />
"overwrite": false<br />
});<br />
if (casesTable != null) {<br />
generationConfiguration["_typed"].Set("target_case_data_table", casesTable);<br />
}<br />
<br />
result = Generate(generationParams, logTable);<br />
<br />
WriteLog(`Generation results:\r\n${result}`);<br />
<br />
result = ParseJson(result);<br />
if (result["result"] != "success")<br />
throw result["exception"]<br />
}<br />
<br />
if (incompleteCasesFilter != null) {<br />
WriteLog(`Generating new events for running cases...`);<br />
let incompleteCasesSqlDataFrame = sourceModel.EventsDataTable.SqlDataFrame.ApplyFilter(incompleteCasesFilter, sourceModel.CasesDataTable?.SqlDataFrame);<br />
<br />
generationParams = generationConfiguration.Extend(#{ <br />
"_typed": #{<br />
"event_data": incompleteCasesSqlDataFrame, <br />
"target_event_data_table": eventsTable,<br />
"project": targetProject<br />
},<br />
"model_name": sanitizedModelName,<br />
"overwrite": false,<br />
"temperature": 0<br />
});<br />
if (casesTable != null) {<br />
generationConfiguration["_typed"].Set("case_data", sourceModel.CasesDataTable.SqlDataFrame);<br />
}<br />
<br />
result = Generate(generationParams, logTable);<br />
WriteLog(`Generation results:\r\n${result}`);<br />
<br />
result = ParseJson(result);<br />
if (result["result"] != "success")<br />
throw result["exception"]<br />
}<br />
<br />
if (!("Predicted".In(eventsTable.ColumnTypes.Name)))<br />
eventsTable<br />
.AddColumn("Predicted", "Boolean");<br />
<br />
eventsTable<br />
.DeleteRows(<br />
Column(result["column_mappings"]["events"]["EventType"]) == "__FINISH__"<br />
)<br />
.UpdateRows(<br />
1==1,<br />
"Predicted", true<br />
);<br />
<br />
if (casesTable != null) {<br />
if (!("Generated".In(casesTable.ColumnTypes.Name)))<br />
casesTable<br />
.AddColumn("Generated", "Boolean");<br />
<br />
casesTable<br />
.UpdateRows(<br />
1==1,<br />
"Generated", true<br />
);<br />
} <br />
<br />
WriteLog(`Appending original model data...`);<br />
eventsTable.Import(sourceModel.EventsDataTable.SqlDataFrame, #{"Append": true});<br />
if (casesTable != null)<br />
casesTable.Import(sourceModel.CasesDataTable.SqlDataFrame, #{"Append": true});<br />
<br />
eventsTable<br />
.UpdateRows(<br />
Column("Predicted") == null,<br />
"Predicted", false<br />
);<br />
<br />
casesTable<br />
?.UpdateRows(<br />
Column("Generated") == null,<br />
"Generated", false<br />
);<br />
<br />
if (m != null)<br />
return m;<br />
<br />
WriteLog(`Creating model...`);<br />
let eventColumnMappings = result["column_mappings"]["events"];<br />
let timestampMapping = eventColumnMappings["TimeStamp"];<br />
eventColumnMappings.Remove("TimeStamp");<br />
eventColumnMappings.Set("Timestamp", timestampMapping);<br />
<br />
let modelConfiguration = #{<br />
"DataSource": #{<br />
"Events":#{<br />
"DataSourceType": "datatable",<br />
"DataTableName": eventsTableName,<br />
"Columns": eventColumnMappings<br />
}<br />
}<br />
};<br />
<br />
if (casesTable != null) {<br />
modelConfiguration["DataSource"].Set("Cases", #{<br />
"DataSourceType": "datatable",<br />
"DataTableName": casesTableName,<br />
"Columns": result["column_mappings"]["cases"]<br />
});<br />
}<br />
<br />
targetProject.CreateModel(#{"Name": modelName, "Configuration": modelConfiguration});<br />
}<br />
<br />
function GeneratePredictionModel(configuration)<br />
{<br />
let modelName = configuration["Name"];<br />
let sourceModel = configuration["SourceModel"];<br />
let targetProject = configuration["TargetProject"];<br />
let trainingConfiguration = configuration["TrainingConfiguration"];<br />
let generationConfiguration = configuration["GenerationConfiguration"];<br />
let trainingDataFilter = configuration["TrainingDataFilter"];<br />
let incompleteCasesFilter = configuration["IncompleteCasesFilter"];<br />
let recreatePredictionModel = configuration["RecreatePredictionModel"];<br />
let trainingCaseSampleSize = configuration["TrainingCaseSampleSize"];<br />
<br />
let result = null;<br />
let logTableName = `_MLLog:${Now}`;<br />
let logTable = targetProject.CreateDataTable(#{"Name": logTableName, "Type": "Snowflake"});<br />
try {<br />
WriteLog(`Training a prediction model based on model:\r\n${sourceModel.Name} (id=${sourceModel.Id})`);<br />
result = TrainMLModelForModel(modelName, sourceModel, targetProject, trainingConfiguration, recreatePredictionModel, trainingDataFilter, logTable, trainingCaseSampleSize);<br />
WriteLog(`Model training completed. Training result:\r\n${result}`);<br />
<br />
if (generationConfiguration != null) {<br />
WriteLog(`Generating a new model named ${modelName} based on trained model ${modelName}):\r\n${result}`);<br />
let newModel = GenerateNewModel(modelName, sourceModel, targetProject, generationConfiguration, incompleteCasesFilter, logTable);<br />
<br />
WriteLog(`Model ${newModel.Name} (id=${newModel.Id}) generated into project ${targetProject.Name}:\r\n${result}`);<br />
}<br />
}<br />
finally {<br />
targetProject.DataTableByName(logTableName)?.DeletePermanently();<br />
}<br />
}<br />
<br />
return #{<br />
"GeneratePredictionModel": GeneratePredictionModel,<br />
"RunFunctionWithParallelLogging": RunFunctionWithParallelLogging,<br />
"Train": Train,<br />
"Generate": Generate<br />
};<br />
</pre><br />
<br />
2. Create the following example expression script (e.g., with name '''Create prediction model'''):<br />
<pre><br />
let lib = First(Project.Scripts.Where(Name == "ML library")).Run(#{});<br />
let targetProject = Project;<br />
lib.GeneratePredictionModel(#{<br />
"Name": "My prediction model",<br />
"SourceModel": ModelById(1),<br />
"TargetProject": targetProject,<br />
"RecreatePredictionModel": true,<br />
"TrainingConfiguration": #{<br />
num_epochs_to_train: 500<br />
},<br />
"GenerationConfiguration": #{<br />
"cases_to_generate": 1000<br />
},<br />
"TrainingDataFilter": #{<br />
"Items": [<br />
#{<br />
"Type": "IncludeCases",<br />
"Items": [<br />
#{<br />
"Type": "EventAttributeValue",<br />
"Attribute": "Event type",<br />
"StringifiedValues": [<br />
"0Invoice Payment"<br />
]<br />
}<br />
]<br />
}<br />
]<br />
},<br />
"TrainingCaseSampleSize": 1000,<br />
"IncompleteCasesFilter": #{<br />
"Items": [<br />
#{<br />
"Type": "ExcludeCases",<br />
"Items": [<br />
#{<br />
"Type": "EventAttributeValue",<br />
"Attribute": "Event type",<br />
"StringifiedValues": [<br />
"0Invoice Payment"<br />
]<br />
}<br />
]<br />
}<br />
]<br />
},<br />
});<br />
</pre><br />
3. Configure prediction for the previously created script as instructed in the next chapter.<br />
<br />
== Configure prediction ==<br />
Prediction script has the following settings in the GeneratePredictionModel call:<br />
* '''Name''': Name of the QPR ProcessAnalyzer model that is created to the target project. The model will contain the source model content and the predictions.<br />
* '''SourceModel''': Source model for which the prediction is made. Model can be selected for example based on id with ModelById function or by name with ModelByName function.<br />
* '''TargetProject''': Target project to create the new model into.<br />
* '''RecreatePredictionModel''': When ''true'', a new ML model is trained when the script is run. When ''false'', the prediction is run using possibly pre-existing ML model. <br />
* '''TrainingConfiguration''': Training parameters.<br />
** '''num_epochs_to_train''': How many times the whole training data is used in training. The more there are epochs, the better the model usually is, but the training will take more time. The best performing model out of all the iterations will be selected.<br />
** '''max_num_case_clusters''': Maximum number of clusters to divide the case attribute values into. Default is 20.<br />
* '''GenerationConfiguration''': Event generation parameters. When null, no generation is done. For example, following parameters are supported:<br />
** '''cases_to_generate''': Maximum number cases to create. The number of created cases is further limited by the capabilities of the trained model and the ''case_generation_start_time'' and ''case_generation_end_time'' parameters.<br />
** '''case_generation_start_time''': If defined, new cases will be generated starting from this timestamp. If not defined, the latest start event timestamp used in the training data. This parameter is given as ISO datetime format.<br />
** '''case_generation_end_time''': If defined, the new cases generation will stop when reaching this timestamp, and no cases will be generated after it. This parameter is given as ISO datetime format.<br />
** '''generate_debug_event_attributes''': If true, additional columns will be added containing, e.g., probabilities of the selected activity and other activities.<br />
** '''min_prediction_probability ''': Minimum probability of any activity name in next activity prediction. If the probability of an activity is lower than this, it will never be picked. Default value is 0.01.<br />
** '''temperature''': If 0, the predicted event type will always be the most probable one. If 1, the next event type is randomly selected based on probabilities of each event type. This behavior is interpolated when using values between 0 and 1.<br />
* '''TrainingDataFilter''': [[Filtering_in_QPR_ProcessAnalyzer_Queries|filter]] to select specific cases to training the prediction model. Usually this filter is required to train the model only using the completed cases. If uncompleted cases are given to the training, the model can incorrectly learn that cases should end like that.<br />
* '''TrainingCaseSampleSize''': Maximum number of cases to take from the source model (cases are selected randomly). Use a lower setting to speed up the ML model training. The greater the value, the more subtle phenomena the prediction can learn from the data. <br />
* '''IncompleteCasesFilter''': Optional [[Filtering_in_QPR_ProcessAnalyzer_Queries|filter]] to select which for cases the prediction is made. To improve performance of the prediction, it's recommended to include only the incomplete cases for which new events might appear, and skip the completed cases for which new events are not expected anymore.<br />
</pre></div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&diff=24485QPR ProcessAnalyzer Release Notes2024-03-12T09:49:26Z<p>Ollvihe: /* Next Release: QPR ProcessAnalyzer 2024.3 (planned release date 2024-04-02) */</p>
<hr />
<div>This page lists all new features and fixed issues for each QPR ProcessAnalyzer release.<br />
<br />
== Next Release: QPR ProcessAnalyzer 2024.3 (planned release date 2024-04-02) ==<br />
<br />
'''Features:'''<br />
* B-08242: [[Actions_to_Run_Script_in_Table|Custom actions]] can be started from dashboard table context menu, e.g., create ticket, trigger automation and fetch external information.<br />
* B-08252: When Analyzed objects is cases in chart, event attribute values are filtered with the native event attribute related filter rules instead of expression based filter rules.<br />
* B-08231: Snowflake performance improved by changing object counts query (shown in header) into two queries, so that the filtered object count uses eventlog caching.<br />
* B-07906: Implemented cross joins to SQL dataframes.<br />
* B-03047: Removed support for dashboard panels.<br />
* B-08214: Removed unused columns from the PA_VIEW table.<br />
<br />
'''Fixed issues:'''<br />
* D-14048: Fixed issue where in-memory root causes analysis for case attributes didn't show attributes with ShortString data type.<br />
* D-14049: Added some missing translations for table column filter and BPMN editor.<br />
* D-14021: FindRootCauses function WeightingExpression was run in incorrect context for in-memory model.<br />
* D-14020: Query which goes from EventTypes to Cases did not show the error when using GetValueFrom function.<br />
* D-13976: Fixed issue where gateway-based imports were not synchronous.<br />
* D-13689: Fixed JavaScript error in Highcharts polar chart with tooltips.<br />
* D-12614: Highcharts gives "Maximum call stack size exceeded" error in bar chart with polar and data labels.<br />
* D-14060: Highcharts custom layout translatable properties incorrectly changed chart configuration by translating the labels.<br />
* D-14071: Business calendar button press caused error when user didn't have access to any model.<br />
<br />
== Latest: Additional release for QPR ProcessAnalyzer 2024.2 (build 5509) (released 2024-02-27) ==<br />
<br />
'''Features:'''<br />
<br />
* B-06280: User management dialog shows whether users have password defined and unnecessary passwords can be removed to improve security.<br />
<br />
'''Fixed issues:'''<br />
<br />
* D-14045: Fixed issue where users with Viewer or Analyzer role couldn't create filters in Snowflake models.<br />
<br />
== QPR ProcessAnalyzer 2024.2 (build 5438) (released 2024-02-21) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue: Snowflake models and dashboards don't work with Viewer and Analyzer role permisions. The reason is that cache tables created to Snowflake incorrectly require the write permissions. Workaround is to give users the Designer role which will give the needed permissions. Note that the Designer role gives many permissions to the user for the project [[Roles_and_Permissions#Roles_and_Permissions|(more information)]]. This issue has been fixed in the next release (D-14045).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
The legacy User permissions report (analysis number 11) and Filters report (analysis number 30) used in SQL scripts have been removed. Use instead the expressions language to query filters and user permissions, e.g., [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|Models.Filters]] and [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
New version of the Design diagram component has been improved with object-specific measures, and the previous common measures are not migrated into object-specific measures. Thus, the measures need to be configured again, or manually edit the chart json settings (if needed please ask instructions from QPR CustomerCare).<br />
</div><br />
<br />
'''Features:'''<br />
* B-08022: Design diagram supports now BPMN notation, elbow style flows and object-specific measures.<br />
* B-08232: Entire future eventlogs can be [[Create_Predicted_Eventlog|predicted]] based on generative AI models running in Snowflake.<br />
* B-08166: Added expression language function [[Generic_Functions_in_QPR_ProcessAnalyzer#OpenAIChatCompletion|OpenAIChatCompletion]] to answer natural language prompts based on OpenAI ChatGPT API.<br />
* B-08177: Snowflake query performance has been improved by introducing caching of filtered eventlogs using Snowflake tables.<br />
* B-08196: Conditional formatting rules can be defined for [[QPR_ProcessAnalyzer_Table#Textual_equal_rules_for_background_color|textual and boolean values]].<br />
* B-08213: Big data chart expressions event type selections to be multi-select where applicable.<br />
* B-08205: Expression language API is available for storing [[Storing_Secrets_for_Scripts|secrets]] for scripts.<br />
* B-07780: Chart [[QPR_ProcessAnalyzer_Chart#Variable_mappings|variable mappings]] has been removed - use the [[Chart_Linked_Settings|linked settings]] instead. Dashboards using variable mappings are automatically converted to use linked settings.<br />
* B-08117: Added ToSqlDataFrame function to convert in-memory dataframe into SQL dataframes.<br />
* B-08174: Only non-default parameters values are written to the operation log.<br />
* B-08200: Timestamps in System reports are shown in user workstation local time.<br />
* B-08171: Dashboard id has been added to queries, to track from which dashboard queries are originating.<br />
* B-07144: Remove legacy User permissions report (analysis number 11) and Filters report (analysis number 30) in SQL scripts (see note above).<br />
* B-08193: Added retry mechanism to QPR ScriptLauncher to recover if connection to server breaks.<br />
* B-08202: Updated copyright for year 2024.<br />
* B-08199: Frontend components have been updated.<br />
* B-08203: Backend components have been updated.<br />
* B-08209: Translations updated for release 2024.2.<br />
<br />
'''Fixed issues:'''<br />
* D-13972: Some measures/dimensions/columns in Big data chart didn't show the expressions level filtering.<br />
* D-14015: Fixed business calendar incorrect calculation when business period covered entire day.<br />
* D-14014: Fixed issue where Snowflake business calendar could not have end time as 00:00.<br />
* D-13962: System variable values were interpreted incorrectly when used in linked settings.<br />
* D-13971: HiddenInNavigation and SortOrder variables didn't work in navigation menu dashboards list.<br />
* D-13959: Removed possibility to add datatable columns with the legacy "any" data type.<br />
* D-13991: Improved drop-down selector component to handle empty strings as variable values.<br />
* D-13965: Datatable column name length was validated incorrectly which may have caused error in saving with too long column names.<br />
* D-13958: Project names showed unnecessary html escaping in the "Move to" menu.<br />
* D-13964: Model attributes and notifications dialogs gave error when trying to use dashboard tags.<br />
* D-13960: Added missing translations for list of permission list and 12-hour clock format.<br />
* D-13966: Fixed issue were root causes chart tooltip sometimes didn't disappear.<br />
* D-13969: Datatable column schema export sometimes showed empty for the key column.<br />
* D-13862: Session token was not accepted when url path capitalization is different.<br />
* D-13942: Datatable could not be dimensioned if it has column named "CaseId".<br />
* D-13980: Business calendar dialog crashed when tried to open it for a model without access.<br />
* D-13983: Notifications dialog didn't validate situation when same name was used in a measure and dimension.<br />
* D-13981: Dashboard import set incorrect model id to dashboard if there was no access to any model.<br />
* D-11276: Translations were missing for 12-hour clock dates (AM and PM) in dashboards.<br />
* D-13977: Multi-select dropdown lists showed some special characters incorrectly.<br />
* D-13945: Syncfusion toast message didn't work when text contains ${[]}.<br />
* D-13930: Pivot table throws javascript error when certain clicks.<br />
* D-13273: Duplicate datatable row count didn't shown correctly.<br />
* D-13994: There was an error in the in-memory chart with some flow related measures about duplicate variable names when same measure was defined twice.<br />
* D-13985: Models list dots menu had texts misaligned in narrow screens.<br />
* D-13995: In Workspace, wrong datatable was selected after duplication when non-default sorting was applied.<br />
* D-13997: Workspace tables column filtering search caused JavaScript errors.<br />
* D-13978: In table Excel export, the last row representing other items appeared incorrectly for in-memory chart.<br />
* D-14007: In System reports, model related selections are hidden from the Analyzed objects lists.<br />
* D-14005: In big data chart, changing to custom expression caused crash with some expressions having case/event attribute.<br />
* D-14003: When dimensioning was not used, pivot table values were incorrectly rounded in the server side.<br />
* D-14004: Removed empty filters from queries to optimize them.<br />
* D-13988: Fixed issue where data grid context menu rendered initially as too high.<br />
* D-13979: BPMN model editor element settings use now Open Sans font.<br />
* D-14013: Fixed incorrect expression "Duration between first and last occurrence" in big data chart event types.<br />
* D-13984: Fixed the error of refusing to run the JavaScript URL.<br />
* D-14031: ThrownObject property was not included to http error response when error came from the script.<br />
<br />
== QPR ProcessAnalyzer 2024.1 (build 4784) (released 2024-01-10) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue fixed in QPR ProcessAnalyzer 2024.2: In Big data chart, some measures, dimensions and columns have the filtering option missing. The issue concerns for example Duration between events, Path starting/until between specific events, and Cases where event occurs before other selections. Workaround is to set the filter in the chart json settings: the filter can be configured to another expression and copied to the correct expression.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
QPR ProcessAnalyzer Server and QPR ScriptLauncher are now using .Net 8 (previous was .Net 6). When updating to this release, install the .Net 8 Runtime ([[Updating_QPR_ProcessAnalyzer_Server|see more]]). The .Net 6 doesn't need to be uninstalled immediately because .Net 6 and .Net 8 work side-by-side, but due to security reasons, the unused .Net 6 should eventually be uninstalled.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In this release, all filters that don't contain any filter rules, are removed. These are legacy filters which have not been visible in the UI.<br />
</div><br />
<br />
'''Features:'''<br />
* B-08019: New component [[Design_Diagram|Design Diagram]] for showing user-created diagrams in dashboards where to visualize process mining metrics.<br />
* B-08087: Generic [[Dropdown_List_Selector|dropdown list selector]] works with Snowflake models allowing to add selection lists for any values.<br />
* B-08163: Linked settings support for binding to [[Chart_Linked_Settings#Binding_to_case_attribute_filters_with_attribute_name_and_attribute_values|case attribute filter values without defining case attribute name]].<br />
* B-08170: Snowflake model filters can be [[Filtering_in_QPR_ProcessAnalyzer#Filter_actions|saved as new models]] which can be used to create snapshots of part of models.<br />
* B-08093: Multiple dashboards can be exported to same file, and model can be set for imported dashboards.<br />
* B-08161: Added [[Datatable_in_Expression_Language#Modify|Modify]] function to change datatable properties and improved [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#CreateDatatable|CreateDatatable]] function for creating datatables.<br />
* B-08122: Added new system report to list dashboards.<br />
* B-08173: Removed legacy filters that didn't have any filter rules.<br />
* B-07961: In OperationLog, changed parameters to json format and added request id.<br />
* B-08069: Added DashboardId property to [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog]] in expression language.<br />
* B-08139: Added [[Datatable_in_Expression_Language#UpdateRows|UpdateRows]] function to update existing rows in datatables with similar logic than SQL update.<br />
* B-08115: Added [[Datatable_in_Expression_Language#DeleteRows|DeleteRows]] function to delete rows in datatables with similar logic than SQL delete.<br />
* B-08149: QPR ProcessAnalyzer has been updated to .Net 8.<br />
* B-08054: Changed Scripts property in generic context to return all scripts, instead of legacy system level scripts.<br />
* B-08138: Changed Synchronize function to remove all columns when no Snowflake table exists.<br />
* B-07689: For datatables, [[Datatable_in_Expression_Language#ForeignKeys|foreign keys]] to other datatables can be defined using expression language.<br />
* B-08176: Translation updates for release 2024.1.<br />
* B-08175: Workspace should show timestamps in user's local time.<br />
<br />
'''Fixed issues:'''<br />
* D-13913: Datatable properties dialog incorrectly showed linked models from other projects.<br />
* D-13916: Chart filter could not be defined for some expressions in Big data chart.<br />
* D-13933: Navigation menu selected item wasn't highlighted when used Snowflake models.<br />
* D-13906: In Conformance Analysis, deviating flows were not translated.<br />
* D-13907: Improved translation related to datatable properties dialog "Used by models" field.<br />
* D-13904: There was an unclear error message in Snowflake, as exception code 1 was returned without AttributeName and ModelName properties when non-existing attribute was in filter.<br />
* D-13911: Fixed small glitches in the opening and closing of drop-down lists.<br />
* D-13918: Datatable could be configured incorrectly to use table for other datatable.<br />
* D-13932: Duplicating datatable with custom table in datasource losed all data.<br />
* D-11002: Removed legacy in-memory prediction preset.<br />
* D-13912: Added check that array cannot be stored to dashboard Content property.<br />
* D-13936: Query designer default query didn't work with Snowflake models.<br />
* D-13938: There was an incorrect logging with some operations related to ScriptLauncher.<br />
* D-13923: Snowflake expressions didn't work with Where function in root referring to case attribute.<br />
* D-13939: ApplyFilter function gave null reference error for non-existing attribute name.<br />
* D-13931: There were issues with AllowExternalDatasources and EnableFullFunctionality settings.<br />
<br />
== QPR ProcessAnalyzer 2023.7 (build 4326) (released 2023-11-28) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Limitation for the maximum amount of data (B-07636) causes a behavior change in in-memory charts that have the Maximum rows settings empty and have the sorting defined. In certain cases, the order in which measures are evaluated changes (due to an internal performance optimization). If there are custom expressions that define variables, the variables may not be available in other measures anymore. As a resolution, either redefine the variables in those measure expressions or add those measures secondarily to the sorting.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Default query timeout of 30 minutes has been added for --#ImportOdbcQuery, --#ImportSqlQuery and --#ImportOleDbQuery commands. If a query run is taking longer than the timeout, the query is stopped. The timeout can be adjusted using the '''QueryExecutionTimeout''' parameter. Previously, there has been no timeout, so queries that take more than 30 minutes require configuring a longer timeout.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Incorrectly configured [[Chart_Linked_Settings|linked settings]] in charts (available in the ''Advanced'' tab) give now an error message, if they are referring to non-existing measures, dimensions or columns. Previously, incorrect linked settings were ignored. To fix the error message, remove the incorrect linked settings.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07511: Datatables have a [[Datatable_Properties_Dialog|dialog]] to view datatable properties, write description, set the Snowflake source table, add/modify/delete columns, and set the datatable key.<br />
* B-08150: Added setting [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|Apply chart filters first]] to determine whether chart filter rules or dashboard filter rules are applied first when chart queries are filtered.<br />
* B-08091: When filtering charts in Snowflake, case attribute filter is created instead of case id filter.<br />
* B-08091: [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|New setting]] to define whether cases or events are filtered by default.<br />
* B-08091: New preset "Looping paths" to detect whether there are repeating patterns of events.<br />
* B-08091: Duration between events calculation ignores negative durations in Snowflake.<br />
* B-08091: Chart loading animation has been renewed.<br />
* B-07636: To prevent dashboards from jamming when querying too much data, added [[QPR_ProcessAnalyzer_Chart#Available_Visualizations|limitations]] to the amount of data that charts can visualize. Note that the limitation concerns the aggregated data that is visualized, not the source event log data.<br />
* B-08017: [[Dashboard_in_Expression_Language|Dashboards API]] has been added to expression language, allowing to create, modify and delete dashboards in scripts.<br />
* B-08056: Following properties have been added to [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#User.2FGroup|user objects]] in expression language: IsLocked, LastLockedDate, LastLoginDate.<br />
* B-08053: [[Navigation_Menu#System_Reports|User rights report]] has been refactored to use [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property in the expression language. The change also simplifies the report as now it only shows the direct role assignments that are visible in the [[Manage_Users_and_Groups|User Management]].<br />
* B-08151: For Snowflake expressions support for following [[SQL_Expressions#Window_functions|windowing functions]]: sum, average, median, min, and max.<br />
* B-08050: When a model is created, the default filter is not created anymore (this is a refactoring that doesn't have any impact on user interface).<br />
* B-08123: Translation updates for 2023.7.<br />
* B-08092: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13876: In CreateSnowflakeConnection function, ProjectId parameter is optional when OdbcConnectionStringKey is not specified.<br />
* D-13898: Snowflake: Exclude case attribute filter didn't work when there was null values and was selecting at least two values.<br />
* D-13890: Fixed XES file import to work.<br />
* D-13894: Business calendar based duration calculation was incorrect in some durations that spanned to several weeks (for Snowflake and in-memory models).<br />
* D-13899: Using broken OdbcConnectionString in a datatable prevented the datatable from being deleted.<br />
* D-13883: Script run stucked after running a script with error that uses client-side ODBC import.<br />
* D-13879: SqlExpressionValue filter when excluding events didn't work with filter rule root expression only.<br />
* D-13896: Adding or removing columns to datatable didn't change the LastModifiedDate.<br />
* D-13882: User details weren't written to operation log when creating or modifying users.<br />
* D-13771: User rights system report didn't give error when changing columns.<br />
* D-13893: Some event filtering caused null pointer error when primary key had been defined.<br />
* D-13873: Fixed pivot table visual issues after component update.<br />
* D-13900: When adding, renaming or removing columns for Snowflake table fails, operation is now rolled back without any changes.<br />
* D-13866: Querying GET api/uielements was quite slow right after server start.<br />
* D-13864: Combinations of translatable and hardcoded strings didn't get translated in UI.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.6 (build 3933) (released 2023-10-24) ==<br />
<br />
'''Features:'''<br />
* B-08055: Error message for locked account has been replaced with generic error message, so that username enumeration is not possible.<br />
<br />
'''Fixed issues:'''<br />
* D-13884: Attributes dialog crashed with some older model configurations.<br />
* D-13843: In charts, selected case and event attributes switched away when attribute data type was ShortString.<br />
* D-13877: Some Snowflake expressions gave error "exceeds maximum length limit of 255 characters" when selecting lot of items.<br />
* D-13878: Snowflake expression filters for case attribute values didn't accept other than string type of case attributes.<br />
* D-13871: Some statistical calculations with percentages didn't work with Last Row Aggregates Over-limit Rows setting.<br />
* D-13875: Using some case level filters in a model without cases datatable didn't work.<br />
* D-13861: Dashboard opens are now logged to the Task log (i.e., calling GET /api/dashboards/{dashboardid}).<br />
* D-13870: Workspace projects hierarchy focused project showed light grey background making the project name not readable.<br />
* D-13867: When starting datatable refresh and going to other tab, went back to Datatables tab when query completed.<br />
* D-13853: If chart Custom Layout settings had extra series defined, chart may have crashed.<br />
* D-13869: Export as CSV button didn't work in the datatable contents dialog when dialog was still loading.<br />
* D-13872: Main progress spinner had unnecessary small scrollbar on top right.<br />
* D-13863: In the REST API method GET /api/users, password field (that has always been null) has been removed.<br />
<br />
== QPR ProcessAnalyzer 2023.6 (build 3847) (released 2023-10-17) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is removed in this release. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
'''Features:'''<br />
* B-07992: Added 10 new presets including Queue analysis, Four eyes principle, Self-looping events, and Path until selected event. There are also presets for Individual Cases Flow and Range of event type occurrences which use Gantt chart.<br />
* B-08011: Added following date related operations for Snowflake: Day of year, Day of month, Day of week, Week of year, Half-year only, Quarter only, Month only, Hours only, Minutes only, Seconds only, and Milliseconds only. These are available when calculating with date type of data.<br />
* B-08016: [[QPR_ProcessAnalyzer_Table#Table_actions|Table actions to set variables]] can also be opened to a new browser tab. Also improved user interface for table actions.<br />
* B-08018: For Snowflake expressions, added Flows aggregations FromEventType and ToEventType to get starting/ending event type, and FlowOccurrences aggregations FromEvent and ToEvent to get starting/ending event.<br />
* B-08001: Added [[Generic_Functions_in_QPR_ProcessAnalyzer#CallStoredProcedure|CallStoredProcedure]] function to call Snowflake stored procedures. This allows to start ETL transformation in Snowflake orchestrated by QPR ProcessAnalyzer script.<br />
* B-08013: Added [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property to expression language to replace the legacy UserPermissions analysis (11).<br />
* B-07976: Snowflake [[Filtering_in_QPR_ProcessAnalyzer_Queries#Expression|expression based filter rules]] support additional expression columns allowing more Big data chart expressions to be filterable.<br />
* B-08015: Big data chart doesn't anymore support calculation in SQL Server (using local datatables).<br />
* B-06270: Improved error messages and made them translatable by taking into use exception codes provided by server.<br />
* B-08021: Added possibility to store [[Diagram_in_Expression_Language|designed diagrams]] for models and expression language API for reading and modifying diagrams.<br />
* B-08037: Dropped following unused tables database: PA_IDEA, PA_IDEA_VOTE, PA_REPORT, PA_REPORT_SETTING, PA_SESSION_SERVICE, PA_VIEW_FILTER_RULE, PA_VIEW_FILTER_RULE_PARAMETER.<br />
* B-08052: Language translations have been updated to 2023.6.<br />
* B-08051: Frontend side components have been updated.<br />
* B-08034: Backend side components have been updated.<br />
<br />
'''Fixed issues:'''<br />
* D-13830: Object counts indicator in header showed incorrect counts when there was disabled filter rules in Snowflake models.<br />
* D-13833: In-memory charts didn't work with boolean type of dimensions when filtering with the false value.<br />
* D-13858: Target value measures didn't update chart when controlled using an on-screen setting.<br />
* D-13827: Calculated attributes data type was incorrectly set as Any by the Attributes dialog.<br />
* D-13849: Multiselect list search didn't allow spaces.<br />
* D-13829: Multiselect dropdown lists height jumped couple of pixels when selecting values.<br />
* D-13835: Deselecting a selected data point didn't remove chart filter rule.<br />
* D-13702: Improved Snowflake query performance in situations when there are lot of filter rules (by decreasing number of CTE's).<br />
* D-13819: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13820: Fixed incorrect manifest.json file to avoid "not found" errors when fetching web site icon.<br />
* D-13865: Break, continue, and return statements didn't work properly when called from inside a catch block.<br />
* D-13795: There was a Python error in clustering analysis with Snowflake model.<br />
* D-13823: Some tooltips in Workspace project hierarchy didn't work and caused a JavaScript error.<br />
* D-13824: BPMN editor align context menu layout looked strange.<br />
* D-13813: QPR logo button in the top left was misaligned in Firefox.<br />
* D-13797: Snowflake query may have given following error when using sampling: ambiguous column name '_EventType_NotNull_1'.<br />
* D-13774: TakeSample function with certain columns caused SQL compilation error: ambiguous column name 'Case Name'.<br />
* D-13782: Snowflake: Aggregating from variations didn't work when using sampling.<br />
* D-13836: Some tooltips had a strange two-colored background.<br />
* D-13834: Removed Model statistics column from clustering and root causes analysis.<br />
* D-13860: Removed filter button from the custom expressions in Task log analyzed objects.<br />
* D-13838: Removed Split data by filtering column from clustering analysis.<br />
* D-13832: Script and model status updates incorrectly sent next update when previous was still pending.<br />
* D-13839: Charts reset zoom button font size was too small.<br />
* D-13817: Importing data to Snowflake datatable with Append=0 doesn't now drop the underlying Snowflake table.<br />
* D-13825: Some models could not have been deleted from recycle bin.<br />
* D-13852: Recycle bin Projects and Models tab didn't show correct content when Recycle bin only contained either models or projects.<br />
* D-13841: In-memory chart Data type selection type has been corrected to string.<br />
* D-13842: Second time and Third time selections has been hidden in in-memory chart measures.<br />
* D-13850: In Chrome, there were console errors related in incorrect text field autocomplete type and text field without form.<br />
* D-13847: Improved browser side performance by removing unnecessary operations.<br />
* D-13859: Chart without dimensions showed an unnecessary Remove dimension button.<br />
* D-12598: When script is stopped in server, ScriptLauncher could still incorrectly continue to import data.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.5 (build 3334) (released 2023-09-07) ==<br />
<br />
'''Fixed issues:'''<br />
* D-13826: Measures or dimensions with case or event attribute and value selections incorrectly removed calculated attributes when dashboard was opened or chart settings were changed.<br />
* D-13821: Font size of some Highcharts tooltips was too small. Issue appeared when there were tooltips mappings in measures or dimensions.<br />
* D-13810: Simplified help links: now all Help buttons go to the QPR ProcessAnalyzer wiki main page.<br />
* D-13822: Snowflake clustering analysis showed empty strings and nulls as case attribute values in an unclear way as just nothing.<br />
<br />
== QPR ProcessAnalyzer 2023.5 (build 3304) (released 2023-09-05) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In Big Data Chart, the '''Case conformance''' measure and dimension has changed in a way that now it provides boolean values (true/false) instead of integer values (1/0). If [[Measure,_Dimension_and_Column_Settings#Other_settings|colorMappings]] are used for this measure or dimension to set specific colors to visualize conformant and nonconformant cases, the mapped values need to be changed as follows: '''1''' -> '''true''' and '''0''' -> '''false'''. Without the change, the mapped colors are not effective.<br />
<br />
Exmaple: Old configuration:<br />
<pre><br />
"colorMappings": {<br />
"1": "#36d475ff",<br />
"0": "#f5403bff"<br />
}<br />
</pre><br />
New configuration:<br />
<pre><br />
"colorMappings": {<br />
"true": "#36d475ff",<br />
"false": "#f5403bff"<br />
}<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is deprecated. Big data chart has allowed to process data both in Snowflake and SQL Server. Now the support for SQL Server is deprecated and the Big data chart will only support calculation in Snowflake. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). The OperationLog analysis is replaced by the [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog function]] and the Infcluencers analysis is replaced by the [[FindRootCauses_Function|FindRootCauses function]].<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [12, 14, 15, 16, 29];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
By default, Snowflake ODBC driver generates quite much logging to files which might unnecessarily fill up the disk space. It's recommended to set the LogLevel parameter to value 0. The path where the logs are created can be seen in Windows registry (key LogPath). More information about configuring Snowflake ODBC parameters: https://docs.snowflake.com/en/developer-guide/odbc/odbc-parameters.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07971: Machine learning based [[Clustering_Analysis|Clustering analysis]] can be run in Snowflake.<br />
* B-07989: In dashboard designer the stacking order of charts can be changed with buttons [[QPR_ProcessAnalyzer_Dashboard_Designer#Viewing_and_Editing_Dashboards|Bring to front, Send to back, Bring forward and Send backward]].<br />
* B-07977: For [[Sankey_Chart|sankey diagram]], added Start level and End level mappings to define custom start and end level for the sankey flows. Implemented also color mappings to define specific colors for specific values.<br />
* B-08010: To improve performance, charts are loaded and updated only when they are visible in the dashboard.<br />
* B-07975: Added following [[SQL_Expressions#Date_functions|date related functions]] to Snowflake: DayOfYear, DayOfWeek, WeekOfYear, Quarter.<br />
* B-07908: When [[QPR_ProcessAnalyzer_Project_Workspace#Duplicating_Model|model is duplicated]], also filters in the model are also duplicated.<br />
* B-07904: Filters and models API for expression language has been completed.<br />
* B-07991: In [[Filter_Selectors|case and event type filter selectors]], threshold whether the dropdown list or search dialog is shown can be defined using the ''Maximum Rows'' setting. Also the search dialog filters search results by other filter rules in the dashboard.<br />
* B-07999: Filters report has been changed to use the [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|expression language API for filters]].<br />
* B-07540: Added [[QPR_ProcessAnalyzer_Expressions#Throwing_objects|throw statement]] to expression language.<br />
* B-07813: UI components are updated. There are small visual improvements, such as in flowchart flows are routed a bit differently and in charts the hidden series is shown as strike-through in the legend.<br />
* B-07963: Following legacy analysis types have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29) (see more information in the note above).<br />
<br />
'''Fixed issues:'''<br />
* D-13777: Filters could not be created in charts when "Update Filter During Selection" setting was disabled.<br />
* D-13767: Automation per Event Types preset in in-memory incorrectly showed only one event type.<br />
* D-13756: Changing background color in KPI card didn't have any effect.<br />
* D-13812: "Exclude events" was incorrectly translated to "Exclure les cas" in French.<br />
* D-13815: Dashboard designer background grid was not visible in entire area in edit mode. Improved also the grid to match to snapping in move and resize.<br />
* D-13674: Business calendar dialog layout was incorrect when a model with a long name was selected to copy holidays.<br />
* D-13811: Table actions link to a new window didn't go to dashboard if there were other parameters in the link.<br />
* D-13601: Fixed issue where some presets may have given error when attribute value selection and the automatically selected attribute conflicted by the data type.<br />
* D-13753: While Snowflake model was selected, in Filters and User Rights reports the Columns list could not be opened.<br />
* D-13720: Now table column filter and sorting are preserved when resizing or zooming page.<br />
* D-13785: In tables increased number of rows to 20000 that are inspected to get available items shown in Excel-style column filter.<br />
* D-13759: Some statistical calculations had bad performance with large number of rows.<br />
* D-13787: Conformance statistics component didn't have scrollbars when text didn't fit to the visible area.<br />
* D-13788: In-memory "Nonconformance reason" selection caused error when two of them was selected in the same chart.<br />
* D-13783: When Analyzed objects was Generic analysis, column selection incorrectly caused "Analysis has not been selected" error.<br />
* D-13776: When measure name contained quotation mark, notification preview didn't work.<br />
* D-13747: Filtering with integer type of case id with case attribute value filter caused error in Snowflake.<br />
* D-13791: In Firefox, model selection in chart settings didn't show models in the first open.<br />
* D-11984: Recycle bin buttons didn't fit to the screen when screen width was small.<br />
* D-13780: Using CaseId case attribute in clustering analysis did not work with Snowflake 106 cases standard model.<br />
* D-13781: Clustering analysis produced Python error with a certain simple Snowflake model.<br />
* D-13730: Snowflake: Case attribute filtering didn't work when there are cases without row in cases table.<br />
* D-13803: There was chart configuration validation error in browser console when measures were moved into dimensions in Big data chart.<br />
* D-13758: There was performance issue with the Recent tasks system preset.<br />
* D-13793: Snowflake clustering failed when cluster count is larger than case count.<br />
* D-13763: SQL expression based filter rule with Where function to filter events didn't filter anything in Snowflake.<br />
* D-13804: Added missing Millisecond function to Snowflake.<br />
* D-13772: Expression EventLog.Cases.Events caused error "Value cannot be null".<br />
* D-13755: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13739: When switching between System reports there was error: "Uncaught Error: 2nd dimension not found. at y.getExpressionConfiguration".<br />
* D-12109: Sometimes flowcharts showed message "Error in querying event type measures. Input string was not in a correct format".<br />
* D-12473: Cost Savings by Automation preset gave sometimes error "Unable to cast object of type 'System.Double' to type 'System.String'".<br />
* D-13750: Snowflake model didn't work with the Case Duration vs. Manual Activities preset.<br />
* D-13657: There was error converting data type nvarchar to bigint.<br />
* D-13796: Some Snowflake operations didn't work with zero rows and columns.<br />
* D-12494: Now when chart size changes, the table column filters and sorting are preserved.<br />
* D-13736: In Performance benchmarking dialog, the Export result button exported wrong benchmark performance analysis result.<br />
* D-13609: Improved conformance analysis related filter names.<br />
* D-13594: Recycle bin buttons were not visible when opening recycle bin in a narrow screen.<br />
* D-13226: Tooltips in the model properties dialog are now translated.<br />
* D-12569: Table incorrectly showed ellipsis for narrow boolean type of columns showing checkboxes.<br />
* D-13391: Emptying date or datetime picker value was not registered and it didn't trigger functionality.<br />
* D-12621: Value search dialog didn't work with values containing backslashes.<br />
* D-13796: Some Snowflake operation didn't work with zero rows/columns.<br />
<br />
== QPR ProcessAnalyzer 2023.4 (build 2628) (released 2023-06-14) ==<br />
<br />
'''Features:'''<br />
* B-07767: Added [[Gantt_Chart|Gantt chart]] to visualize timeline of cases and events divided into swimlanes.<br />
* B-06383: Added [[Sankey_Chart|Sankey chart]] to visualize flow from one set of values to another.<br />
* B-07941: Implemented many more presets running in Snowflake models for compliance and operational excellence use cases. There are also presets for the path analysis and process bottlenecks identification.<br />
* B-07864: Snowflake conformance analysis shows now [[Conformance_Analysis#Top_Deviations_(in-memory)_/_Deviating_Flows_(Snowflake)|reasons for conformance deviations]], such as which event occurrences deviated from the design model.<br />
* B-07909: Snowflake conformance analysis visualizes [[Conformance_Analysis#Undesired_Events_(Snowflake)|undesired event types]] in table and flowchart.<br />
* B-07823: Flowchart Bottlenecks preset has been changed to show bottlenecks for event types. Also renewed the [[QPR_ProcessAnalyzer_Logs#Task_Log|Tasks reports]] to use expression language based interface.<br />
* B-07891: User interface has been [[Languages_and_Localization|translated into Portuguese]].<br />
* B-07873: Improved [[QPR_ProcessAnalyzer_Pivot_Table|pivot table]] visual layout to highlight totals and aggregated rows. Also the row titles are now visible in the top left.<br />
* B-07905: Added [[SQL_Expressions#Rank_functions|Rank related functions]] to Snowflake for writing more versatile custom KPI's, e.g., FirstValue, LastValue, NthValue, Lead and Lag.<br />
* B-07912: Added more SQL expression [[SQL_Expressions#Array_functions|array functions ArrayToString and ArrayOverlap]] to Snowflake.<br />
* B-06449: Added SQL expression functions ToTimestamp and TryToTimestamp for parsing timestamps from strings using provided format.<br />
* B-07959: Added new functions Base64Encode and Base64Decode to help using basic HTTP authentication when calling web services.<br />
* B-07206: SQL expressions support data [[SqlDataFrame_in_Expression_Language#WithClusterColumn|clustering]] which is an unsupervised machine learning algorithm to group data based on similarities.<br />
* B-07848: Data can be extracted from SAP using the encrypted [[Importing_Data_from_SAP#SNC_encrypted_connection|SNC connection]].<br />
* B-07903: Added expression language API to create and modify filters and models.<br />
* B-03103: [[QPR_ProcessAnalyzer_Logs#Task_Log|Task log]] (operation log) can be accessed in expression language.<br />
* B-07872: List aggregation with Distinct=true orders now items by their value.<br />
* B-07940: Removed "Count" aggregation from textual values in Big data chart (you can use the Case count, Event count, etc. selection instead).<br />
* B-07757: Backend support for datatables linking to user-definable Snowflake database, schema and table.<br />
* B-07825: Improved error message when trying to use non-existing attributes in Snowflake queries.<br />
* B-03101: To expression language, added try-catch-finally statement to handle thrown exceptions.<br />
* B-07861: Removed available and total virtual memory information from User settings dialog.<br />
* B-07902: Optimized sequences of joins in Snowflake queries to improve performance.<br />
* B-07837: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13709: If image width-to-height ratio was lower than container's ratio, image was incorrectly stretched to fit the container.<br />
* D-13660: Disabling filter rules didn't work in Snowflake models.<br />
* D-13526: Passing dataframes from SQL scripts to expression scripts didn't work.<br />
* D-13661: Snowflake conformance analysis crashed when there was no access to conformance related Snowflake UDF's.<br />
* D-13693: Resolved major Snowflake conformance analysis performance issues in the BPMN model handling.<br />
* D-13716: Snowflake root causes analysis incorrectly bypassed Snowflake cache.<br />
* D-13707: In SQL Scripting, the datatable analysis (number 18) didn't always copy the data table contents to the target table correctly.<br />
* D-13653: Big data flowchart Root causes preset showed incorrect legend.<br />
* D-13626: Flowchart froze when converting into big data flowchart and vice versa by modifying chart json settings.<br />
* D-13656: Root causes for attribute gave error "Failed to compare two elements in the array" in some situations.<br />
* D-11563: Pivot table had a minimum height of 300px, which caused bottom part of it to be out of view.<br />
* D-13704: In CSV file import, parsing now allows spaces between column separator and text quotation mark.<br />
* D-13598: Chart gave unclear error message when events datatable was not defined.<br />
* D-13655: Improved error messages for BPMN editor and conformance statistics.<br />
* D-13528: Error message for certain erroneous SQL expressions was unclear.<br />
* D-13677: "Flow occurrences with specific case attribute value" selection didn't work for in-memory chart.<br />
* D-13663: Pivot table border line was slightly broken in the header area.<br />
* D-13608: There was incorrect alignment of items in the table paging controls.<br />
* D-13703: Importing CSV file with some special characters to Snowflake failed (due to incorrect escaping in Snowflake staging files).<br />
* D-13708: Duplicating datatable using user defined table, removed data the source table.<br />
* D-13717: Dependency wheel crashed when there were zero weights and showing data labels.<br />
* D-13348: There was an unclear error message when Snowflake query had a certain incorrect expression.<br />
* D-13732: Pivot table Excel export contained headers formatted incorrectly.<br />
* D-13729: There was a JavaScript error when limited user tried to access business calendar.<br />
* D-13662: Percentile function didn't always work with timespan types.<br />
* D-13646: Using incorrectly configured model without cases datatable caused null reference error.<br />
* D-13629: When tried to use chart with a non-existing model, there is now a proper translated error message.<br />
<br />
== QPR ProcessAnalyzer 2023.3 (build 1990) (released 2023-05-03) ==<br />
<br />
'''Features:'''<br />
* B-07818: [[Conformance_Analysis|Conformance analysis]] is supported in Snowflake with following dashboard components: Big data chart, BPMN editor, Conformance statistics, and Design model selector.<br />
* B-07833: [[Root_Causes#Root_causes_in_flowchart|Root causes analysis for flowchart]] is available for Snowflake showing how the event and flow occurrences explain selected phenomena.<br />
* B-07786: Big data chart has more [[Big_Data_Chart#Measure_aggregations|measure aggregations]], such as median, percentile, standard deviation and variance. Also for textual items, unique values can be listed.<br />
* B-07795: [[QPR_ProcessAnalyzer_Table#Conditional_formatting|Conditional formatting]] supports also columns with non-numerical contents.<br />
* B-07830: [[Big_Data_Chart#Measure_aggregations|None and Any aggregations]] for Snowflake and user-friendly formatting for conformance violations.<br />
* B-06527: Error messages in [[Importing_Data_to_Datatable_from_CSV_File|CSV file import]] show also the column number to help working with CSV files with lot of columns.<br />
* B-07747: In-memory conformance checking accepts design models with multiple tasks having same name (same is followed by the Snowflake implementation).<br />
* B-07659: In-memory flowchart preset Case Conformance to visualize conformance checking violations.<br />
* B-07571: Added function IsConformant to backend to check whether cases are conformant.<br />
* B-07863: Added function ConformanceViolationsFlows to backend to return nonconformance reasons for violating cases.<br />
* B-07844: Support for "array" aggregation to return aggregated items as array.<br />
* B-07856: Support for creating and accessing arrays and objects in SQL expressions.<br />
* B-07860: Array handling functions and Tasks property for DesignModel entity.<br />
* B-07847: Added throttling for QPR ScriptLauncher client-side imports to limit memory usage.<br />
* B-07811: Snowflake query optimization to omit columns that are not used by the query.<br />
<br />
'''Fixed issues:'''<br />
* D-13632: Going from variations to event types led to very poor performance with certain models.<br />
* D-13628: Statistical calculations were incorrectly not applied in chart CSV export.<br />
* D-13575: SQL script may have given error "Operand type clash: nvarchar(max) was incompatible with sql_variant".<br />
* D-13597: UI supports now datatable column type "ShortString" (previously datatable contents preview and CSV import didn't work).<br />
* D-13536: Using business calendar sometimes gave error "System.InvalidOperationException: Collection was modified".<br />
* D-13477: Chart types without y-axis mapping caused an error when series mapping was used.<br />
* D-13453: _model variable was not available for Snowflake expression filter rules.<br />
* D-13527: Checkbox height didn't increase when long label needed to span to multiple lines.<br />
* D-13363: Snowflake query with EvaluateAfterAggregations and IsHidden failed when dimensioning by case id column.<br />
* D-13383: Snowflake query gave error "Invalid column name 'FromCase Name'".<br />
* D-13523: Request id was incorrectly shown as zeros in error messages.<br />
* D-13541: In CSV import, error message for maximum number of columns exceeded is improved (maximum is 300 column for SQL Server).<br />
* D-13583: Objects count in header didn't work for empty Snowflake model.<br />
* D-13553: Larger pacm files can now be imported, as there isn't error "Request body too large. The max request body size is 30000000 bytes".<br />
* D-13306: Stack overflow error was given when using SqlDataFrames.<br />
* D-13487: When Flows root and there was filter in Values expression, some flows were lost.<br />
* D-13540: SqlDataFrame query with 300 columns failed to error "WithExpressionColumn: No name given for the new column".<br />
* D-13429: Ordering in List aggregation couldn't find columns in dataframe query.<br />
* D-13406: Dataframe query with root FlowOccurrences and get value from cases caused error.<br />
* D-13538: There was incorrect handling of escaping characters in column names used in dimensions.<br />
* D-13633: Fixed ordering in List aggregation with null and empty values.<br />
* D-13636: Query that dimensions by numeric case attribute with AggregateOthers true, caused error.<br />
* D-13589: Creating Snowflake datatable did not connect to Snowflake.<br />
* D-13623: Value expressions without aggregation didn't work with AggregateOthers setting.<br />
* D-13554: In in-memory chart, percentile function might have return both Int64 and Double type of objects which cannot be sorted.<br />
* D-13481: Improved error message when trying to use deleted model.<br />
* D-13621: Dynamic value search dialog had incorrect font in lists.<br />
* D-13610: Some invalid BPMN files crashed BPMN editor.<br />
* D-13614: Checkbox label texts overflowed to right.<br />
* D-13520: Removed excessive parameters from the Query Designer for generic context queries.<br />
* D-12998: QPR icon was incorrectly positioned in header in Safari.<br />
* D-13480: Import to duration data type is removed from Snowflake datatables, and for local datatables duration type maximum size is checked.<br />
* D-13517: In Highcharts-based visualizationsm conditional formatting didn't work for other than the first y-axis mapping.<br />
* D-13529: In some presets containing several on-screen settings, when chart showed in error message, on-screen settings showed invalid selection.<br />
* D-13530: Opening dropdown list caused JavaScript error when the list contents should be empty after it previously contained items.<br />
* D-13486: Removed unreachable error message in CSV import.<br />
* D-13524: Fixed in-memory chart flow occurrences root measures "Event attribute (text)" and "Event attribute (number)" that caused error.<br />
<br />
== QPR ProcessAnalyzer 2023.2 (build 1478) (released 2023-03-22) ==<br />
<br />
'''Features:'''<br />
* B-07755: [[Business_Calendar|Business calendar]] for duration calculation is available for Snowflake models.<br />
* B-07719: In Snowflake dashboards, [[Big_Data_Chart#Using_measure_variables|measures can be assigned to variables]] and use the variables in other measures to create combined measures.<br />
* B-07746: Changed in-memory conformance checking to not show invalid flow violations where starting or ending event type is invalid.<br />
* B-07743: [[PA_Configuration_database_table#General_Settings|Default datasource]] can be configured for datatables created by scripts, allowing to set Snowflake as default.<br />
* B-07740: System memory indicator moved from the header to User settings Version information dialog.<br />
* B-07776: New SQL expressions functions Unicode, Char and Regexp, as a basis for future rule-based process mining.<br />
* B-07741: Backend support for aggregation operations Median, Percentile, Stdev, Stdevp, Var and Varp to Snowflake.<br />
* B-07742: Backend support for aggregation operation to list unique items in Snowflake.<br />
* B-07770: Optimized Snowflake SQL generation by combining consecutive WithColumn function calls into one select.<br />
<br />
'''Fixed issues:'''<br />
* D-13491: QPR ProcessAnalyzer server crashed now and then when sorting was in progress and the query was cancelled.<br />
* D-13380: Dimensioning integers in in-memory core calculation didn't work correctly as 0 and -1 were put to same bucket.<br />
* D-13385: In Workspace Bin, Delete Forever and Restore from Bin buttons were misaligned.<br />
* D-13332: Conformance checking didn't show in violations when there were multiple undesired events in same case.<br />
* D-13405: Images take now always all available space in image component area.<br />
* D-13417: KPI card without title was slightly misaligned vertically.<br />
* D-13438: Clicking selected event type or flow in flowchart didn't cancel the filter selection.<br />
* D-13350: Task log and Script log default filter end date is now empty by default.<br />
* D-13381: Disabled browser auto-complete from flowchart variation stepper and Workspace create/rename object dialog.<br />
* D-13347: Improved performance for in-memory business calendar calculation.<br />
* D-13335: In in-memory chart, filtering didn't work in "Flow occurrences" root "Flow occurrences with specific event attribute value" dimension.<br />
* D-13367: Percentage value wasn't displayed properly with German or Spanish language when event types were shown in object counts indicator.<br />
* D-13451: Exported filter file is now named based on selected filter name.<br />
* D-13378: In Big data chart, prevented error "Unable to aggregate from level RootCauses to level Custom".<br />
* D-13293: DataFrame query with root Flows and IncludeEvents and ExcludeEvents filter rules failed.<br />
* D-13370: Fixed issue where on-screen settings that didn't have any selectable items, showed a strange selection.<br />
* D-13392: Clustering analysis was incorrectly shown when originally in-memory chart was converted into big data chart by changing chart json settings.<br />
* D-12784: Some Snowflake queries incorrectly bypassed Snowflake caching because they used unique object names.<br />
* D-13456: Improved error messages for incorrectly configured on-screen settings.<br />
* D-13445: Conformance violations related translated terms have been fine-tuned for better translations into different languages.<br />
* D-13421: Improved error messages when trying to use model having some column mappings missing.<br />
* D-13485: Snowflake business calendar gave error when calendar contained Sunday.<br />
* D-13218: Windows event viewer incorrectly contained log entries that are not errors.<br />
* D-12634: Multiline text boxes width is set to non-changeable.<br />
* D-13034: Confirmation dialog to delete items permanently has been updated.<br />
* D-13288: In dialogs, the Create button didn't show the disabled state correctly.<br />
* D-13427: When dropdown lists didn't have any selectable items, the "N/A" text appeared and the list incorrectly took more space vertically.<br />
* D-13483: In Workspace, the new items menu was too narrow for Spanish texts.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.1 (build 1449) (released 2023-02-24) ==<br />
<br />
'''Features:'''<br />
* B-07690: System setting [[PA_Configuration_database_table#General_Settings|DatabaseId]] can be defined by administrator to get more simple table names in Snowflake.<br />
* B-07737: In flowchart Bottlenecks preset, originally used flow colors has been recovered.<br />
* B-07748: For Analyzed objects "Conformance checking findings" in charts, terminology has been revised and issue with the case count calculation fixed.<br />
* B-07663: In [[Chart_On-screen_Settings|on-screen settings]], when case/event attribute is selected, related attribute values list are reset.<br />
* B-07570: Backend support for [[Business_Calendar|business calendars]] in Snowflake.<br />
* B-07660: Backend support for conformance checking to show also the last event index and event type in NotCompleted reason.<br />
* B-07610: Memory counter related technical properties have been removed from expression language.<br />
<br />
'''Fixed issues:'''<br />
* D-13349: Opening dashboard containing Root causes preset with default settings jammed the system by generating lot of calculations (for more information, see previous release notes).<br />
* D-13277: Stacked charts with date type of data as series did incorrectly show gaps in columns/bars.<br />
* D-13270: Flowchart conditional formatting didn't work with duration multi-unit format.<br />
* D-13358: Calculation results caching works also across different user sessions.<br />
* D-13250: Dashboard with two charts connected with linked settings using variables ended up to to a never ending loop.<br />
* D-13230: SAP import did not automatically create columns to use the correct column types.<br />
* D-12857: Deeply recursive functions caused a crash without any trace.<br />
* D-12994: In Workspace, some buttons were not clickable due to breadcrumb covering them.<br />
* D-13249: In Workspace, there was incorrect error message for duplicate datatable names when there were items with only letter capitalization was different.<br />
* D-13232: In-memory chart Top variations preset is now sorted secondarily by average duration descending.<br />
* D-13300: Setting DashboardFilter variable to empty value didn't have any effect in dashboard but old value was incorrectly used.<br />
* D-12834: Limited the maximum number of dimensions to 20, to avoid too demanding queries for SQL Server.<br />
* D-12917: Changed visual indication of missing items in dropdown lists (it's no longer showing "***").<br />
* D-13111: In Root causes preset, there is now error message when trying to use weighting related columns when weighting isn't in use.<br />
* D-13124: SQLDataFrame query containing filter rule EventTypes aggregating from cases failed.<br />
* D-13207: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed.<br />
* D-13292: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed (rev.2).<br />
* D-12991: Dropdown list texts had some translations missing.<br />
<br />
== QPR ProcessAnalyzer 2023.1 (build 1433) (released 2023-02-07) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release contains a potentially severe issue, where some dashboards completely jam the system by generating lot of calculations. The issue may appear in dashboards that have been created in earlier releases and containing the Root causes preset with default settings. The issue will be fixed by the next release. The issue can be worked around by exporting the affected dashboard, modifying the dashboard file manually and importing the dashboard back. The required modification is to remove line(s) containing <pre>"preset": "RootCauses"</pre> and the comma from the preceding line.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Cases (analysis number: 5), Events (6), and EventTypes (7). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). Note that the legacy analyses removal don't affect the dashboarding functionality.<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [5, 6, 7];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2023.1, the '''.NET Desktop Runtime''' is not needed anymore for QPR ProcessAnalyzer Server, so it can be uninstalled. Also for QPR ScriptLauncher, ''.NET Desktop Runtime'' is not needed, but instead install the '''.NET Runtime''' (which is more lightweight). ''.NET Desktop Runtime'' contains the ''.NET Runtime'', so the actions are not mandatory when updating to QPR ProcessAnalyzer 2023.1.<br />
</div><br />
<br />
'''Features:'''<br />
* B-06997: Expression-based filter rules for Snowflake dashboards to allow versatile filtering and filtering from custom expressions.<br />
* B-07383: Improvements to linked settings to allow binding to variables, tags and filter rules [[Chart_Linked_Settings|(more information)]].<br />
* B-07508: Flowchart preset colors have been renewed to be more intuitive.<br />
* B-07184: Automation preset in flowchart has now options for selecting the Automation attribute and value.<br />
* B-07512: Changed datatable metadata can be refreshed from Snowflake, and all rows in the datatable can be deleted easily in Workspace [[QPR_ProcessAnalyzer_Project_Workspace#Datatables|(more information)]].<br />
* B-07440: Date when the release was made is now shown in User settings.<br />
* B-07595: WeekOfYear property for DateTime objects in expression language to get the week number of a year (between 1 and 53).<br />
* B-07623: In-memory expression language functions Random (to get random numbers) and Hash (to get hash value of string).<br />
* B-07612: Breadcrumb in Workspace has now a Home button to quickly navigate to the top level of the projects hierarchy.<br />
* B-07637: Language selector now shows the language options in local languages.<br />
* B-07228: Remove following deprecated analyses: Cases, Events, and EventTypes (see the release note above).<br />
* B-07538: Backend support: Snowflake root causes analysis can find event attribute related root causes.<br />
* B-07706: Backend support: Snowflake expression-based filter rules support for roots containing Where function.<br />
* B-07611: Removed following legacy filter rules: CaseAttributeTrend, EventAttributeTrend, EventTypeTrend, and Duration.<br />
* B-07598: Refactored client-side import for SQL scripting to use generic client-side task mechanism.<br />
* B-07716: ShortString columns are now properly detected in SQL Server queries.<br />
* B-07652: Now it's possible to pipe multiline expression strings to QPR ScriptLauncher.<br />
* B-07688: AddColumns function for Datatables to create multiple columns in one call.<br />
<br />
'''Fixed issues:'''<br />
* D-13092: Table conditional formatting didn't work when color code was fetched from other column.<br />
* D-13105: Some charts created in earlier release referring to non-existing presets names appeared as empty after software update.<br />
* D-13107: Flowcharts crashed and showed loading animation forever when setting color or flow thickness to non-numerical measure.<br />
* D-13104: In BPMN model editor, context menus to edit elements didn't appear.<br />
* D-12939: Script editor tabs Close buttons didn't work.<br />
* D-13154: "Search by case ID" didn't work in in-memory chart.<br />
* D-12933: CSV columns with only empty values were incorrectly auto-detected as integers.<br />
* D-12929: In-memory chart Root causes for case duration and Root causes for case attributes (weighted) had Custom expression missing.<br />
* D-12928: Pivot table headers were empty when there were two column levels and two values.<br />
* D-12924: Pivot table columns with Count and Distinct Count aggregations are now numeric and aligned right.<br />
* D-13033: Changing colors in chart settings Color palette caused "Item already exists" error and prevented changing colors.<br />
* D-12996: Tags referring to dashboard variables didn't work in Additional root expression.<br />
* D-12877: UI gave error in some situations: Uncaught TypeError: Cannot read properties of undefined (reading 'min').<br />
* D-13071: Prevented selecting two or more of the Y-axis, X-axis and series mappings at the same time for the same measure or dimension.<br />
* D-12895: Big data chart crashed when on-screen setting contained event type selector and there were no event type filter set.<br />
* D-13231: Tooltips for dashboard name, model selector and filter selector in header show now the content text instead of generic instruction.<br />
* D-13139: There was an error when tried to create filter for a custom expression where selected data type didn't match with the actual type of data.<br />
* D-12988: Chart presets selection in chart settings showed unnecessary tooltip.<br />
* D-12901: When set sampling over 1 million, Snowflake models gave error: parameter value out of range: size of fixed sample. Must be between 0 and 1,000,000.<br />
* D-12904: Creating expression filter having lower/greater logic with root objects sampling failed.<br />
* D-12923: Chart schema didn't accept pivotAggregation in dimensions/columns.<br />
* D-12926: Root causes columns Selected weight, Compared weight and Total weight have now correct float data type.<br />
* D-12880: In out-of-the box dashboards, chart titles and subtitles were not translated.<br />
* D-12916: Improved filter rule description text in Filter rule editor dialog for expression filter rules.<br />
* D-12889: No clear error message was given when user tried to export corrupted model from .pacm file.<br />
* D-12869: Date selector in on-screen settings had inconsistent vertical alignment.<br />
* D-12938: When creating a filter with lasso and selecting a single data point only, "equals" kind of filter rule is now created.<br />
* D-12989: "Running tasks as specific time" system report may have ended up in loop causing following error: Maximum call stack size exceeded error.<br />
* D-13010: Pivot table sometimes ended up to never-ending resizing loop when browser zoom was more than 100%.<br />
* D-12790: Expression language: DataFrame.SetColumns: Initializing and using variables defined in closure of SetColumns function parameter didn't work<br />
* D-12927: All on-screen settings were not be visible in narrow charts having several on-screen settings.<br />
* D-12937: Added maximum value limitation to several number input fields in charts.<br />
* D-12947: Message dialog didn't show line breaks correctly (e.g., in CSV file import).<br />
* D-12948: Defining column setting caused error when Measure Expression was not defined.<br />
* D-12946: Filter rule text couldn't be seen entirely from tooltip.<br />
* D-12983: When range filtering using integer values in Highcharts chart, filter is now shown as integer value.<br />
* D-12984: When range filtering in Highcharts charts and there is category axis, filter rule is now based on individual (category) values.<br />
* D-12930: When creating filters from charts using date type of X-axis with lasso, "greater than or equal" and "less than or equal" filter rules are not created.<br />
* D-12920: "Where" function in DataFrame lost column data types of the original DataFrame.<br />
* D-13048: Model notifications failed with certain measures that define variables in root expression leading to error: Variable "sampleSize" already exists in this context.<br />
* D-13116: BPMN editor had some translations missing.<br />
* D-13019: Datatable and script selectors show now datatable/script name instead of id, when opening selector having existing selections.<br />
* D-12951: Changing additional root expression in flowchart didn't refresh the flowchart.<br />
* D-13147: Filter rule boxes in header had different widths, and Add filter rule button vertical alignment was incorrect.<br />
* D-12907: Sometimes case attribute selection showed incorrect attribute name for empty model.<br />
* D-13148: Filters and Datatables system reports loaded unnecessarily twice which could be seen as blinking.<br />
* D-12844: In dataframe query, FlowOccurrences in root and GetValueFrom Cases with filter gave null reference exception<br />
* D-12915: Repeating certain query twice with aggregations in Events root generated invalid SQL<br />
* D-12728: Was huge amount logs in server during client side import (manual testing required as identification)<br />
* D-13156: Persist function failed to snowflake: Invalid unicode escape sequence '\u0027ACCE'; should be at most '\u0010FFFF'.<br />
* D-12876: Flows/FlowOccurrences in root didn't work with SqlExpressionValue filtering.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2022.8 (build 1397) (released 2023-01-11) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release fixes an issue where extracting large datasets from SAP increases memory consumption considerably and may lead to out-of-memory error. This release contains packages for both QPR ScriptLauncher and QPR ProcessAnalyzer Server. If SAP extractions are done using QPR ScriptLauncher in client side mode (ExecuteInClientSide=1), it's enough to update QPR ScriptLauncher to fix this issue.<br />
</div><br />
<br />
'''Fixed issues:'''<br />
* D-12941: Extracting data from SAP consumed unnecessary lot of memory and may have led to out-of-memory error (both when running using QPR ScriptLauncher and in server side).<br />
<br />
== QPR ProcessAnalyzer 2022.8 (build 1396) (released 2022-12-30) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Creating datatables with duplicate names in the same project is prevented, and possible existing duplicate names are automatically changed to unique names with a random suffix. If there are duplicate names, they can be renamed either before updating QPR ProcessAnalyzer (to avoid automatic renaming) or after the update (by changing suffixed names). If the renamed datatables are used by models, the linkage will break because it's based on the datatable name. Creating duplicate datatables has already been prevented in the UI, but the improved method works also in the API level.<br />
<br />
Following SQL query can be used to list datatables (and project id) having duplicate names:<br />
SELECT ITA_NAME, ITA_PROJECT_ID<br />
FROM PA_INTEGRATION_TABLE<br />
GROUP BY ITA_NAME, ITA_PROJECT_ID<br />
HAVING Count(*) > 1<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
If trying to use business calendar for a model that doesn't have the business calendar defined, there will now be an error message instead of showing the chart. Either unselect the business calendar checkbox for the measure or dimension, or define a business calendar to the model. In this situation in earlier releases the business calendar was ignored and full time calculation used.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07498: Automation and Operational Excellence presets and Root causes analysis (for Snowflake), Weighted root causes analysis and Event scattering preset (for Snowflake and in-memory), Root causes for case duration (in-memory).<br />
* B-07177: Flexible mappings, user selectable aggregations and conditional formatting for Pivot table, and flexible mappings for KPI Card.<br />
* B-07518: New function named Query to run call /api/expression/query.<br />
* B-07294: In Workspace, the left side projects hierarchy can be collapsed and expanded to make more space to project contents.<br />
* B-06814: In SQL expressions, new function DurationBetweenDates to calculate duration between timestamps precisely.<br />
* B-07519: Replaced DateDiff function with the new DurationBetweenDates function in big data chart.<br />
* B-07531: In SQL expressions, new mathematical functions Abs, Log, Mod, Power, Rand, Sign and Sqrt.<br />
* B-07297: To optimize performance, Snowflake queries are automatically cancelled if they are not needed by UI.<br />
* B-07569: To optimize performance, TakeSample function implementation is improved for Snowflake.<br />
* B-07198: Several performance improvements to DataFrame queries (used in Snowflake).<br />
* B-07464: Added Lead and Lag functions to SqlDataFrames to support getting previous and next event.<br />
* B-07470: New ExtractSap function to fetch data from SAP using expression language.<br />
* B-07536: New Pivot function to SqlDataFrames to enable root causes analysis.<br />
* B-07488: Primary keys can be set to datatables to improve calculation performance (UI will follow later).<br />
* B-07515: Added RootCauseAnalysis function to SqlDataFrames.<br />
* B-07546: RootCauseAnalysis function support for complex weighting expressions.<br />
* B-03052: Support for user-defined variables in /api/expression/query.<br />
* B-07565: Support for NumberPrecision, DatetimeTruncation and TimespanPrecision properties for Values section in in-memory query.<br />
* B-07513: For product activation file handling, replaced mutex based implementation with exclusive file lock.<br />
* B-07480: Expression language support for DataFlows for data extraction.<br />
* B-07613: Removed support for SQL Server based R scripting.<br />
* B-07567: Take datatable primary keys into use in expression builder to improve performance (part 2).<br />
* B-07588: Remove total memory information from log writing and DateDiff function for in-memory.<br />
<br />
'''Fixed issues:'''<br />
* D-12715: Snowflake calculated imprecisely some operations containing division and aggregation.<br />
* D-12761: Progress bar of the CSV import dialog didn't show any progress.<br />
* D-12799: Opening datatable contents dialog settings was slow when there were lot of rows in the datatable.<br />
* D-12089: Include conforming/nonconforming cases made BPMN editor no responding.<br />
* D-12496: Datagrid filter search keyword didn't work for rounded values, so the search was hidden for other than textual data.<br />
* D-12704: Durations as quarters was calculated incorrectly in charts.<br />
* D-12662: Fixed issue where some special literals in custom expressions didn't work.<br />
* D-12403: Setting Notifications on a model had some visual issues.<br />
* D-12859: Dependency wheel visualization crashed with nulls values in From and To mappings.<br />
* D-12660: Removed unnecessary float conversions in SQL expressions.<br />
* D-12653: In-memory datafram OrderByColumns function with mixed values failed.<br />
* D-12657: When trying to use milliseconds period in some presets, frontend frozed.<br />
* D-12706: Line breaks in data were shown in many places where it's undesired.<br />
* D-12719: Syncfusion dialog headers showed backslaces incorrectly.<br />
* D-12372: Refused to run the JavaScript URL because it violated the Content Security Policy directive.<br />
* D-12730: Logging out when filter selection is in progress, gave javascript error.<br />
* D-12705: Header object counts tooltip was sometimes messed after logout.<br />
* D-12384: Selected project was not highlighted for whole project name string.<br />
* D-12581: Prevented creating duplicate datatable names in same project in parallel execution.<br />
* D-12722: There was incorrect syntax near '<' when running SqlDataFrame expressions.<br />
* D-12736: Swedish and Finnish translation improvements for object counter tooltips.<br />
* D-12702: For BPMN Editor component "Something went wrong" error was given when switching from in-memory to Snowflake model.<br />
* D-12712: UI gave error: TypeError: Cannot read properties of undefined (reading 'id').<br />
* D-12738: Business calendar showed total business time when calendar configuration was invalid.<br />
* D-12776: Special character filter caused JavaScript SyntaxError.<br />
* D-12785: Unnecessary vertical scrollbar displayed for main header toolbar.<br />
* D-12164: There was unnecessary UnauthorizedAccess errors in logs.<br />
* D-12580: Case duration was not same when comparing Big data chart with in-memory chart for same data.<br />
* D-12768: Data grid links and variable change actions didn't work when grouping was used.<br />
* D-12735: FindRootCauses (in-memory) function filtered out cases with zero contribution.<br />
* D-12763: --#CallWebService didn't work from ScriptLauncher.<br />
* D-12789: There was timeout in SQL queries to scripting sandbox.<br />
<br />
== QPR ProcessAnalyzer 2022.7 (build 1331) (released 2022-11-15) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2022.7, to improve security expression language operations that modify data or connect to external datasources are prevented in dashboard custom expressions. The limitation is required, because when a dashboard is opened, its expressions are run with the user's permissions, and the user need to trust the expressions don't perform any unexpected operations, such as delete data. The full functionality of the expression language is available in the scripts and in the Expression Designer.<br />
<br />
The following functions and operations are prevented in dashboards: SendEmail(), CallWebService(), ImportOdbc(), ImportOdbcSecure(), Model.DeletePermanently(), Model.Restore(), Model.TriggerNotifications(), Project.DeletePermanently(), Project.Restore(), Project.CreateDatatable(), Datatable.AddColumn(), Datatable.DeletePermanently(), Datatable.Import(), Datatable.Merge(), Datatable.RemoveColumns(), Datatable.RenameColumns(), Datatable.Truncate(), RecycleBin.DeletePermanently(), and call SQL script. Calling expression scripts is allowed, but in the script all previously mentioned operations are prevented.<br />
<br />
Following SQL query can be executed in the QPR ProcessAnalyzer metadata database to reveal dashboards that potentially have prevented expressions:<br />
SELECT * FROM [PA_UI_ELEMENT] WHERE [UIE_PROPERTIES] LIKE '%SendEmail(%' OR [UIE_PROPERTIES] LIKE '%CallWebService(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbc(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbcSecure(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Restore(%' OR [UIE_PROPERTIES] LIKE '%TriggerNotifications(%' OR [UIE_PROPERTIES] LIKE '%CreateDatatable(%' OR [UIE_PROPERTIES] LIKE '%AddColumn(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Import(%' OR [UIE_PROPERTIES] LIKE '%Merge(%' OR [UIE_PROPERTIES] LIKE '%RemoveColumns(%' OR [UIE_PROPERTIES] LIKE '%RenameColumns(%'<br />
</div><br />
<br />
'''Features:'''<br />
* B-07287: Process Discovery and most important presets for Snowflake.<br />
* B-07271: "Last Row Aggregates Over-limit Rows" setting for big data chart.<br />
* B-06431: Snowflake datatables support for database views in the datasource.<br />
* B-07266: Security: "limited mode" to prevent data modifications and external calls from dashboard expressions.<br />
* B-07097: Improved flowchart root causes color scales.<br />
* B-07363: SQL LIKE function support for escape character.<br />
* B-06877: Improved variation queries performance in Snowflake, part 1.<br />
* B-07444: Improved variation queries performance in Snowflake, part 2.<br />
* B-07382: Support for empty strings and nulls in event type names in dataframe processing.<br />
* B-07273: WithRowNumberColumn, WithRankColumn, WithDenseRankColumn support for descending sorting.<br />
* B-07303: FindRootCauses function support for weighting expression.<br />
* B-07327: Unpivot function for SqlDataFrames (for root cause analysis).<br />
* B-07385: Align token lifetime with SESSION_MAXIMUM_DURATION setting.<br />
* B-07500: ColumnMappings property for IDataFrame and DataTables.<br />
* B-07499: IDataFrame.ApplyFilter function to filter events data using a JSON-based filter.<br />
* B-07469: Translation updates for release 2022.7.<br />
<br />
'''Fixed issues:'''<br />
* D-11630: Drag and drop from chart settings to main header was working incorrectly for filter and root cause rules.<br />
* D-12455: Moving a chart filter from one chart to another created a root cause analysis filter.<br />
* D-12266: Root causes analysis showed incorrect results when certain combination of filters.<br />
* D-12525: Numerical values in Excel export in data grid was formatted incorrectly.<br />
* D-12534: Restoring item from recycle bin changed project from Bin to previous project.<br />
* D-12529: Measure specific datalabel mapping did not work correctly when also mapped to Y-axis.<br />
* D-12532: Multi-selection options caused layout issue for Chart setting.<br />
* D-12541: Layout issue for Polish in multiselect list search dialog.<br />
* D-11277: Increase/decrease Icons were missing in the dimension sorting for Mac.<br />
* D-12552: Uncaught Error: Diagram.selectCollection given something that is not a Part: null.<br />
* D-12567: Tooltip incorrectly showed for label component containing only spaces.<br />
* D-12438: Operation was cancelled because it was replaced by a new operation.<br />
* D-12551: Some expressions didn't work as calculated case/event attributes.<br />
* D-11720: Chart buttons were not visible in Apple Safari and iPad.<br />
* D-12544: On-screen settings "options" parameter did not work.<br />
* D-12528: Multi-unit time unit selection appeared where it's not applicable.<br />
* D-12583: Error message should be provided for invalid settings input than just display JS errors.<br />
* D-12599: Tooltips didn't show correct measures/dimensions when "Show in tooltip" mappings are used.<br />
* D-12561: Chart settings content was incorrectly drawn outside of the chart dialog.<br />
* D-12568: Reload UI sometimes crashed chart having multiselect on-screen settings.<br />
* D-12572: Main header toolbar lost when refresh maximized PA chart.<br />
* D-12612: Drop Unused Filters After setting incorrectly allowed zero seconds.<br />
* D-12533: Error message keeped blinking in Analysis view.<br />
* D-12608: User could not select or add new case attribute when current select attribute doesn't exist.<br />
* D-12451: Prevented deleting running script.<br />
* D-12516: Windows event viewer warning: Failed to gracefully shutdown application.<br />
* D-12523: Business calendar performance - part 2.<br />
* D-12538: Column with same name could be added multiple times to datatable using expression language.<br />
* D-12582: Improved EMS mutex code to support multiple PA service in one server.<br />
* D-12624: Synchronize new (empty) data table generated failed queries in Snowflake.<br />
* D-12622: Advanced setting page reserved room for the expression editor frame that did not exist.<br />
* D-11295: In on-screen settings, some UI controls were vertically misaligned.<br />
* D-11625: The heights of the parameter option menu in the clustering tab was not well aligned.<br />
* D-12103: Small dropdown list layout issue.<br />
* D-12633: Align issue for Column related Advanced settings.<br />
* D-12505: Search dialog didn't escape % and _ characters correctly in dataframe processing.<br />
* D-12645: Tabs in expression settings dialog were partly hidden when dialog is narrow.<br />
* D-11382: Moving of flowchart was sometimes shaky.<br />
* D-12655: Filter rule tooltips in header were styled incorrectly.<br />
* D-12656: Large integer values in filter jsons were incorrectly presented as small integers.<br />
* D-12661: Some exported filters contained unnecessary "invert" property.<br />
* D-12500: Model with numeric case id's and filtering with the attribute mapped as case id: ERROR [22018] Numeric value <nowiki>''</nowiki> is not recognized.<br />
* D-12509: Filtering null values didn't work in boolean attributes in Snowflake.<br />
* D-12571: In dataframe processing in SQL Server, dividing two integers should not make rounding to integer.<br />
* D-12610: Setting for global DropUnusedFiltersAfter was missing.<br />
* D-12613: Filtering with case/event attributes with null values didn't match in Snowflake models.<br />
* D-12617: Model didn't work when DropUnusedFiltersAfter is 00:00:00.<br />
* D-12618: If model ConfigurationJson is null, Configuration property didn't work.<br />
* D-12620: Filtering didn't work when there are backslaces in attribute names in Snowflake models.<br />
* D-12643: AttributeFunctionCallExpression did not always work properly in array context.<br />
* D-12647: SqlDataFrame with SQL Server: Comparing literals to variant column values failed.<br />
* D-12648: Models that have DropUnusedModelsAfter setting caused "The sliding expiration value must be positive" error.<br />
* D-11526: It was unable to translate Unicode character \uD83D at index 176 to specified code page.<br />
* D-12637: In application startup arised FATAL Application startup exception System.UnauthorizedAccessException: Access to the path 'Global\MutexQPRPAActivation' is denied.<br />
<br />
== Old Releases ==<br />
See older releases in [[QPR ProcessAnalyzer Release Archive]]<br />
__NOTOC__<br />
<br />
[[Category: QPR ProcessAnalyzer]]</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&diff=24484QPR ProcessAnalyzer Release Notes2024-03-12T09:46:01Z<p>Ollvihe: </p>
<hr />
<div>This page lists all new features and fixed issues for each QPR ProcessAnalyzer release.<br />
<br />
== Next Release: QPR ProcessAnalyzer 2024.3 (planned release date 2024-04-02) ==<br />
<br />
'''Features:'''<br />
* B-08242: [[Actions_to_Run_Script_in_Table|Custom actions]] can be started from dashboard table context menu, e.g., create ticket, trigger automation and fetch external information.<br />
* B-08231: Snowflake performance improved by changing object counts query (shown in header) into two queries, so that the filtered object count uses eventlog caching.<br />
* B-07906: Implemented cross joins to SQL dataframes.<br />
* B-03047: Removed support for dashboard panels.<br />
* B-08214: Removed unused columns from the PA_VIEW table.<br />
<br />
'''Fixed issues:'''<br />
* D-14048: Fixed issue where in-memory root causes analysis for case attributes didn't show attributes with ShortString data type.<br />
* D-14049: Added some missing translations for table column filter and BPMN editor.<br />
* D-14021: FindRootCauses function WeightingExpression was run in incorrect context for in-memory model.<br />
* D-14020: Query which goes from EventTypes to Cases did not show the error when using GetValueFrom function.<br />
* D-13976: Fixed issue where gateway-based imports were not synchronous.<br />
* D-13689: Fixed JavaScript error in Highcharts polar chart with tooltips.<br />
* D-12614: Highcharts gives "Maximum call stack size exceeded" error in bar chart with polar and data labels.<br />
* D-14060: Highcharts custom layout translatable properties incorrectly changed chart configuration by translating the labels.<br />
* D-14071: Business calendar button press caused error when user didn't have access to any model.<br />
<br />
== Latest: Additional release for QPR ProcessAnalyzer 2024.2 (build 5509) (released 2024-02-27) ==<br />
<br />
'''Features:'''<br />
<br />
* B-06280: User management dialog shows whether users have password defined and unnecessary passwords can be removed to improve security.<br />
<br />
'''Fixed issues:'''<br />
<br />
* D-14045: Fixed issue where users with Viewer or Analyzer role couldn't create filters in Snowflake models.<br />
<br />
== QPR ProcessAnalyzer 2024.2 (build 5438) (released 2024-02-21) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue: Snowflake models and dashboards don't work with Viewer and Analyzer role permisions. The reason is that cache tables created to Snowflake incorrectly require the write permissions. Workaround is to give users the Designer role which will give the needed permissions. Note that the Designer role gives many permissions to the user for the project [[Roles_and_Permissions#Roles_and_Permissions|(more information)]]. This issue has been fixed in the next release (D-14045).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
The legacy User permissions report (analysis number 11) and Filters report (analysis number 30) used in SQL scripts have been removed. Use instead the expressions language to query filters and user permissions, e.g., [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|Models.Filters]] and [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
New version of the Design diagram component has been improved with object-specific measures, and the previous common measures are not migrated into object-specific measures. Thus, the measures need to be configured again, or manually edit the chart json settings (if needed please ask instructions from QPR CustomerCare).<br />
</div><br />
<br />
'''Features:'''<br />
* B-08022: Design diagram supports now BPMN notation, elbow style flows and object-specific measures.<br />
* B-08232: Entire future eventlogs can be [[Create_Predicted_Eventlog|predicted]] based on generative AI models running in Snowflake.<br />
* B-08166: Added expression language function [[Generic_Functions_in_QPR_ProcessAnalyzer#OpenAIChatCompletion|OpenAIChatCompletion]] to answer natural language prompts based on OpenAI ChatGPT API.<br />
* B-08177: Snowflake query performance has been improved by introducing caching of filtered eventlogs using Snowflake tables.<br />
* B-08196: Conditional formatting rules can be defined for [[QPR_ProcessAnalyzer_Table#Textual_equal_rules_for_background_color|textual and boolean values]].<br />
* B-08213: Big data chart expressions event type selections to be multi-select where applicable.<br />
* B-08205: Expression language API is available for storing [[Storing_Secrets_for_Scripts|secrets]] for scripts.<br />
* B-07780: Chart [[QPR_ProcessAnalyzer_Chart#Variable_mappings|variable mappings]] has been removed - use the [[Chart_Linked_Settings|linked settings]] instead. Dashboards using variable mappings are automatically converted to use linked settings.<br />
* B-08117: Added ToSqlDataFrame function to convert in-memory dataframe into SQL dataframes.<br />
* B-08174: Only non-default parameters values are written to the operation log.<br />
* B-08200: Timestamps in System reports are shown in user workstation local time.<br />
* B-08171: Dashboard id has been added to queries, to track from which dashboard queries are originating.<br />
* B-07144: Remove legacy User permissions report (analysis number 11) and Filters report (analysis number 30) in SQL scripts (see note above).<br />
* B-08193: Added retry mechanism to QPR ScriptLauncher to recover if connection to server breaks.<br />
* B-08202: Updated copyright for year 2024.<br />
* B-08199: Frontend components have been updated.<br />
* B-08203: Backend components have been updated.<br />
* B-08209: Translations updated for release 2024.2.<br />
<br />
'''Fixed issues:'''<br />
* D-13972: Some measures/dimensions/columns in Big data chart didn't show the expressions level filtering.<br />
* D-14015: Fixed business calendar incorrect calculation when business period covered entire day.<br />
* D-14014: Fixed issue where Snowflake business calendar could not have end time as 00:00.<br />
* D-13962: System variable values were interpreted incorrectly when used in linked settings.<br />
* D-13971: HiddenInNavigation and SortOrder variables didn't work in navigation menu dashboards list.<br />
* D-13959: Removed possibility to add datatable columns with the legacy "any" data type.<br />
* D-13991: Improved drop-down selector component to handle empty strings as variable values.<br />
* D-13965: Datatable column name length was validated incorrectly which may have caused error in saving with too long column names.<br />
* D-13958: Project names showed unnecessary html escaping in the "Move to" menu.<br />
* D-13964: Model attributes and notifications dialogs gave error when trying to use dashboard tags.<br />
* D-13960: Added missing translations for list of permission list and 12-hour clock format.<br />
* D-13966: Fixed issue were root causes chart tooltip sometimes didn't disappear.<br />
* D-13969: Datatable column schema export sometimes showed empty for the key column.<br />
* D-13862: Session token was not accepted when url path capitalization is different.<br />
* D-13942: Datatable could not be dimensioned if it has column named "CaseId".<br />
* D-13980: Business calendar dialog crashed when tried to open it for a model without access.<br />
* D-13983: Notifications dialog didn't validate situation when same name was used in a measure and dimension.<br />
* D-13981: Dashboard import set incorrect model id to dashboard if there was no access to any model.<br />
* D-11276: Translations were missing for 12-hour clock dates (AM and PM) in dashboards.<br />
* D-13977: Multi-select dropdown lists showed some special characters incorrectly.<br />
* D-13945: Syncfusion toast message didn't work when text contains ${[]}.<br />
* D-13930: Pivot table throws javascript error when certain clicks.<br />
* D-13273: Duplicate datatable row count didn't shown correctly.<br />
* D-13994: There was an error in the in-memory chart with some flow related measures about duplicate variable names when same measure was defined twice.<br />
* D-13985: Models list dots menu had texts misaligned in narrow screens.<br />
* D-13995: In Workspace, wrong datatable was selected after duplication when non-default sorting was applied.<br />
* D-13997: Workspace tables column filtering search caused JavaScript errors.<br />
* D-13978: In table Excel export, the last row representing other items appeared incorrectly for in-memory chart.<br />
* D-14007: In System reports, model related selections are hidden from the Analyzed objects lists.<br />
* D-14005: In big data chart, changing to custom expression caused crash with some expressions having case/event attribute.<br />
* D-14003: When dimensioning was not used, pivot table values were incorrectly rounded in the server side.<br />
* D-14004: Removed empty filters from queries to optimize them.<br />
* D-13988: Fixed issue where data grid context menu rendered initially as too high.<br />
* D-13979: BPMN model editor element settings use now Open Sans font.<br />
* D-14013: Fixed incorrect expression "Duration between first and last occurrence" in big data chart event types.<br />
* D-13984: Fixed the error of refusing to run the JavaScript URL.<br />
* D-14031: ThrownObject property was not included to http error response when error came from the script.<br />
<br />
== QPR ProcessAnalyzer 2024.1 (build 4784) (released 2024-01-10) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue fixed in QPR ProcessAnalyzer 2024.2: In Big data chart, some measures, dimensions and columns have the filtering option missing. The issue concerns for example Duration between events, Path starting/until between specific events, and Cases where event occurs before other selections. Workaround is to set the filter in the chart json settings: the filter can be configured to another expression and copied to the correct expression.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
QPR ProcessAnalyzer Server and QPR ScriptLauncher are now using .Net 8 (previous was .Net 6). When updating to this release, install the .Net 8 Runtime ([[Updating_QPR_ProcessAnalyzer_Server|see more]]). The .Net 6 doesn't need to be uninstalled immediately because .Net 6 and .Net 8 work side-by-side, but due to security reasons, the unused .Net 6 should eventually be uninstalled.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In this release, all filters that don't contain any filter rules, are removed. These are legacy filters which have not been visible in the UI.<br />
</div><br />
<br />
'''Features:'''<br />
* B-08019: New component [[Design_Diagram|Design Diagram]] for showing user-created diagrams in dashboards where to visualize process mining metrics.<br />
* B-08087: Generic [[Dropdown_List_Selector|dropdown list selector]] works with Snowflake models allowing to add selection lists for any values.<br />
* B-08163: Linked settings support for binding to [[Chart_Linked_Settings#Binding_to_case_attribute_filters_with_attribute_name_and_attribute_values|case attribute filter values without defining case attribute name]].<br />
* B-08170: Snowflake model filters can be [[Filtering_in_QPR_ProcessAnalyzer#Filter_actions|saved as new models]] which can be used to create snapshots of part of models.<br />
* B-08093: Multiple dashboards can be exported to same file, and model can be set for imported dashboards.<br />
* B-08161: Added [[Datatable_in_Expression_Language#Modify|Modify]] function to change datatable properties and improved [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#CreateDatatable|CreateDatatable]] function for creating datatables.<br />
* B-08122: Added new system report to list dashboards.<br />
* B-08173: Removed legacy filters that didn't have any filter rules.<br />
* B-07961: In OperationLog, changed parameters to json format and added request id.<br />
* B-08069: Added DashboardId property to [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog]] in expression language.<br />
* B-08139: Added [[Datatable_in_Expression_Language#UpdateRows|UpdateRows]] function to update existing rows in datatables with similar logic than SQL update.<br />
* B-08115: Added [[Datatable_in_Expression_Language#DeleteRows|DeleteRows]] function to delete rows in datatables with similar logic than SQL delete.<br />
* B-08149: QPR ProcessAnalyzer has been updated to .Net 8.<br />
* B-08054: Changed Scripts property in generic context to return all scripts, instead of legacy system level scripts.<br />
* B-08138: Changed Synchronize function to remove all columns when no Snowflake table exists.<br />
* B-07689: For datatables, [[Datatable_in_Expression_Language#ForeignKeys|foreign keys]] to other datatables can be defined using expression language.<br />
* B-08176: Translation updates for release 2024.1.<br />
* B-08175: Workspace should show timestamps in user's local time.<br />
<br />
'''Fixed issues:'''<br />
* D-13913: Datatable properties dialog incorrectly showed linked models from other projects.<br />
* D-13916: Chart filter could not be defined for some expressions in Big data chart.<br />
* D-13933: Navigation menu selected item wasn't highlighted when used Snowflake models.<br />
* D-13906: In Conformance Analysis, deviating flows were not translated.<br />
* D-13907: Improved translation related to datatable properties dialog "Used by models" field.<br />
* D-13904: There was an unclear error message in Snowflake, as exception code 1 was returned without AttributeName and ModelName properties when non-existing attribute was in filter.<br />
* D-13911: Fixed small glitches in the opening and closing of drop-down lists.<br />
* D-13918: Datatable could be configured incorrectly to use table for other datatable.<br />
* D-13932: Duplicating datatable with custom table in datasource losed all data.<br />
* D-11002: Removed legacy in-memory prediction preset.<br />
* D-13912: Added check that array cannot be stored to dashboard Content property.<br />
* D-13936: Query designer default query didn't work with Snowflake models.<br />
* D-13938: There was an incorrect logging with some operations related to ScriptLauncher.<br />
* D-13923: Snowflake expressions didn't work with Where function in root referring to case attribute.<br />
* D-13939: ApplyFilter function gave null reference error for non-existing attribute name.<br />
* D-13931: There were issues with AllowExternalDatasources and EnableFullFunctionality settings.<br />
<br />
== QPR ProcessAnalyzer 2023.7 (build 4326) (released 2023-11-28) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Limitation for the maximum amount of data (B-07636) causes a behavior change in in-memory charts that have the Maximum rows settings empty and have the sorting defined. In certain cases, the order in which measures are evaluated changes (due to an internal performance optimization). If there are custom expressions that define variables, the variables may not be available in other measures anymore. As a resolution, either redefine the variables in those measure expressions or add those measures secondarily to the sorting.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Default query timeout of 30 minutes has been added for --#ImportOdbcQuery, --#ImportSqlQuery and --#ImportOleDbQuery commands. If a query run is taking longer than the timeout, the query is stopped. The timeout can be adjusted using the '''QueryExecutionTimeout''' parameter. Previously, there has been no timeout, so queries that take more than 30 minutes require configuring a longer timeout.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Incorrectly configured [[Chart_Linked_Settings|linked settings]] in charts (available in the ''Advanced'' tab) give now an error message, if they are referring to non-existing measures, dimensions or columns. Previously, incorrect linked settings were ignored. To fix the error message, remove the incorrect linked settings.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07511: Datatables have a [[Datatable_Properties_Dialog|dialog]] to view datatable properties, write description, set the Snowflake source table, add/modify/delete columns, and set the datatable key.<br />
* B-08150: Added setting [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|Apply chart filters first]] to determine whether chart filter rules or dashboard filter rules are applied first when chart queries are filtered.<br />
* B-08091: When filtering charts in Snowflake, case attribute filter is created instead of case id filter.<br />
* B-08091: [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|New setting]] to define whether cases or events are filtered by default.<br />
* B-08091: New preset "Looping paths" to detect whether there are repeating patterns of events.<br />
* B-08091: Duration between events calculation ignores negative durations in Snowflake.<br />
* B-08091: Chart loading animation has been renewed.<br />
* B-07636: To prevent dashboards from jamming when querying too much data, added [[QPR_ProcessAnalyzer_Chart#Available_Visualizations|limitations]] to the amount of data that charts can visualize. Note that the limitation concerns the aggregated data that is visualized, not the source event log data.<br />
* B-08017: [[Dashboard_in_Expression_Language|Dashboards API]] has been added to expression language, allowing to create, modify and delete dashboards in scripts.<br />
* B-08056: Following properties have been added to [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#User.2FGroup|user objects]] in expression language: IsLocked, LastLockedDate, LastLoginDate.<br />
* B-08053: [[Navigation_Menu#System_Reports|User rights report]] has been refactored to use [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property in the expression language. The change also simplifies the report as now it only shows the direct role assignments that are visible in the [[Manage_Users_and_Groups|User Management]].<br />
* B-08151: For Snowflake expressions support for following [[SQL_Expressions#Window_functions|windowing functions]]: sum, average, median, min, and max.<br />
* B-08050: When a model is created, the default filter is not created anymore (this is a refactoring that doesn't have any impact on user interface).<br />
* B-08123: Translation updates for 2023.7.<br />
* B-08092: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13876: In CreateSnowflakeConnection function, ProjectId parameter is optional when OdbcConnectionStringKey is not specified.<br />
* D-13898: Snowflake: Exclude case attribute filter didn't work when there was null values and was selecting at least two values.<br />
* D-13890: Fixed XES file import to work.<br />
* D-13894: Business calendar based duration calculation was incorrect in some durations that spanned to several weeks (for Snowflake and in-memory models).<br />
* D-13899: Using broken OdbcConnectionString in a datatable prevented the datatable from being deleted.<br />
* D-13883: Script run stucked after running a script with error that uses client-side ODBC import.<br />
* D-13879: SqlExpressionValue filter when excluding events didn't work with filter rule root expression only.<br />
* D-13896: Adding or removing columns to datatable didn't change the LastModifiedDate.<br />
* D-13882: User details weren't written to operation log when creating or modifying users.<br />
* D-13771: User rights system report didn't give error when changing columns.<br />
* D-13893: Some event filtering caused null pointer error when primary key had been defined.<br />
* D-13873: Fixed pivot table visual issues after component update.<br />
* D-13900: When adding, renaming or removing columns for Snowflake table fails, operation is now rolled back without any changes.<br />
* D-13866: Querying GET api/uielements was quite slow right after server start.<br />
* D-13864: Combinations of translatable and hardcoded strings didn't get translated in UI.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.6 (build 3933) (released 2023-10-24) ==<br />
<br />
'''Features:'''<br />
* B-08055: Error message for locked account has been replaced with generic error message, so that username enumeration is not possible.<br />
<br />
'''Fixed issues:'''<br />
* D-13884: Attributes dialog crashed with some older model configurations.<br />
* D-13843: In charts, selected case and event attributes switched away when attribute data type was ShortString.<br />
* D-13877: Some Snowflake expressions gave error "exceeds maximum length limit of 255 characters" when selecting lot of items.<br />
* D-13878: Snowflake expression filters for case attribute values didn't accept other than string type of case attributes.<br />
* D-13871: Some statistical calculations with percentages didn't work with Last Row Aggregates Over-limit Rows setting.<br />
* D-13875: Using some case level filters in a model without cases datatable didn't work.<br />
* D-13861: Dashboard opens are now logged to the Task log (i.e., calling GET /api/dashboards/{dashboardid}).<br />
* D-13870: Workspace projects hierarchy focused project showed light grey background making the project name not readable.<br />
* D-13867: When starting datatable refresh and going to other tab, went back to Datatables tab when query completed.<br />
* D-13853: If chart Custom Layout settings had extra series defined, chart may have crashed.<br />
* D-13869: Export as CSV button didn't work in the datatable contents dialog when dialog was still loading.<br />
* D-13872: Main progress spinner had unnecessary small scrollbar on top right.<br />
* D-13863: In the REST API method GET /api/users, password field (that has always been null) has been removed.<br />
<br />
== QPR ProcessAnalyzer 2023.6 (build 3847) (released 2023-10-17) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is removed in this release. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
'''Features:'''<br />
* B-07992: Added 10 new presets including Queue analysis, Four eyes principle, Self-looping events, and Path until selected event. There are also presets for Individual Cases Flow and Range of event type occurrences which use Gantt chart.<br />
* B-08011: Added following date related operations for Snowflake: Day of year, Day of month, Day of week, Week of year, Half-year only, Quarter only, Month only, Hours only, Minutes only, Seconds only, and Milliseconds only. These are available when calculating with date type of data.<br />
* B-08016: [[QPR_ProcessAnalyzer_Table#Table_actions|Table actions to set variables]] can also be opened to a new browser tab. Also improved user interface for table actions.<br />
* B-08018: For Snowflake expressions, added Flows aggregations FromEventType and ToEventType to get starting/ending event type, and FlowOccurrences aggregations FromEvent and ToEvent to get starting/ending event.<br />
* B-08001: Added [[Generic_Functions_in_QPR_ProcessAnalyzer#CallStoredProcedure|CallStoredProcedure]] function to call Snowflake stored procedures. This allows to start ETL transformation in Snowflake orchestrated by QPR ProcessAnalyzer script.<br />
* B-08013: Added [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property to expression language to replace the legacy UserPermissions analysis (11).<br />
* B-07976: Snowflake [[Filtering_in_QPR_ProcessAnalyzer_Queries#Expression|expression based filter rules]] support additional expression columns allowing more Big data chart expressions to be filterable.<br />
* B-08015: Big data chart doesn't anymore support calculation in SQL Server (using local datatables).<br />
* B-06270: Improved error messages and made them translatable by taking into use exception codes provided by server.<br />
* B-08021: Added possibility to store [[Diagram_in_Expression_Language|designed diagrams]] for models and expression language API for reading and modifying diagrams.<br />
* B-08037: Dropped following unused tables database: PA_IDEA, PA_IDEA_VOTE, PA_REPORT, PA_REPORT_SETTING, PA_SESSION_SERVICE, PA_VIEW_FILTER_RULE, PA_VIEW_FILTER_RULE_PARAMETER.<br />
* B-08052: Language translations have been updated to 2023.6.<br />
* B-08051: Frontend side components have been updated.<br />
* B-08034: Backend side components have been updated.<br />
<br />
'''Fixed issues:'''<br />
* D-13830: Object counts indicator in header showed incorrect counts when there was disabled filter rules in Snowflake models.<br />
* D-13833: In-memory charts didn't work with boolean type of dimensions when filtering with the false value.<br />
* D-13858: Target value measures didn't update chart when controlled using an on-screen setting.<br />
* D-13827: Calculated attributes data type was incorrectly set as Any by the Attributes dialog.<br />
* D-13849: Multiselect list search didn't allow spaces.<br />
* D-13829: Multiselect dropdown lists height jumped couple of pixels when selecting values.<br />
* D-13835: Deselecting a selected data point didn't remove chart filter rule.<br />
* D-13702: Improved Snowflake query performance in situations when there are lot of filter rules (by decreasing number of CTE's).<br />
* D-13819: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13820: Fixed incorrect manifest.json file to avoid "not found" errors when fetching web site icon.<br />
* D-13865: Break, continue, and return statements didn't work properly when called from inside a catch block.<br />
* D-13795: There was a Python error in clustering analysis with Snowflake model.<br />
* D-13823: Some tooltips in Workspace project hierarchy didn't work and caused a JavaScript error.<br />
* D-13824: BPMN editor align context menu layout looked strange.<br />
* D-13813: QPR logo button in the top left was misaligned in Firefox.<br />
* D-13797: Snowflake query may have given following error when using sampling: ambiguous column name '_EventType_NotNull_1'.<br />
* D-13774: TakeSample function with certain columns caused SQL compilation error: ambiguous column name 'Case Name'.<br />
* D-13782: Snowflake: Aggregating from variations didn't work when using sampling.<br />
* D-13836: Some tooltips had a strange two-colored background.<br />
* D-13834: Removed Model statistics column from clustering and root causes analysis.<br />
* D-13860: Removed filter button from the custom expressions in Task log analyzed objects.<br />
* D-13838: Removed Split data by filtering column from clustering analysis.<br />
* D-13832: Script and model status updates incorrectly sent next update when previous was still pending.<br />
* D-13839: Charts reset zoom button font size was too small.<br />
* D-13817: Importing data to Snowflake datatable with Append=0 doesn't now drop the underlying Snowflake table.<br />
* D-13825: Some models could not have been deleted from recycle bin.<br />
* D-13852: Recycle bin Projects and Models tab didn't show correct content when Recycle bin only contained either models or projects.<br />
* D-13841: In-memory chart Data type selection type has been corrected to string.<br />
* D-13842: Second time and Third time selections has been hidden in in-memory chart measures.<br />
* D-13850: In Chrome, there were console errors related in incorrect text field autocomplete type and text field without form.<br />
* D-13847: Improved browser side performance by removing unnecessary operations.<br />
* D-13859: Chart without dimensions showed an unnecessary Remove dimension button.<br />
* D-12598: When script is stopped in server, ScriptLauncher could still incorrectly continue to import data.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.5 (build 3334) (released 2023-09-07) ==<br />
<br />
'''Fixed issues:'''<br />
* D-13826: Measures or dimensions with case or event attribute and value selections incorrectly removed calculated attributes when dashboard was opened or chart settings were changed.<br />
* D-13821: Font size of some Highcharts tooltips was too small. Issue appeared when there were tooltips mappings in measures or dimensions.<br />
* D-13810: Simplified help links: now all Help buttons go to the QPR ProcessAnalyzer wiki main page.<br />
* D-13822: Snowflake clustering analysis showed empty strings and nulls as case attribute values in an unclear way as just nothing.<br />
<br />
== QPR ProcessAnalyzer 2023.5 (build 3304) (released 2023-09-05) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In Big Data Chart, the '''Case conformance''' measure and dimension has changed in a way that now it provides boolean values (true/false) instead of integer values (1/0). If [[Measure,_Dimension_and_Column_Settings#Other_settings|colorMappings]] are used for this measure or dimension to set specific colors to visualize conformant and nonconformant cases, the mapped values need to be changed as follows: '''1''' -> '''true''' and '''0''' -> '''false'''. Without the change, the mapped colors are not effective.<br />
<br />
Exmaple: Old configuration:<br />
<pre><br />
"colorMappings": {<br />
"1": "#36d475ff",<br />
"0": "#f5403bff"<br />
}<br />
</pre><br />
New configuration:<br />
<pre><br />
"colorMappings": {<br />
"true": "#36d475ff",<br />
"false": "#f5403bff"<br />
}<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is deprecated. Big data chart has allowed to process data both in Snowflake and SQL Server. Now the support for SQL Server is deprecated and the Big data chart will only support calculation in Snowflake. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). The OperationLog analysis is replaced by the [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog function]] and the Infcluencers analysis is replaced by the [[FindRootCauses_Function|FindRootCauses function]].<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [12, 14, 15, 16, 29];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
By default, Snowflake ODBC driver generates quite much logging to files which might unnecessarily fill up the disk space. It's recommended to set the LogLevel parameter to value 0. The path where the logs are created can be seen in Windows registry (key LogPath). More information about configuring Snowflake ODBC parameters: https://docs.snowflake.com/en/developer-guide/odbc/odbc-parameters.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07971: Machine learning based [[Clustering_Analysis|Clustering analysis]] can be run in Snowflake.<br />
* B-07989: In dashboard designer the stacking order of charts can be changed with buttons [[QPR_ProcessAnalyzer_Dashboard_Designer#Viewing_and_Editing_Dashboards|Bring to front, Send to back, Bring forward and Send backward]].<br />
* B-07977: For [[Sankey_Chart|sankey diagram]], added Start level and End level mappings to define custom start and end level for the sankey flows. Implemented also color mappings to define specific colors for specific values.<br />
* B-08010: To improve performance, charts are loaded and updated only when they are visible in the dashboard.<br />
* B-07975: Added following [[SQL_Expressions#Date_functions|date related functions]] to Snowflake: DayOfYear, DayOfWeek, WeekOfYear, Quarter.<br />
* B-07908: When [[QPR_ProcessAnalyzer_Project_Workspace#Duplicating_Model|model is duplicated]], also filters in the model are also duplicated.<br />
* B-07904: Filters and models API for expression language has been completed.<br />
* B-07991: In [[Filter_Selectors|case and event type filter selectors]], threshold whether the dropdown list or search dialog is shown can be defined using the ''Maximum Rows'' setting. Also the search dialog filters search results by other filter rules in the dashboard.<br />
* B-07999: Filters report has been changed to use the [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|expression language API for filters]].<br />
* B-07540: Added [[QPR_ProcessAnalyzer_Expressions#Throwing_objects|throw statement]] to expression language.<br />
* B-07813: UI components are updated. There are small visual improvements, such as in flowchart flows are routed a bit differently and in charts the hidden series is shown as strike-through in the legend.<br />
* B-07963: Following legacy analysis types have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29) (see more information in the note above).<br />
<br />
'''Fixed issues:'''<br />
* D-13777: Filters could not be created in charts when "Update Filter During Selection" setting was disabled.<br />
* D-13767: Automation per Event Types preset in in-memory incorrectly showed only one event type.<br />
* D-13756: Changing background color in KPI card didn't have any effect.<br />
* D-13812: "Exclude events" was incorrectly translated to "Exclure les cas" in French.<br />
* D-13815: Dashboard designer background grid was not visible in entire area in edit mode. Improved also the grid to match to snapping in move and resize.<br />
* D-13674: Business calendar dialog layout was incorrect when a model with a long name was selected to copy holidays.<br />
* D-13811: Table actions link to a new window didn't go to dashboard if there were other parameters in the link.<br />
* D-13601: Fixed issue where some presets may have given error when attribute value selection and the automatically selected attribute conflicted by the data type.<br />
* D-13753: While Snowflake model was selected, in Filters and User Rights reports the Columns list could not be opened.<br />
* D-13720: Now table column filter and sorting are preserved when resizing or zooming page.<br />
* D-13785: In tables increased number of rows to 20000 that are inspected to get available items shown in Excel-style column filter.<br />
* D-13759: Some statistical calculations had bad performance with large number of rows.<br />
* D-13787: Conformance statistics component didn't have scrollbars when text didn't fit to the visible area.<br />
* D-13788: In-memory "Nonconformance reason" selection caused error when two of them was selected in the same chart.<br />
* D-13783: When Analyzed objects was Generic analysis, column selection incorrectly caused "Analysis has not been selected" error.<br />
* D-13776: When measure name contained quotation mark, notification preview didn't work.<br />
* D-13747: Filtering with integer type of case id with case attribute value filter caused error in Snowflake.<br />
* D-13791: In Firefox, model selection in chart settings didn't show models in the first open.<br />
* D-11984: Recycle bin buttons didn't fit to the screen when screen width was small.<br />
* D-13780: Using CaseId case attribute in clustering analysis did not work with Snowflake 106 cases standard model.<br />
* D-13781: Clustering analysis produced Python error with a certain simple Snowflake model.<br />
* D-13730: Snowflake: Case attribute filtering didn't work when there are cases without row in cases table.<br />
* D-13803: There was chart configuration validation error in browser console when measures were moved into dimensions in Big data chart.<br />
* D-13758: There was performance issue with the Recent tasks system preset.<br />
* D-13793: Snowflake clustering failed when cluster count is larger than case count.<br />
* D-13763: SQL expression based filter rule with Where function to filter events didn't filter anything in Snowflake.<br />
* D-13804: Added missing Millisecond function to Snowflake.<br />
* D-13772: Expression EventLog.Cases.Events caused error "Value cannot be null".<br />
* D-13755: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13739: When switching between System reports there was error: "Uncaught Error: 2nd dimension not found. at y.getExpressionConfiguration".<br />
* D-12109: Sometimes flowcharts showed message "Error in querying event type measures. Input string was not in a correct format".<br />
* D-12473: Cost Savings by Automation preset gave sometimes error "Unable to cast object of type 'System.Double' to type 'System.String'".<br />
* D-13750: Snowflake model didn't work with the Case Duration vs. Manual Activities preset.<br />
* D-13657: There was error converting data type nvarchar to bigint.<br />
* D-13796: Some Snowflake operations didn't work with zero rows and columns.<br />
* D-12494: Now when chart size changes, the table column filters and sorting are preserved.<br />
* D-13736: In Performance benchmarking dialog, the Export result button exported wrong benchmark performance analysis result.<br />
* D-13609: Improved conformance analysis related filter names.<br />
* D-13594: Recycle bin buttons were not visible when opening recycle bin in a narrow screen.<br />
* D-13226: Tooltips in the model properties dialog are now translated.<br />
* D-12569: Table incorrectly showed ellipsis for narrow boolean type of columns showing checkboxes.<br />
* D-13391: Emptying date or datetime picker value was not registered and it didn't trigger functionality.<br />
* D-12621: Value search dialog didn't work with values containing backslashes.<br />
* D-13796: Some Snowflake operation didn't work with zero rows/columns.<br />
<br />
== QPR ProcessAnalyzer 2023.4 (build 2628) (released 2023-06-14) ==<br />
<br />
'''Features:'''<br />
* B-07767: Added [[Gantt_Chart|Gantt chart]] to visualize timeline of cases and events divided into swimlanes.<br />
* B-06383: Added [[Sankey_Chart|Sankey chart]] to visualize flow from one set of values to another.<br />
* B-07941: Implemented many more presets running in Snowflake models for compliance and operational excellence use cases. There are also presets for the path analysis and process bottlenecks identification.<br />
* B-07864: Snowflake conformance analysis shows now [[Conformance_Analysis#Top_Deviations_(in-memory)_/_Deviating_Flows_(Snowflake)|reasons for conformance deviations]], such as which event occurrences deviated from the design model.<br />
* B-07909: Snowflake conformance analysis visualizes [[Conformance_Analysis#Undesired_Events_(Snowflake)|undesired event types]] in table and flowchart.<br />
* B-07823: Flowchart Bottlenecks preset has been changed to show bottlenecks for event types. Also renewed the [[QPR_ProcessAnalyzer_Logs#Task_Log|Tasks reports]] to use expression language based interface.<br />
* B-07891: User interface has been [[Languages_and_Localization|translated into Portuguese]].<br />
* B-07873: Improved [[QPR_ProcessAnalyzer_Pivot_Table|pivot table]] visual layout to highlight totals and aggregated rows. Also the row titles are now visible in the top left.<br />
* B-07905: Added [[SQL_Expressions#Rank_functions|Rank related functions]] to Snowflake for writing more versatile custom KPI's, e.g., FirstValue, LastValue, NthValue, Lead and Lag.<br />
* B-07912: Added more SQL expression [[SQL_Expressions#Array_functions|array functions ArrayToString and ArrayOverlap]] to Snowflake.<br />
* B-06449: Added SQL expression functions ToTimestamp and TryToTimestamp for parsing timestamps from strings using provided format.<br />
* B-07959: Added new functions Base64Encode and Base64Decode to help using basic HTTP authentication when calling web services.<br />
* B-07206: SQL expressions support data [[SqlDataFrame_in_Expression_Language#WithClusterColumn|clustering]] which is an unsupervised machine learning algorithm to group data based on similarities.<br />
* B-07848: Data can be extracted from SAP using the encrypted [[Importing_Data_from_SAP#SNC_encrypted_connection|SNC connection]].<br />
* B-07903: Added expression language API to create and modify filters and models.<br />
* B-03103: [[QPR_ProcessAnalyzer_Logs#Task_Log|Task log]] (operation log) can be accessed in expression language.<br />
* B-07872: List aggregation with Distinct=true orders now items by their value.<br />
* B-07940: Removed "Count" aggregation from textual values in Big data chart (you can use the Case count, Event count, etc. selection instead).<br />
* B-07757: Backend support for datatables linking to user-definable Snowflake database, schema and table.<br />
* B-07825: Improved error message when trying to use non-existing attributes in Snowflake queries.<br />
* B-03101: To expression language, added try-catch-finally statement to handle thrown exceptions.<br />
* B-07861: Removed available and total virtual memory information from User settings dialog.<br />
* B-07902: Optimized sequences of joins in Snowflake queries to improve performance.<br />
* B-07837: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13709: If image width-to-height ratio was lower than container's ratio, image was incorrectly stretched to fit the container.<br />
* D-13660: Disabling filter rules didn't work in Snowflake models.<br />
* D-13526: Passing dataframes from SQL scripts to expression scripts didn't work.<br />
* D-13661: Snowflake conformance analysis crashed when there was no access to conformance related Snowflake UDF's.<br />
* D-13693: Resolved major Snowflake conformance analysis performance issues in the BPMN model handling.<br />
* D-13716: Snowflake root causes analysis incorrectly bypassed Snowflake cache.<br />
* D-13707: In SQL Scripting, the datatable analysis (number 18) didn't always copy the data table contents to the target table correctly.<br />
* D-13653: Big data flowchart Root causes preset showed incorrect legend.<br />
* D-13626: Flowchart froze when converting into big data flowchart and vice versa by modifying chart json settings.<br />
* D-13656: Root causes for attribute gave error "Failed to compare two elements in the array" in some situations.<br />
* D-11563: Pivot table had a minimum height of 300px, which caused bottom part of it to be out of view.<br />
* D-13704: In CSV file import, parsing now allows spaces between column separator and text quotation mark.<br />
* D-13598: Chart gave unclear error message when events datatable was not defined.<br />
* D-13655: Improved error messages for BPMN editor and conformance statistics.<br />
* D-13528: Error message for certain erroneous SQL expressions was unclear.<br />
* D-13677: "Flow occurrences with specific case attribute value" selection didn't work for in-memory chart.<br />
* D-13663: Pivot table border line was slightly broken in the header area.<br />
* D-13608: There was incorrect alignment of items in the table paging controls.<br />
* D-13703: Importing CSV file with some special characters to Snowflake failed (due to incorrect escaping in Snowflake staging files).<br />
* D-13708: Duplicating datatable using user defined table, removed data the source table.<br />
* D-13717: Dependency wheel crashed when there were zero weights and showing data labels.<br />
* D-13348: There was an unclear error message when Snowflake query had a certain incorrect expression.<br />
* D-13732: Pivot table Excel export contained headers formatted incorrectly.<br />
* D-13729: There was a JavaScript error when limited user tried to access business calendar.<br />
* D-13662: Percentile function didn't always work with timespan types.<br />
* D-13646: Using incorrectly configured model without cases datatable caused null reference error.<br />
* D-13629: When tried to use chart with a non-existing model, there is now a proper translated error message.<br />
<br />
== QPR ProcessAnalyzer 2023.3 (build 1990) (released 2023-05-03) ==<br />
<br />
'''Features:'''<br />
* B-07818: [[Conformance_Analysis|Conformance analysis]] is supported in Snowflake with following dashboard components: Big data chart, BPMN editor, Conformance statistics, and Design model selector.<br />
* B-07833: [[Root_Causes#Root_causes_in_flowchart|Root causes analysis for flowchart]] is available for Snowflake showing how the event and flow occurrences explain selected phenomena.<br />
* B-07786: Big data chart has more [[Big_Data_Chart#Measure_aggregations|measure aggregations]], such as median, percentile, standard deviation and variance. Also for textual items, unique values can be listed.<br />
* B-07795: [[QPR_ProcessAnalyzer_Table#Conditional_formatting|Conditional formatting]] supports also columns with non-numerical contents.<br />
* B-07830: [[Big_Data_Chart#Measure_aggregations|None and Any aggregations]] for Snowflake and user-friendly formatting for conformance violations.<br />
* B-06527: Error messages in [[Importing_Data_to_Datatable_from_CSV_File|CSV file import]] show also the column number to help working with CSV files with lot of columns.<br />
* B-07747: In-memory conformance checking accepts design models with multiple tasks having same name (same is followed by the Snowflake implementation).<br />
* B-07659: In-memory flowchart preset Case Conformance to visualize conformance checking violations.<br />
* B-07571: Added function IsConformant to backend to check whether cases are conformant.<br />
* B-07863: Added function ConformanceViolationsFlows to backend to return nonconformance reasons for violating cases.<br />
* B-07844: Support for "array" aggregation to return aggregated items as array.<br />
* B-07856: Support for creating and accessing arrays and objects in SQL expressions.<br />
* B-07860: Array handling functions and Tasks property for DesignModel entity.<br />
* B-07847: Added throttling for QPR ScriptLauncher client-side imports to limit memory usage.<br />
* B-07811: Snowflake query optimization to omit columns that are not used by the query.<br />
<br />
'''Fixed issues:'''<br />
* D-13632: Going from variations to event types led to very poor performance with certain models.<br />
* D-13628: Statistical calculations were incorrectly not applied in chart CSV export.<br />
* D-13575: SQL script may have given error "Operand type clash: nvarchar(max) was incompatible with sql_variant".<br />
* D-13597: UI supports now datatable column type "ShortString" (previously datatable contents preview and CSV import didn't work).<br />
* D-13536: Using business calendar sometimes gave error "System.InvalidOperationException: Collection was modified".<br />
* D-13477: Chart types without y-axis mapping caused an error when series mapping was used.<br />
* D-13453: _model variable was not available for Snowflake expression filter rules.<br />
* D-13527: Checkbox height didn't increase when long label needed to span to multiple lines.<br />
* D-13363: Snowflake query with EvaluateAfterAggregations and IsHidden failed when dimensioning by case id column.<br />
* D-13383: Snowflake query gave error "Invalid column name 'FromCase Name'".<br />
* D-13523: Request id was incorrectly shown as zeros in error messages.<br />
* D-13541: In CSV import, error message for maximum number of columns exceeded is improved (maximum is 300 column for SQL Server).<br />
* D-13583: Objects count in header didn't work for empty Snowflake model.<br />
* D-13553: Larger pacm files can now be imported, as there isn't error "Request body too large. The max request body size is 30000000 bytes".<br />
* D-13306: Stack overflow error was given when using SqlDataFrames.<br />
* D-13487: When Flows root and there was filter in Values expression, some flows were lost.<br />
* D-13540: SqlDataFrame query with 300 columns failed to error "WithExpressionColumn: No name given for the new column".<br />
* D-13429: Ordering in List aggregation couldn't find columns in dataframe query.<br />
* D-13406: Dataframe query with root FlowOccurrences and get value from cases caused error.<br />
* D-13538: There was incorrect handling of escaping characters in column names used in dimensions.<br />
* D-13633: Fixed ordering in List aggregation with null and empty values.<br />
* D-13636: Query that dimensions by numeric case attribute with AggregateOthers true, caused error.<br />
* D-13589: Creating Snowflake datatable did not connect to Snowflake.<br />
* D-13623: Value expressions without aggregation didn't work with AggregateOthers setting.<br />
* D-13554: In in-memory chart, percentile function might have return both Int64 and Double type of objects which cannot be sorted.<br />
* D-13481: Improved error message when trying to use deleted model.<br />
* D-13621: Dynamic value search dialog had incorrect font in lists.<br />
* D-13610: Some invalid BPMN files crashed BPMN editor.<br />
* D-13614: Checkbox label texts overflowed to right.<br />
* D-13520: Removed excessive parameters from the Query Designer for generic context queries.<br />
* D-12998: QPR icon was incorrectly positioned in header in Safari.<br />
* D-13480: Import to duration data type is removed from Snowflake datatables, and for local datatables duration type maximum size is checked.<br />
* D-13517: In Highcharts-based visualizationsm conditional formatting didn't work for other than the first y-axis mapping.<br />
* D-13529: In some presets containing several on-screen settings, when chart showed in error message, on-screen settings showed invalid selection.<br />
* D-13530: Opening dropdown list caused JavaScript error when the list contents should be empty after it previously contained items.<br />
* D-13486: Removed unreachable error message in CSV import.<br />
* D-13524: Fixed in-memory chart flow occurrences root measures "Event attribute (text)" and "Event attribute (number)" that caused error.<br />
<br />
== QPR ProcessAnalyzer 2023.2 (build 1478) (released 2023-03-22) ==<br />
<br />
'''Features:'''<br />
* B-07755: [[Business_Calendar|Business calendar]] for duration calculation is available for Snowflake models.<br />
* B-07719: In Snowflake dashboards, [[Big_Data_Chart#Using_measure_variables|measures can be assigned to variables]] and use the variables in other measures to create combined measures.<br />
* B-07746: Changed in-memory conformance checking to not show invalid flow violations where starting or ending event type is invalid.<br />
* B-07743: [[PA_Configuration_database_table#General_Settings|Default datasource]] can be configured for datatables created by scripts, allowing to set Snowflake as default.<br />
* B-07740: System memory indicator moved from the header to User settings Version information dialog.<br />
* B-07776: New SQL expressions functions Unicode, Char and Regexp, as a basis for future rule-based process mining.<br />
* B-07741: Backend support for aggregation operations Median, Percentile, Stdev, Stdevp, Var and Varp to Snowflake.<br />
* B-07742: Backend support for aggregation operation to list unique items in Snowflake.<br />
* B-07770: Optimized Snowflake SQL generation by combining consecutive WithColumn function calls into one select.<br />
<br />
'''Fixed issues:'''<br />
* D-13491: QPR ProcessAnalyzer server crashed now and then when sorting was in progress and the query was cancelled.<br />
* D-13380: Dimensioning integers in in-memory core calculation didn't work correctly as 0 and -1 were put to same bucket.<br />
* D-13385: In Workspace Bin, Delete Forever and Restore from Bin buttons were misaligned.<br />
* D-13332: Conformance checking didn't show in violations when there were multiple undesired events in same case.<br />
* D-13405: Images take now always all available space in image component area.<br />
* D-13417: KPI card without title was slightly misaligned vertically.<br />
* D-13438: Clicking selected event type or flow in flowchart didn't cancel the filter selection.<br />
* D-13350: Task log and Script log default filter end date is now empty by default.<br />
* D-13381: Disabled browser auto-complete from flowchart variation stepper and Workspace create/rename object dialog.<br />
* D-13347: Improved performance for in-memory business calendar calculation.<br />
* D-13335: In in-memory chart, filtering didn't work in "Flow occurrences" root "Flow occurrences with specific event attribute value" dimension.<br />
* D-13367: Percentage value wasn't displayed properly with German or Spanish language when event types were shown in object counts indicator.<br />
* D-13451: Exported filter file is now named based on selected filter name.<br />
* D-13378: In Big data chart, prevented error "Unable to aggregate from level RootCauses to level Custom".<br />
* D-13293: DataFrame query with root Flows and IncludeEvents and ExcludeEvents filter rules failed.<br />
* D-13370: Fixed issue where on-screen settings that didn't have any selectable items, showed a strange selection.<br />
* D-13392: Clustering analysis was incorrectly shown when originally in-memory chart was converted into big data chart by changing chart json settings.<br />
* D-12784: Some Snowflake queries incorrectly bypassed Snowflake caching because they used unique object names.<br />
* D-13456: Improved error messages for incorrectly configured on-screen settings.<br />
* D-13445: Conformance violations related translated terms have been fine-tuned for better translations into different languages.<br />
* D-13421: Improved error messages when trying to use model having some column mappings missing.<br />
* D-13485: Snowflake business calendar gave error when calendar contained Sunday.<br />
* D-13218: Windows event viewer incorrectly contained log entries that are not errors.<br />
* D-12634: Multiline text boxes width is set to non-changeable.<br />
* D-13034: Confirmation dialog to delete items permanently has been updated.<br />
* D-13288: In dialogs, the Create button didn't show the disabled state correctly.<br />
* D-13427: When dropdown lists didn't have any selectable items, the "N/A" text appeared and the list incorrectly took more space vertically.<br />
* D-13483: In Workspace, the new items menu was too narrow for Spanish texts.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.1 (build 1449) (released 2023-02-24) ==<br />
<br />
'''Features:'''<br />
* B-07690: System setting [[PA_Configuration_database_table#General_Settings|DatabaseId]] can be defined by administrator to get more simple table names in Snowflake.<br />
* B-07737: In flowchart Bottlenecks preset, originally used flow colors has been recovered.<br />
* B-07748: For Analyzed objects "Conformance checking findings" in charts, terminology has been revised and issue with the case count calculation fixed.<br />
* B-07663: In [[Chart_On-screen_Settings|on-screen settings]], when case/event attribute is selected, related attribute values list are reset.<br />
* B-07570: Backend support for [[Business_Calendar|business calendars]] in Snowflake.<br />
* B-07660: Backend support for conformance checking to show also the last event index and event type in NotCompleted reason.<br />
* B-07610: Memory counter related technical properties have been removed from expression language.<br />
<br />
'''Fixed issues:'''<br />
* D-13349: Opening dashboard containing Root causes preset with default settings jammed the system by generating lot of calculations (for more information, see previous release notes).<br />
* D-13277: Stacked charts with date type of data as series did incorrectly show gaps in columns/bars.<br />
* D-13270: Flowchart conditional formatting didn't work with duration multi-unit format.<br />
* D-13358: Calculation results caching works also across different user sessions.<br />
* D-13250: Dashboard with two charts connected with linked settings using variables ended up to to a never ending loop.<br />
* D-13230: SAP import did not automatically create columns to use the correct column types.<br />
* D-12857: Deeply recursive functions caused a crash without any trace.<br />
* D-12994: In Workspace, some buttons were not clickable due to breadcrumb covering them.<br />
* D-13249: In Workspace, there was incorrect error message for duplicate datatable names when there were items with only letter capitalization was different.<br />
* D-13232: In-memory chart Top variations preset is now sorted secondarily by average duration descending.<br />
* D-13300: Setting DashboardFilter variable to empty value didn't have any effect in dashboard but old value was incorrectly used.<br />
* D-12834: Limited the maximum number of dimensions to 20, to avoid too demanding queries for SQL Server.<br />
* D-12917: Changed visual indication of missing items in dropdown lists (it's no longer showing "***").<br />
* D-13111: In Root causes preset, there is now error message when trying to use weighting related columns when weighting isn't in use.<br />
* D-13124: SQLDataFrame query containing filter rule EventTypes aggregating from cases failed.<br />
* D-13207: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed.<br />
* D-13292: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed (rev.2).<br />
* D-12991: Dropdown list texts had some translations missing.<br />
<br />
== QPR ProcessAnalyzer 2023.1 (build 1433) (released 2023-02-07) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release contains a potentially severe issue, where some dashboards completely jam the system by generating lot of calculations. The issue may appear in dashboards that have been created in earlier releases and containing the Root causes preset with default settings. The issue will be fixed by the next release. The issue can be worked around by exporting the affected dashboard, modifying the dashboard file manually and importing the dashboard back. The required modification is to remove line(s) containing <pre>"preset": "RootCauses"</pre> and the comma from the preceding line.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Cases (analysis number: 5), Events (6), and EventTypes (7). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). Note that the legacy analyses removal don't affect the dashboarding functionality.<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [5, 6, 7];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2023.1, the '''.NET Desktop Runtime''' is not needed anymore for QPR ProcessAnalyzer Server, so it can be uninstalled. Also for QPR ScriptLauncher, ''.NET Desktop Runtime'' is not needed, but instead install the '''.NET Runtime''' (which is more lightweight). ''.NET Desktop Runtime'' contains the ''.NET Runtime'', so the actions are not mandatory when updating to QPR ProcessAnalyzer 2023.1.<br />
</div><br />
<br />
'''Features:'''<br />
* B-06997: Expression-based filter rules for Snowflake dashboards to allow versatile filtering and filtering from custom expressions.<br />
* B-07383: Improvements to linked settings to allow binding to variables, tags and filter rules [[Chart_Linked_Settings|(more information)]].<br />
* B-07508: Flowchart preset colors have been renewed to be more intuitive.<br />
* B-07184: Automation preset in flowchart has now options for selecting the Automation attribute and value.<br />
* B-07512: Changed datatable metadata can be refreshed from Snowflake, and all rows in the datatable can be deleted easily in Workspace [[QPR_ProcessAnalyzer_Project_Workspace#Datatables|(more information)]].<br />
* B-07440: Date when the release was made is now shown in User settings.<br />
* B-07595: WeekOfYear property for DateTime objects in expression language to get the week number of a year (between 1 and 53).<br />
* B-07623: In-memory expression language functions Random (to get random numbers) and Hash (to get hash value of string).<br />
* B-07612: Breadcrumb in Workspace has now a Home button to quickly navigate to the top level of the projects hierarchy.<br />
* B-07637: Language selector now shows the language options in local languages.<br />
* B-07228: Remove following deprecated analyses: Cases, Events, and EventTypes (see the release note above).<br />
* B-07538: Backend support: Snowflake root causes analysis can find event attribute related root causes.<br />
* B-07706: Backend support: Snowflake expression-based filter rules support for roots containing Where function.<br />
* B-07611: Removed following legacy filter rules: CaseAttributeTrend, EventAttributeTrend, EventTypeTrend, and Duration.<br />
* B-07598: Refactored client-side import for SQL scripting to use generic client-side task mechanism.<br />
* B-07716: ShortString columns are now properly detected in SQL Server queries.<br />
* B-07652: Now it's possible to pipe multiline expression strings to QPR ScriptLauncher.<br />
* B-07688: AddColumns function for Datatables to create multiple columns in one call.<br />
<br />
'''Fixed issues:'''<br />
* D-13092: Table conditional formatting didn't work when color code was fetched from other column.<br />
* D-13105: Some charts created in earlier release referring to non-existing presets names appeared as empty after software update.<br />
* D-13107: Flowcharts crashed and showed loading animation forever when setting color or flow thickness to non-numerical measure.<br />
* D-13104: In BPMN model editor, context menus to edit elements didn't appear.<br />
* D-12939: Script editor tabs Close buttons didn't work.<br />
* D-13154: "Search by case ID" didn't work in in-memory chart.<br />
* D-12933: CSV columns with only empty values were incorrectly auto-detected as integers.<br />
* D-12929: In-memory chart Root causes for case duration and Root causes for case attributes (weighted) had Custom expression missing.<br />
* D-12928: Pivot table headers were empty when there were two column levels and two values.<br />
* D-12924: Pivot table columns with Count and Distinct Count aggregations are now numeric and aligned right.<br />
* D-13033: Changing colors in chart settings Color palette caused "Item already exists" error and prevented changing colors.<br />
* D-12996: Tags referring to dashboard variables didn't work in Additional root expression.<br />
* D-12877: UI gave error in some situations: Uncaught TypeError: Cannot read properties of undefined (reading 'min').<br />
* D-13071: Prevented selecting two or more of the Y-axis, X-axis and series mappings at the same time for the same measure or dimension.<br />
* D-12895: Big data chart crashed when on-screen setting contained event type selector and there were no event type filter set.<br />
* D-13231: Tooltips for dashboard name, model selector and filter selector in header show now the content text instead of generic instruction.<br />
* D-13139: There was an error when tried to create filter for a custom expression where selected data type didn't match with the actual type of data.<br />
* D-12988: Chart presets selection in chart settings showed unnecessary tooltip.<br />
* D-12901: When set sampling over 1 million, Snowflake models gave error: parameter value out of range: size of fixed sample. Must be between 0 and 1,000,000.<br />
* D-12904: Creating expression filter having lower/greater logic with root objects sampling failed.<br />
* D-12923: Chart schema didn't accept pivotAggregation in dimensions/columns.<br />
* D-12926: Root causes columns Selected weight, Compared weight and Total weight have now correct float data type.<br />
* D-12880: In out-of-the box dashboards, chart titles and subtitles were not translated.<br />
* D-12916: Improved filter rule description text in Filter rule editor dialog for expression filter rules.<br />
* D-12889: No clear error message was given when user tried to export corrupted model from .pacm file.<br />
* D-12869: Date selector in on-screen settings had inconsistent vertical alignment.<br />
* D-12938: When creating a filter with lasso and selecting a single data point only, "equals" kind of filter rule is now created.<br />
* D-12989: "Running tasks as specific time" system report may have ended up in loop causing following error: Maximum call stack size exceeded error.<br />
* D-13010: Pivot table sometimes ended up to never-ending resizing loop when browser zoom was more than 100%.<br />
* D-12790: Expression language: DataFrame.SetColumns: Initializing and using variables defined in closure of SetColumns function parameter didn't work<br />
* D-12927: All on-screen settings were not be visible in narrow charts having several on-screen settings.<br />
* D-12937: Added maximum value limitation to several number input fields in charts.<br />
* D-12947: Message dialog didn't show line breaks correctly (e.g., in CSV file import).<br />
* D-12948: Defining column setting caused error when Measure Expression was not defined.<br />
* D-12946: Filter rule text couldn't be seen entirely from tooltip.<br />
* D-12983: When range filtering using integer values in Highcharts chart, filter is now shown as integer value.<br />
* D-12984: When range filtering in Highcharts charts and there is category axis, filter rule is now based on individual (category) values.<br />
* D-12930: When creating filters from charts using date type of X-axis with lasso, "greater than or equal" and "less than or equal" filter rules are not created.<br />
* D-12920: "Where" function in DataFrame lost column data types of the original DataFrame.<br />
* D-13048: Model notifications failed with certain measures that define variables in root expression leading to error: Variable "sampleSize" already exists in this context.<br />
* D-13116: BPMN editor had some translations missing.<br />
* D-13019: Datatable and script selectors show now datatable/script name instead of id, when opening selector having existing selections.<br />
* D-12951: Changing additional root expression in flowchart didn't refresh the flowchart.<br />
* D-13147: Filter rule boxes in header had different widths, and Add filter rule button vertical alignment was incorrect.<br />
* D-12907: Sometimes case attribute selection showed incorrect attribute name for empty model.<br />
* D-13148: Filters and Datatables system reports loaded unnecessarily twice which could be seen as blinking.<br />
* D-12844: In dataframe query, FlowOccurrences in root and GetValueFrom Cases with filter gave null reference exception<br />
* D-12915: Repeating certain query twice with aggregations in Events root generated invalid SQL<br />
* D-12728: Was huge amount logs in server during client side import (manual testing required as identification)<br />
* D-13156: Persist function failed to snowflake: Invalid unicode escape sequence '\u0027ACCE'; should be at most '\u0010FFFF'.<br />
* D-12876: Flows/FlowOccurrences in root didn't work with SqlExpressionValue filtering.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2022.8 (build 1397) (released 2023-01-11) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release fixes an issue where extracting large datasets from SAP increases memory consumption considerably and may lead to out-of-memory error. This release contains packages for both QPR ScriptLauncher and QPR ProcessAnalyzer Server. If SAP extractions are done using QPR ScriptLauncher in client side mode (ExecuteInClientSide=1), it's enough to update QPR ScriptLauncher to fix this issue.<br />
</div><br />
<br />
'''Fixed issues:'''<br />
* D-12941: Extracting data from SAP consumed unnecessary lot of memory and may have led to out-of-memory error (both when running using QPR ScriptLauncher and in server side).<br />
<br />
== QPR ProcessAnalyzer 2022.8 (build 1396) (released 2022-12-30) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Creating datatables with duplicate names in the same project is prevented, and possible existing duplicate names are automatically changed to unique names with a random suffix. If there are duplicate names, they can be renamed either before updating QPR ProcessAnalyzer (to avoid automatic renaming) or after the update (by changing suffixed names). If the renamed datatables are used by models, the linkage will break because it's based on the datatable name. Creating duplicate datatables has already been prevented in the UI, but the improved method works also in the API level.<br />
<br />
Following SQL query can be used to list datatables (and project id) having duplicate names:<br />
SELECT ITA_NAME, ITA_PROJECT_ID<br />
FROM PA_INTEGRATION_TABLE<br />
GROUP BY ITA_NAME, ITA_PROJECT_ID<br />
HAVING Count(*) > 1<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
If trying to use business calendar for a model that doesn't have the business calendar defined, there will now be an error message instead of showing the chart. Either unselect the business calendar checkbox for the measure or dimension, or define a business calendar to the model. In this situation in earlier releases the business calendar was ignored and full time calculation used.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07498: Automation and Operational Excellence presets and Root causes analysis (for Snowflake), Weighted root causes analysis and Event scattering preset (for Snowflake and in-memory), Root causes for case duration (in-memory).<br />
* B-07177: Flexible mappings, user selectable aggregations and conditional formatting for Pivot table, and flexible mappings for KPI Card.<br />
* B-07518: New function named Query to run call /api/expression/query.<br />
* B-07294: In Workspace, the left side projects hierarchy can be collapsed and expanded to make more space to project contents.<br />
* B-06814: In SQL expressions, new function DurationBetweenDates to calculate duration between timestamps precisely.<br />
* B-07519: Replaced DateDiff function with the new DurationBetweenDates function in big data chart.<br />
* B-07531: In SQL expressions, new mathematical functions Abs, Log, Mod, Power, Rand, Sign and Sqrt.<br />
* B-07297: To optimize performance, Snowflake queries are automatically cancelled if they are not needed by UI.<br />
* B-07569: To optimize performance, TakeSample function implementation is improved for Snowflake.<br />
* B-07198: Several performance improvements to DataFrame queries (used in Snowflake).<br />
* B-07464: Added Lead and Lag functions to SqlDataFrames to support getting previous and next event.<br />
* B-07470: New ExtractSap function to fetch data from SAP using expression language.<br />
* B-07536: New Pivot function to SqlDataFrames to enable root causes analysis.<br />
* B-07488: Primary keys can be set to datatables to improve calculation performance (UI will follow later).<br />
* B-07515: Added RootCauseAnalysis function to SqlDataFrames.<br />
* B-07546: RootCauseAnalysis function support for complex weighting expressions.<br />
* B-03052: Support for user-defined variables in /api/expression/query.<br />
* B-07565: Support for NumberPrecision, DatetimeTruncation and TimespanPrecision properties for Values section in in-memory query.<br />
* B-07513: For product activation file handling, replaced mutex based implementation with exclusive file lock.<br />
* B-07480: Expression language support for DataFlows for data extraction.<br />
* B-07613: Removed support for SQL Server based R scripting.<br />
* B-07567: Take datatable primary keys into use in expression builder to improve performance (part 2).<br />
* B-07588: Remove total memory information from log writing and DateDiff function for in-memory.<br />
<br />
'''Fixed issues:'''<br />
* D-12715: Snowflake calculated imprecisely some operations containing division and aggregation.<br />
* D-12761: Progress bar of the CSV import dialog didn't show any progress.<br />
* D-12799: Opening datatable contents dialog settings was slow when there were lot of rows in the datatable.<br />
* D-12089: Include conforming/nonconforming cases made BPMN editor no responding.<br />
* D-12496: Datagrid filter search keyword didn't work for rounded values, so the search was hidden for other than textual data.<br />
* D-12704: Durations as quarters was calculated incorrectly in charts.<br />
* D-12662: Fixed issue where some special literals in custom expressions didn't work.<br />
* D-12403: Setting Notifications on a model had some visual issues.<br />
* D-12859: Dependency wheel visualization crashed with nulls values in From and To mappings.<br />
* D-12660: Removed unnecessary float conversions in SQL expressions.<br />
* D-12653: In-memory datafram OrderByColumns function with mixed values failed.<br />
* D-12657: When trying to use milliseconds period in some presets, frontend frozed.<br />
* D-12706: Line breaks in data were shown in many places where it's undesired.<br />
* D-12719: Syncfusion dialog headers showed backslaces incorrectly.<br />
* D-12372: Refused to run the JavaScript URL because it violated the Content Security Policy directive.<br />
* D-12730: Logging out when filter selection is in progress, gave javascript error.<br />
* D-12705: Header object counts tooltip was sometimes messed after logout.<br />
* D-12384: Selected project was not highlighted for whole project name string.<br />
* D-12581: Prevented creating duplicate datatable names in same project in parallel execution.<br />
* D-12722: There was incorrect syntax near '<' when running SqlDataFrame expressions.<br />
* D-12736: Swedish and Finnish translation improvements for object counter tooltips.<br />
* D-12702: For BPMN Editor component "Something went wrong" error was given when switching from in-memory to Snowflake model.<br />
* D-12712: UI gave error: TypeError: Cannot read properties of undefined (reading 'id').<br />
* D-12738: Business calendar showed total business time when calendar configuration was invalid.<br />
* D-12776: Special character filter caused JavaScript SyntaxError.<br />
* D-12785: Unnecessary vertical scrollbar displayed for main header toolbar.<br />
* D-12164: There was unnecessary UnauthorizedAccess errors in logs.<br />
* D-12580: Case duration was not same when comparing Big data chart with in-memory chart for same data.<br />
* D-12768: Data grid links and variable change actions didn't work when grouping was used.<br />
* D-12735: FindRootCauses (in-memory) function filtered out cases with zero contribution.<br />
* D-12763: --#CallWebService didn't work from ScriptLauncher.<br />
* D-12789: There was timeout in SQL queries to scripting sandbox.<br />
<br />
== QPR ProcessAnalyzer 2022.7 (build 1331) (released 2022-11-15) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2022.7, to improve security expression language operations that modify data or connect to external datasources are prevented in dashboard custom expressions. The limitation is required, because when a dashboard is opened, its expressions are run with the user's permissions, and the user need to trust the expressions don't perform any unexpected operations, such as delete data. The full functionality of the expression language is available in the scripts and in the Expression Designer.<br />
<br />
The following functions and operations are prevented in dashboards: SendEmail(), CallWebService(), ImportOdbc(), ImportOdbcSecure(), Model.DeletePermanently(), Model.Restore(), Model.TriggerNotifications(), Project.DeletePermanently(), Project.Restore(), Project.CreateDatatable(), Datatable.AddColumn(), Datatable.DeletePermanently(), Datatable.Import(), Datatable.Merge(), Datatable.RemoveColumns(), Datatable.RenameColumns(), Datatable.Truncate(), RecycleBin.DeletePermanently(), and call SQL script. Calling expression scripts is allowed, but in the script all previously mentioned operations are prevented.<br />
<br />
Following SQL query can be executed in the QPR ProcessAnalyzer metadata database to reveal dashboards that potentially have prevented expressions:<br />
SELECT * FROM [PA_UI_ELEMENT] WHERE [UIE_PROPERTIES] LIKE '%SendEmail(%' OR [UIE_PROPERTIES] LIKE '%CallWebService(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbc(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbcSecure(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Restore(%' OR [UIE_PROPERTIES] LIKE '%TriggerNotifications(%' OR [UIE_PROPERTIES] LIKE '%CreateDatatable(%' OR [UIE_PROPERTIES] LIKE '%AddColumn(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Import(%' OR [UIE_PROPERTIES] LIKE '%Merge(%' OR [UIE_PROPERTIES] LIKE '%RemoveColumns(%' OR [UIE_PROPERTIES] LIKE '%RenameColumns(%'<br />
</div><br />
<br />
'''Features:'''<br />
* B-07287: Process Discovery and most important presets for Snowflake.<br />
* B-07271: "Last Row Aggregates Over-limit Rows" setting for big data chart.<br />
* B-06431: Snowflake datatables support for database views in the datasource.<br />
* B-07266: Security: "limited mode" to prevent data modifications and external calls from dashboard expressions.<br />
* B-07097: Improved flowchart root causes color scales.<br />
* B-07363: SQL LIKE function support for escape character.<br />
* B-06877: Improved variation queries performance in Snowflake, part 1.<br />
* B-07444: Improved variation queries performance in Snowflake, part 2.<br />
* B-07382: Support for empty strings and nulls in event type names in dataframe processing.<br />
* B-07273: WithRowNumberColumn, WithRankColumn, WithDenseRankColumn support for descending sorting.<br />
* B-07303: FindRootCauses function support for weighting expression.<br />
* B-07327: Unpivot function for SqlDataFrames (for root cause analysis).<br />
* B-07385: Align token lifetime with SESSION_MAXIMUM_DURATION setting.<br />
* B-07500: ColumnMappings property for IDataFrame and DataTables.<br />
* B-07499: IDataFrame.ApplyFilter function to filter events data using a JSON-based filter.<br />
* B-07469: Translation updates for release 2022.7.<br />
<br />
'''Fixed issues:'''<br />
* D-11630: Drag and drop from chart settings to main header was working incorrectly for filter and root cause rules.<br />
* D-12455: Moving a chart filter from one chart to another created a root cause analysis filter.<br />
* D-12266: Root causes analysis showed incorrect results when certain combination of filters.<br />
* D-12525: Numerical values in Excel export in data grid was formatted incorrectly.<br />
* D-12534: Restoring item from recycle bin changed project from Bin to previous project.<br />
* D-12529: Measure specific datalabel mapping did not work correctly when also mapped to Y-axis.<br />
* D-12532: Multi-selection options caused layout issue for Chart setting.<br />
* D-12541: Layout issue for Polish in multiselect list search dialog.<br />
* D-11277: Increase/decrease Icons were missing in the dimension sorting for Mac.<br />
* D-12552: Uncaught Error: Diagram.selectCollection given something that is not a Part: null.<br />
* D-12567: Tooltip incorrectly showed for label component containing only spaces.<br />
* D-12438: Operation was cancelled because it was replaced by a new operation.<br />
* D-12551: Some expressions didn't work as calculated case/event attributes.<br />
* D-11720: Chart buttons were not visible in Apple Safari and iPad.<br />
* D-12544: On-screen settings "options" parameter did not work.<br />
* D-12528: Multi-unit time unit selection appeared where it's not applicable.<br />
* D-12583: Error message should be provided for invalid settings input than just display JS errors.<br />
* D-12599: Tooltips didn't show correct measures/dimensions when "Show in tooltip" mappings are used.<br />
* D-12561: Chart settings content was incorrectly drawn outside of the chart dialog.<br />
* D-12568: Reload UI sometimes crashed chart having multiselect on-screen settings.<br />
* D-12572: Main header toolbar lost when refresh maximized PA chart.<br />
* D-12612: Drop Unused Filters After setting incorrectly allowed zero seconds.<br />
* D-12533: Error message keeped blinking in Analysis view.<br />
* D-12608: User could not select or add new case attribute when current select attribute doesn't exist.<br />
* D-12451: Prevented deleting running script.<br />
* D-12516: Windows event viewer warning: Failed to gracefully shutdown application.<br />
* D-12523: Business calendar performance - part 2.<br />
* D-12538: Column with same name could be added multiple times to datatable using expression language.<br />
* D-12582: Improved EMS mutex code to support multiple PA service in one server.<br />
* D-12624: Synchronize new (empty) data table generated failed queries in Snowflake.<br />
* D-12622: Advanced setting page reserved room for the expression editor frame that did not exist.<br />
* D-11295: In on-screen settings, some UI controls were vertically misaligned.<br />
* D-11625: The heights of the parameter option menu in the clustering tab was not well aligned.<br />
* D-12103: Small dropdown list layout issue.<br />
* D-12633: Align issue for Column related Advanced settings.<br />
* D-12505: Search dialog didn't escape % and _ characters correctly in dataframe processing.<br />
* D-12645: Tabs in expression settings dialog were partly hidden when dialog is narrow.<br />
* D-11382: Moving of flowchart was sometimes shaky.<br />
* D-12655: Filter rule tooltips in header were styled incorrectly.<br />
* D-12656: Large integer values in filter jsons were incorrectly presented as small integers.<br />
* D-12661: Some exported filters contained unnecessary "invert" property.<br />
* D-12500: Model with numeric case id's and filtering with the attribute mapped as case id: ERROR [22018] Numeric value <nowiki>''</nowiki> is not recognized.<br />
* D-12509: Filtering null values didn't work in boolean attributes in Snowflake.<br />
* D-12571: In dataframe processing in SQL Server, dividing two integers should not make rounding to integer.<br />
* D-12610: Setting for global DropUnusedFiltersAfter was missing.<br />
* D-12613: Filtering with case/event attributes with null values didn't match in Snowflake models.<br />
* D-12617: Model didn't work when DropUnusedFiltersAfter is 00:00:00.<br />
* D-12618: If model ConfigurationJson is null, Configuration property didn't work.<br />
* D-12620: Filtering didn't work when there are backslaces in attribute names in Snowflake models.<br />
* D-12643: AttributeFunctionCallExpression did not always work properly in array context.<br />
* D-12647: SqlDataFrame with SQL Server: Comparing literals to variant column values failed.<br />
* D-12648: Models that have DropUnusedModelsAfter setting caused "The sliding expiration value must be positive" error.<br />
* D-11526: It was unable to translate Unicode character \uD83D at index 176 to specified code page.<br />
* D-12637: In application startup arised FATAL Application startup exception System.UnauthorizedAccessException: Access to the path 'Global\MutexQPRPAActivation' is denied.<br />
<br />
== Old Releases ==<br />
See older releases in [[QPR ProcessAnalyzer Release Archive]]<br />
__NOTOC__<br />
<br />
[[Category: QPR ProcessAnalyzer]]</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=Create_Predicted_Eventlog&diff=24483Create Predicted Eventlog2024-03-12T09:18:10Z<p>Ollvihe: </p>
<hr />
<div>This article has instructions how to install, configure and use eventlog predictions. The prediction creates a new model that contains the source model data and the predictions. It's able to predict case attributes for the generated new cases and event attributes for the predicted events. To distinguish the real (source data) and predicted events and cases, there are following attributes in the model:<br />
* Event attribute '''Predicted''' denotes whether the event is from the source data (''false'') or whether it's predicted (''true'').<br />
* Case attribute '''Generated''' denotes whether the case is in the source data (''false'') or whether the prediction generated it as a new case (''true'').<br />
<br />
<br />
== Prerequisites for prediction ==<br />
Following prerequisites need to be fulfilled to run the eventlog prediction:<br />
* QPR ProcessAnalyzer 2024.2 or later in use<br />
* Snowflake connection is configured<br />
* Source models are stored to Snowflake<br />
<br />
== Install prediction to Snowflake ==<br />
To install the eventlog prediction to Snowflake:<br />
# Go to Snowflake, and create a Snowflake-managed stage with name '''PREDICTION''' to the same schema configured to QPR ProcessAnalyzer (in the Snowflake connection string). Use settings in the following image: [[File:Create_Snowflake_stage.png]]<br />
# Open the created stage and upload the '''predict.pyz''' file into the stage (ask the file from your QPR representative).<br />
# Create the following procedure to the same schema:<br />
<pre><br />
CREATE OR REPLACE PROCEDURE QPRPA_SP_PREDICTION("CONFIGURATION" OBJECT)<br />
RETURNS OBJECT<br />
LANGUAGE PYTHON<br />
STRICT<br />
RUNTIME_VERSION = '3.8'<br />
PACKAGES = ('nltk','numpy','pandas==1.5.3','scikit-learn','snowflake-snowpark-python','tensorflow','dill','prophet','holidays==0.18','python-kubernetes','docker-py')<br />
HANDLER = 'main'<br />
EXECUTE AS OWNER<br />
AS '<br />
import sys<br />
def main(session, parameters_in: dict) -> dict:<br />
session.file.get(''@decision_intelligence/predict.pyz'', ''/tmp'')<br />
sys.path.append(''/tmp/predict.pyz'')<br />
import predict<br />
return predict.main(session, parameters_in)<br />
';<br />
</pre><br />
<br />
== Create prediction script in QPR ProcessAnalyzer ==<br />
1. Go to QPR ProcessAnalyzer and create the following expression script with name '''ML library''':<br />
<pre><br />
let predictionProcedureName = "qprpa_sp_prediction";<br />
<br />
function RunFunctionWithParallelLogging(logTable, callbackFunc) <br />
{<br />
let state = #{};<br />
<br />
logTable.Truncate();<br />
<br />
_system.Parallel.Run([<br />
() => {<br />
try {<br />
state.Set("Result", callbackFunc());<br />
}<br />
finally {<br />
state.Set("Finished", true);<br />
}<br />
},<br />
() => {<br />
let readRows = 0;<br />
while (true) {<br />
try {<br />
let finished = state.TryGetValue("Finished");<br />
if (finished == true) {<br />
WriteLog(`Work finished. Log written to table ${logTable.Name} (id: ${logTable.Id})`);<br />
break;<br />
}<br />
<br />
let rowsDf = logTable.Synchronize().SqlDataFrame.Skip(readRows).Collect();<br />
readRows = readRows + rowsDf.NRows;<br />
rowsDf.Rows.{<br />
let row = _;<br />
WriteLog(`${row[0]} \t${row[1]}`);<br />
}<br />
}<br />
catch (ex) {<br />
if (ex.InnerExceptions?[0]?.Type == "UnauthorizedAccess") {<br />
WriteLog(`Log data table has disappeared. The generated log will not be complete!`);<br />
break;<br />
}<br />
WriteLog(`Log has not yet been created.`);<br />
}<br />
}<br />
Sleep(5000);<br />
}<br />
]);<br />
return state.TryGetValue("Result");<br />
}<br />
<br />
function Train(params, logTable)<br />
{<br />
function TrainCallback()<br />
{<br />
WriteLog("Starting training...");<br />
<br />
let connection = logTable.Project.CreateSnowflakeConnection();<br />
let finalParams = params.Clone();<br />
finalParams.Set("_typed", params["_typed"].Extend(#{<br />
"log_table": logTable<br />
}));<br />
let result = connection.CallStoredProcedure(predictionProcedureName, #{"configuration": finalParams});<br />
<br />
WriteLog("Finished training...")<br />
return result;<br />
}<br />
return RunFunctionWithParallelLogging(logTable, TrainCallback);<br />
}<br />
<br />
function Generate(params, logTable) <br />
{<br />
function GenerateCallback()<br />
{<br />
WriteLog("Starting generation...")<br />
<br />
let connection = logTable.Project.CreateSnowflakeConnection();<br />
<br />
let typedParams = params["_typed"];<br />
let resultEventsTable = typedParams["target_event_data_table"];<br />
let resultCasesTable = typedParams.TryGetValue("target_case_data_table");<br />
<br />
if (params["overwrite"]) {<br />
resultEventsTable.Truncate();<br />
resultCasesTable?.Truncate();<br />
}<br />
<br />
let finalParams = params.Clone();<br />
finalParams.Set("_typed", typedParams.Extend(#{<br />
"log_table": logTable<br />
}));<br />
<br />
let result = connection.CallStoredProcedure(predictionProcedureName, #{"configuration": finalParams});<br />
<br />
resultEventsTable.Synchronize();<br />
resultCasesTable?.Synchronize();<br />
<br />
WriteLog("Finished generation...")<br />
return result;<br />
}<br />
<br />
return RunFunctionWithParallelLogging(logTable, GenerateCallback);<br />
}<br />
<br />
function GetSampledEvents(sourceModel, sampledCaseCount, filter)<br />
{<br />
if (IsNull(sampledCaseCount) || sampledCaseCount < 1)<br />
return sourceModel.EventsDataTable.SqlDataFrame;<br />
let sampleFilterRule = sampledCaseCount == null <br />
? null<br />
: #{<br />
"Type":"IncludeCases",<br />
"Items":[#{<br />
"Type": "SqlExpressionValue",<br />
"Configuration": #{<br />
"Root": `Cases.WithColumn("_Random", Rand()).OrderByColumns(["_Random"], [true]).Head(${sampledCaseCount})`<br />
}<br />
}]<br />
};<br />
let filterRules = filter?["Items"];<br />
if (!IsNullTop(filterRules)) {<br />
if (!IsNullTop(sampleFilterRule))<br />
filterRules = Concat(filterRules, sampleFilterRule);<br />
}<br />
else {<br />
if (!IsNullTop(sampleFilterRule))<br />
filterRules = [sampleFilterRule];<br />
else<br />
filterRules = [];<br />
}<br />
<br />
let finalFilter = #{<br />
"Items":filterRules<br />
};<br />
sourceModel.CacheTableSqlDataFrame(finalFilter);<br />
}<br />
<br />
function TrainMLModelForModel(modelName, sourceModel, targetProject, trainingConfiguration, recreatePredictionModel, trainingDataFilter, logTable, trainingCaseSampleSize)<br />
{<br />
let sanitizedModelName = `${sourceModel.Id}-${modelName}`; <br />
<br />
let originalCaseCount = sourceModel.EventsDataTable.SqlDataFrame.SelectDistinct([sourceModel.EventsDataTable.ColumnMappings["CaseId"]]).NRows;<br />
let trainEventDataSdf = GetSampledEvents(sourceModel, trainingCaseSampleSize, trainingDataFilter);<br />
let actualTrainingCaseSampleSize = trainEventDataSdf.SelectDistinct([trainEventDataSdf.ColumnMappings["CaseId"]]).NRows;<br />
WriteLog(`Starting to train a prediction model using ${ToString(100*actualTrainingCaseSampleSize/originalCaseCount, "F")}% of the original cases (${actualTrainingCaseSampleSize}/${originalCaseCount}) found in source model ${sourceModel.Name}.`)<br />
<br />
let trainCaseDataSdf = sourceModel.CasesDataTable?.SqlDataFrame;<br />
<br />
let columnMappings = trainEventDataSdf.ColumnMappings;<br />
if (trainCaseDataSdf != null) {<br />
columnMappings = columnMappings.Extend(#{"Case_CaseId": trainCaseDataSdf.ColumnMappings["CaseId"]});<br />
}<br />
<br />
trainingConfiguration = trainingConfiguration.Extend(#{ <br />
"_typed": #{<br />
"event_data": trainEventDataSdf, <br />
"project": targetProject<br />
},<br />
"model_name": sanitizedModelName,<br />
"column_mappings": columnMappings,<br />
"overwrite_model": recreatePredictionModel,<br />
"case_start_time_probability_multiplier": originalCaseCount / actualTrainingCaseSampleSize<br />
});<br />
<br />
if (trainCaseDataSdf != null) {<br />
trainingConfiguration["_typed"].Set("case_data", trainCaseDataSdf);<br />
}<br />
<br />
Train(trainingConfiguration, logTable);<br />
}<br />
<br />
function GenerateNewModel(modelName, sourceModel, targetProject, generationConfiguration, incompleteCasesFilter, logTable)<br />
{<br />
let sanitizedModelName = `${sourceModel.Id}-${modelName}`; <br />
let eventsTableName = `${modelName} - events`;<br />
let casesTableName = `${modelName} - cases`;<br />
let m = targetProject.ModelByName(modelName);<br />
let eventsTable = null;<br />
let casesTable = null; <br />
if (m != null)<br />
{<br />
eventsTable = m.EventsDataTable;<br />
casesTable = m.CasesDataTable;<br />
}<br />
else {<br />
let eventsTableConfiguration = #{<br />
"Name": eventsTableName,<br />
"Type": "Snowflake"<br />
};<br />
eventsTable = targetProject.DataTableByName(eventsTableName) ?? targetProject.CreateDataTable(eventsTableConfiguration).Synchronize();<br />
if (sourceModel.CasesDataTable != null) {<br />
let casesTableConfiguration = #{<br />
"Name": casesTableName,<br />
"Type": "Snowflake"<br />
};<br />
casesTable = targetProject.DataTableByName(casesTableName) ?? targetProject.CreateDataTable(casesTableConfiguration).Synchronize();<br />
}<br />
}<br />
<br />
eventsTable.Truncate();<br />
casesTable?.Truncate();<br />
<br />
let generationParams, result;<br />
<br />
if (generationConfiguration.TryGetValue("cases_to_generate") != 0) {<br />
WriteLog(`Generating new cases with new events...`);<br />
<br />
generationParams = generationConfiguration.Extend(#{ <br />
"_typed": #{<br />
"target_event_data_table": eventsTable,<br />
"project": targetProject<br />
},<br />
"model_name": sanitizedModelName,<br />
"overwrite": false<br />
});<br />
if (casesTable != null) {<br />
generationConfiguration["_typed"].Set("target_case_data_table", casesTable);<br />
}<br />
<br />
result = Generate(generationParams, logTable);<br />
<br />
WriteLog(`Generation results:\r\n${result}`);<br />
<br />
result = ParseJson(result);<br />
if (result["result"] != "success")<br />
throw result["exception"]<br />
}<br />
<br />
if (incompleteCasesFilter != null) {<br />
WriteLog(`Generating new events for running cases...`);<br />
let incompleteCasesSqlDataFrame = sourceModel.EventsDataTable.SqlDataFrame.ApplyFilter(incompleteCasesFilter, sourceModel.CasesDataTable?.SqlDataFrame);<br />
<br />
generationParams = generationConfiguration.Extend(#{ <br />
"_typed": #{<br />
"event_data": incompleteCasesSqlDataFrame, <br />
"target_event_data_table": eventsTable,<br />
"project": targetProject<br />
},<br />
"model_name": sanitizedModelName,<br />
"overwrite": false,<br />
"temperature": 0<br />
});<br />
if (casesTable != null) {<br />
generationConfiguration["_typed"].Set("case_data", sourceModel.CasesDataTable.SqlDataFrame);<br />
}<br />
<br />
result = Generate(generationParams, logTable);<br />
WriteLog(`Generation results:\r\n${result}`);<br />
<br />
result = ParseJson(result);<br />
if (result["result"] != "success")<br />
throw result["exception"]<br />
}<br />
<br />
if (!("Predicted".In(eventsTable.ColumnTypes.Name)))<br />
eventsTable<br />
.AddColumn("Predicted", "Boolean");<br />
<br />
eventsTable<br />
.DeleteRows(<br />
Column(result["column_mappings"]["events"]["EventType"]) == "__FINISH__"<br />
)<br />
.UpdateRows(<br />
1==1,<br />
"Predicted", true<br />
);<br />
<br />
if (casesTable != null) {<br />
if (!("Generated".In(casesTable.ColumnTypes.Name)))<br />
casesTable<br />
.AddColumn("Generated", "Boolean");<br />
<br />
casesTable<br />
.UpdateRows(<br />
1==1,<br />
"Generated", true<br />
);<br />
} <br />
<br />
WriteLog(`Appending original model data...`);<br />
eventsTable.Import(sourceModel.EventsDataTable.SqlDataFrame, #{"Append": true});<br />
if (casesTable != null)<br />
casesTable.Import(sourceModel.CasesDataTable.SqlDataFrame, #{"Append": true});<br />
<br />
eventsTable<br />
.UpdateRows(<br />
Column("Predicted") == null,<br />
"Predicted", false<br />
);<br />
<br />
casesTable<br />
?.UpdateRows(<br />
Column("Generated") == null,<br />
"Generated", false<br />
);<br />
<br />
if (m != null)<br />
return m;<br />
<br />
WriteLog(`Creating model...`);<br />
let eventColumnMappings = result["column_mappings"]["events"];<br />
let timestampMapping = eventColumnMappings["TimeStamp"];<br />
eventColumnMappings.Remove("TimeStamp");<br />
eventColumnMappings.Set("Timestamp", timestampMapping);<br />
<br />
let modelConfiguration = #{<br />
"DataSource": #{<br />
"Events":#{<br />
"DataSourceType": "datatable",<br />
"DataTableName": eventsTableName,<br />
"Columns": eventColumnMappings<br />
}<br />
}<br />
};<br />
<br />
if (casesTable != null) {<br />
modelConfiguration["DataSource"].Set("Cases", #{<br />
"DataSourceType": "datatable",<br />
"DataTableName": casesTableName,<br />
"Columns": result["column_mappings"]["cases"]<br />
});<br />
}<br />
<br />
targetProject.CreateModel(#{"Name": modelName, "Configuration": modelConfiguration});<br />
}<br />
<br />
function GeneratePredictionModel(configuration)<br />
{<br />
let modelName = configuration["Name"];<br />
let sourceModel = configuration["SourceModel"];<br />
let targetProject = configuration["TargetProject"];<br />
let trainingConfiguration = configuration["TrainingConfiguration"];<br />
let generationConfiguration = configuration["GenerationConfiguration"];<br />
let trainingDataFilter = configuration["TrainingDataFilter"];<br />
let incompleteCasesFilter = configuration["IncompleteCasesFilter"];<br />
let recreatePredictionModel = configuration["RecreatePredictionModel"];<br />
let trainingCaseSampleSize = configuration["TrainingCaseSampleSize"];<br />
<br />
let result = null;<br />
let logTableName = `_MLLog:${Now}`;<br />
let logTable = targetProject.CreateDataTable(#{"Name": logTableName, "Type": "Snowflake"});<br />
try {<br />
WriteLog(`Training a prediction model based on model:\r\n${sourceModel.Name} (id=${sourceModel.Id})`);<br />
result = TrainMLModelForModel(modelName, sourceModel, targetProject, trainingConfiguration, recreatePredictionModel, trainingDataFilter, logTable, trainingCaseSampleSize);<br />
WriteLog(`Model training completed. Training result:\r\n${result}`);<br />
<br />
if (generationConfiguration != null) {<br />
WriteLog(`Generating a new model named ${modelName} based on trained model ${modelName}):\r\n${result}`);<br />
let newModel = GenerateNewModel(modelName, sourceModel, targetProject, generationConfiguration, incompleteCasesFilter, logTable);<br />
<br />
WriteLog(`Model ${newModel.Name} (id=${newModel.Id}) generated into project ${targetProject.Name}:\r\n${result}`);<br />
}<br />
}<br />
finally {<br />
targetProject.DataTableByName(logTableName)?.DeletePermanently();<br />
}<br />
}<br />
<br />
return #{<br />
"GeneratePredictionModel": GeneratePredictionModel,<br />
"RunFunctionWithParallelLogging": RunFunctionWithParallelLogging,<br />
"Train": Train,<br />
"Generate": Generate<br />
};<br />
</pre><br />
<br />
2. Create the following expression script (e.g., with name '''Create prediction model'''):<br />
<pre><br />
let lib = First(Project.Scripts.Where(Name == "ML library")).Run(#{});<br />
let targetProject = Project;<br />
lib.GeneratePredictionModel(#{<br />
"Name": "My prediction model",<br />
"SourceModel": ModelById(1),<br />
"TargetProject": targetProject,<br />
"RecreatePredictionModel": true,<br />
"TrainingConfiguration": #{<br />
num_epochs_to_train: 500<br />
},<br />
"GenerationConfiguration": #{<br />
"cases_to_generate": 1000<br />
},<br />
"TrainingDataFilter": null,<br />
"TrainingCaseSampleSize": 1000,<br />
"IncompleteCasesFilter": null<br />
});<br />
</pre><br />
3. Configure prediction for the previously created script as instructed in the next chapter.<br />
<br />
== Configure prediction ==<br />
Prediction script has the following settings in the GeneratePredictionModel call:<br />
* '''Name''': Name of the QPR ProcessAnalyzer model that is created to the target project. The model will contain the source model content and the predictions.<br />
* '''SourceModel''': Source model for which the prediction is made. Model can be selected for example based on id with ModelById function or by name with ModelByName function.<br />
* '''TargetProject''': Target project to create the new model into.<br />
* '''RecreatePredictionModel''': When ''true'', a new ML model is trained when the script is run. When ''false'', the prediction is run using possibly pre-existing ML model. <br />
* '''TrainingConfiguration''': Training parameters.<br />
** '''num_epochs_to_train''': How many times the whole training data is used in training. The more there are epochs, the better the model usually is, but the training will take more time. The best performing model out of all the iterations will be selected.<br />
** '''max_num_case_clusters''': Maximum number of clusters to divide the case attribute values into. Default is 20.<br />
* '''GenerationConfiguration''': Event generation parameters. When null, no generation is done. For example, following parameters are supported:<br />
** '''cases_to_generate''': Maximum number cases to create. The number of created cases is further limited by the capabilities of the trained model and the ''case_generation_start_time'' and ''case_generation_end_time'' parameters.<br />
** '''case_generation_start_time''': If defined, new cases will be generated starting from this timestamp. If not defined, the latest start event timestamp used in the training data. This parameter is given as ISO datetime format.<br />
** '''case_generation_end_time''': If defined, the new cases generation will stop when reaching this timestamp, and no cases will be generated after it. This parameter is given as ISO datetime format.<br />
** '''generate_debug_event_attributes''': If true, additional columns will be added containing, e.g., probabilities of the selected activity and other activities.<br />
** '''min_prediction_probability ''': Minimum probability of any activity name in next activity prediction. If the probability of an activity is lower than this, it will never be picked. Default value is 0.01.<br />
** '''temperature''': If 0, the predicted event type will always be the most probable one. If 1, the next event type is randomly selected based on probabilities of each event type. This behavior is interpolated when using values between 0 and 1.<br />
* '''TrainingDataFilter''': Optional [[Filtering_in_QPR_ProcessAnalyzer_Queries|filter]] to select specific cases to training the prediction model.<br />
* '''TrainingCaseSampleSize''': Maximum number of cases to take from the source model (cases are selected randomly). Use a lower setting to speed up the ML model training. The greater the value, the more subtle phenomena the prediction can learn from the data. <br />
* '''IncompleteCasesFilter''': Optional [[Filtering_in_QPR_ProcessAnalyzer_Queries|filter]] to select which for cases the prediction is made. To improve performance of the prediction, it's recommended to include only the incomplete cases for which new events might appear, and skip the completed cases for which new events are not expected anymore.<br />
</pre></div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=Create_Predicted_Eventlog&diff=24482Create Predicted Eventlog2024-03-12T09:17:57Z<p>Ollvihe: </p>
<hr />
<div>This article has instructions how to install, configure and use eventlog predictions. The prediction creates a new model that contains the source model data and the predictions. It's able to predict case attributes for the generated new cases and event attributes for the predicted events. To distinguish the real (source data) and predicted events and cases, there are following attributes in the model:<br />
* Event attribute '''Predicted''' denotes whether the event is from the source data (''false'') or whether it's predicted (''true'').<br />
* Case attribute '''Generated''' denotes whether the case is in the source data (''false'') or whether the prediction generated it as a new case (''true'').<br />
<br />
<br />
== Prerequisites for prediction ==<br />
Following prerequisites need to be fulfilled to run the eventlog prediction:<br />
* QPR ProcessAnalyzer 2024.2 or later in use<br />
* Snowflake connection is configured<br />
* Source models are stored to Snowflake<br />
<br />
== Install prediction to Snowflake ==<br />
To install the eventlog prediction to Snowflake:<br />
# Go to Snowflake, and create a Snowflake-managed stage with name '''PREDICTION''' to the same schema configured to QPR ProcessAnalyzer (in the Snowflake connection string). Use settings in the following image: [[File:Create_Snowflake_stage.png]]<br />
# Open the created stage and upload the '''predict.pyz''' file into the stage (ask the file from your QPR representative).<br />
# Create the following procedure to the same schema:<br />
<pre><br />
CREATE OR REPLACE PROCEDURE QPRPA_SP_PREDICTION("CONFIGURATION" OBJECT)<br />
RETURNS OBJECT<br />
LANGUAGE PYTHON<br />
STRICT<br />
RUNTIME_VERSION = '3.8'<br />
PACKAGES = ('nltk','numpy','pandas==1.5.3','scikit-learn','snowflake-snowpark-python','tensorflow','dill','prophet','holidays==0.18','python-kubernetes','docker-py')<br />
HANDLER = 'main'<br />
EXECUTE AS OWNER<br />
AS '<br />
import sys<br />
def main(session, parameters_in: dict) -> dict:<br />
session.file.get(''@decision_intelligence/predict.pyz'', ''/tmp'')<br />
sys.path.append(''/tmp/predict.pyz'')<br />
import predict<br />
return predict.main(session, parameters_in)<br />
';<br />
</pre><br />
<br />
== Create prediction script in QPR ProcessAnalyzer ==<br />
1. Go to QPR ProcessAnalyzer and create the following expression script with name '''ML library''':<br />
<pre><br />
let predictionProcedureName = "qprpa_sp_prediction";<br />
<br />
function RunFunctionWithParallelLogging(logTable, callbackFunc) <br />
{<br />
let state = #{};<br />
<br />
logTable.Truncate();<br />
<br />
_system.Parallel.Run([<br />
() => {<br />
try {<br />
state.Set("Result", callbackFunc());<br />
}<br />
finally {<br />
state.Set("Finished", true);<br />
}<br />
},<br />
() => {<br />
let readRows = 0;<br />
while (true) {<br />
try {<br />
let finished = state.TryGetValue("Finished");<br />
if (finished == true) {<br />
WriteLog(`Work finished. Log written to table ${logTable.Name} (id: ${logTable.Id})`);<br />
break;<br />
}<br />
<br />
let rowsDf = logTable.Synchronize().SqlDataFrame.Skip(readRows).Collect();<br />
readRows = readRows + rowsDf.NRows;<br />
rowsDf.Rows.{<br />
let row = _;<br />
WriteLog(`${row[0]} \t${row[1]}`);<br />
}<br />
}<br />
catch (ex) {<br />
if (ex.InnerExceptions?[0]?.Type == "UnauthorizedAccess") {<br />
WriteLog(`Log data table has disappeared. The generated log will not be complete!`);<br />
break;<br />
}<br />
WriteLog(`Log has not yet been created.`);<br />
}<br />
}<br />
Sleep(5000);<br />
}<br />
]);<br />
return state.TryGetValue("Result");<br />
}<br />
<br />
function Train(params, logTable)<br />
{<br />
function TrainCallback()<br />
{<br />
WriteLog("Starting training...");<br />
<br />
let connection = logTable.Project.CreateSnowflakeConnection();<br />
let finalParams = params.Clone();<br />
finalParams.Set("_typed", params["_typed"].Extend(#{<br />
"log_table": logTable<br />
}));<br />
let result = connection.CallStoredProcedure(predictionProcedureName, #{"configuration": finalParams});<br />
<br />
WriteLog("Finished training...")<br />
return result;<br />
}<br />
return RunFunctionWithParallelLogging(logTable, TrainCallback);<br />
}<br />
<br />
function Generate(params, logTable) <br />
{<br />
function GenerateCallback()<br />
{<br />
WriteLog("Starting generation...")<br />
<br />
let connection = logTable.Project.CreateSnowflakeConnection();<br />
<br />
let typedParams = params["_typed"];<br />
let resultEventsTable = typedParams["target_event_data_table"];<br />
let resultCasesTable = typedParams.TryGetValue("target_case_data_table");<br />
<br />
if (params["overwrite"]) {<br />
resultEventsTable.Truncate();<br />
resultCasesTable?.Truncate();<br />
}<br />
<br />
let finalParams = params.Clone();<br />
finalParams.Set("_typed", typedParams.Extend(#{<br />
"log_table": logTable<br />
}));<br />
<br />
let result = connection.CallStoredProcedure(predictionProcedureName, #{"configuration": finalParams});<br />
<br />
resultEventsTable.Synchronize();<br />
resultCasesTable?.Synchronize();<br />
<br />
WriteLog("Finished generation...")<br />
return result;<br />
}<br />
<br />
return RunFunctionWithParallelLogging(logTable, GenerateCallback);<br />
}<br />
<br />
function GetSampledEvents(sourceModel, sampledCaseCount, filter)<br />
{<br />
if (IsNull(sampledCaseCount) || sampledCaseCount < 1)<br />
return sourceModel.EventsDataTable.SqlDataFrame;<br />
let sampleFilterRule = sampledCaseCount == null <br />
? null<br />
: #{<br />
"Type":"IncludeCases",<br />
"Items":[#{<br />
"Type": "SqlExpressionValue",<br />
"Configuration": #{<br />
"Root": `Cases.WithColumn("_Random", Rand()).OrderByColumns(["_Random"], [true]).Head(${sampledCaseCount})`<br />
}<br />
}]<br />
};<br />
let filterRules = filter?["Items"];<br />
if (!IsNullTop(filterRules)) {<br />
if (!IsNullTop(sampleFilterRule))<br />
filterRules = Concat(filterRules, sampleFilterRule);<br />
}<br />
else {<br />
if (!IsNullTop(sampleFilterRule))<br />
filterRules = [sampleFilterRule];<br />
else<br />
filterRules = [];<br />
}<br />
<br />
let finalFilter = #{<br />
"Items":filterRules<br />
};<br />
sourceModel.CacheTableSqlDataFrame(finalFilter);<br />
}<br />
<br />
function TrainMLModelForModel(modelName, sourceModel, targetProject, trainingConfiguration, recreatePredictionModel, trainingDataFilter, logTable, trainingCaseSampleSize)<br />
{<br />
let sanitizedModelName = `${sourceModel.Id}-${modelName}`; <br />
<br />
let originalCaseCount = sourceModel.EventsDataTable.SqlDataFrame.SelectDistinct([sourceModel.EventsDataTable.ColumnMappings["CaseId"]]).NRows;<br />
let trainEventDataSdf = GetSampledEvents(sourceModel, trainingCaseSampleSize, trainingDataFilter);<br />
let actualTrainingCaseSampleSize = trainEventDataSdf.SelectDistinct([trainEventDataSdf.ColumnMappings["CaseId"]]).NRows;<br />
WriteLog(`Starting to train a prediction model using ${ToString(100*actualTrainingCaseSampleSize/originalCaseCount, "F")}% of the original cases (${actualTrainingCaseSampleSize}/${originalCaseCount}) found in source model ${sourceModel.Name}.`)<br />
<br />
let trainCaseDataSdf = sourceModel.CasesDataTable?.SqlDataFrame;<br />
<br />
let columnMappings = trainEventDataSdf.ColumnMappings;<br />
if (trainCaseDataSdf != null) {<br />
columnMappings = columnMappings.Extend(#{"Case_CaseId": trainCaseDataSdf.ColumnMappings["CaseId"]});<br />
}<br />
<br />
trainingConfiguration = trainingConfiguration.Extend(#{ <br />
"_typed": #{<br />
"event_data": trainEventDataSdf, <br />
"project": targetProject<br />
},<br />
"model_name": sanitizedModelName,<br />
"column_mappings": columnMappings,<br />
"overwrite_model": recreatePredictionModel,<br />
"case_start_time_probability_multiplier": originalCaseCount / actualTrainingCaseSampleSize<br />
});<br />
<br />
if (trainCaseDataSdf != null) {<br />
trainingConfiguration["_typed"].Set("case_data", trainCaseDataSdf);<br />
}<br />
<br />
Train(trainingConfiguration, logTable);<br />
}<br />
<br />
function GenerateNewModel(modelName, sourceModel, targetProject, generationConfiguration, incompleteCasesFilter, logTable)<br />
{<br />
let sanitizedModelName = `${sourceModel.Id}-${modelName}`; <br />
let eventsTableName = `${modelName} - events`;<br />
let casesTableName = `${modelName} - cases`;<br />
let m = targetProject.ModelByName(modelName);<br />
let eventsTable = null;<br />
let casesTable = null; <br />
if (m != null)<br />
{<br />
eventsTable = m.EventsDataTable;<br />
casesTable = m.CasesDataTable;<br />
}<br />
else {<br />
let eventsTableConfiguration = #{<br />
"Name": eventsTableName,<br />
"Type": "Snowflake"<br />
};<br />
eventsTable = targetProject.DataTableByName(eventsTableName) ?? targetProject.CreateDataTable(eventsTableConfiguration).Synchronize();<br />
if (sourceModel.CasesDataTable != null) {<br />
let casesTableConfiguration = #{<br />
"Name": casesTableName,<br />
"Type": "Snowflake"<br />
};<br />
casesTable = targetProject.DataTableByName(casesTableName) ?? targetProject.CreateDataTable(casesTableConfiguration).Synchronize();<br />
}<br />
}<br />
<br />
eventsTable.Truncate();<br />
casesTable?.Truncate();<br />
<br />
let generationParams, result;<br />
<br />
if (generationConfiguration.TryGetValue("cases_to_generate") != 0) {<br />
WriteLog(`Generating new cases with new events...`);<br />
<br />
generationParams = generationConfiguration.Extend(#{ <br />
"_typed": #{<br />
"target_event_data_table": eventsTable,<br />
"project": targetProject<br />
},<br />
"model_name": sanitizedModelName,<br />
"overwrite": false<br />
});<br />
if (casesTable != null) {<br />
generationConfiguration["_typed"].Set("target_case_data_table", casesTable);<br />
}<br />
<br />
result = Generate(generationParams, logTable);<br />
<br />
WriteLog(`Generation results:\r\n${result}`);<br />
<br />
result = ParseJson(result);<br />
if (result["result"] != "success")<br />
throw result["exception"]<br />
}<br />
<br />
if (incompleteCasesFilter != null) {<br />
WriteLog(`Generating new events for running cases...`);<br />
let incompleteCasesSqlDataFrame = sourceModel.EventsDataTable.SqlDataFrame.ApplyFilter(incompleteCasesFilter, sourceModel.CasesDataTable?.SqlDataFrame);<br />
<br />
generationParams = generationConfiguration.Extend(#{ <br />
"_typed": #{<br />
"event_data": incompleteCasesSqlDataFrame, <br />
"target_event_data_table": eventsTable,<br />
"project": targetProject<br />
},<br />
"model_name": sanitizedModelName,<br />
"overwrite": false,<br />
"temperature": 0<br />
});<br />
if (casesTable != null) {<br />
generationConfiguration["_typed"].Set("case_data", sourceModel.CasesDataTable.SqlDataFrame);<br />
}<br />
<br />
result = Generate(generationParams, logTable);<br />
WriteLog(`Generation results:\r\n${result}`);<br />
<br />
result = ParseJson(result);<br />
if (result["result"] != "success")<br />
throw result["exception"]<br />
}<br />
<br />
if (!("Predicted".In(eventsTable.ColumnTypes.Name)))<br />
eventsTable<br />
.AddColumn("Predicted", "Boolean");<br />
<br />
eventsTable<br />
.DeleteRows(<br />
Column(result["column_mappings"]["events"]["EventType"]) == "__FINISH__"<br />
)<br />
.UpdateRows(<br />
1==1,<br />
"Predicted", true<br />
);<br />
<br />
if (casesTable != null) {<br />
if (!("Generated".In(casesTable.ColumnTypes.Name)))<br />
casesTable<br />
.AddColumn("Generated", "Boolean");<br />
<br />
casesTable<br />
.UpdateRows(<br />
1==1,<br />
"Generated", true<br />
);<br />
} <br />
<br />
WriteLog(`Appending original model data...`);<br />
eventsTable.Import(sourceModel.EventsDataTable.SqlDataFrame, #{"Append": true});<br />
if (casesTable != null)<br />
casesTable.Import(sourceModel.CasesDataTable.SqlDataFrame, #{"Append": true});<br />
<br />
eventsTable<br />
.UpdateRows(<br />
Column("Predicted") == null,<br />
"Predicted", false<br />
);<br />
<br />
casesTable<br />
?.UpdateRows(<br />
Column("Generated") == null,<br />
"Generated", false<br />
);<br />
<br />
if (m != null)<br />
return m;<br />
<br />
WriteLog(`Creating model...`);<br />
let eventColumnMappings = result["column_mappings"]["events"];<br />
let timestampMapping = eventColumnMappings["TimeStamp"];<br />
eventColumnMappings.Remove("TimeStamp");<br />
eventColumnMappings.Set("Timestamp", timestampMapping);<br />
<br />
let modelConfiguration = #{<br />
"DataSource": #{<br />
"Events":#{<br />
"DataSourceType": "datatable",<br />
"DataTableName": eventsTableName,<br />
"Columns": eventColumnMappings<br />
}<br />
}<br />
};<br />
<br />
if (casesTable != null) {<br />
modelConfiguration["DataSource"].Set("Cases", #{<br />
"DataSourceType": "datatable",<br />
"DataTableName": casesTableName,<br />
"Columns": result["column_mappings"]["cases"]<br />
});<br />
}<br />
<br />
targetProject.CreateModel(#{"Name": modelName, "Configuration": modelConfiguration});<br />
}<br />
<br />
function GeneratePredictionModel(configuration)<br />
{<br />
let modelName = configuration["Name"];<br />
let sourceModel = configuration["SourceModel"];<br />
let targetProject = configuration["TargetProject"];<br />
let trainingConfiguration = configuration["TrainingConfiguration"];<br />
let generationConfiguration = configuration["GenerationConfiguration"];<br />
let trainingDataFilter = configuration["TrainingDataFilter"];<br />
let incompleteCasesFilter = configuration["IncompleteCasesFilter"];<br />
let recreatePredictionModel = configuration["RecreatePredictionModel"];<br />
let trainingCaseSampleSize = configuration["TrainingCaseSampleSize"];<br />
<br />
let result = null;<br />
let logTableName = `_MLLog:${Now}`;<br />
let logTable = targetProject.CreateDataTable(#{"Name": logTableName, "Type": "Snowflake"});<br />
try {<br />
WriteLog(`Training a prediction model based on model:\r\n${sourceModel.Name} (id=${sourceModel.Id})`);<br />
result = TrainMLModelForModel(modelName, sourceModel, targetProject, trainingConfiguration, recreatePredictionModel, trainingDataFilter, logTable, trainingCaseSampleSize);<br />
WriteLog(`Model training completed. Training result:\r\n${result}`);<br />
<br />
if (generationConfiguration != null) {<br />
WriteLog(`Generating a new model named ${modelName} based on trained model ${modelName}):\r\n${result}`);<br />
let newModel = GenerateNewModel(modelName, sourceModel, targetProject, generationConfiguration, incompleteCasesFilter, logTable);<br />
<br />
WriteLog(`Model ${newModel.Name} (id=${newModel.Id}) generated into project ${targetProject.Name}:\r\n${result}`);<br />
}<br />
}<br />
finally {<br />
targetProject.DataTableByName(logTableName)?.DeletePermanently();<br />
}<br />
}<br />
<br />
return #{<br />
"GeneratePredictionModel": GeneratePredictionModel,<br />
"RunFunctionWithParallelLogging": RunFunctionWithParallelLogging,<br />
"Train": Train,<br />
"Generate": Generate<br />
};<br />
</pre><br />
<br />
2. Create the following expression script (e.g., with name '''Create prediction model'''):<br />
<pre><br />
let lib = First(Project.Scripts.Where(Name == "ML library")).Run(#{});<br />
let targetProject = Project;<br />
lib.GeneratePredictionModel(#{<br />
"Name": "My prediction model",<br />
"SourceModel": ModelById(1),<br />
"TargetProject": targetProject,<br />
"RecreatePredictionModel": true,<br />
"TrainingConfiguration": #{<br />
num_epochs_to_train<br />
},<br />
"GenerationConfiguration": #{<br />
"cases_to_generate": 1000<br />
},<br />
"TrainingDataFilter": null,<br />
"TrainingCaseSampleSize": 1000,<br />
"IncompleteCasesFilter": null<br />
});<br />
</pre><br />
3. Configure prediction for the previously created script as instructed in the next chapter.<br />
<br />
== Configure prediction ==<br />
Prediction script has the following settings in the GeneratePredictionModel call:<br />
* '''Name''': Name of the QPR ProcessAnalyzer model that is created to the target project. The model will contain the source model content and the predictions.<br />
* '''SourceModel''': Source model for which the prediction is made. Model can be selected for example based on id with ModelById function or by name with ModelByName function.<br />
* '''TargetProject''': Target project to create the new model into.<br />
* '''RecreatePredictionModel''': When ''true'', a new ML model is trained when the script is run. When ''false'', the prediction is run using possibly pre-existing ML model. <br />
* '''TrainingConfiguration''': Training parameters.<br />
** '''num_epochs_to_train''': How many times the whole training data is used in training. The more there are epochs, the better the model usually is, but the training will take more time. The best performing model out of all the iterations will be selected.<br />
** '''max_num_case_clusters''': Maximum number of clusters to divide the case attribute values into. Default is 20.<br />
* '''GenerationConfiguration''': Event generation parameters. When null, no generation is done. For example, following parameters are supported:<br />
** '''cases_to_generate''': Maximum number cases to create. The number of created cases is further limited by the capabilities of the trained model and the ''case_generation_start_time'' and ''case_generation_end_time'' parameters.<br />
** '''case_generation_start_time''': If defined, new cases will be generated starting from this timestamp. If not defined, the latest start event timestamp used in the training data. This parameter is given as ISO datetime format.<br />
** '''case_generation_end_time''': If defined, the new cases generation will stop when reaching this timestamp, and no cases will be generated after it. This parameter is given as ISO datetime format.<br />
** '''generate_debug_event_attributes''': If true, additional columns will be added containing, e.g., probabilities of the selected activity and other activities.<br />
** '''min_prediction_probability ''': Minimum probability of any activity name in next activity prediction. If the probability of an activity is lower than this, it will never be picked. Default value is 0.01.<br />
** '''temperature''': If 0, the predicted event type will always be the most probable one. If 1, the next event type is randomly selected based on probabilities of each event type. This behavior is interpolated when using values between 0 and 1.<br />
* '''TrainingDataFilter''': Optional [[Filtering_in_QPR_ProcessAnalyzer_Queries|filter]] to select specific cases to training the prediction model.<br />
* '''TrainingCaseSampleSize''': Maximum number of cases to take from the source model (cases are selected randomly). Use a lower setting to speed up the ML model training. The greater the value, the more subtle phenomena the prediction can learn from the data. <br />
* '''IncompleteCasesFilter''': Optional [[Filtering_in_QPR_ProcessAnalyzer_Queries|filter]] to select which for cases the prediction is made. To improve performance of the prediction, it's recommended to include only the incomplete cases for which new events might appear, and skip the completed cases for which new events are not expected anymore.<br />
</pre></div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=Create_Predicted_Eventlog&diff=24481Create Predicted Eventlog2024-03-12T09:17:20Z<p>Ollvihe: </p>
<hr />
<div>This article has instructions how to install, configure and use eventlog predictions. The prediction creates a new model that contains the source model data and the predictions. It's able to predict case attributes for the generated new cases and event attributes for the predicted events. To distinguish the real (source data) and predicted events and cases, there are following attributes in the model:<br />
* Event attribute '''Predicted''' denotes whether the event is from the source data (''false'') or whether it's predicted (''true'').<br />
* Case attribute '''Generated''' denotes whether the case is in the source data (''false'') or whether the prediction generated it as a new case (''true'').<br />
<br />
<br />
== Prerequisites for prediction ==<br />
Following prerequisites need to be fulfilled to run the eventlog prediction:<br />
* QPR ProcessAnalyzer 2024.2 or later in use<br />
* Snowflake connection is configured<br />
* Source models are stored to Snowflake<br />
<br />
== Install prediction to Snowflake ==<br />
To install the eventlog prediction to Snowflake:<br />
# Go to Snowflake, and create a Snowflake-managed stage with name '''PREDICTION''' to the same schema configured to QPR ProcessAnalyzer (in the Snowflake connection string). Use settings in the following image: [[File:Create_Snowflake_stage.png]]<br />
# Open the created stage and upload the '''predict.pyz''' file into the stage (ask the file from your QPR representative).<br />
# Create the following procedure to the same schema:<br />
<pre><br />
CREATE OR REPLACE PROCEDURE QPRPA_SP_PREDICTION("CONFIGURATION" OBJECT)<br />
RETURNS OBJECT<br />
LANGUAGE PYTHON<br />
STRICT<br />
RUNTIME_VERSION = '3.8'<br />
PACKAGES = ('nltk','numpy','pandas==1.5.3','scikit-learn','snowflake-snowpark-python','tensorflow','dill','prophet','holidays==0.18','python-kubernetes','docker-py')<br />
HANDLER = 'main'<br />
EXECUTE AS OWNER<br />
AS '<br />
import sys<br />
def main(session, parameters_in: dict) -> dict:<br />
session.file.get(''@decision_intelligence/predict.pyz'', ''/tmp'')<br />
sys.path.append(''/tmp/predict.pyz'')<br />
import predict<br />
return predict.main(session, parameters_in)<br />
';<br />
</pre><br />
<br />
== Create prediction script in QPR ProcessAnalyzer ==<br />
1. Go to QPR ProcessAnalyzer and create the following expression script with name '''ML library''':<br />
<pre><br />
let predictionProcedureName = "qprpa_sp_prediction";<br />
<br />
function RunFunctionWithParallelLogging(logTable, callbackFunc) <br />
{<br />
let state = #{};<br />
<br />
logTable.Truncate();<br />
<br />
_system.Parallel.Run([<br />
() => {<br />
try {<br />
state.Set("Result", callbackFunc());<br />
}<br />
finally {<br />
state.Set("Finished", true);<br />
}<br />
},<br />
() => {<br />
let readRows = 0;<br />
while (true) {<br />
try {<br />
let finished = state.TryGetValue("Finished");<br />
if (finished == true) {<br />
WriteLog(`Work finished. Log written to table ${logTable.Name} (id: ${logTable.Id})`);<br />
break;<br />
}<br />
<br />
let rowsDf = logTable.Synchronize().SqlDataFrame.Skip(readRows).Collect();<br />
readRows = readRows + rowsDf.NRows;<br />
rowsDf.Rows.{<br />
let row = _;<br />
WriteLog(`${row[0]} \t${row[1]}`);<br />
}<br />
}<br />
catch (ex) {<br />
if (ex.InnerExceptions?[0]?.Type == "UnauthorizedAccess") {<br />
WriteLog(`Log data table has disappeared. The generated log will not be complete!`);<br />
break;<br />
}<br />
WriteLog(`Log has not yet been created.`);<br />
}<br />
}<br />
Sleep(5000);<br />
}<br />
]);<br />
return state.TryGetValue("Result");<br />
}<br />
<br />
function Train(params, logTable)<br />
{<br />
function TrainCallback()<br />
{<br />
WriteLog("Starting training...");<br />
<br />
let connection = logTable.Project.CreateSnowflakeConnection();<br />
let finalParams = params.Clone();<br />
finalParams.Set("_typed", params["_typed"].Extend(#{<br />
"log_table": logTable<br />
}));<br />
let result = connection.CallStoredProcedure(predictionProcedureName, #{"configuration": finalParams});<br />
<br />
WriteLog("Finished training...")<br />
return result;<br />
}<br />
return RunFunctionWithParallelLogging(logTable, TrainCallback);<br />
}<br />
<br />
function Generate(params, logTable) <br />
{<br />
function GenerateCallback()<br />
{<br />
WriteLog("Starting generation...")<br />
<br />
let connection = logTable.Project.CreateSnowflakeConnection();<br />
<br />
let typedParams = params["_typed"];<br />
let resultEventsTable = typedParams["target_event_data_table"];<br />
let resultCasesTable = typedParams.TryGetValue("target_case_data_table");<br />
<br />
if (params["overwrite"]) {<br />
resultEventsTable.Truncate();<br />
resultCasesTable?.Truncate();<br />
}<br />
<br />
let finalParams = params.Clone();<br />
finalParams.Set("_typed", typedParams.Extend(#{<br />
"log_table": logTable<br />
}));<br />
<br />
let result = connection.CallStoredProcedure(predictionProcedureName, #{"configuration": finalParams});<br />
<br />
resultEventsTable.Synchronize();<br />
resultCasesTable?.Synchronize();<br />
<br />
WriteLog("Finished generation...")<br />
return result;<br />
}<br />
<br />
return RunFunctionWithParallelLogging(logTable, GenerateCallback);<br />
}<br />
<br />
function GetSampledEvents(sourceModel, sampledCaseCount, filter)<br />
{<br />
if (IsNull(sampledCaseCount) || sampledCaseCount < 1)<br />
return sourceModel.EventsDataTable.SqlDataFrame;<br />
let sampleFilterRule = sampledCaseCount == null <br />
? null<br />
: #{<br />
"Type":"IncludeCases",<br />
"Items":[#{<br />
"Type": "SqlExpressionValue",<br />
"Configuration": #{<br />
"Root": `Cases.WithColumn("_Random", Rand()).OrderByColumns(["_Random"], [true]).Head(${sampledCaseCount})`<br />
}<br />
}]<br />
};<br />
let filterRules = filter?["Items"];<br />
if (!IsNullTop(filterRules)) {<br />
if (!IsNullTop(sampleFilterRule))<br />
filterRules = Concat(filterRules, sampleFilterRule);<br />
}<br />
else {<br />
if (!IsNullTop(sampleFilterRule))<br />
filterRules = [sampleFilterRule];<br />
else<br />
filterRules = [];<br />
}<br />
<br />
let finalFilter = #{<br />
"Items":filterRules<br />
};<br />
sourceModel.CacheTableSqlDataFrame(finalFilter);<br />
}<br />
<br />
function TrainMLModelForModel(modelName, sourceModel, targetProject, trainingConfiguration, recreatePredictionModel, trainingDataFilter, logTable, trainingCaseSampleSize)<br />
{<br />
let sanitizedModelName = `${sourceModel.Id}-${modelName}`; <br />
<br />
let originalCaseCount = sourceModel.EventsDataTable.SqlDataFrame.SelectDistinct([sourceModel.EventsDataTable.ColumnMappings["CaseId"]]).NRows;<br />
let trainEventDataSdf = GetSampledEvents(sourceModel, trainingCaseSampleSize, trainingDataFilter);<br />
let actualTrainingCaseSampleSize = trainEventDataSdf.SelectDistinct([trainEventDataSdf.ColumnMappings["CaseId"]]).NRows;<br />
WriteLog(`Starting to train a prediction model using ${ToString(100*actualTrainingCaseSampleSize/originalCaseCount, "F")}% of the original cases (${actualTrainingCaseSampleSize}/${originalCaseCount}) found in source model ${sourceModel.Name}.`)<br />
<br />
let trainCaseDataSdf = sourceModel.CasesDataTable?.SqlDataFrame;<br />
<br />
let columnMappings = trainEventDataSdf.ColumnMappings;<br />
if (trainCaseDataSdf != null) {<br />
columnMappings = columnMappings.Extend(#{"Case_CaseId": trainCaseDataSdf.ColumnMappings["CaseId"]});<br />
}<br />
<br />
trainingConfiguration = trainingConfiguration.Extend(#{ <br />
"_typed": #{<br />
"event_data": trainEventDataSdf, <br />
"project": targetProject<br />
},<br />
"model_name": sanitizedModelName,<br />
"column_mappings": columnMappings,<br />
"overwrite_model": recreatePredictionModel,<br />
"case_start_time_probability_multiplier": originalCaseCount / actualTrainingCaseSampleSize<br />
});<br />
<br />
if (trainCaseDataSdf != null) {<br />
trainingConfiguration["_typed"].Set("case_data", trainCaseDataSdf);<br />
}<br />
<br />
Train(trainingConfiguration, logTable);<br />
}<br />
<br />
function GenerateNewModel(modelName, sourceModel, targetProject, generationConfiguration, incompleteCasesFilter, logTable)<br />
{<br />
let sanitizedModelName = `${sourceModel.Id}-${modelName}`; <br />
let eventsTableName = `${modelName} - events`;<br />
let casesTableName = `${modelName} - cases`;<br />
let m = targetProject.ModelByName(modelName);<br />
let eventsTable = null;<br />
let casesTable = null; <br />
if (m != null)<br />
{<br />
eventsTable = m.EventsDataTable;<br />
casesTable = m.CasesDataTable;<br />
}<br />
else {<br />
let eventsTableConfiguration = #{<br />
"Name": eventsTableName,<br />
"Type": "Snowflake"<br />
};<br />
eventsTable = targetProject.DataTableByName(eventsTableName) ?? targetProject.CreateDataTable(eventsTableConfiguration).Synchronize();<br />
if (sourceModel.CasesDataTable != null) {<br />
let casesTableConfiguration = #{<br />
"Name": casesTableName,<br />
"Type": "Snowflake"<br />
};<br />
casesTable = targetProject.DataTableByName(casesTableName) ?? targetProject.CreateDataTable(casesTableConfiguration).Synchronize();<br />
}<br />
}<br />
<br />
eventsTable.Truncate();<br />
casesTable?.Truncate();<br />
<br />
let generationParams, result;<br />
<br />
if (generationConfiguration.TryGetValue("cases_to_generate") != 0) {<br />
WriteLog(`Generating new cases with new events...`);<br />
<br />
generationParams = generationConfiguration.Extend(#{ <br />
"_typed": #{<br />
"target_event_data_table": eventsTable,<br />
"project": targetProject<br />
},<br />
"model_name": sanitizedModelName,<br />
"overwrite": false<br />
});<br />
if (casesTable != null) {<br />
generationConfiguration["_typed"].Set("target_case_data_table", casesTable);<br />
}<br />
<br />
result = Generate(generationParams, logTable);<br />
<br />
WriteLog(`Generation results:\r\n${result}`);<br />
<br />
result = ParseJson(result);<br />
if (result["result"] != "success")<br />
throw result["exception"]<br />
}<br />
<br />
if (incompleteCasesFilter != null) {<br />
WriteLog(`Generating new events for running cases...`);<br />
let incompleteCasesSqlDataFrame = sourceModel.EventsDataTable.SqlDataFrame.ApplyFilter(incompleteCasesFilter, sourceModel.CasesDataTable?.SqlDataFrame);<br />
<br />
generationParams = generationConfiguration.Extend(#{ <br />
"_typed": #{<br />
"event_data": incompleteCasesSqlDataFrame, <br />
"target_event_data_table": eventsTable,<br />
"project": targetProject<br />
},<br />
"model_name": sanitizedModelName,<br />
"overwrite": false,<br />
"temperature": 0<br />
});<br />
if (casesTable != null) {<br />
generationConfiguration["_typed"].Set("case_data", sourceModel.CasesDataTable.SqlDataFrame);<br />
}<br />
<br />
result = Generate(generationParams, logTable);<br />
WriteLog(`Generation results:\r\n${result}`);<br />
<br />
result = ParseJson(result);<br />
if (result["result"] != "success")<br />
throw result["exception"]<br />
}<br />
<br />
if (!("Predicted".In(eventsTable.ColumnTypes.Name)))<br />
eventsTable<br />
.AddColumn("Predicted", "Boolean");<br />
<br />
eventsTable<br />
.DeleteRows(<br />
Column(result["column_mappings"]["events"]["EventType"]) == "__FINISH__"<br />
)<br />
.UpdateRows(<br />
1==1,<br />
"Predicted", true<br />
);<br />
<br />
if (casesTable != null) {<br />
if (!("Generated".In(casesTable.ColumnTypes.Name)))<br />
casesTable<br />
.AddColumn("Generated", "Boolean");<br />
<br />
casesTable<br />
.UpdateRows(<br />
1==1,<br />
"Generated", true<br />
);<br />
} <br />
<br />
WriteLog(`Appending original model data...`);<br />
eventsTable.Import(sourceModel.EventsDataTable.SqlDataFrame, #{"Append": true});<br />
if (casesTable != null)<br />
casesTable.Import(sourceModel.CasesDataTable.SqlDataFrame, #{"Append": true});<br />
<br />
eventsTable<br />
.UpdateRows(<br />
Column("Predicted") == null,<br />
"Predicted", false<br />
);<br />
<br />
casesTable<br />
?.UpdateRows(<br />
Column("Generated") == null,<br />
"Generated", false<br />
);<br />
<br />
if (m != null)<br />
return m;<br />
<br />
WriteLog(`Creating model...`);<br />
let eventColumnMappings = result["column_mappings"]["events"];<br />
let timestampMapping = eventColumnMappings["TimeStamp"];<br />
eventColumnMappings.Remove("TimeStamp");<br />
eventColumnMappings.Set("Timestamp", timestampMapping);<br />
<br />
let modelConfiguration = #{<br />
"DataSource": #{<br />
"Events":#{<br />
"DataSourceType": "datatable",<br />
"DataTableName": eventsTableName,<br />
"Columns": eventColumnMappings<br />
}<br />
}<br />
};<br />
<br />
if (casesTable != null) {<br />
modelConfiguration["DataSource"].Set("Cases", #{<br />
"DataSourceType": "datatable",<br />
"DataTableName": casesTableName,<br />
"Columns": result["column_mappings"]["cases"]<br />
});<br />
}<br />
<br />
targetProject.CreateModel(#{"Name": modelName, "Configuration": modelConfiguration});<br />
}<br />
<br />
function GeneratePredictionModel(configuration)<br />
{<br />
let modelName = configuration["Name"];<br />
let sourceModel = configuration["SourceModel"];<br />
let targetProject = configuration["TargetProject"];<br />
let trainingConfiguration = configuration["TrainingConfiguration"];<br />
let generationConfiguration = configuration["GenerationConfiguration"];<br />
let trainingDataFilter = configuration["TrainingDataFilter"];<br />
let incompleteCasesFilter = configuration["IncompleteCasesFilter"];<br />
let recreatePredictionModel = configuration["RecreatePredictionModel"];<br />
let trainingCaseSampleSize = configuration["TrainingCaseSampleSize"];<br />
<br />
let result = null;<br />
let logTableName = `_MLLog:${Now}`;<br />
let logTable = targetProject.CreateDataTable(#{"Name": logTableName, "Type": "Snowflake"});<br />
try {<br />
WriteLog(`Training a prediction model based on model:\r\n${sourceModel.Name} (id=${sourceModel.Id})`);<br />
result = TrainMLModelForModel(modelName, sourceModel, targetProject, trainingConfiguration, recreatePredictionModel, trainingDataFilter, logTable, trainingCaseSampleSize);<br />
WriteLog(`Model training completed. Training result:\r\n${result}`);<br />
<br />
if (generationConfiguration != null) {<br />
WriteLog(`Generating a new model named ${modelName} based on trained model ${modelName}):\r\n${result}`);<br />
let newModel = GenerateNewModel(modelName, sourceModel, targetProject, generationConfiguration, incompleteCasesFilter, logTable);<br />
<br />
WriteLog(`Model ${newModel.Name} (id=${newModel.Id}) generated into project ${targetProject.Name}:\r\n${result}`);<br />
}<br />
}<br />
finally {<br />
targetProject.DataTableByName(logTableName)?.DeletePermanently();<br />
}<br />
}<br />
<br />
return #{<br />
"GeneratePredictionModel": GeneratePredictionModel,<br />
"RunFunctionWithParallelLogging": RunFunctionWithParallelLogging,<br />
"Train": Train,<br />
"Generate": Generate<br />
};<br />
</pre><br />
<br />
2. Create the following expression script (e.g., with name '''Create prediction model'''):<br />
<pre><br />
let lib = First(Project.Scripts.Where(Name == "ML library")).Run(#{});<br />
let targetProject = Project;<br />
lib.GeneratePredictionModel(#{<br />
"Name": "My prediction model",<br />
"SourceModel": ModelById(1),<br />
"TargetProject": targetProject,<br />
"RecreatePredictionModel": true,<br />
"TrainingConfiguration": #{},<br />
"GenerationConfiguration": #{<br />
"cases_to_generate": 1000<br />
},<br />
"TrainingDataFilter": null,<br />
"TrainingCaseSampleSize": 1000,<br />
"IncompleteCasesFilter": null<br />
});<br />
</pre><br />
3. Configure prediction for the previously created script as instructed in the next chapter.<br />
<br />
== Configure prediction ==<br />
Prediction script has the following settings in the GeneratePredictionModel call:<br />
* '''Name''': Name of the QPR ProcessAnalyzer model that is created to the target project. The model will contain the source model content and the predictions.<br />
* '''SourceModel''': Source model for which the prediction is made. Model can be selected for example based on id with ModelById function or by name with ModelByName function.<br />
* '''TargetProject''': Target project to create the new model into.<br />
* '''RecreatePredictionModel''': When ''true'', a new ML model is trained when the script is run. When ''false'', the prediction is run using possibly pre-existing ML model. <br />
* '''TrainingConfiguration''': Training parameters.<br />
** '''num_epochs_to_train''': How many times the whole training data is used in training. The more there are epochs, the better the model usually is, but the training will take more time. The best performing model out of all the iterations will be selected.<br />
** '''max_num_case_clusters''': Maximum number of clusters to divide the case attribute values into. Default is 20.<br />
* '''GenerationConfiguration''': Event generation parameters. When null, no generation is done. For example, following parameters are supported:<br />
** '''cases_to_generate''': Maximum number cases to create. The number of created cases is further limited by the capabilities of the trained model and the ''case_generation_start_time'' and ''case_generation_end_time'' parameters.<br />
** '''case_generation_start_time''': If defined, new cases will be generated starting from this timestamp. If not defined, the latest start event timestamp used in the training data. This parameter is given as ISO datetime format.<br />
** '''case_generation_end_time''': If defined, the new cases generation will stop when reaching this timestamp, and no cases will be generated after it. This parameter is given as ISO datetime format.<br />
** '''generate_debug_event_attributes''': If true, additional columns will be added containing, e.g., probabilities of the selected activity and other activities.<br />
** '''min_prediction_probability ''': Minimum probability of any activity name in next activity prediction. If the probability of an activity is lower than this, it will never be picked. Default value is 0.01.<br />
** '''temperature''': If 0, the predicted event type will always be the most probable one. If 1, the next event type is randomly selected based on probabilities of each event type. This behavior is interpolated when using values between 0 and 1.<br />
* '''TrainingDataFilter''': Optional [[Filtering_in_QPR_ProcessAnalyzer_Queries|filter]] to select specific cases to training the prediction model.<br />
* '''TrainingCaseSampleSize''': Maximum number of cases to take from the source model (cases are selected randomly). Use a lower setting to speed up the ML model training. The greater the value, the more subtle phenomena the prediction can learn from the data. <br />
* '''IncompleteCasesFilter''': Optional [[Filtering_in_QPR_ProcessAnalyzer_Queries|filter]] to select which for cases the prediction is made. To improve performance of the prediction, it's recommended to include only the incomplete cases for which new events might appear, and skip the completed cases for which new events are not expected anymore.<br />
</pre></div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=Create_Predicted_Eventlog&diff=24480Create Predicted Eventlog2024-03-12T09:16:43Z<p>Ollvihe: /* Create prediction script in QPR ProcessAnalyzer */</p>
<hr />
<div>This article has instructions how to install, configure and use eventlog predictions. The prediction creates a new model that contains the source model data and the predictions. It's able to predict case attributes for the generated new cases and event attributes for the predicted events. To distinguish the real (source data) and predicted events and cases, there are following attributes in the model:<br />
* Event attribute '''Predicted''' denotes whether the event is from the source data (''false'') or whether it's predicted (''true'').<br />
* Case attribute '''Generated''' denotes whether the case is in the source data (''false'') or whether the prediction generated it as a new case (''true'').<br />
<br />
<br />
== Prerequisites for prediction ==<br />
Following prerequisites need to be fulfilled to run the eventlog prediction:<br />
* QPR ProcessAnalyzer 2024.2 or later in use<br />
* Snowflake connection is configured<br />
* Source models are stored to Snowflake<br />
<br />
== Install prediction to Snowflake ==<br />
To install the eventlog prediction to Snowflake:<br />
# Go to Snowflake, and create a Snowflake-managed stage with name '''PREDICTION''' to the same schema configured to QPR ProcessAnalyzer (in the Snowflake connection string). Use settings in the following image: [[File:Create_Snowflake_stage.png]]<br />
# Open the created stage and upload the '''predict.pyz''' file into the stage (ask the file from your QPR representative).<br />
# Create the following procedure to the same schema:<br />
<pre><br />
CREATE OR REPLACE PROCEDURE QPRPA_SP_PREDICTION("CONFIGURATION" OBJECT)<br />
RETURNS OBJECT<br />
LANGUAGE PYTHON<br />
STRICT<br />
RUNTIME_VERSION = '3.8'<br />
PACKAGES = ('nltk','numpy','pandas==1.5.3','scikit-learn','snowflake-snowpark-python','tensorflow','dill','prophet','holidays==0.18','python-kubernetes','docker-py')<br />
HANDLER = 'main'<br />
EXECUTE AS OWNER<br />
AS '<br />
import sys<br />
def main(session, parameters_in: dict) -> dict:<br />
session.file.get(''@decision_intelligence/predict.pyz'', ''/tmp'')<br />
sys.path.append(''/tmp/predict.pyz'')<br />
import predict<br />
return predict.main(session, parameters_in)<br />
';<br />
</pre><br />
<br />
== Create prediction script in QPR ProcessAnalyzer ==<br />
1. Go to QPR ProcessAnalyzer and create the following expression script with name '''ML library''':<br />
<pre><br />
let predictionProcedureName = "qprpa_sp_prediction";<br />
<br />
function RunFunctionWithParallelLogging(logTable, callbackFunc) <br />
{<br />
let state = #{};<br />
<br />
logTable.Truncate();<br />
<br />
_system.Parallel.Run([<br />
() => {<br />
try {<br />
state.Set("Result", callbackFunc());<br />
}<br />
finally {<br />
state.Set("Finished", true);<br />
}<br />
},<br />
() => {<br />
let readRows = 0;<br />
while (true) {<br />
try {<br />
let finished = state.TryGetValue("Finished");<br />
if (finished == true) {<br />
WriteLog(`Work finished. Log written to table ${logTable.Name} (id: ${logTable.Id})`);<br />
break;<br />
}<br />
<br />
let rowsDf = logTable.Synchronize().SqlDataFrame.Skip(readRows).Collect();<br />
readRows = readRows + rowsDf.NRows;<br />
rowsDf.Rows.{<br />
let row = _;<br />
WriteLog(`${row[0]} \t${row[1]}`);<br />
}<br />
}<br />
catch (ex) {<br />
if (ex.InnerExceptions?[0]?.Type == "UnauthorizedAccess") {<br />
WriteLog(`Log data table has disappeared. The generated log will not be complete!`);<br />
break;<br />
}<br />
WriteLog(`Log has not yet been created.`);<br />
}<br />
}<br />
Sleep(5000);<br />
}<br />
]);<br />
return state.TryGetValue("Result");<br />
}<br />
<br />
function Train(params, logTable)<br />
{<br />
function TrainCallback()<br />
{<br />
WriteLog("Starting training...");<br />
<br />
let connection = logTable.Project.CreateSnowflakeConnection();<br />
let finalParams = params.Clone();<br />
finalParams.Set("_typed", params["_typed"].Extend(#{<br />
"log_table": logTable<br />
}));<br />
let result = connection.CallStoredProcedure(predictionProcedureName, #{"configuration": finalParams});<br />
<br />
WriteLog("Finished training...")<br />
return result;<br />
}<br />
return RunFunctionWithParallelLogging(logTable, TrainCallback);<br />
}<br />
<br />
function Generate(params, logTable) <br />
{<br />
function GenerateCallback()<br />
{<br />
WriteLog("Starting generation...")<br />
<br />
let connection = logTable.Project.CreateSnowflakeConnection();<br />
<br />
let typedParams = params["_typed"];<br />
let resultEventsTable = typedParams["target_event_data_table"];<br />
let resultCasesTable = typedParams.TryGetValue("target_case_data_table");<br />
<br />
if (params["overwrite"]) {<br />
resultEventsTable.Truncate();<br />
resultCasesTable?.Truncate();<br />
}<br />
<br />
let finalParams = params.Clone();<br />
finalParams.Set("_typed", typedParams.Extend(#{<br />
"log_table": logTable<br />
}));<br />
<br />
let result = connection.CallStoredProcedure(predictionProcedureName, #{"configuration": finalParams});<br />
<br />
resultEventsTable.Synchronize();<br />
resultCasesTable?.Synchronize();<br />
<br />
WriteLog("Finished generation...")<br />
return result;<br />
}<br />
<br />
return RunFunctionWithParallelLogging(logTable, GenerateCallback);<br />
}<br />
<br />
function GetSampledEvents(sourceModel, sampledCaseCount, filter)<br />
{<br />
if (IsNull(sampledCaseCount) || sampledCaseCount < 1)<br />
return sourceModel.EventsDataTable.SqlDataFrame;<br />
let sampleFilterRule = sampledCaseCount == null <br />
? null<br />
: #{<br />
"Type":"IncludeCases",<br />
"Items":[#{<br />
"Type": "SqlExpressionValue",<br />
"Configuration": #{<br />
"Root": `Cases.WithColumn("_Random", Rand()).OrderByColumns(["_Random"], [true]).Head(${sampledCaseCount})`<br />
}<br />
}]<br />
};<br />
let filterRules = filter?["Items"];<br />
if (!IsNullTop(filterRules)) {<br />
if (!IsNullTop(sampleFilterRule))<br />
filterRules = Concat(filterRules, sampleFilterRule);<br />
}<br />
else {<br />
if (!IsNullTop(sampleFilterRule))<br />
filterRules = [sampleFilterRule];<br />
else<br />
filterRules = [];<br />
}<br />
<br />
let finalFilter = #{<br />
"Items":filterRules<br />
};<br />
sourceModel.CacheTableSqlDataFrame(finalFilter);<br />
}<br />
<br />
function TrainMLModelForModel(modelName, sourceModel, targetProject, trainingConfiguration, recreatePredictionModel, trainingDataFilter, logTable, trainingCaseSampleSize)<br />
{<br />
let sanitizedModelName = `${sourceModel.Id}-${modelName}`; <br />
<br />
let originalCaseCount = sourceModel.EventsDataTable.SqlDataFrame.SelectDistinct([sourceModel.EventsDataTable.ColumnMappings["CaseId"]]).NRows;<br />
let trainEventDataSdf = GetSampledEvents(sourceModel, trainingCaseSampleSize, trainingDataFilter);<br />
let actualTrainingCaseSampleSize = trainEventDataSdf.SelectDistinct([trainEventDataSdf.ColumnMappings["CaseId"]]).NRows;<br />
WriteLog(`Starting to train a prediction model using ${ToString(100*actualTrainingCaseSampleSize/originalCaseCount, "F")}% of the original cases (${actualTrainingCaseSampleSize}/${originalCaseCount}) found in source model ${sourceModel.Name}.`)<br />
<br />
let trainCaseDataSdf = sourceModel.CasesDataTable?.SqlDataFrame;<br />
<br />
let columnMappings = trainEventDataSdf.ColumnMappings;<br />
if (trainCaseDataSdf != null) {<br />
columnMappings = columnMappings.Extend(#{"Case_CaseId": trainCaseDataSdf.ColumnMappings["CaseId"]});<br />
}<br />
<br />
trainingConfiguration = trainingConfiguration.Extend(#{ <br />
"_typed": #{<br />
"event_data": trainEventDataSdf, <br />
"project": targetProject<br />
},<br />
"model_name": sanitizedModelName,<br />
"column_mappings": columnMappings,<br />
"overwrite_model": recreatePredictionModel,<br />
"case_start_time_probability_multiplier": originalCaseCount / actualTrainingCaseSampleSize<br />
});<br />
<br />
if (trainCaseDataSdf != null) {<br />
trainingConfiguration["_typed"].Set("case_data", trainCaseDataSdf);<br />
}<br />
<br />
Train(trainingConfiguration, logTable);<br />
}<br />
<br />
function GenerateNewModel(modelName, sourceModel, targetProject, generationConfiguration, incompleteCasesFilter, logTable)<br />
{<br />
let sanitizedModelName = `${sourceModel.Id}-${modelName}`; <br />
let eventsTableName = `${modelName} - events`;<br />
let casesTableName = `${modelName} - cases`;<br />
let m = targetProject.ModelByName(modelName);<br />
let eventsTable = null;<br />
let casesTable = null; <br />
if (m != null)<br />
{<br />
eventsTable = m.EventsDataTable;<br />
casesTable = m.CasesDataTable;<br />
}<br />
else {<br />
let eventsTableConfiguration = #{<br />
"Name": eventsTableName,<br />
"Type": "Snowflake"<br />
};<br />
eventsTable = targetProject.DataTableByName(eventsTableName) ?? targetProject.CreateDataTable(eventsTableConfiguration).Synchronize();<br />
if (sourceModel.CasesDataTable != null) {<br />
let casesTableConfiguration = #{<br />
"Name": casesTableName,<br />
"Type": "Snowflake"<br />
};<br />
casesTable = targetProject.DataTableByName(casesTableName) ?? targetProject.CreateDataTable(casesTableConfiguration).Synchronize();<br />
}<br />
}<br />
<br />
eventsTable.Truncate();<br />
casesTable?.Truncate();<br />
<br />
let generationParams, result;<br />
<br />
if (generationConfiguration.TryGetValue("cases_to_generate") != 0) {<br />
WriteLog(`Generating new cases with new events...`);<br />
<br />
generationParams = generationConfiguration.Extend(#{ <br />
"_typed": #{<br />
"target_event_data_table": eventsTable,<br />
"project": targetProject<br />
},<br />
"model_name": sanitizedModelName,<br />
"overwrite": false<br />
});<br />
if (casesTable != null) {<br />
generationConfiguration["_typed"].Set("target_case_data_table", casesTable);<br />
}<br />
<br />
result = Generate(generationParams, logTable);<br />
<br />
WriteLog(`Generation results:\r\n${result}`);<br />
<br />
result = ParseJson(result);<br />
if (result["result"] != "success")<br />
throw result["exception"]<br />
}<br />
<br />
if (incompleteCasesFilter != null) {<br />
WriteLog(`Generating new events for running cases...`);<br />
let incompleteCasesSqlDataFrame = sourceModel.EventsDataTable.SqlDataFrame.ApplyFilter(incompleteCasesFilter, sourceModel.CasesDataTable?.SqlDataFrame);<br />
<br />
generationParams = generationConfiguration.Extend(#{ <br />
"_typed": #{<br />
"event_data": incompleteCasesSqlDataFrame, <br />
"target_event_data_table": eventsTable,<br />
"project": targetProject<br />
},<br />
"model_name": sanitizedModelName,<br />
"overwrite": false,<br />
"temperature": 0<br />
});<br />
if (casesTable != null) {<br />
generationConfiguration["_typed"].Set("case_data", sourceModel.CasesDataTable.SqlDataFrame);<br />
}<br />
<br />
result = Generate(generationParams, logTable);<br />
WriteLog(`Generation results:\r\n${result}`);<br />
<br />
result = ParseJson(result);<br />
if (result["result"] != "success")<br />
throw result["exception"]<br />
}<br />
<br />
if (!("Predicted".In(eventsTable.ColumnTypes.Name)))<br />
eventsTable<br />
.AddColumn("Predicted", "Boolean");<br />
<br />
eventsTable<br />
.DeleteRows(<br />
Column(result["column_mappings"]["events"]["EventType"]) == "__FINISH__"<br />
)<br />
.UpdateRows(<br />
1==1,<br />
"Predicted", true<br />
);<br />
<br />
if (casesTable != null) {<br />
if (!("Generated".In(casesTable.ColumnTypes.Name)))<br />
casesTable<br />
.AddColumn("Generated", "Boolean");<br />
<br />
casesTable<br />
.UpdateRows(<br />
1==1,<br />
"Generated", true<br />
);<br />
} <br />
<br />
WriteLog(`Appending original model data...`);<br />
eventsTable.Import(sourceModel.EventsDataTable.SqlDataFrame, #{"Append": true});<br />
if (casesTable != null)<br />
casesTable.Import(sourceModel.CasesDataTable.SqlDataFrame, #{"Append": true});<br />
<br />
eventsTable<br />
.UpdateRows(<br />
Column("Predicted") == null,<br />
"Predicted", false<br />
);<br />
<br />
casesTable<br />
?.UpdateRows(<br />
Column("Generated") == null,<br />
"Generated", false<br />
);<br />
<br />
if (m != null)<br />
return m;<br />
<br />
WriteLog(`Creating model...`);<br />
let eventColumnMappings = result["column_mappings"]["events"];<br />
let timestampMapping = eventColumnMappings["TimeStamp"];<br />
eventColumnMappings.Remove("TimeStamp");<br />
eventColumnMappings.Set("Timestamp", timestampMapping);<br />
<br />
let modelConfiguration = #{<br />
"DataSource": #{<br />
"Events":#{<br />
"DataSourceType": "datatable",<br />
"DataTableName": eventsTableName,<br />
"Columns": eventColumnMappings<br />
}<br />
}<br />
};<br />
<br />
if (casesTable != null) {<br />
modelConfiguration["DataSource"].Set("Cases", #{<br />
"DataSourceType": "datatable",<br />
"DataTableName": casesTableName,<br />
"Columns": result["column_mappings"]["cases"]<br />
});<br />
}<br />
<br />
targetProject.CreateModel(#{"Name": modelName, "Configuration": modelConfiguration});<br />
}<br />
<br />
function GeneratePredictionModel(configuration)<br />
{<br />
let modelName = configuration["Name"];<br />
let sourceModel = configuration["SourceModel"];<br />
let targetProject = configuration["TargetProject"];<br />
let trainingConfiguration = configuration["TrainingConfiguration"];<br />
let generationConfiguration = configuration["GenerationConfiguration"];<br />
let trainingDataFilter = configuration["TrainingDataFilter"];<br />
let incompleteCasesFilter = configuration["IncompleteCasesFilter"];<br />
let recreatePredictionModel = configuration["RecreatePredictionModel"];<br />
let trainingCaseSampleSize = configuration["TrainingCaseSampleSize"];<br />
<br />
let result = null;<br />
let logTableName = `_MLLog:${Now}`;<br />
let logTable = targetProject.CreateDataTable(#{"Name": logTableName, "Type": "Snowflake"});<br />
try {<br />
WriteLog(`Training a prediction model based on model:\r\n${sourceModel.Name} (id=${sourceModel.Id})`);<br />
result = TrainMLModelForModel(modelName, sourceModel, targetProject, trainingConfiguration, recreatePredictionModel, trainingDataFilter, logTable, trainingCaseSampleSize);<br />
WriteLog(`Model training completed. Training result:\r\n${result}`);<br />
<br />
if (generationConfiguration != null) {<br />
WriteLog(`Generating a new model named ${modelName} based on trained model ${modelName}):\r\n${result}`);<br />
let newModel = GenerateNewModel(modelName, sourceModel, targetProject, generationConfiguration, incompleteCasesFilter, logTable);<br />
<br />
WriteLog(`Model ${newModel.Name} (id=${newModel.Id}) generated into project ${targetProject.Name}:\r\n${result}`);<br />
}<br />
}<br />
finally {<br />
targetProject.DataTableByName(logTableName)?.DeletePermanently();<br />
}<br />
}<br />
<br />
return #{<br />
"GeneratePredictionModel": GeneratePredictionModel,<br />
"RunFunctionWithParallelLogging": RunFunctionWithParallelLogging,<br />
"Train": Train,<br />
"Generate": Generate<br />
};<br />
</pre><br />
<br />
2. Create the following expression script (e.g., with name '''Create prediction model'''):<br />
<pre><br />
let lib = First(Project.Scripts.Where(Name == "ML library")).Run(#{});<br />
let targetProject = Project;<br />
lib.GeneratePredictionModel(#{<br />
"Name": "My prediction model",<br />
"SourceModel": ModelById(1),<br />
"TargetProject": targetProject,<br />
"RecreatePredictionModel": true,<br />
"TrainingConfiguration": #{},<br />
"GenerationConfiguration": #{<br />
"cases_to_generate": 1000<br />
},<br />
"TrainingDataFilter": null,<br />
"IncompleteCasesFilter": null,<br />
"TrainingCaseSampleSize": 1000<br />
});<br />
</pre><br />
3. Configure prediction for the previously created script as instructed in the next chapter.<br />
<br />
== Configure prediction ==<br />
Prediction script has the following settings in the GeneratePredictionModel call:<br />
* '''Name''': Name of the QPR ProcessAnalyzer model that is created to the target project. The model will contain the source model content and the predictions.<br />
* '''SourceModel''': Source model for which the prediction is made. Model can be selected for example based on id with ModelById function or by name with ModelByName function.<br />
* '''TargetProject''': Target project to create the new model into.<br />
* '''RecreatePredictionModel''': When ''true'', a new ML model is trained when the script is run. When ''false'', the prediction is run using possibly pre-existing ML model. <br />
* '''TrainingConfiguration''': Training parameters.<br />
** '''num_epochs_to_train''': How many times the whole training data is used in training. The more there are epochs, the better the model usually is, but the training will take more time. The best performing model out of all the iterations will be selected.<br />
** '''max_num_case_clusters''': Maximum number of clusters to divide the case attribute values into. Default is 20.<br />
* '''GenerationConfiguration''': Event generation parameters. When null, no generation is done. For example, following parameters are supported:<br />
** '''cases_to_generate''': Maximum number cases to create. The number of created cases is further limited by the capabilities of the trained model and the ''case_generation_start_time'' and ''case_generation_end_time'' parameters.<br />
** '''case_generation_start_time''': If defined, new cases will be generated starting from this timestamp. If not defined, the latest start event timestamp used in the training data. This parameter is given as ISO datetime format.<br />
** '''case_generation_end_time''': If defined, the new cases generation will stop when reaching this timestamp, and no cases will be generated after it. This parameter is given as ISO datetime format.<br />
** '''generate_debug_event_attributes''': If true, additional columns will be added containing, e.g., probabilities of the selected activity and other activities.<br />
** '''min_prediction_probability ''': Minimum probability of any activity name in next activity prediction. If the probability of an activity is lower than this, it will never be picked. Default value is 0.01.<br />
** '''temperature''': If 0, the predicted event type will always be the most probable one. If 1, the next event type is randomly selected based on probabilities of each event type. This behavior is interpolated when using values between 0 and 1.<br />
* '''TrainingDataFilter''': Optional [[Filtering_in_QPR_ProcessAnalyzer_Queries|filter]] to select specific cases to training the prediction model.<br />
* '''TrainingCaseSampleSize''': Maximum number of cases to take from the source model (cases are selected randomly). Use a lower setting to speed up the ML model training. The greater the value, the more subtle phenomena the prediction can learn from the data. <br />
* '''IncompleteCasesFilter''': Optional [[Filtering_in_QPR_ProcessAnalyzer_Queries|filter]] to select which for cases the prediction is made. To improve performance of the prediction, it's recommended to include only the incomplete cases for which new events might appear, and skip the completed cases for which new events are not expected anymore.<br />
</pre></div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&diff=24479QPR ProcessAnalyzer Release Notes2024-03-11T09:29:35Z<p>Ollvihe: /* Next Release: QPR ProcessAnalyzer 2024.3 (planned release date 2024-04-02) */</p>
<hr />
<div>This page lists all new features and fixed issues for each QPR ProcessAnalyzer release.<br />
<br />
== Next Release: QPR ProcessAnalyzer 2024.3 (planned release date 2024-04-02) ==<br />
<br />
'''Features:'''<br />
* B-08242: [[Actions_to_Run_Script_in_Table|Custom actions]] can be started from dashboard table context menu, e.g., create ticket, trigger automation and fetch external information.<br />
* B-08231: Snowflake performance improved by changing object counts query (shown in header) into two queries, so that the filtered object count uses eventlog caching.<br />
* B-07906: Implemented cross joins to SQL dataframes.<br />
* B-03047: Removed support for dashboard panels.<br />
* B-08214: Removed unused columns from the PA_VIEW table.<br />
<br />
'''Fixed issues:'''<br />
* D-14048: Fixed issue where in-memory root causes analysis for case attributes didn't show attributes with ShortString data type.<br />
* D-14049: Added some missing translations for table column filter and BPMN editor.<br />
* D-14021: FindRootCauses function WeightingExpression was run in incorrect context for in-memory model.<br />
* D-14020: Query which goes from EventTypes to Cases did not show the error when using GetValueFrom function.<br />
* D-13976: Fixed issue where gateway-based imports were not synchronous.<br />
* D-13689: Fixed JavaScript error in Highcharts polar chart with tooltips.<br />
* D-12614: Highcharts gives "Maximum call stack size exceeded" error in bar chart with polar and data labels.<br />
* D-14060: Highcharts custom layout translatable properties incorrectly changed chart configuration by translating the labels.<br />
<br />
== Latest: Additional release for QPR ProcessAnalyzer 2024.2 (build 5509) (released 2024-02-27) ==<br />
<br />
'''Features:'''<br />
<br />
* B-06280: User management dialog shows whether users have password defined and unnecessary passwords can be removed to improve security.<br />
<br />
'''Fixed issues:'''<br />
<br />
* D-14045: Fixed issue where users with Viewer or Analyzer role couldn't create filters in Snowflake models.<br />
<br />
== QPR ProcessAnalyzer 2024.2 (build 5438) (released 2024-02-21) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue: Snowflake models and dashboards don't work with Viewer and Analyzer role permisions. The reason is that cache tables created to Snowflake incorrectly require the write permissions. Workaround is to give users the Designer role which will give the needed permissions. Note that the Designer role gives many permissions to the user for the project [[Roles_and_Permissions#Roles_and_Permissions|(more information)]]. This issue has been fixed in the next release (D-14045).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
The legacy User permissions report (analysis number 11) and Filters report (analysis number 30) used in SQL scripts have been removed. Use instead the expressions language to query filters and user permissions, e.g., [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|Models.Filters]] and [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
New version of the Design diagram component has been improved with object-specific measures, and the previous common measures are not migrated into object-specific measures. Thus, the measures need to be configured again, or manually edit the chart json settings (if needed please ask instructions from QPR CustomerCare).<br />
</div><br />
<br />
'''Features:'''<br />
* B-08022: Design diagram supports now BPMN notation, elbow style flows and object-specific measures.<br />
* B-08232: Entire future eventlogs can be [[Create_Predicted_Eventlog|predicted]] based on generative AI models running in Snowflake.<br />
* B-08166: Added expression language function [[Generic_Functions_in_QPR_ProcessAnalyzer#OpenAIChatCompletion|OpenAIChatCompletion]] to answer natural language prompts based on OpenAI ChatGPT API.<br />
* B-08177: Snowflake query performance has been improved by introducing caching of filtered eventlogs using Snowflake tables.<br />
* B-08196: Conditional formatting rules can be defined for [[QPR_ProcessAnalyzer_Table#Textual_equal_rules_for_background_color|textual and boolean values]].<br />
* B-08213: Big data chart expressions event type selections to be multi-select where applicable.<br />
* B-08205: Expression language API is available for storing [[Storing_Secrets_for_Scripts|secrets]] for scripts.<br />
* B-07780: Chart [[QPR_ProcessAnalyzer_Chart#Variable_mappings|variable mappings]] has been removed - use the [[Chart_Linked_Settings|linked settings]] instead. Dashboards using variable mappings are automatically converted to use linked settings.<br />
* B-08117: Added ToSqlDataFrame function to convert in-memory dataframe into SQL dataframes.<br />
* B-08174: Only non-default parameters values are written to the operation log.<br />
* B-08200: Timestamps in System reports are shown in user workstation local time.<br />
* B-08171: Dashboard id has been added to queries, to track from which dashboard queries are originating.<br />
* B-07144: Remove legacy User permissions report (analysis number 11) and Filters report (analysis number 30) in SQL scripts (see note above).<br />
* B-08193: Added retry mechanism to QPR ScriptLauncher to recover if connection to server breaks.<br />
* B-08202: Updated copyright for year 2024.<br />
* B-08199: Frontend components have been updated.<br />
* B-08203: Backend components have been updated.<br />
* B-08209: Translations updated for release 2024.2.<br />
<br />
'''Fixed issues:'''<br />
* D-13972: Some measures/dimensions/columns in Big data chart didn't show the expressions level filtering.<br />
* D-14015: Fixed business calendar incorrect calculation when business period covered entire day.<br />
* D-14014: Fixed issue where Snowflake business calendar could not have end time as 00:00.<br />
* D-13962: System variable values were interpreted incorrectly when used in linked settings.<br />
* D-13971: HiddenInNavigation and SortOrder variables didn't work in navigation menu dashboards list.<br />
* D-13959: Removed possibility to add datatable columns with the legacy "any" data type.<br />
* D-13991: Improved drop-down selector component to handle empty strings as variable values.<br />
* D-13965: Datatable column name length was validated incorrectly which may have caused error in saving with too long column names.<br />
* D-13958: Project names showed unnecessary html escaping in the "Move to" menu.<br />
* D-13964: Model attributes and notifications dialogs gave error when trying to use dashboard tags.<br />
* D-13960: Added missing translations for list of permission list and 12-hour clock format.<br />
* D-13966: Fixed issue were root causes chart tooltip sometimes didn't disappear.<br />
* D-13969: Datatable column schema export sometimes showed empty for the key column.<br />
* D-13862: Session token was not accepted when url path capitalization is different.<br />
* D-13942: Datatable could not be dimensioned if it has column named "CaseId".<br />
* D-13980: Business calendar dialog crashed when tried to open it for a model without access.<br />
* D-13983: Notifications dialog didn't validate situation when same name was used in a measure and dimension.<br />
* D-13981: Dashboard import set incorrect model id to dashboard if there was no access to any model.<br />
* D-11276: Translations were missing for 12-hour clock dates (AM and PM) in dashboards.<br />
* D-13977: Multi-select dropdown lists showed some special characters incorrectly.<br />
* D-13945: Syncfusion toast message didn't work when text contains ${[]}.<br />
* D-13930: Pivot table throws javascript error when certain clicks.<br />
* D-13273: Duplicate datatable row count didn't shown correctly.<br />
* D-13994: There was an error in the in-memory chart with some flow related measures about duplicate variable names when same measure was defined twice.<br />
* D-13985: Models list dots menu had texts misaligned in narrow screens.<br />
* D-13995: In Workspace, wrong datatable was selected after duplication when non-default sorting was applied.<br />
* D-13997: Workspace tables column filtering search caused JavaScript errors.<br />
* D-13978: In table Excel export, the last row representing other items appeared incorrectly for in-memory chart.<br />
* D-14007: In System reports, model related selections are hidden from the Analyzed objects lists.<br />
* D-14005: In big data chart, changing to custom expression caused crash with some expressions having case/event attribute.<br />
* D-14003: When dimensioning was not used, pivot table values were incorrectly rounded in the server side.<br />
* D-14004: Removed empty filters from queries to optimize them.<br />
* D-13988: Fixed issue where data grid context menu rendered initially as too high.<br />
* D-13979: BPMN model editor element settings use now Open Sans font.<br />
* D-14013: Fixed incorrect expression "Duration between first and last occurrence" in big data chart event types.<br />
* D-13984: Fixed the error of refusing to run the JavaScript URL.<br />
* D-14031: ThrownObject property was not included to http error response when error came from the script.<br />
<br />
== QPR ProcessAnalyzer 2024.1 (build 4784) (released 2024-01-10) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue fixed in QPR ProcessAnalyzer 2024.2: In Big data chart, some measures, dimensions and columns have the filtering option missing. The issue concerns for example Duration between events, Path starting/until between specific events, and Cases where event occurs before other selections. Workaround is to set the filter in the chart json settings: the filter can be configured to another expression and copied to the correct expression.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
QPR ProcessAnalyzer Server and QPR ScriptLauncher are now using .Net 8 (previous was .Net 6). When updating to this release, install the .Net 8 Runtime ([[Updating_QPR_ProcessAnalyzer_Server|see more]]). The .Net 6 doesn't need to be uninstalled immediately because .Net 6 and .Net 8 work side-by-side, but due to security reasons, the unused .Net 6 should eventually be uninstalled.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In this release, all filters that don't contain any filter rules, are removed. These are legacy filters which have not been visible in the UI.<br />
</div><br />
<br />
'''Features:'''<br />
* B-08019: New component [[Design_Diagram|Design Diagram]] for showing user-created diagrams in dashboards where to visualize process mining metrics.<br />
* B-08087: Generic [[Dropdown_List_Selector|dropdown list selector]] works with Snowflake models allowing to add selection lists for any values.<br />
* B-08163: Linked settings support for binding to [[Chart_Linked_Settings#Binding_to_case_attribute_filters_with_attribute_name_and_attribute_values|case attribute filter values without defining case attribute name]].<br />
* B-08170: Snowflake model filters can be [[Filtering_in_QPR_ProcessAnalyzer#Filter_actions|saved as new models]] which can be used to create snapshots of part of models.<br />
* B-08093: Multiple dashboards can be exported to same file, and model can be set for imported dashboards.<br />
* B-08161: Added [[Datatable_in_Expression_Language#Modify|Modify]] function to change datatable properties and improved [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#CreateDatatable|CreateDatatable]] function for creating datatables.<br />
* B-08122: Added new system report to list dashboards.<br />
* B-08173: Removed legacy filters that didn't have any filter rules.<br />
* B-07961: In OperationLog, changed parameters to json format and added request id.<br />
* B-08069: Added DashboardId property to [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog]] in expression language.<br />
* B-08139: Added [[Datatable_in_Expression_Language#UpdateRows|UpdateRows]] function to update existing rows in datatables with similar logic than SQL update.<br />
* B-08115: Added [[Datatable_in_Expression_Language#DeleteRows|DeleteRows]] function to delete rows in datatables with similar logic than SQL delete.<br />
* B-08149: QPR ProcessAnalyzer has been updated to .Net 8.<br />
* B-08054: Changed Scripts property in generic context to return all scripts, instead of legacy system level scripts.<br />
* B-08138: Changed Synchronize function to remove all columns when no Snowflake table exists.<br />
* B-07689: For datatables, [[Datatable_in_Expression_Language#ForeignKeys|foreign keys]] to other datatables can be defined using expression language.<br />
* B-08176: Translation updates for release 2024.1.<br />
* B-08175: Workspace should show timestamps in user's local time.<br />
<br />
'''Fixed issues:'''<br />
* D-13913: Datatable properties dialog incorrectly showed linked models from other projects.<br />
* D-13916: Chart filter could not be defined for some expressions in Big data chart.<br />
* D-13933: Navigation menu selected item wasn't highlighted when used Snowflake models.<br />
* D-13906: In Conformance Analysis, deviating flows were not translated.<br />
* D-13907: Improved translation related to datatable properties dialog "Used by models" field.<br />
* D-13904: There was an unclear error message in Snowflake, as exception code 1 was returned without AttributeName and ModelName properties when non-existing attribute was in filter.<br />
* D-13911: Fixed small glitches in the opening and closing of drop-down lists.<br />
* D-13918: Datatable could be configured incorrectly to use table for other datatable.<br />
* D-13932: Duplicating datatable with custom table in datasource losed all data.<br />
* D-11002: Removed legacy in-memory prediction preset.<br />
* D-13912: Added check that array cannot be stored to dashboard Content property.<br />
* D-13936: Query designer default query didn't work with Snowflake models.<br />
* D-13938: There was an incorrect logging with some operations related to ScriptLauncher.<br />
* D-13923: Snowflake expressions didn't work with Where function in root referring to case attribute.<br />
* D-13939: ApplyFilter function gave null reference error for non-existing attribute name.<br />
* D-13931: There were issues with AllowExternalDatasources and EnableFullFunctionality settings.<br />
<br />
== QPR ProcessAnalyzer 2023.7 (build 4326) (released 2023-11-28) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Limitation for the maximum amount of data (B-07636) causes a behavior change in in-memory charts that have the Maximum rows settings empty and have the sorting defined. In certain cases, the order in which measures are evaluated changes (due to an internal performance optimization). If there are custom expressions that define variables, the variables may not be available in other measures anymore. As a resolution, either redefine the variables in those measure expressions or add those measures secondarily to the sorting.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Default query timeout of 30 minutes has been added for --#ImportOdbcQuery, --#ImportSqlQuery and --#ImportOleDbQuery commands. If a query run is taking longer than the timeout, the query is stopped. The timeout can be adjusted using the '''QueryExecutionTimeout''' parameter. Previously, there has been no timeout, so queries that take more than 30 minutes require configuring a longer timeout.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Incorrectly configured [[Chart_Linked_Settings|linked settings]] in charts (available in the ''Advanced'' tab) give now an error message, if they are referring to non-existing measures, dimensions or columns. Previously, incorrect linked settings were ignored. To fix the error message, remove the incorrect linked settings.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07511: Datatables have a [[Datatable_Properties_Dialog|dialog]] to view datatable properties, write description, set the Snowflake source table, add/modify/delete columns, and set the datatable key.<br />
* B-08150: Added setting [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|Apply chart filters first]] to determine whether chart filter rules or dashboard filter rules are applied first when chart queries are filtered.<br />
* B-08091: When filtering charts in Snowflake, case attribute filter is created instead of case id filter.<br />
* B-08091: [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|New setting]] to define whether cases or events are filtered by default.<br />
* B-08091: New preset "Looping paths" to detect whether there are repeating patterns of events.<br />
* B-08091: Duration between events calculation ignores negative durations in Snowflake.<br />
* B-08091: Chart loading animation has been renewed.<br />
* B-07636: To prevent dashboards from jamming when querying too much data, added [[QPR_ProcessAnalyzer_Chart#Available_Visualizations|limitations]] to the amount of data that charts can visualize. Note that the limitation concerns the aggregated data that is visualized, not the source event log data.<br />
* B-08017: [[Dashboard_in_Expression_Language|Dashboards API]] has been added to expression language, allowing to create, modify and delete dashboards in scripts.<br />
* B-08056: Following properties have been added to [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#User.2FGroup|user objects]] in expression language: IsLocked, LastLockedDate, LastLoginDate.<br />
* B-08053: [[Navigation_Menu#System_Reports|User rights report]] has been refactored to use [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property in the expression language. The change also simplifies the report as now it only shows the direct role assignments that are visible in the [[Manage_Users_and_Groups|User Management]].<br />
* B-08151: For Snowflake expressions support for following [[SQL_Expressions#Window_functions|windowing functions]]: sum, average, median, min, and max.<br />
* B-08050: When a model is created, the default filter is not created anymore (this is a refactoring that doesn't have any impact on user interface).<br />
* B-08123: Translation updates for 2023.7.<br />
* B-08092: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13876: In CreateSnowflakeConnection function, ProjectId parameter is optional when OdbcConnectionStringKey is not specified.<br />
* D-13898: Snowflake: Exclude case attribute filter didn't work when there was null values and was selecting at least two values.<br />
* D-13890: Fixed XES file import to work.<br />
* D-13894: Business calendar based duration calculation was incorrect in some durations that spanned to several weeks (for Snowflake and in-memory models).<br />
* D-13899: Using broken OdbcConnectionString in a datatable prevented the datatable from being deleted.<br />
* D-13883: Script run stucked after running a script with error that uses client-side ODBC import.<br />
* D-13879: SqlExpressionValue filter when excluding events didn't work with filter rule root expression only.<br />
* D-13896: Adding or removing columns to datatable didn't change the LastModifiedDate.<br />
* D-13882: User details weren't written to operation log when creating or modifying users.<br />
* D-13771: User rights system report didn't give error when changing columns.<br />
* D-13893: Some event filtering caused null pointer error when primary key had been defined.<br />
* D-13873: Fixed pivot table visual issues after component update.<br />
* D-13900: When adding, renaming or removing columns for Snowflake table fails, operation is now rolled back without any changes.<br />
* D-13866: Querying GET api/uielements was quite slow right after server start.<br />
* D-13864: Combinations of translatable and hardcoded strings didn't get translated in UI.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.6 (build 3933) (released 2023-10-24) ==<br />
<br />
'''Features:'''<br />
* B-08055: Error message for locked account has been replaced with generic error message, so that username enumeration is not possible.<br />
<br />
'''Fixed issues:'''<br />
* D-13884: Attributes dialog crashed with some older model configurations.<br />
* D-13843: In charts, selected case and event attributes switched away when attribute data type was ShortString.<br />
* D-13877: Some Snowflake expressions gave error "exceeds maximum length limit of 255 characters" when selecting lot of items.<br />
* D-13878: Snowflake expression filters for case attribute values didn't accept other than string type of case attributes.<br />
* D-13871: Some statistical calculations with percentages didn't work with Last Row Aggregates Over-limit Rows setting.<br />
* D-13875: Using some case level filters in a model without cases datatable didn't work.<br />
* D-13861: Dashboard opens are now logged to the Task log (i.e., calling GET /api/dashboards/{dashboardid}).<br />
* D-13870: Workspace projects hierarchy focused project showed light grey background making the project name not readable.<br />
* D-13867: When starting datatable refresh and going to other tab, went back to Datatables tab when query completed.<br />
* D-13853: If chart Custom Layout settings had extra series defined, chart may have crashed.<br />
* D-13869: Export as CSV button didn't work in the datatable contents dialog when dialog was still loading.<br />
* D-13872: Main progress spinner had unnecessary small scrollbar on top right.<br />
* D-13863: In the REST API method GET /api/users, password field (that has always been null) has been removed.<br />
<br />
== QPR ProcessAnalyzer 2023.6 (build 3847) (released 2023-10-17) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is removed in this release. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
'''Features:'''<br />
* B-07992: Added 10 new presets including Queue analysis, Four eyes principle, Self-looping events, and Path until selected event. There are also presets for Individual Cases Flow and Range of event type occurrences which use Gantt chart.<br />
* B-08011: Added following date related operations for Snowflake: Day of year, Day of month, Day of week, Week of year, Half-year only, Quarter only, Month only, Hours only, Minutes only, Seconds only, and Milliseconds only. These are available when calculating with date type of data.<br />
* B-08016: [[QPR_ProcessAnalyzer_Table#Table_actions|Table actions to set variables]] can also be opened to a new browser tab. Also improved user interface for table actions.<br />
* B-08018: For Snowflake expressions, added Flows aggregations FromEventType and ToEventType to get starting/ending event type, and FlowOccurrences aggregations FromEvent and ToEvent to get starting/ending event.<br />
* B-08001: Added [[Generic_Functions_in_QPR_ProcessAnalyzer#CallStoredProcedure|CallStoredProcedure]] function to call Snowflake stored procedures. This allows to start ETL transformation in Snowflake orchestrated by QPR ProcessAnalyzer script.<br />
* B-08013: Added [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property to expression language to replace the legacy UserPermissions analysis (11).<br />
* B-07976: Snowflake [[Filtering_in_QPR_ProcessAnalyzer_Queries#Expression|expression based filter rules]] support additional expression columns allowing more Big data chart expressions to be filterable.<br />
* B-08015: Big data chart doesn't anymore support calculation in SQL Server (using local datatables).<br />
* B-06270: Improved error messages and made them translatable by taking into use exception codes provided by server.<br />
* B-08021: Added possibility to store [[Diagram_in_Expression_Language|designed diagrams]] for models and expression language API for reading and modifying diagrams.<br />
* B-08037: Dropped following unused tables database: PA_IDEA, PA_IDEA_VOTE, PA_REPORT, PA_REPORT_SETTING, PA_SESSION_SERVICE, PA_VIEW_FILTER_RULE, PA_VIEW_FILTER_RULE_PARAMETER.<br />
* B-08052: Language translations have been updated to 2023.6.<br />
* B-08051: Frontend side components have been updated.<br />
* B-08034: Backend side components have been updated.<br />
<br />
'''Fixed issues:'''<br />
* D-13830: Object counts indicator in header showed incorrect counts when there was disabled filter rules in Snowflake models.<br />
* D-13833: In-memory charts didn't work with boolean type of dimensions when filtering with the false value.<br />
* D-13858: Target value measures didn't update chart when controlled using an on-screen setting.<br />
* D-13827: Calculated attributes data type was incorrectly set as Any by the Attributes dialog.<br />
* D-13849: Multiselect list search didn't allow spaces.<br />
* D-13829: Multiselect dropdown lists height jumped couple of pixels when selecting values.<br />
* D-13835: Deselecting a selected data point didn't remove chart filter rule.<br />
* D-13702: Improved Snowflake query performance in situations when there are lot of filter rules (by decreasing number of CTE's).<br />
* D-13819: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13820: Fixed incorrect manifest.json file to avoid "not found" errors when fetching web site icon.<br />
* D-13865: Break, continue, and return statements didn't work properly when called from inside a catch block.<br />
* D-13795: There was a Python error in clustering analysis with Snowflake model.<br />
* D-13823: Some tooltips in Workspace project hierarchy didn't work and caused a JavaScript error.<br />
* D-13824: BPMN editor align context menu layout looked strange.<br />
* D-13813: QPR logo button in the top left was misaligned in Firefox.<br />
* D-13797: Snowflake query may have given following error when using sampling: ambiguous column name '_EventType_NotNull_1'.<br />
* D-13774: TakeSample function with certain columns caused SQL compilation error: ambiguous column name 'Case Name'.<br />
* D-13782: Snowflake: Aggregating from variations didn't work when using sampling.<br />
* D-13836: Some tooltips had a strange two-colored background.<br />
* D-13834: Removed Model statistics column from clustering and root causes analysis.<br />
* D-13860: Removed filter button from the custom expressions in Task log analyzed objects.<br />
* D-13838: Removed Split data by filtering column from clustering analysis.<br />
* D-13832: Script and model status updates incorrectly sent next update when previous was still pending.<br />
* D-13839: Charts reset zoom button font size was too small.<br />
* D-13817: Importing data to Snowflake datatable with Append=0 doesn't now drop the underlying Snowflake table.<br />
* D-13825: Some models could not have been deleted from recycle bin.<br />
* D-13852: Recycle bin Projects and Models tab didn't show correct content when Recycle bin only contained either models or projects.<br />
* D-13841: In-memory chart Data type selection type has been corrected to string.<br />
* D-13842: Second time and Third time selections has been hidden in in-memory chart measures.<br />
* D-13850: In Chrome, there were console errors related in incorrect text field autocomplete type and text field without form.<br />
* D-13847: Improved browser side performance by removing unnecessary operations.<br />
* D-13859: Chart without dimensions showed an unnecessary Remove dimension button.<br />
* D-12598: When script is stopped in server, ScriptLauncher could still incorrectly continue to import data.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.5 (build 3334) (released 2023-09-07) ==<br />
<br />
'''Fixed issues:'''<br />
* D-13826: Measures or dimensions with case or event attribute and value selections incorrectly removed calculated attributes when dashboard was opened or chart settings were changed.<br />
* D-13821: Font size of some Highcharts tooltips was too small. Issue appeared when there were tooltips mappings in measures or dimensions.<br />
* D-13810: Simplified help links: now all Help buttons go to the QPR ProcessAnalyzer wiki main page.<br />
* D-13822: Snowflake clustering analysis showed empty strings and nulls as case attribute values in an unclear way as just nothing.<br />
<br />
== QPR ProcessAnalyzer 2023.5 (build 3304) (released 2023-09-05) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In Big Data Chart, the '''Case conformance''' measure and dimension has changed in a way that now it provides boolean values (true/false) instead of integer values (1/0). If [[Measure,_Dimension_and_Column_Settings#Other_settings|colorMappings]] are used for this measure or dimension to set specific colors to visualize conformant and nonconformant cases, the mapped values need to be changed as follows: '''1''' -> '''true''' and '''0''' -> '''false'''. Without the change, the mapped colors are not effective.<br />
<br />
Exmaple: Old configuration:<br />
<pre><br />
"colorMappings": {<br />
"1": "#36d475ff",<br />
"0": "#f5403bff"<br />
}<br />
</pre><br />
New configuration:<br />
<pre><br />
"colorMappings": {<br />
"true": "#36d475ff",<br />
"false": "#f5403bff"<br />
}<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is deprecated. Big data chart has allowed to process data both in Snowflake and SQL Server. Now the support for SQL Server is deprecated and the Big data chart will only support calculation in Snowflake. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). The OperationLog analysis is replaced by the [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog function]] and the Infcluencers analysis is replaced by the [[FindRootCauses_Function|FindRootCauses function]].<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [12, 14, 15, 16, 29];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
By default, Snowflake ODBC driver generates quite much logging to files which might unnecessarily fill up the disk space. It's recommended to set the LogLevel parameter to value 0. The path where the logs are created can be seen in Windows registry (key LogPath). More information about configuring Snowflake ODBC parameters: https://docs.snowflake.com/en/developer-guide/odbc/odbc-parameters.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07971: Machine learning based [[Clustering_Analysis|Clustering analysis]] can be run in Snowflake.<br />
* B-07989: In dashboard designer the stacking order of charts can be changed with buttons [[QPR_ProcessAnalyzer_Dashboard_Designer#Viewing_and_Editing_Dashboards|Bring to front, Send to back, Bring forward and Send backward]].<br />
* B-07977: For [[Sankey_Chart|sankey diagram]], added Start level and End level mappings to define custom start and end level for the sankey flows. Implemented also color mappings to define specific colors for specific values.<br />
* B-08010: To improve performance, charts are loaded and updated only when they are visible in the dashboard.<br />
* B-07975: Added following [[SQL_Expressions#Date_functions|date related functions]] to Snowflake: DayOfYear, DayOfWeek, WeekOfYear, Quarter.<br />
* B-07908: When [[QPR_ProcessAnalyzer_Project_Workspace#Duplicating_Model|model is duplicated]], also filters in the model are also duplicated.<br />
* B-07904: Filters and models API for expression language has been completed.<br />
* B-07991: In [[Filter_Selectors|case and event type filter selectors]], threshold whether the dropdown list or search dialog is shown can be defined using the ''Maximum Rows'' setting. Also the search dialog filters search results by other filter rules in the dashboard.<br />
* B-07999: Filters report has been changed to use the [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|expression language API for filters]].<br />
* B-07540: Added [[QPR_ProcessAnalyzer_Expressions#Throwing_objects|throw statement]] to expression language.<br />
* B-07813: UI components are updated. There are small visual improvements, such as in flowchart flows are routed a bit differently and in charts the hidden series is shown as strike-through in the legend.<br />
* B-07963: Following legacy analysis types have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29) (see more information in the note above).<br />
<br />
'''Fixed issues:'''<br />
* D-13777: Filters could not be created in charts when "Update Filter During Selection" setting was disabled.<br />
* D-13767: Automation per Event Types preset in in-memory incorrectly showed only one event type.<br />
* D-13756: Changing background color in KPI card didn't have any effect.<br />
* D-13812: "Exclude events" was incorrectly translated to "Exclure les cas" in French.<br />
* D-13815: Dashboard designer background grid was not visible in entire area in edit mode. Improved also the grid to match to snapping in move and resize.<br />
* D-13674: Business calendar dialog layout was incorrect when a model with a long name was selected to copy holidays.<br />
* D-13811: Table actions link to a new window didn't go to dashboard if there were other parameters in the link.<br />
* D-13601: Fixed issue where some presets may have given error when attribute value selection and the automatically selected attribute conflicted by the data type.<br />
* D-13753: While Snowflake model was selected, in Filters and User Rights reports the Columns list could not be opened.<br />
* D-13720: Now table column filter and sorting are preserved when resizing or zooming page.<br />
* D-13785: In tables increased number of rows to 20000 that are inspected to get available items shown in Excel-style column filter.<br />
* D-13759: Some statistical calculations had bad performance with large number of rows.<br />
* D-13787: Conformance statistics component didn't have scrollbars when text didn't fit to the visible area.<br />
* D-13788: In-memory "Nonconformance reason" selection caused error when two of them was selected in the same chart.<br />
* D-13783: When Analyzed objects was Generic analysis, column selection incorrectly caused "Analysis has not been selected" error.<br />
* D-13776: When measure name contained quotation mark, notification preview didn't work.<br />
* D-13747: Filtering with integer type of case id with case attribute value filter caused error in Snowflake.<br />
* D-13791: In Firefox, model selection in chart settings didn't show models in the first open.<br />
* D-11984: Recycle bin buttons didn't fit to the screen when screen width was small.<br />
* D-13780: Using CaseId case attribute in clustering analysis did not work with Snowflake 106 cases standard model.<br />
* D-13781: Clustering analysis produced Python error with a certain simple Snowflake model.<br />
* D-13730: Snowflake: Case attribute filtering didn't work when there are cases without row in cases table.<br />
* D-13803: There was chart configuration validation error in browser console when measures were moved into dimensions in Big data chart.<br />
* D-13758: There was performance issue with the Recent tasks system preset.<br />
* D-13793: Snowflake clustering failed when cluster count is larger than case count.<br />
* D-13763: SQL expression based filter rule with Where function to filter events didn't filter anything in Snowflake.<br />
* D-13804: Added missing Millisecond function to Snowflake.<br />
* D-13772: Expression EventLog.Cases.Events caused error "Value cannot be null".<br />
* D-13755: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13739: When switching between System reports there was error: "Uncaught Error: 2nd dimension not found. at y.getExpressionConfiguration".<br />
* D-12109: Sometimes flowcharts showed message "Error in querying event type measures. Input string was not in a correct format".<br />
* D-12473: Cost Savings by Automation preset gave sometimes error "Unable to cast object of type 'System.Double' to type 'System.String'".<br />
* D-13750: Snowflake model didn't work with the Case Duration vs. Manual Activities preset.<br />
* D-13657: There was error converting data type nvarchar to bigint.<br />
* D-13796: Some Snowflake operations didn't work with zero rows and columns.<br />
* D-12494: Now when chart size changes, the table column filters and sorting are preserved.<br />
* D-13736: In Performance benchmarking dialog, the Export result button exported wrong benchmark performance analysis result.<br />
* D-13609: Improved conformance analysis related filter names.<br />
* D-13594: Recycle bin buttons were not visible when opening recycle bin in a narrow screen.<br />
* D-13226: Tooltips in the model properties dialog are now translated.<br />
* D-12569: Table incorrectly showed ellipsis for narrow boolean type of columns showing checkboxes.<br />
* D-13391: Emptying date or datetime picker value was not registered and it didn't trigger functionality.<br />
* D-12621: Value search dialog didn't work with values containing backslashes.<br />
* D-13796: Some Snowflake operation didn't work with zero rows/columns.<br />
<br />
== QPR ProcessAnalyzer 2023.4 (build 2628) (released 2023-06-14) ==<br />
<br />
'''Features:'''<br />
* B-07767: Added [[Gantt_Chart|Gantt chart]] to visualize timeline of cases and events divided into swimlanes.<br />
* B-06383: Added [[Sankey_Chart|Sankey chart]] to visualize flow from one set of values to another.<br />
* B-07941: Implemented many more presets running in Snowflake models for compliance and operational excellence use cases. There are also presets for the path analysis and process bottlenecks identification.<br />
* B-07864: Snowflake conformance analysis shows now [[Conformance_Analysis#Top_Deviations_(in-memory)_/_Deviating_Flows_(Snowflake)|reasons for conformance deviations]], such as which event occurrences deviated from the design model.<br />
* B-07909: Snowflake conformance analysis visualizes [[Conformance_Analysis#Undesired_Events_(Snowflake)|undesired event types]] in table and flowchart.<br />
* B-07823: Flowchart Bottlenecks preset has been changed to show bottlenecks for event types. Also renewed the [[QPR_ProcessAnalyzer_Logs#Task_Log|Tasks reports]] to use expression language based interface.<br />
* B-07891: User interface has been [[Languages_and_Localization|translated into Portuguese]].<br />
* B-07873: Improved [[QPR_ProcessAnalyzer_Pivot_Table|pivot table]] visual layout to highlight totals and aggregated rows. Also the row titles are now visible in the top left.<br />
* B-07905: Added [[SQL_Expressions#Rank_functions|Rank related functions]] to Snowflake for writing more versatile custom KPI's, e.g., FirstValue, LastValue, NthValue, Lead and Lag.<br />
* B-07912: Added more SQL expression [[SQL_Expressions#Array_functions|array functions ArrayToString and ArrayOverlap]] to Snowflake.<br />
* B-06449: Added SQL expression functions ToTimestamp and TryToTimestamp for parsing timestamps from strings using provided format.<br />
* B-07959: Added new functions Base64Encode and Base64Decode to help using basic HTTP authentication when calling web services.<br />
* B-07206: SQL expressions support data [[SqlDataFrame_in_Expression_Language#WithClusterColumn|clustering]] which is an unsupervised machine learning algorithm to group data based on similarities.<br />
* B-07848: Data can be extracted from SAP using the encrypted [[Importing_Data_from_SAP#SNC_encrypted_connection|SNC connection]].<br />
* B-07903: Added expression language API to create and modify filters and models.<br />
* B-03103: [[QPR_ProcessAnalyzer_Logs#Task_Log|Task log]] (operation log) can be accessed in expression language.<br />
* B-07872: List aggregation with Distinct=true orders now items by their value.<br />
* B-07940: Removed "Count" aggregation from textual values in Big data chart (you can use the Case count, Event count, etc. selection instead).<br />
* B-07757: Backend support for datatables linking to user-definable Snowflake database, schema and table.<br />
* B-07825: Improved error message when trying to use non-existing attributes in Snowflake queries.<br />
* B-03101: To expression language, added try-catch-finally statement to handle thrown exceptions.<br />
* B-07861: Removed available and total virtual memory information from User settings dialog.<br />
* B-07902: Optimized sequences of joins in Snowflake queries to improve performance.<br />
* B-07837: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13709: If image width-to-height ratio was lower than container's ratio, image was incorrectly stretched to fit the container.<br />
* D-13660: Disabling filter rules didn't work in Snowflake models.<br />
* D-13526: Passing dataframes from SQL scripts to expression scripts didn't work.<br />
* D-13661: Snowflake conformance analysis crashed when there was no access to conformance related Snowflake UDF's.<br />
* D-13693: Resolved major Snowflake conformance analysis performance issues in the BPMN model handling.<br />
* D-13716: Snowflake root causes analysis incorrectly bypassed Snowflake cache.<br />
* D-13707: In SQL Scripting, the datatable analysis (number 18) didn't always copy the data table contents to the target table correctly.<br />
* D-13653: Big data flowchart Root causes preset showed incorrect legend.<br />
* D-13626: Flowchart froze when converting into big data flowchart and vice versa by modifying chart json settings.<br />
* D-13656: Root causes for attribute gave error "Failed to compare two elements in the array" in some situations.<br />
* D-11563: Pivot table had a minimum height of 300px, which caused bottom part of it to be out of view.<br />
* D-13704: In CSV file import, parsing now allows spaces between column separator and text quotation mark.<br />
* D-13598: Chart gave unclear error message when events datatable was not defined.<br />
* D-13655: Improved error messages for BPMN editor and conformance statistics.<br />
* D-13528: Error message for certain erroneous SQL expressions was unclear.<br />
* D-13677: "Flow occurrences with specific case attribute value" selection didn't work for in-memory chart.<br />
* D-13663: Pivot table border line was slightly broken in the header area.<br />
* D-13608: There was incorrect alignment of items in the table paging controls.<br />
* D-13703: Importing CSV file with some special characters to Snowflake failed (due to incorrect escaping in Snowflake staging files).<br />
* D-13708: Duplicating datatable using user defined table, removed data the source table.<br />
* D-13717: Dependency wheel crashed when there were zero weights and showing data labels.<br />
* D-13348: There was an unclear error message when Snowflake query had a certain incorrect expression.<br />
* D-13732: Pivot table Excel export contained headers formatted incorrectly.<br />
* D-13729: There was a JavaScript error when limited user tried to access business calendar.<br />
* D-13662: Percentile function didn't always work with timespan types.<br />
* D-13646: Using incorrectly configured model without cases datatable caused null reference error.<br />
* D-13629: When tried to use chart with a non-existing model, there is now a proper translated error message.<br />
<br />
== QPR ProcessAnalyzer 2023.3 (build 1990) (released 2023-05-03) ==<br />
<br />
'''Features:'''<br />
* B-07818: [[Conformance_Analysis|Conformance analysis]] is supported in Snowflake with following dashboard components: Big data chart, BPMN editor, Conformance statistics, and Design model selector.<br />
* B-07833: [[Root_Causes#Root_causes_in_flowchart|Root causes analysis for flowchart]] is available for Snowflake showing how the event and flow occurrences explain selected phenomena.<br />
* B-07786: Big data chart has more [[Big_Data_Chart#Measure_aggregations|measure aggregations]], such as median, percentile, standard deviation and variance. Also for textual items, unique values can be listed.<br />
* B-07795: [[QPR_ProcessAnalyzer_Table#Conditional_formatting|Conditional formatting]] supports also columns with non-numerical contents.<br />
* B-07830: [[Big_Data_Chart#Measure_aggregations|None and Any aggregations]] for Snowflake and user-friendly formatting for conformance violations.<br />
* B-06527: Error messages in [[Importing_Data_to_Datatable_from_CSV_File|CSV file import]] show also the column number to help working with CSV files with lot of columns.<br />
* B-07747: In-memory conformance checking accepts design models with multiple tasks having same name (same is followed by the Snowflake implementation).<br />
* B-07659: In-memory flowchart preset Case Conformance to visualize conformance checking violations.<br />
* B-07571: Added function IsConformant to backend to check whether cases are conformant.<br />
* B-07863: Added function ConformanceViolationsFlows to backend to return nonconformance reasons for violating cases.<br />
* B-07844: Support for "array" aggregation to return aggregated items as array.<br />
* B-07856: Support for creating and accessing arrays and objects in SQL expressions.<br />
* B-07860: Array handling functions and Tasks property for DesignModel entity.<br />
* B-07847: Added throttling for QPR ScriptLauncher client-side imports to limit memory usage.<br />
* B-07811: Snowflake query optimization to omit columns that are not used by the query.<br />
<br />
'''Fixed issues:'''<br />
* D-13632: Going from variations to event types led to very poor performance with certain models.<br />
* D-13628: Statistical calculations were incorrectly not applied in chart CSV export.<br />
* D-13575: SQL script may have given error "Operand type clash: nvarchar(max) was incompatible with sql_variant".<br />
* D-13597: UI supports now datatable column type "ShortString" (previously datatable contents preview and CSV import didn't work).<br />
* D-13536: Using business calendar sometimes gave error "System.InvalidOperationException: Collection was modified".<br />
* D-13477: Chart types without y-axis mapping caused an error when series mapping was used.<br />
* D-13453: _model variable was not available for Snowflake expression filter rules.<br />
* D-13527: Checkbox height didn't increase when long label needed to span to multiple lines.<br />
* D-13363: Snowflake query with EvaluateAfterAggregations and IsHidden failed when dimensioning by case id column.<br />
* D-13383: Snowflake query gave error "Invalid column name 'FromCase Name'".<br />
* D-13523: Request id was incorrectly shown as zeros in error messages.<br />
* D-13541: In CSV import, error message for maximum number of columns exceeded is improved (maximum is 300 column for SQL Server).<br />
* D-13583: Objects count in header didn't work for empty Snowflake model.<br />
* D-13553: Larger pacm files can now be imported, as there isn't error "Request body too large. The max request body size is 30000000 bytes".<br />
* D-13306: Stack overflow error was given when using SqlDataFrames.<br />
* D-13487: When Flows root and there was filter in Values expression, some flows were lost.<br />
* D-13540: SqlDataFrame query with 300 columns failed to error "WithExpressionColumn: No name given for the new column".<br />
* D-13429: Ordering in List aggregation couldn't find columns in dataframe query.<br />
* D-13406: Dataframe query with root FlowOccurrences and get value from cases caused error.<br />
* D-13538: There was incorrect handling of escaping characters in column names used in dimensions.<br />
* D-13633: Fixed ordering in List aggregation with null and empty values.<br />
* D-13636: Query that dimensions by numeric case attribute with AggregateOthers true, caused error.<br />
* D-13589: Creating Snowflake datatable did not connect to Snowflake.<br />
* D-13623: Value expressions without aggregation didn't work with AggregateOthers setting.<br />
* D-13554: In in-memory chart, percentile function might have return both Int64 and Double type of objects which cannot be sorted.<br />
* D-13481: Improved error message when trying to use deleted model.<br />
* D-13621: Dynamic value search dialog had incorrect font in lists.<br />
* D-13610: Some invalid BPMN files crashed BPMN editor.<br />
* D-13614: Checkbox label texts overflowed to right.<br />
* D-13520: Removed excessive parameters from the Query Designer for generic context queries.<br />
* D-12998: QPR icon was incorrectly positioned in header in Safari.<br />
* D-13480: Import to duration data type is removed from Snowflake datatables, and for local datatables duration type maximum size is checked.<br />
* D-13517: In Highcharts-based visualizationsm conditional formatting didn't work for other than the first y-axis mapping.<br />
* D-13529: In some presets containing several on-screen settings, when chart showed in error message, on-screen settings showed invalid selection.<br />
* D-13530: Opening dropdown list caused JavaScript error when the list contents should be empty after it previously contained items.<br />
* D-13486: Removed unreachable error message in CSV import.<br />
* D-13524: Fixed in-memory chart flow occurrences root measures "Event attribute (text)" and "Event attribute (number)" that caused error.<br />
<br />
== QPR ProcessAnalyzer 2023.2 (build 1478) (released 2023-03-22) ==<br />
<br />
'''Features:'''<br />
* B-07755: [[Business_Calendar|Business calendar]] for duration calculation is available for Snowflake models.<br />
* B-07719: In Snowflake dashboards, [[Big_Data_Chart#Using_measure_variables|measures can be assigned to variables]] and use the variables in other measures to create combined measures.<br />
* B-07746: Changed in-memory conformance checking to not show invalid flow violations where starting or ending event type is invalid.<br />
* B-07743: [[PA_Configuration_database_table#General_Settings|Default datasource]] can be configured for datatables created by scripts, allowing to set Snowflake as default.<br />
* B-07740: System memory indicator moved from the header to User settings Version information dialog.<br />
* B-07776: New SQL expressions functions Unicode, Char and Regexp, as a basis for future rule-based process mining.<br />
* B-07741: Backend support for aggregation operations Median, Percentile, Stdev, Stdevp, Var and Varp to Snowflake.<br />
* B-07742: Backend support for aggregation operation to list unique items in Snowflake.<br />
* B-07770: Optimized Snowflake SQL generation by combining consecutive WithColumn function calls into one select.<br />
<br />
'''Fixed issues:'''<br />
* D-13491: QPR ProcessAnalyzer server crashed now and then when sorting was in progress and the query was cancelled.<br />
* D-13380: Dimensioning integers in in-memory core calculation didn't work correctly as 0 and -1 were put to same bucket.<br />
* D-13385: In Workspace Bin, Delete Forever and Restore from Bin buttons were misaligned.<br />
* D-13332: Conformance checking didn't show in violations when there were multiple undesired events in same case.<br />
* D-13405: Images take now always all available space in image component area.<br />
* D-13417: KPI card without title was slightly misaligned vertically.<br />
* D-13438: Clicking selected event type or flow in flowchart didn't cancel the filter selection.<br />
* D-13350: Task log and Script log default filter end date is now empty by default.<br />
* D-13381: Disabled browser auto-complete from flowchart variation stepper and Workspace create/rename object dialog.<br />
* D-13347: Improved performance for in-memory business calendar calculation.<br />
* D-13335: In in-memory chart, filtering didn't work in "Flow occurrences" root "Flow occurrences with specific event attribute value" dimension.<br />
* D-13367: Percentage value wasn't displayed properly with German or Spanish language when event types were shown in object counts indicator.<br />
* D-13451: Exported filter file is now named based on selected filter name.<br />
* D-13378: In Big data chart, prevented error "Unable to aggregate from level RootCauses to level Custom".<br />
* D-13293: DataFrame query with root Flows and IncludeEvents and ExcludeEvents filter rules failed.<br />
* D-13370: Fixed issue where on-screen settings that didn't have any selectable items, showed a strange selection.<br />
* D-13392: Clustering analysis was incorrectly shown when originally in-memory chart was converted into big data chart by changing chart json settings.<br />
* D-12784: Some Snowflake queries incorrectly bypassed Snowflake caching because they used unique object names.<br />
* D-13456: Improved error messages for incorrectly configured on-screen settings.<br />
* D-13445: Conformance violations related translated terms have been fine-tuned for better translations into different languages.<br />
* D-13421: Improved error messages when trying to use model having some column mappings missing.<br />
* D-13485: Snowflake business calendar gave error when calendar contained Sunday.<br />
* D-13218: Windows event viewer incorrectly contained log entries that are not errors.<br />
* D-12634: Multiline text boxes width is set to non-changeable.<br />
* D-13034: Confirmation dialog to delete items permanently has been updated.<br />
* D-13288: In dialogs, the Create button didn't show the disabled state correctly.<br />
* D-13427: When dropdown lists didn't have any selectable items, the "N/A" text appeared and the list incorrectly took more space vertically.<br />
* D-13483: In Workspace, the new items menu was too narrow for Spanish texts.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.1 (build 1449) (released 2023-02-24) ==<br />
<br />
'''Features:'''<br />
* B-07690: System setting [[PA_Configuration_database_table#General_Settings|DatabaseId]] can be defined by administrator to get more simple table names in Snowflake.<br />
* B-07737: In flowchart Bottlenecks preset, originally used flow colors has been recovered.<br />
* B-07748: For Analyzed objects "Conformance checking findings" in charts, terminology has been revised and issue with the case count calculation fixed.<br />
* B-07663: In [[Chart_On-screen_Settings|on-screen settings]], when case/event attribute is selected, related attribute values list are reset.<br />
* B-07570: Backend support for [[Business_Calendar|business calendars]] in Snowflake.<br />
* B-07660: Backend support for conformance checking to show also the last event index and event type in NotCompleted reason.<br />
* B-07610: Memory counter related technical properties have been removed from expression language.<br />
<br />
'''Fixed issues:'''<br />
* D-13349: Opening dashboard containing Root causes preset with default settings jammed the system by generating lot of calculations (for more information, see previous release notes).<br />
* D-13277: Stacked charts with date type of data as series did incorrectly show gaps in columns/bars.<br />
* D-13270: Flowchart conditional formatting didn't work with duration multi-unit format.<br />
* D-13358: Calculation results caching works also across different user sessions.<br />
* D-13250: Dashboard with two charts connected with linked settings using variables ended up to to a never ending loop.<br />
* D-13230: SAP import did not automatically create columns to use the correct column types.<br />
* D-12857: Deeply recursive functions caused a crash without any trace.<br />
* D-12994: In Workspace, some buttons were not clickable due to breadcrumb covering them.<br />
* D-13249: In Workspace, there was incorrect error message for duplicate datatable names when there were items with only letter capitalization was different.<br />
* D-13232: In-memory chart Top variations preset is now sorted secondarily by average duration descending.<br />
* D-13300: Setting DashboardFilter variable to empty value didn't have any effect in dashboard but old value was incorrectly used.<br />
* D-12834: Limited the maximum number of dimensions to 20, to avoid too demanding queries for SQL Server.<br />
* D-12917: Changed visual indication of missing items in dropdown lists (it's no longer showing "***").<br />
* D-13111: In Root causes preset, there is now error message when trying to use weighting related columns when weighting isn't in use.<br />
* D-13124: SQLDataFrame query containing filter rule EventTypes aggregating from cases failed.<br />
* D-13207: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed.<br />
* D-13292: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed (rev.2).<br />
* D-12991: Dropdown list texts had some translations missing.<br />
<br />
== QPR ProcessAnalyzer 2023.1 (build 1433) (released 2023-02-07) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release contains a potentially severe issue, where some dashboards completely jam the system by generating lot of calculations. The issue may appear in dashboards that have been created in earlier releases and containing the Root causes preset with default settings. The issue will be fixed by the next release. The issue can be worked around by exporting the affected dashboard, modifying the dashboard file manually and importing the dashboard back. The required modification is to remove line(s) containing <pre>"preset": "RootCauses"</pre> and the comma from the preceding line.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Cases (analysis number: 5), Events (6), and EventTypes (7). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). Note that the legacy analyses removal don't affect the dashboarding functionality.<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [5, 6, 7];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2023.1, the '''.NET Desktop Runtime''' is not needed anymore for QPR ProcessAnalyzer Server, so it can be uninstalled. Also for QPR ScriptLauncher, ''.NET Desktop Runtime'' is not needed, but instead install the '''.NET Runtime''' (which is more lightweight). ''.NET Desktop Runtime'' contains the ''.NET Runtime'', so the actions are not mandatory when updating to QPR ProcessAnalyzer 2023.1.<br />
</div><br />
<br />
'''Features:'''<br />
* B-06997: Expression-based filter rules for Snowflake dashboards to allow versatile filtering and filtering from custom expressions.<br />
* B-07383: Improvements to linked settings to allow binding to variables, tags and filter rules [[Chart_Linked_Settings|(more information)]].<br />
* B-07508: Flowchart preset colors have been renewed to be more intuitive.<br />
* B-07184: Automation preset in flowchart has now options for selecting the Automation attribute and value.<br />
* B-07512: Changed datatable metadata can be refreshed from Snowflake, and all rows in the datatable can be deleted easily in Workspace [[QPR_ProcessAnalyzer_Project_Workspace#Datatables|(more information)]].<br />
* B-07440: Date when the release was made is now shown in User settings.<br />
* B-07595: WeekOfYear property for DateTime objects in expression language to get the week number of a year (between 1 and 53).<br />
* B-07623: In-memory expression language functions Random (to get random numbers) and Hash (to get hash value of string).<br />
* B-07612: Breadcrumb in Workspace has now a Home button to quickly navigate to the top level of the projects hierarchy.<br />
* B-07637: Language selector now shows the language options in local languages.<br />
* B-07228: Remove following deprecated analyses: Cases, Events, and EventTypes (see the release note above).<br />
* B-07538: Backend support: Snowflake root causes analysis can find event attribute related root causes.<br />
* B-07706: Backend support: Snowflake expression-based filter rules support for roots containing Where function.<br />
* B-07611: Removed following legacy filter rules: CaseAttributeTrend, EventAttributeTrend, EventTypeTrend, and Duration.<br />
* B-07598: Refactored client-side import for SQL scripting to use generic client-side task mechanism.<br />
* B-07716: ShortString columns are now properly detected in SQL Server queries.<br />
* B-07652: Now it's possible to pipe multiline expression strings to QPR ScriptLauncher.<br />
* B-07688: AddColumns function for Datatables to create multiple columns in one call.<br />
<br />
'''Fixed issues:'''<br />
* D-13092: Table conditional formatting didn't work when color code was fetched from other column.<br />
* D-13105: Some charts created in earlier release referring to non-existing presets names appeared as empty after software update.<br />
* D-13107: Flowcharts crashed and showed loading animation forever when setting color or flow thickness to non-numerical measure.<br />
* D-13104: In BPMN model editor, context menus to edit elements didn't appear.<br />
* D-12939: Script editor tabs Close buttons didn't work.<br />
* D-13154: "Search by case ID" didn't work in in-memory chart.<br />
* D-12933: CSV columns with only empty values were incorrectly auto-detected as integers.<br />
* D-12929: In-memory chart Root causes for case duration and Root causes for case attributes (weighted) had Custom expression missing.<br />
* D-12928: Pivot table headers were empty when there were two column levels and two values.<br />
* D-12924: Pivot table columns with Count and Distinct Count aggregations are now numeric and aligned right.<br />
* D-13033: Changing colors in chart settings Color palette caused "Item already exists" error and prevented changing colors.<br />
* D-12996: Tags referring to dashboard variables didn't work in Additional root expression.<br />
* D-12877: UI gave error in some situations: Uncaught TypeError: Cannot read properties of undefined (reading 'min').<br />
* D-13071: Prevented selecting two or more of the Y-axis, X-axis and series mappings at the same time for the same measure or dimension.<br />
* D-12895: Big data chart crashed when on-screen setting contained event type selector and there were no event type filter set.<br />
* D-13231: Tooltips for dashboard name, model selector and filter selector in header show now the content text instead of generic instruction.<br />
* D-13139: There was an error when tried to create filter for a custom expression where selected data type didn't match with the actual type of data.<br />
* D-12988: Chart presets selection in chart settings showed unnecessary tooltip.<br />
* D-12901: When set sampling over 1 million, Snowflake models gave error: parameter value out of range: size of fixed sample. Must be between 0 and 1,000,000.<br />
* D-12904: Creating expression filter having lower/greater logic with root objects sampling failed.<br />
* D-12923: Chart schema didn't accept pivotAggregation in dimensions/columns.<br />
* D-12926: Root causes columns Selected weight, Compared weight and Total weight have now correct float data type.<br />
* D-12880: In out-of-the box dashboards, chart titles and subtitles were not translated.<br />
* D-12916: Improved filter rule description text in Filter rule editor dialog for expression filter rules.<br />
* D-12889: No clear error message was given when user tried to export corrupted model from .pacm file.<br />
* D-12869: Date selector in on-screen settings had inconsistent vertical alignment.<br />
* D-12938: When creating a filter with lasso and selecting a single data point only, "equals" kind of filter rule is now created.<br />
* D-12989: "Running tasks as specific time" system report may have ended up in loop causing following error: Maximum call stack size exceeded error.<br />
* D-13010: Pivot table sometimes ended up to never-ending resizing loop when browser zoom was more than 100%.<br />
* D-12790: Expression language: DataFrame.SetColumns: Initializing and using variables defined in closure of SetColumns function parameter didn't work<br />
* D-12927: All on-screen settings were not be visible in narrow charts having several on-screen settings.<br />
* D-12937: Added maximum value limitation to several number input fields in charts.<br />
* D-12947: Message dialog didn't show line breaks correctly (e.g., in CSV file import).<br />
* D-12948: Defining column setting caused error when Measure Expression was not defined.<br />
* D-12946: Filter rule text couldn't be seen entirely from tooltip.<br />
* D-12983: When range filtering using integer values in Highcharts chart, filter is now shown as integer value.<br />
* D-12984: When range filtering in Highcharts charts and there is category axis, filter rule is now based on individual (category) values.<br />
* D-12930: When creating filters from charts using date type of X-axis with lasso, "greater than or equal" and "less than or equal" filter rules are not created.<br />
* D-12920: "Where" function in DataFrame lost column data types of the original DataFrame.<br />
* D-13048: Model notifications failed with certain measures that define variables in root expression leading to error: Variable "sampleSize" already exists in this context.<br />
* D-13116: BPMN editor had some translations missing.<br />
* D-13019: Datatable and script selectors show now datatable/script name instead of id, when opening selector having existing selections.<br />
* D-12951: Changing additional root expression in flowchart didn't refresh the flowchart.<br />
* D-13147: Filter rule boxes in header had different widths, and Add filter rule button vertical alignment was incorrect.<br />
* D-12907: Sometimes case attribute selection showed incorrect attribute name for empty model.<br />
* D-13148: Filters and Datatables system reports loaded unnecessarily twice which could be seen as blinking.<br />
* D-12844: In dataframe query, FlowOccurrences in root and GetValueFrom Cases with filter gave null reference exception<br />
* D-12915: Repeating certain query twice with aggregations in Events root generated invalid SQL<br />
* D-12728: Was huge amount logs in server during client side import (manual testing required as identification)<br />
* D-13156: Persist function failed to snowflake: Invalid unicode escape sequence '\u0027ACCE'; should be at most '\u0010FFFF'.<br />
* D-12876: Flows/FlowOccurrences in root didn't work with SqlExpressionValue filtering.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2022.8 (build 1397) (released 2023-01-11) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release fixes an issue where extracting large datasets from SAP increases memory consumption considerably and may lead to out-of-memory error. This release contains packages for both QPR ScriptLauncher and QPR ProcessAnalyzer Server. If SAP extractions are done using QPR ScriptLauncher in client side mode (ExecuteInClientSide=1), it's enough to update QPR ScriptLauncher to fix this issue.<br />
</div><br />
<br />
'''Fixed issues:'''<br />
* D-12941: Extracting data from SAP consumed unnecessary lot of memory and may have led to out-of-memory error (both when running using QPR ScriptLauncher and in server side).<br />
<br />
== QPR ProcessAnalyzer 2022.8 (build 1396) (released 2022-12-30) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Creating datatables with duplicate names in the same project is prevented, and possible existing duplicate names are automatically changed to unique names with a random suffix. If there are duplicate names, they can be renamed either before updating QPR ProcessAnalyzer (to avoid automatic renaming) or after the update (by changing suffixed names). If the renamed datatables are used by models, the linkage will break because it's based on the datatable name. Creating duplicate datatables has already been prevented in the UI, but the improved method works also in the API level.<br />
<br />
Following SQL query can be used to list datatables (and project id) having duplicate names:<br />
SELECT ITA_NAME, ITA_PROJECT_ID<br />
FROM PA_INTEGRATION_TABLE<br />
GROUP BY ITA_NAME, ITA_PROJECT_ID<br />
HAVING Count(*) > 1<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
If trying to use business calendar for a model that doesn't have the business calendar defined, there will now be an error message instead of showing the chart. Either unselect the business calendar checkbox for the measure or dimension, or define a business calendar to the model. In this situation in earlier releases the business calendar was ignored and full time calculation used.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07498: Automation and Operational Excellence presets and Root causes analysis (for Snowflake), Weighted root causes analysis and Event scattering preset (for Snowflake and in-memory), Root causes for case duration (in-memory).<br />
* B-07177: Flexible mappings, user selectable aggregations and conditional formatting for Pivot table, and flexible mappings for KPI Card.<br />
* B-07518: New function named Query to run call /api/expression/query.<br />
* B-07294: In Workspace, the left side projects hierarchy can be collapsed and expanded to make more space to project contents.<br />
* B-06814: In SQL expressions, new function DurationBetweenDates to calculate duration between timestamps precisely.<br />
* B-07519: Replaced DateDiff function with the new DurationBetweenDates function in big data chart.<br />
* B-07531: In SQL expressions, new mathematical functions Abs, Log, Mod, Power, Rand, Sign and Sqrt.<br />
* B-07297: To optimize performance, Snowflake queries are automatically cancelled if they are not needed by UI.<br />
* B-07569: To optimize performance, TakeSample function implementation is improved for Snowflake.<br />
* B-07198: Several performance improvements to DataFrame queries (used in Snowflake).<br />
* B-07464: Added Lead and Lag functions to SqlDataFrames to support getting previous and next event.<br />
* B-07470: New ExtractSap function to fetch data from SAP using expression language.<br />
* B-07536: New Pivot function to SqlDataFrames to enable root causes analysis.<br />
* B-07488: Primary keys can be set to datatables to improve calculation performance (UI will follow later).<br />
* B-07515: Added RootCauseAnalysis function to SqlDataFrames.<br />
* B-07546: RootCauseAnalysis function support for complex weighting expressions.<br />
* B-03052: Support for user-defined variables in /api/expression/query.<br />
* B-07565: Support for NumberPrecision, DatetimeTruncation and TimespanPrecision properties for Values section in in-memory query.<br />
* B-07513: For product activation file handling, replaced mutex based implementation with exclusive file lock.<br />
* B-07480: Expression language support for DataFlows for data extraction.<br />
* B-07613: Removed support for SQL Server based R scripting.<br />
* B-07567: Take datatable primary keys into use in expression builder to improve performance (part 2).<br />
* B-07588: Remove total memory information from log writing and DateDiff function for in-memory.<br />
<br />
'''Fixed issues:'''<br />
* D-12715: Snowflake calculated imprecisely some operations containing division and aggregation.<br />
* D-12761: Progress bar of the CSV import dialog didn't show any progress.<br />
* D-12799: Opening datatable contents dialog settings was slow when there were lot of rows in the datatable.<br />
* D-12089: Include conforming/nonconforming cases made BPMN editor no responding.<br />
* D-12496: Datagrid filter search keyword didn't work for rounded values, so the search was hidden for other than textual data.<br />
* D-12704: Durations as quarters was calculated incorrectly in charts.<br />
* D-12662: Fixed issue where some special literals in custom expressions didn't work.<br />
* D-12403: Setting Notifications on a model had some visual issues.<br />
* D-12859: Dependency wheel visualization crashed with nulls values in From and To mappings.<br />
* D-12660: Removed unnecessary float conversions in SQL expressions.<br />
* D-12653: In-memory datafram OrderByColumns function with mixed values failed.<br />
* D-12657: When trying to use milliseconds period in some presets, frontend frozed.<br />
* D-12706: Line breaks in data were shown in many places where it's undesired.<br />
* D-12719: Syncfusion dialog headers showed backslaces incorrectly.<br />
* D-12372: Refused to run the JavaScript URL because it violated the Content Security Policy directive.<br />
* D-12730: Logging out when filter selection is in progress, gave javascript error.<br />
* D-12705: Header object counts tooltip was sometimes messed after logout.<br />
* D-12384: Selected project was not highlighted for whole project name string.<br />
* D-12581: Prevented creating duplicate datatable names in same project in parallel execution.<br />
* D-12722: There was incorrect syntax near '<' when running SqlDataFrame expressions.<br />
* D-12736: Swedish and Finnish translation improvements for object counter tooltips.<br />
* D-12702: For BPMN Editor component "Something went wrong" error was given when switching from in-memory to Snowflake model.<br />
* D-12712: UI gave error: TypeError: Cannot read properties of undefined (reading 'id').<br />
* D-12738: Business calendar showed total business time when calendar configuration was invalid.<br />
* D-12776: Special character filter caused JavaScript SyntaxError.<br />
* D-12785: Unnecessary vertical scrollbar displayed for main header toolbar.<br />
* D-12164: There was unnecessary UnauthorizedAccess errors in logs.<br />
* D-12580: Case duration was not same when comparing Big data chart with in-memory chart for same data.<br />
* D-12768: Data grid links and variable change actions didn't work when grouping was used.<br />
* D-12735: FindRootCauses (in-memory) function filtered out cases with zero contribution.<br />
* D-12763: --#CallWebService didn't work from ScriptLauncher.<br />
* D-12789: There was timeout in SQL queries to scripting sandbox.<br />
<br />
== QPR ProcessAnalyzer 2022.7 (build 1331) (released 2022-11-15) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2022.7, to improve security expression language operations that modify data or connect to external datasources are prevented in dashboard custom expressions. The limitation is required, because when a dashboard is opened, its expressions are run with the user's permissions, and the user need to trust the expressions don't perform any unexpected operations, such as delete data. The full functionality of the expression language is available in the scripts and in the Expression Designer.<br />
<br />
The following functions and operations are prevented in dashboards: SendEmail(), CallWebService(), ImportOdbc(), ImportOdbcSecure(), Model.DeletePermanently(), Model.Restore(), Model.TriggerNotifications(), Project.DeletePermanently(), Project.Restore(), Project.CreateDatatable(), Datatable.AddColumn(), Datatable.DeletePermanently(), Datatable.Import(), Datatable.Merge(), Datatable.RemoveColumns(), Datatable.RenameColumns(), Datatable.Truncate(), RecycleBin.DeletePermanently(), and call SQL script. Calling expression scripts is allowed, but in the script all previously mentioned operations are prevented.<br />
<br />
Following SQL query can be executed in the QPR ProcessAnalyzer metadata database to reveal dashboards that potentially have prevented expressions:<br />
SELECT * FROM [PA_UI_ELEMENT] WHERE [UIE_PROPERTIES] LIKE '%SendEmail(%' OR [UIE_PROPERTIES] LIKE '%CallWebService(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbc(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbcSecure(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Restore(%' OR [UIE_PROPERTIES] LIKE '%TriggerNotifications(%' OR [UIE_PROPERTIES] LIKE '%CreateDatatable(%' OR [UIE_PROPERTIES] LIKE '%AddColumn(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Import(%' OR [UIE_PROPERTIES] LIKE '%Merge(%' OR [UIE_PROPERTIES] LIKE '%RemoveColumns(%' OR [UIE_PROPERTIES] LIKE '%RenameColumns(%'<br />
</div><br />
<br />
'''Features:'''<br />
* B-07287: Process Discovery and most important presets for Snowflake.<br />
* B-07271: "Last Row Aggregates Over-limit Rows" setting for big data chart.<br />
* B-06431: Snowflake datatables support for database views in the datasource.<br />
* B-07266: Security: "limited mode" to prevent data modifications and external calls from dashboard expressions.<br />
* B-07097: Improved flowchart root causes color scales.<br />
* B-07363: SQL LIKE function support for escape character.<br />
* B-06877: Improved variation queries performance in Snowflake, part 1.<br />
* B-07444: Improved variation queries performance in Snowflake, part 2.<br />
* B-07382: Support for empty strings and nulls in event type names in dataframe processing.<br />
* B-07273: WithRowNumberColumn, WithRankColumn, WithDenseRankColumn support for descending sorting.<br />
* B-07303: FindRootCauses function support for weighting expression.<br />
* B-07327: Unpivot function for SqlDataFrames (for root cause analysis).<br />
* B-07385: Align token lifetime with SESSION_MAXIMUM_DURATION setting.<br />
* B-07500: ColumnMappings property for IDataFrame and DataTables.<br />
* B-07499: IDataFrame.ApplyFilter function to filter events data using a JSON-based filter.<br />
* B-07469: Translation updates for release 2022.7.<br />
<br />
'''Fixed issues:'''<br />
* D-11630: Drag and drop from chart settings to main header was working incorrectly for filter and root cause rules.<br />
* D-12455: Moving a chart filter from one chart to another created a root cause analysis filter.<br />
* D-12266: Root causes analysis showed incorrect results when certain combination of filters.<br />
* D-12525: Numerical values in Excel export in data grid was formatted incorrectly.<br />
* D-12534: Restoring item from recycle bin changed project from Bin to previous project.<br />
* D-12529: Measure specific datalabel mapping did not work correctly when also mapped to Y-axis.<br />
* D-12532: Multi-selection options caused layout issue for Chart setting.<br />
* D-12541: Layout issue for Polish in multiselect list search dialog.<br />
* D-11277: Increase/decrease Icons were missing in the dimension sorting for Mac.<br />
* D-12552: Uncaught Error: Diagram.selectCollection given something that is not a Part: null.<br />
* D-12567: Tooltip incorrectly showed for label component containing only spaces.<br />
* D-12438: Operation was cancelled because it was replaced by a new operation.<br />
* D-12551: Some expressions didn't work as calculated case/event attributes.<br />
* D-11720: Chart buttons were not visible in Apple Safari and iPad.<br />
* D-12544: On-screen settings "options" parameter did not work.<br />
* D-12528: Multi-unit time unit selection appeared where it's not applicable.<br />
* D-12583: Error message should be provided for invalid settings input than just display JS errors.<br />
* D-12599: Tooltips didn't show correct measures/dimensions when "Show in tooltip" mappings are used.<br />
* D-12561: Chart settings content was incorrectly drawn outside of the chart dialog.<br />
* D-12568: Reload UI sometimes crashed chart having multiselect on-screen settings.<br />
* D-12572: Main header toolbar lost when refresh maximized PA chart.<br />
* D-12612: Drop Unused Filters After setting incorrectly allowed zero seconds.<br />
* D-12533: Error message keeped blinking in Analysis view.<br />
* D-12608: User could not select or add new case attribute when current select attribute doesn't exist.<br />
* D-12451: Prevented deleting running script.<br />
* D-12516: Windows event viewer warning: Failed to gracefully shutdown application.<br />
* D-12523: Business calendar performance - part 2.<br />
* D-12538: Column with same name could be added multiple times to datatable using expression language.<br />
* D-12582: Improved EMS mutex code to support multiple PA service in one server.<br />
* D-12624: Synchronize new (empty) data table generated failed queries in Snowflake.<br />
* D-12622: Advanced setting page reserved room for the expression editor frame that did not exist.<br />
* D-11295: In on-screen settings, some UI controls were vertically misaligned.<br />
* D-11625: The heights of the parameter option menu in the clustering tab was not well aligned.<br />
* D-12103: Small dropdown list layout issue.<br />
* D-12633: Align issue for Column related Advanced settings.<br />
* D-12505: Search dialog didn't escape % and _ characters correctly in dataframe processing.<br />
* D-12645: Tabs in expression settings dialog were partly hidden when dialog is narrow.<br />
* D-11382: Moving of flowchart was sometimes shaky.<br />
* D-12655: Filter rule tooltips in header were styled incorrectly.<br />
* D-12656: Large integer values in filter jsons were incorrectly presented as small integers.<br />
* D-12661: Some exported filters contained unnecessary "invert" property.<br />
* D-12500: Model with numeric case id's and filtering with the attribute mapped as case id: ERROR [22018] Numeric value <nowiki>''</nowiki> is not recognized.<br />
* D-12509: Filtering null values didn't work in boolean attributes in Snowflake.<br />
* D-12571: In dataframe processing in SQL Server, dividing two integers should not make rounding to integer.<br />
* D-12610: Setting for global DropUnusedFiltersAfter was missing.<br />
* D-12613: Filtering with case/event attributes with null values didn't match in Snowflake models.<br />
* D-12617: Model didn't work when DropUnusedFiltersAfter is 00:00:00.<br />
* D-12618: If model ConfigurationJson is null, Configuration property didn't work.<br />
* D-12620: Filtering didn't work when there are backslaces in attribute names in Snowflake models.<br />
* D-12643: AttributeFunctionCallExpression did not always work properly in array context.<br />
* D-12647: SqlDataFrame with SQL Server: Comparing literals to variant column values failed.<br />
* D-12648: Models that have DropUnusedModelsAfter setting caused "The sliding expiration value must be positive" error.<br />
* D-11526: It was unable to translate Unicode character \uD83D at index 176 to specified code page.<br />
* D-12637: In application startup arised FATAL Application startup exception System.UnauthorizedAccessException: Access to the path 'Global\MutexQPRPAActivation' is denied.<br />
<br />
== Old Releases ==<br />
See older releases in [[QPR ProcessAnalyzer Release Archive]]<br />
__NOTOC__<br />
<br />
[[Category: QPR ProcessAnalyzer]]</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&diff=24478QPR ProcessAnalyzer Release Notes2024-03-08T11:12:21Z<p>Ollvihe: /* Next Release: QPR ProcessAnalyzer 2024.3 (planned release date 2024-04-02) */</p>
<hr />
<div>This page lists all new features and fixed issues for each QPR ProcessAnalyzer release.<br />
<br />
== Next Release: QPR ProcessAnalyzer 2024.3 (planned release date 2024-04-02) ==<br />
<br />
'''Features:'''<br />
* B-08242: [[Actions_to_Run_Script_in_Table|Custom actions]] can be started from dashboard table context menu, e.g., create ticket, trigger automation and fetch external information.<br />
* B-08231: Snowflake performance improved by changing object counts query (shown in header) into two queries, so that the filtered object count uses eventlog caching.<br />
* B-07906: Implemented cross joins to SQL dataframes.<br />
* B-03047: Removed support for dashboard panels.<br />
* B-08214: Removed unused columns from the PA_VIEW table.<br />
<br />
'''Fixed issues:'''<br />
* D-14048: Fixed issue where in-memory root causes analysis for case attributes didn't show attributes with ShortString data type.<br />
* D-14049: Added some missing translations for table column filter and BPMN editor.<br />
* D-14021: FindRootCauses function WeightingExpression was run in incorrect context for in-memory model.<br />
* D-14020: Query which goes from EventTypes to Cases did not show the error when using GetValueFrom function.<br />
* D-13976: Fixed issue where gateway-based imports were not synchronous.<br />
* D-13689: Fixed JavaScript error in Highcharts polar chart with tooltips.<br />
* D-12614: Highcharts gives "Maximum call stack size exceeded" error in bar chart with polar and data labels.<br />
<br />
== Latest: Additional release for QPR ProcessAnalyzer 2024.2 (build 5509) (released 2024-02-27) ==<br />
<br />
'''Features:'''<br />
<br />
* B-06280: User management dialog shows whether users have password defined and unnecessary passwords can be removed to improve security.<br />
<br />
'''Fixed issues:'''<br />
<br />
* D-14045: Fixed issue where users with Viewer or Analyzer role couldn't create filters in Snowflake models.<br />
<br />
== QPR ProcessAnalyzer 2024.2 (build 5438) (released 2024-02-21) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue: Snowflake models and dashboards don't work with Viewer and Analyzer role permisions. The reason is that cache tables created to Snowflake incorrectly require the write permissions. Workaround is to give users the Designer role which will give the needed permissions. Note that the Designer role gives many permissions to the user for the project [[Roles_and_Permissions#Roles_and_Permissions|(more information)]]. This issue has been fixed in the next release (D-14045).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
The legacy User permissions report (analysis number 11) and Filters report (analysis number 30) used in SQL scripts have been removed. Use instead the expressions language to query filters and user permissions, e.g., [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|Models.Filters]] and [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
New version of the Design diagram component has been improved with object-specific measures, and the previous common measures are not migrated into object-specific measures. Thus, the measures need to be configured again, or manually edit the chart json settings (if needed please ask instructions from QPR CustomerCare).<br />
</div><br />
<br />
'''Features:'''<br />
* B-08022: Design diagram supports now BPMN notation, elbow style flows and object-specific measures.<br />
* B-08232: Entire future eventlogs can be [[Create_Predicted_Eventlog|predicted]] based on generative AI models running in Snowflake.<br />
* B-08166: Added expression language function [[Generic_Functions_in_QPR_ProcessAnalyzer#OpenAIChatCompletion|OpenAIChatCompletion]] to answer natural language prompts based on OpenAI ChatGPT API.<br />
* B-08177: Snowflake query performance has been improved by introducing caching of filtered eventlogs using Snowflake tables.<br />
* B-08196: Conditional formatting rules can be defined for [[QPR_ProcessAnalyzer_Table#Textual_equal_rules_for_background_color|textual and boolean values]].<br />
* B-08213: Big data chart expressions event type selections to be multi-select where applicable.<br />
* B-08205: Expression language API is available for storing [[Storing_Secrets_for_Scripts|secrets]] for scripts.<br />
* B-07780: Chart [[QPR_ProcessAnalyzer_Chart#Variable_mappings|variable mappings]] has been removed - use the [[Chart_Linked_Settings|linked settings]] instead. Dashboards using variable mappings are automatically converted to use linked settings.<br />
* B-08117: Added ToSqlDataFrame function to convert in-memory dataframe into SQL dataframes.<br />
* B-08174: Only non-default parameters values are written to the operation log.<br />
* B-08200: Timestamps in System reports are shown in user workstation local time.<br />
* B-08171: Dashboard id has been added to queries, to track from which dashboard queries are originating.<br />
* B-07144: Remove legacy User permissions report (analysis number 11) and Filters report (analysis number 30) in SQL scripts (see note above).<br />
* B-08193: Added retry mechanism to QPR ScriptLauncher to recover if connection to server breaks.<br />
* B-08202: Updated copyright for year 2024.<br />
* B-08199: Frontend components have been updated.<br />
* B-08203: Backend components have been updated.<br />
* B-08209: Translations updated for release 2024.2.<br />
<br />
'''Fixed issues:'''<br />
* D-13972: Some measures/dimensions/columns in Big data chart didn't show the expressions level filtering.<br />
* D-14015: Fixed business calendar incorrect calculation when business period covered entire day.<br />
* D-14014: Fixed issue where Snowflake business calendar could not have end time as 00:00.<br />
* D-13962: System variable values were interpreted incorrectly when used in linked settings.<br />
* D-13971: HiddenInNavigation and SortOrder variables didn't work in navigation menu dashboards list.<br />
* D-13959: Removed possibility to add datatable columns with the legacy "any" data type.<br />
* D-13991: Improved drop-down selector component to handle empty strings as variable values.<br />
* D-13965: Datatable column name length was validated incorrectly which may have caused error in saving with too long column names.<br />
* D-13958: Project names showed unnecessary html escaping in the "Move to" menu.<br />
* D-13964: Model attributes and notifications dialogs gave error when trying to use dashboard tags.<br />
* D-13960: Added missing translations for list of permission list and 12-hour clock format.<br />
* D-13966: Fixed issue were root causes chart tooltip sometimes didn't disappear.<br />
* D-13969: Datatable column schema export sometimes showed empty for the key column.<br />
* D-13862: Session token was not accepted when url path capitalization is different.<br />
* D-13942: Datatable could not be dimensioned if it has column named "CaseId".<br />
* D-13980: Business calendar dialog crashed when tried to open it for a model without access.<br />
* D-13983: Notifications dialog didn't validate situation when same name was used in a measure and dimension.<br />
* D-13981: Dashboard import set incorrect model id to dashboard if there was no access to any model.<br />
* D-11276: Translations were missing for 12-hour clock dates (AM and PM) in dashboards.<br />
* D-13977: Multi-select dropdown lists showed some special characters incorrectly.<br />
* D-13945: Syncfusion toast message didn't work when text contains ${[]}.<br />
* D-13930: Pivot table throws javascript error when certain clicks.<br />
* D-13273: Duplicate datatable row count didn't shown correctly.<br />
* D-13994: There was an error in the in-memory chart with some flow related measures about duplicate variable names when same measure was defined twice.<br />
* D-13985: Models list dots menu had texts misaligned in narrow screens.<br />
* D-13995: In Workspace, wrong datatable was selected after duplication when non-default sorting was applied.<br />
* D-13997: Workspace tables column filtering search caused JavaScript errors.<br />
* D-13978: In table Excel export, the last row representing other items appeared incorrectly for in-memory chart.<br />
* D-14007: In System reports, model related selections are hidden from the Analyzed objects lists.<br />
* D-14005: In big data chart, changing to custom expression caused crash with some expressions having case/event attribute.<br />
* D-14003: When dimensioning was not used, pivot table values were incorrectly rounded in the server side.<br />
* D-14004: Removed empty filters from queries to optimize them.<br />
* D-13988: Fixed issue where data grid context menu rendered initially as too high.<br />
* D-13979: BPMN model editor element settings use now Open Sans font.<br />
* D-14013: Fixed incorrect expression "Duration between first and last occurrence" in big data chart event types.<br />
* D-13984: Fixed the error of refusing to run the JavaScript URL.<br />
* D-14031: ThrownObject property was not included to http error response when error came from the script.<br />
<br />
== QPR ProcessAnalyzer 2024.1 (build 4784) (released 2024-01-10) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue fixed in QPR ProcessAnalyzer 2024.2: In Big data chart, some measures, dimensions and columns have the filtering option missing. The issue concerns for example Duration between events, Path starting/until between specific events, and Cases where event occurs before other selections. Workaround is to set the filter in the chart json settings: the filter can be configured to another expression and copied to the correct expression.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
QPR ProcessAnalyzer Server and QPR ScriptLauncher are now using .Net 8 (previous was .Net 6). When updating to this release, install the .Net 8 Runtime ([[Updating_QPR_ProcessAnalyzer_Server|see more]]). The .Net 6 doesn't need to be uninstalled immediately because .Net 6 and .Net 8 work side-by-side, but due to security reasons, the unused .Net 6 should eventually be uninstalled.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In this release, all filters that don't contain any filter rules, are removed. These are legacy filters which have not been visible in the UI.<br />
</div><br />
<br />
'''Features:'''<br />
* B-08019: New component [[Design_Diagram|Design Diagram]] for showing user-created diagrams in dashboards where to visualize process mining metrics.<br />
* B-08087: Generic [[Dropdown_List_Selector|dropdown list selector]] works with Snowflake models allowing to add selection lists for any values.<br />
* B-08163: Linked settings support for binding to [[Chart_Linked_Settings#Binding_to_case_attribute_filters_with_attribute_name_and_attribute_values|case attribute filter values without defining case attribute name]].<br />
* B-08170: Snowflake model filters can be [[Filtering_in_QPR_ProcessAnalyzer#Filter_actions|saved as new models]] which can be used to create snapshots of part of models.<br />
* B-08093: Multiple dashboards can be exported to same file, and model can be set for imported dashboards.<br />
* B-08161: Added [[Datatable_in_Expression_Language#Modify|Modify]] function to change datatable properties and improved [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#CreateDatatable|CreateDatatable]] function for creating datatables.<br />
* B-08122: Added new system report to list dashboards.<br />
* B-08173: Removed legacy filters that didn't have any filter rules.<br />
* B-07961: In OperationLog, changed parameters to json format and added request id.<br />
* B-08069: Added DashboardId property to [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog]] in expression language.<br />
* B-08139: Added [[Datatable_in_Expression_Language#UpdateRows|UpdateRows]] function to update existing rows in datatables with similar logic than SQL update.<br />
* B-08115: Added [[Datatable_in_Expression_Language#DeleteRows|DeleteRows]] function to delete rows in datatables with similar logic than SQL delete.<br />
* B-08149: QPR ProcessAnalyzer has been updated to .Net 8.<br />
* B-08054: Changed Scripts property in generic context to return all scripts, instead of legacy system level scripts.<br />
* B-08138: Changed Synchronize function to remove all columns when no Snowflake table exists.<br />
* B-07689: For datatables, [[Datatable_in_Expression_Language#ForeignKeys|foreign keys]] to other datatables can be defined using expression language.<br />
* B-08176: Translation updates for release 2024.1.<br />
* B-08175: Workspace should show timestamps in user's local time.<br />
<br />
'''Fixed issues:'''<br />
* D-13913: Datatable properties dialog incorrectly showed linked models from other projects.<br />
* D-13916: Chart filter could not be defined for some expressions in Big data chart.<br />
* D-13933: Navigation menu selected item wasn't highlighted when used Snowflake models.<br />
* D-13906: In Conformance Analysis, deviating flows were not translated.<br />
* D-13907: Improved translation related to datatable properties dialog "Used by models" field.<br />
* D-13904: There was an unclear error message in Snowflake, as exception code 1 was returned without AttributeName and ModelName properties when non-existing attribute was in filter.<br />
* D-13911: Fixed small glitches in the opening and closing of drop-down lists.<br />
* D-13918: Datatable could be configured incorrectly to use table for other datatable.<br />
* D-13932: Duplicating datatable with custom table in datasource losed all data.<br />
* D-11002: Removed legacy in-memory prediction preset.<br />
* D-13912: Added check that array cannot be stored to dashboard Content property.<br />
* D-13936: Query designer default query didn't work with Snowflake models.<br />
* D-13938: There was an incorrect logging with some operations related to ScriptLauncher.<br />
* D-13923: Snowflake expressions didn't work with Where function in root referring to case attribute.<br />
* D-13939: ApplyFilter function gave null reference error for non-existing attribute name.<br />
* D-13931: There were issues with AllowExternalDatasources and EnableFullFunctionality settings.<br />
<br />
== QPR ProcessAnalyzer 2023.7 (build 4326) (released 2023-11-28) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Limitation for the maximum amount of data (B-07636) causes a behavior change in in-memory charts that have the Maximum rows settings empty and have the sorting defined. In certain cases, the order in which measures are evaluated changes (due to an internal performance optimization). If there are custom expressions that define variables, the variables may not be available in other measures anymore. As a resolution, either redefine the variables in those measure expressions or add those measures secondarily to the sorting.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Default query timeout of 30 minutes has been added for --#ImportOdbcQuery, --#ImportSqlQuery and --#ImportOleDbQuery commands. If a query run is taking longer than the timeout, the query is stopped. The timeout can be adjusted using the '''QueryExecutionTimeout''' parameter. Previously, there has been no timeout, so queries that take more than 30 minutes require configuring a longer timeout.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Incorrectly configured [[Chart_Linked_Settings|linked settings]] in charts (available in the ''Advanced'' tab) give now an error message, if they are referring to non-existing measures, dimensions or columns. Previously, incorrect linked settings were ignored. To fix the error message, remove the incorrect linked settings.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07511: Datatables have a [[Datatable_Properties_Dialog|dialog]] to view datatable properties, write description, set the Snowflake source table, add/modify/delete columns, and set the datatable key.<br />
* B-08150: Added setting [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|Apply chart filters first]] to determine whether chart filter rules or dashboard filter rules are applied first when chart queries are filtered.<br />
* B-08091: When filtering charts in Snowflake, case attribute filter is created instead of case id filter.<br />
* B-08091: [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|New setting]] to define whether cases or events are filtered by default.<br />
* B-08091: New preset "Looping paths" to detect whether there are repeating patterns of events.<br />
* B-08091: Duration between events calculation ignores negative durations in Snowflake.<br />
* B-08091: Chart loading animation has been renewed.<br />
* B-07636: To prevent dashboards from jamming when querying too much data, added [[QPR_ProcessAnalyzer_Chart#Available_Visualizations|limitations]] to the amount of data that charts can visualize. Note that the limitation concerns the aggregated data that is visualized, not the source event log data.<br />
* B-08017: [[Dashboard_in_Expression_Language|Dashboards API]] has been added to expression language, allowing to create, modify and delete dashboards in scripts.<br />
* B-08056: Following properties have been added to [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#User.2FGroup|user objects]] in expression language: IsLocked, LastLockedDate, LastLoginDate.<br />
* B-08053: [[Navigation_Menu#System_Reports|User rights report]] has been refactored to use [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property in the expression language. The change also simplifies the report as now it only shows the direct role assignments that are visible in the [[Manage_Users_and_Groups|User Management]].<br />
* B-08151: For Snowflake expressions support for following [[SQL_Expressions#Window_functions|windowing functions]]: sum, average, median, min, and max.<br />
* B-08050: When a model is created, the default filter is not created anymore (this is a refactoring that doesn't have any impact on user interface).<br />
* B-08123: Translation updates for 2023.7.<br />
* B-08092: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13876: In CreateSnowflakeConnection function, ProjectId parameter is optional when OdbcConnectionStringKey is not specified.<br />
* D-13898: Snowflake: Exclude case attribute filter didn't work when there was null values and was selecting at least two values.<br />
* D-13890: Fixed XES file import to work.<br />
* D-13894: Business calendar based duration calculation was incorrect in some durations that spanned to several weeks (for Snowflake and in-memory models).<br />
* D-13899: Using broken OdbcConnectionString in a datatable prevented the datatable from being deleted.<br />
* D-13883: Script run stucked after running a script with error that uses client-side ODBC import.<br />
* D-13879: SqlExpressionValue filter when excluding events didn't work with filter rule root expression only.<br />
* D-13896: Adding or removing columns to datatable didn't change the LastModifiedDate.<br />
* D-13882: User details weren't written to operation log when creating or modifying users.<br />
* D-13771: User rights system report didn't give error when changing columns.<br />
* D-13893: Some event filtering caused null pointer error when primary key had been defined.<br />
* D-13873: Fixed pivot table visual issues after component update.<br />
* D-13900: When adding, renaming or removing columns for Snowflake table fails, operation is now rolled back without any changes.<br />
* D-13866: Querying GET api/uielements was quite slow right after server start.<br />
* D-13864: Combinations of translatable and hardcoded strings didn't get translated in UI.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.6 (build 3933) (released 2023-10-24) ==<br />
<br />
'''Features:'''<br />
* B-08055: Error message for locked account has been replaced with generic error message, so that username enumeration is not possible.<br />
<br />
'''Fixed issues:'''<br />
* D-13884: Attributes dialog crashed with some older model configurations.<br />
* D-13843: In charts, selected case and event attributes switched away when attribute data type was ShortString.<br />
* D-13877: Some Snowflake expressions gave error "exceeds maximum length limit of 255 characters" when selecting lot of items.<br />
* D-13878: Snowflake expression filters for case attribute values didn't accept other than string type of case attributes.<br />
* D-13871: Some statistical calculations with percentages didn't work with Last Row Aggregates Over-limit Rows setting.<br />
* D-13875: Using some case level filters in a model without cases datatable didn't work.<br />
* D-13861: Dashboard opens are now logged to the Task log (i.e., calling GET /api/dashboards/{dashboardid}).<br />
* D-13870: Workspace projects hierarchy focused project showed light grey background making the project name not readable.<br />
* D-13867: When starting datatable refresh and going to other tab, went back to Datatables tab when query completed.<br />
* D-13853: If chart Custom Layout settings had extra series defined, chart may have crashed.<br />
* D-13869: Export as CSV button didn't work in the datatable contents dialog when dialog was still loading.<br />
* D-13872: Main progress spinner had unnecessary small scrollbar on top right.<br />
* D-13863: In the REST API method GET /api/users, password field (that has always been null) has been removed.<br />
<br />
== QPR ProcessAnalyzer 2023.6 (build 3847) (released 2023-10-17) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is removed in this release. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
'''Features:'''<br />
* B-07992: Added 10 new presets including Queue analysis, Four eyes principle, Self-looping events, and Path until selected event. There are also presets for Individual Cases Flow and Range of event type occurrences which use Gantt chart.<br />
* B-08011: Added following date related operations for Snowflake: Day of year, Day of month, Day of week, Week of year, Half-year only, Quarter only, Month only, Hours only, Minutes only, Seconds only, and Milliseconds only. These are available when calculating with date type of data.<br />
* B-08016: [[QPR_ProcessAnalyzer_Table#Table_actions|Table actions to set variables]] can also be opened to a new browser tab. Also improved user interface for table actions.<br />
* B-08018: For Snowflake expressions, added Flows aggregations FromEventType and ToEventType to get starting/ending event type, and FlowOccurrences aggregations FromEvent and ToEvent to get starting/ending event.<br />
* B-08001: Added [[Generic_Functions_in_QPR_ProcessAnalyzer#CallStoredProcedure|CallStoredProcedure]] function to call Snowflake stored procedures. This allows to start ETL transformation in Snowflake orchestrated by QPR ProcessAnalyzer script.<br />
* B-08013: Added [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property to expression language to replace the legacy UserPermissions analysis (11).<br />
* B-07976: Snowflake [[Filtering_in_QPR_ProcessAnalyzer_Queries#Expression|expression based filter rules]] support additional expression columns allowing more Big data chart expressions to be filterable.<br />
* B-08015: Big data chart doesn't anymore support calculation in SQL Server (using local datatables).<br />
* B-06270: Improved error messages and made them translatable by taking into use exception codes provided by server.<br />
* B-08021: Added possibility to store [[Diagram_in_Expression_Language|designed diagrams]] for models and expression language API for reading and modifying diagrams.<br />
* B-08037: Dropped following unused tables database: PA_IDEA, PA_IDEA_VOTE, PA_REPORT, PA_REPORT_SETTING, PA_SESSION_SERVICE, PA_VIEW_FILTER_RULE, PA_VIEW_FILTER_RULE_PARAMETER.<br />
* B-08052: Language translations have been updated to 2023.6.<br />
* B-08051: Frontend side components have been updated.<br />
* B-08034: Backend side components have been updated.<br />
<br />
'''Fixed issues:'''<br />
* D-13830: Object counts indicator in header showed incorrect counts when there was disabled filter rules in Snowflake models.<br />
* D-13833: In-memory charts didn't work with boolean type of dimensions when filtering with the false value.<br />
* D-13858: Target value measures didn't update chart when controlled using an on-screen setting.<br />
* D-13827: Calculated attributes data type was incorrectly set as Any by the Attributes dialog.<br />
* D-13849: Multiselect list search didn't allow spaces.<br />
* D-13829: Multiselect dropdown lists height jumped couple of pixels when selecting values.<br />
* D-13835: Deselecting a selected data point didn't remove chart filter rule.<br />
* D-13702: Improved Snowflake query performance in situations when there are lot of filter rules (by decreasing number of CTE's).<br />
* D-13819: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13820: Fixed incorrect manifest.json file to avoid "not found" errors when fetching web site icon.<br />
* D-13865: Break, continue, and return statements didn't work properly when called from inside a catch block.<br />
* D-13795: There was a Python error in clustering analysis with Snowflake model.<br />
* D-13823: Some tooltips in Workspace project hierarchy didn't work and caused a JavaScript error.<br />
* D-13824: BPMN editor align context menu layout looked strange.<br />
* D-13813: QPR logo button in the top left was misaligned in Firefox.<br />
* D-13797: Snowflake query may have given following error when using sampling: ambiguous column name '_EventType_NotNull_1'.<br />
* D-13774: TakeSample function with certain columns caused SQL compilation error: ambiguous column name 'Case Name'.<br />
* D-13782: Snowflake: Aggregating from variations didn't work when using sampling.<br />
* D-13836: Some tooltips had a strange two-colored background.<br />
* D-13834: Removed Model statistics column from clustering and root causes analysis.<br />
* D-13860: Removed filter button from the custom expressions in Task log analyzed objects.<br />
* D-13838: Removed Split data by filtering column from clustering analysis.<br />
* D-13832: Script and model status updates incorrectly sent next update when previous was still pending.<br />
* D-13839: Charts reset zoom button font size was too small.<br />
* D-13817: Importing data to Snowflake datatable with Append=0 doesn't now drop the underlying Snowflake table.<br />
* D-13825: Some models could not have been deleted from recycle bin.<br />
* D-13852: Recycle bin Projects and Models tab didn't show correct content when Recycle bin only contained either models or projects.<br />
* D-13841: In-memory chart Data type selection type has been corrected to string.<br />
* D-13842: Second time and Third time selections has been hidden in in-memory chart measures.<br />
* D-13850: In Chrome, there were console errors related in incorrect text field autocomplete type and text field without form.<br />
* D-13847: Improved browser side performance by removing unnecessary operations.<br />
* D-13859: Chart without dimensions showed an unnecessary Remove dimension button.<br />
* D-12598: When script is stopped in server, ScriptLauncher could still incorrectly continue to import data.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.5 (build 3334) (released 2023-09-07) ==<br />
<br />
'''Fixed issues:'''<br />
* D-13826: Measures or dimensions with case or event attribute and value selections incorrectly removed calculated attributes when dashboard was opened or chart settings were changed.<br />
* D-13821: Font size of some Highcharts tooltips was too small. Issue appeared when there were tooltips mappings in measures or dimensions.<br />
* D-13810: Simplified help links: now all Help buttons go to the QPR ProcessAnalyzer wiki main page.<br />
* D-13822: Snowflake clustering analysis showed empty strings and nulls as case attribute values in an unclear way as just nothing.<br />
<br />
== QPR ProcessAnalyzer 2023.5 (build 3304) (released 2023-09-05) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In Big Data Chart, the '''Case conformance''' measure and dimension has changed in a way that now it provides boolean values (true/false) instead of integer values (1/0). If [[Measure,_Dimension_and_Column_Settings#Other_settings|colorMappings]] are used for this measure or dimension to set specific colors to visualize conformant and nonconformant cases, the mapped values need to be changed as follows: '''1''' -> '''true''' and '''0''' -> '''false'''. Without the change, the mapped colors are not effective.<br />
<br />
Exmaple: Old configuration:<br />
<pre><br />
"colorMappings": {<br />
"1": "#36d475ff",<br />
"0": "#f5403bff"<br />
}<br />
</pre><br />
New configuration:<br />
<pre><br />
"colorMappings": {<br />
"true": "#36d475ff",<br />
"false": "#f5403bff"<br />
}<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is deprecated. Big data chart has allowed to process data both in Snowflake and SQL Server. Now the support for SQL Server is deprecated and the Big data chart will only support calculation in Snowflake. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). The OperationLog analysis is replaced by the [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog function]] and the Infcluencers analysis is replaced by the [[FindRootCauses_Function|FindRootCauses function]].<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [12, 14, 15, 16, 29];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
By default, Snowflake ODBC driver generates quite much logging to files which might unnecessarily fill up the disk space. It's recommended to set the LogLevel parameter to value 0. The path where the logs are created can be seen in Windows registry (key LogPath). More information about configuring Snowflake ODBC parameters: https://docs.snowflake.com/en/developer-guide/odbc/odbc-parameters.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07971: Machine learning based [[Clustering_Analysis|Clustering analysis]] can be run in Snowflake.<br />
* B-07989: In dashboard designer the stacking order of charts can be changed with buttons [[QPR_ProcessAnalyzer_Dashboard_Designer#Viewing_and_Editing_Dashboards|Bring to front, Send to back, Bring forward and Send backward]].<br />
* B-07977: For [[Sankey_Chart|sankey diagram]], added Start level and End level mappings to define custom start and end level for the sankey flows. Implemented also color mappings to define specific colors for specific values.<br />
* B-08010: To improve performance, charts are loaded and updated only when they are visible in the dashboard.<br />
* B-07975: Added following [[SQL_Expressions#Date_functions|date related functions]] to Snowflake: DayOfYear, DayOfWeek, WeekOfYear, Quarter.<br />
* B-07908: When [[QPR_ProcessAnalyzer_Project_Workspace#Duplicating_Model|model is duplicated]], also filters in the model are also duplicated.<br />
* B-07904: Filters and models API for expression language has been completed.<br />
* B-07991: In [[Filter_Selectors|case and event type filter selectors]], threshold whether the dropdown list or search dialog is shown can be defined using the ''Maximum Rows'' setting. Also the search dialog filters search results by other filter rules in the dashboard.<br />
* B-07999: Filters report has been changed to use the [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|expression language API for filters]].<br />
* B-07540: Added [[QPR_ProcessAnalyzer_Expressions#Throwing_objects|throw statement]] to expression language.<br />
* B-07813: UI components are updated. There are small visual improvements, such as in flowchart flows are routed a bit differently and in charts the hidden series is shown as strike-through in the legend.<br />
* B-07963: Following legacy analysis types have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29) (see more information in the note above).<br />
<br />
'''Fixed issues:'''<br />
* D-13777: Filters could not be created in charts when "Update Filter During Selection" setting was disabled.<br />
* D-13767: Automation per Event Types preset in in-memory incorrectly showed only one event type.<br />
* D-13756: Changing background color in KPI card didn't have any effect.<br />
* D-13812: "Exclude events" was incorrectly translated to "Exclure les cas" in French.<br />
* D-13815: Dashboard designer background grid was not visible in entire area in edit mode. Improved also the grid to match to snapping in move and resize.<br />
* D-13674: Business calendar dialog layout was incorrect when a model with a long name was selected to copy holidays.<br />
* D-13811: Table actions link to a new window didn't go to dashboard if there were other parameters in the link.<br />
* D-13601: Fixed issue where some presets may have given error when attribute value selection and the automatically selected attribute conflicted by the data type.<br />
* D-13753: While Snowflake model was selected, in Filters and User Rights reports the Columns list could not be opened.<br />
* D-13720: Now table column filter and sorting are preserved when resizing or zooming page.<br />
* D-13785: In tables increased number of rows to 20000 that are inspected to get available items shown in Excel-style column filter.<br />
* D-13759: Some statistical calculations had bad performance with large number of rows.<br />
* D-13787: Conformance statistics component didn't have scrollbars when text didn't fit to the visible area.<br />
* D-13788: In-memory "Nonconformance reason" selection caused error when two of them was selected in the same chart.<br />
* D-13783: When Analyzed objects was Generic analysis, column selection incorrectly caused "Analysis has not been selected" error.<br />
* D-13776: When measure name contained quotation mark, notification preview didn't work.<br />
* D-13747: Filtering with integer type of case id with case attribute value filter caused error in Snowflake.<br />
* D-13791: In Firefox, model selection in chart settings didn't show models in the first open.<br />
* D-11984: Recycle bin buttons didn't fit to the screen when screen width was small.<br />
* D-13780: Using CaseId case attribute in clustering analysis did not work with Snowflake 106 cases standard model.<br />
* D-13781: Clustering analysis produced Python error with a certain simple Snowflake model.<br />
* D-13730: Snowflake: Case attribute filtering didn't work when there are cases without row in cases table.<br />
* D-13803: There was chart configuration validation error in browser console when measures were moved into dimensions in Big data chart.<br />
* D-13758: There was performance issue with the Recent tasks system preset.<br />
* D-13793: Snowflake clustering failed when cluster count is larger than case count.<br />
* D-13763: SQL expression based filter rule with Where function to filter events didn't filter anything in Snowflake.<br />
* D-13804: Added missing Millisecond function to Snowflake.<br />
* D-13772: Expression EventLog.Cases.Events caused error "Value cannot be null".<br />
* D-13755: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13739: When switching between System reports there was error: "Uncaught Error: 2nd dimension not found. at y.getExpressionConfiguration".<br />
* D-12109: Sometimes flowcharts showed message "Error in querying event type measures. Input string was not in a correct format".<br />
* D-12473: Cost Savings by Automation preset gave sometimes error "Unable to cast object of type 'System.Double' to type 'System.String'".<br />
* D-13750: Snowflake model didn't work with the Case Duration vs. Manual Activities preset.<br />
* D-13657: There was error converting data type nvarchar to bigint.<br />
* D-13796: Some Snowflake operations didn't work with zero rows and columns.<br />
* D-12494: Now when chart size changes, the table column filters and sorting are preserved.<br />
* D-13736: In Performance benchmarking dialog, the Export result button exported wrong benchmark performance analysis result.<br />
* D-13609: Improved conformance analysis related filter names.<br />
* D-13594: Recycle bin buttons were not visible when opening recycle bin in a narrow screen.<br />
* D-13226: Tooltips in the model properties dialog are now translated.<br />
* D-12569: Table incorrectly showed ellipsis for narrow boolean type of columns showing checkboxes.<br />
* D-13391: Emptying date or datetime picker value was not registered and it didn't trigger functionality.<br />
* D-12621: Value search dialog didn't work with values containing backslashes.<br />
* D-13796: Some Snowflake operation didn't work with zero rows/columns.<br />
<br />
== QPR ProcessAnalyzer 2023.4 (build 2628) (released 2023-06-14) ==<br />
<br />
'''Features:'''<br />
* B-07767: Added [[Gantt_Chart|Gantt chart]] to visualize timeline of cases and events divided into swimlanes.<br />
* B-06383: Added [[Sankey_Chart|Sankey chart]] to visualize flow from one set of values to another.<br />
* B-07941: Implemented many more presets running in Snowflake models for compliance and operational excellence use cases. There are also presets for the path analysis and process bottlenecks identification.<br />
* B-07864: Snowflake conformance analysis shows now [[Conformance_Analysis#Top_Deviations_(in-memory)_/_Deviating_Flows_(Snowflake)|reasons for conformance deviations]], such as which event occurrences deviated from the design model.<br />
* B-07909: Snowflake conformance analysis visualizes [[Conformance_Analysis#Undesired_Events_(Snowflake)|undesired event types]] in table and flowchart.<br />
* B-07823: Flowchart Bottlenecks preset has been changed to show bottlenecks for event types. Also renewed the [[QPR_ProcessAnalyzer_Logs#Task_Log|Tasks reports]] to use expression language based interface.<br />
* B-07891: User interface has been [[Languages_and_Localization|translated into Portuguese]].<br />
* B-07873: Improved [[QPR_ProcessAnalyzer_Pivot_Table|pivot table]] visual layout to highlight totals and aggregated rows. Also the row titles are now visible in the top left.<br />
* B-07905: Added [[SQL_Expressions#Rank_functions|Rank related functions]] to Snowflake for writing more versatile custom KPI's, e.g., FirstValue, LastValue, NthValue, Lead and Lag.<br />
* B-07912: Added more SQL expression [[SQL_Expressions#Array_functions|array functions ArrayToString and ArrayOverlap]] to Snowflake.<br />
* B-06449: Added SQL expression functions ToTimestamp and TryToTimestamp for parsing timestamps from strings using provided format.<br />
* B-07959: Added new functions Base64Encode and Base64Decode to help using basic HTTP authentication when calling web services.<br />
* B-07206: SQL expressions support data [[SqlDataFrame_in_Expression_Language#WithClusterColumn|clustering]] which is an unsupervised machine learning algorithm to group data based on similarities.<br />
* B-07848: Data can be extracted from SAP using the encrypted [[Importing_Data_from_SAP#SNC_encrypted_connection|SNC connection]].<br />
* B-07903: Added expression language API to create and modify filters and models.<br />
* B-03103: [[QPR_ProcessAnalyzer_Logs#Task_Log|Task log]] (operation log) can be accessed in expression language.<br />
* B-07872: List aggregation with Distinct=true orders now items by their value.<br />
* B-07940: Removed "Count" aggregation from textual values in Big data chart (you can use the Case count, Event count, etc. selection instead).<br />
* B-07757: Backend support for datatables linking to user-definable Snowflake database, schema and table.<br />
* B-07825: Improved error message when trying to use non-existing attributes in Snowflake queries.<br />
* B-03101: To expression language, added try-catch-finally statement to handle thrown exceptions.<br />
* B-07861: Removed available and total virtual memory information from User settings dialog.<br />
* B-07902: Optimized sequences of joins in Snowflake queries to improve performance.<br />
* B-07837: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13709: If image width-to-height ratio was lower than container's ratio, image was incorrectly stretched to fit the container.<br />
* D-13660: Disabling filter rules didn't work in Snowflake models.<br />
* D-13526: Passing dataframes from SQL scripts to expression scripts didn't work.<br />
* D-13661: Snowflake conformance analysis crashed when there was no access to conformance related Snowflake UDF's.<br />
* D-13693: Resolved major Snowflake conformance analysis performance issues in the BPMN model handling.<br />
* D-13716: Snowflake root causes analysis incorrectly bypassed Snowflake cache.<br />
* D-13707: In SQL Scripting, the datatable analysis (number 18) didn't always copy the data table contents to the target table correctly.<br />
* D-13653: Big data flowchart Root causes preset showed incorrect legend.<br />
* D-13626: Flowchart froze when converting into big data flowchart and vice versa by modifying chart json settings.<br />
* D-13656: Root causes for attribute gave error "Failed to compare two elements in the array" in some situations.<br />
* D-11563: Pivot table had a minimum height of 300px, which caused bottom part of it to be out of view.<br />
* D-13704: In CSV file import, parsing now allows spaces between column separator and text quotation mark.<br />
* D-13598: Chart gave unclear error message when events datatable was not defined.<br />
* D-13655: Improved error messages for BPMN editor and conformance statistics.<br />
* D-13528: Error message for certain erroneous SQL expressions was unclear.<br />
* D-13677: "Flow occurrences with specific case attribute value" selection didn't work for in-memory chart.<br />
* D-13663: Pivot table border line was slightly broken in the header area.<br />
* D-13608: There was incorrect alignment of items in the table paging controls.<br />
* D-13703: Importing CSV file with some special characters to Snowflake failed (due to incorrect escaping in Snowflake staging files).<br />
* D-13708: Duplicating datatable using user defined table, removed data the source table.<br />
* D-13717: Dependency wheel crashed when there were zero weights and showing data labels.<br />
* D-13348: There was an unclear error message when Snowflake query had a certain incorrect expression.<br />
* D-13732: Pivot table Excel export contained headers formatted incorrectly.<br />
* D-13729: There was a JavaScript error when limited user tried to access business calendar.<br />
* D-13662: Percentile function didn't always work with timespan types.<br />
* D-13646: Using incorrectly configured model without cases datatable caused null reference error.<br />
* D-13629: When tried to use chart with a non-existing model, there is now a proper translated error message.<br />
<br />
== QPR ProcessAnalyzer 2023.3 (build 1990) (released 2023-05-03) ==<br />
<br />
'''Features:'''<br />
* B-07818: [[Conformance_Analysis|Conformance analysis]] is supported in Snowflake with following dashboard components: Big data chart, BPMN editor, Conformance statistics, and Design model selector.<br />
* B-07833: [[Root_Causes#Root_causes_in_flowchart|Root causes analysis for flowchart]] is available for Snowflake showing how the event and flow occurrences explain selected phenomena.<br />
* B-07786: Big data chart has more [[Big_Data_Chart#Measure_aggregations|measure aggregations]], such as median, percentile, standard deviation and variance. Also for textual items, unique values can be listed.<br />
* B-07795: [[QPR_ProcessAnalyzer_Table#Conditional_formatting|Conditional formatting]] supports also columns with non-numerical contents.<br />
* B-07830: [[Big_Data_Chart#Measure_aggregations|None and Any aggregations]] for Snowflake and user-friendly formatting for conformance violations.<br />
* B-06527: Error messages in [[Importing_Data_to_Datatable_from_CSV_File|CSV file import]] show also the column number to help working with CSV files with lot of columns.<br />
* B-07747: In-memory conformance checking accepts design models with multiple tasks having same name (same is followed by the Snowflake implementation).<br />
* B-07659: In-memory flowchart preset Case Conformance to visualize conformance checking violations.<br />
* B-07571: Added function IsConformant to backend to check whether cases are conformant.<br />
* B-07863: Added function ConformanceViolationsFlows to backend to return nonconformance reasons for violating cases.<br />
* B-07844: Support for "array" aggregation to return aggregated items as array.<br />
* B-07856: Support for creating and accessing arrays and objects in SQL expressions.<br />
* B-07860: Array handling functions and Tasks property for DesignModel entity.<br />
* B-07847: Added throttling for QPR ScriptLauncher client-side imports to limit memory usage.<br />
* B-07811: Snowflake query optimization to omit columns that are not used by the query.<br />
<br />
'''Fixed issues:'''<br />
* D-13632: Going from variations to event types led to very poor performance with certain models.<br />
* D-13628: Statistical calculations were incorrectly not applied in chart CSV export.<br />
* D-13575: SQL script may have given error "Operand type clash: nvarchar(max) was incompatible with sql_variant".<br />
* D-13597: UI supports now datatable column type "ShortString" (previously datatable contents preview and CSV import didn't work).<br />
* D-13536: Using business calendar sometimes gave error "System.InvalidOperationException: Collection was modified".<br />
* D-13477: Chart types without y-axis mapping caused an error when series mapping was used.<br />
* D-13453: _model variable was not available for Snowflake expression filter rules.<br />
* D-13527: Checkbox height didn't increase when long label needed to span to multiple lines.<br />
* D-13363: Snowflake query with EvaluateAfterAggregations and IsHidden failed when dimensioning by case id column.<br />
* D-13383: Snowflake query gave error "Invalid column name 'FromCase Name'".<br />
* D-13523: Request id was incorrectly shown as zeros in error messages.<br />
* D-13541: In CSV import, error message for maximum number of columns exceeded is improved (maximum is 300 column for SQL Server).<br />
* D-13583: Objects count in header didn't work for empty Snowflake model.<br />
* D-13553: Larger pacm files can now be imported, as there isn't error "Request body too large. The max request body size is 30000000 bytes".<br />
* D-13306: Stack overflow error was given when using SqlDataFrames.<br />
* D-13487: When Flows root and there was filter in Values expression, some flows were lost.<br />
* D-13540: SqlDataFrame query with 300 columns failed to error "WithExpressionColumn: No name given for the new column".<br />
* D-13429: Ordering in List aggregation couldn't find columns in dataframe query.<br />
* D-13406: Dataframe query with root FlowOccurrences and get value from cases caused error.<br />
* D-13538: There was incorrect handling of escaping characters in column names used in dimensions.<br />
* D-13633: Fixed ordering in List aggregation with null and empty values.<br />
* D-13636: Query that dimensions by numeric case attribute with AggregateOthers true, caused error.<br />
* D-13589: Creating Snowflake datatable did not connect to Snowflake.<br />
* D-13623: Value expressions without aggregation didn't work with AggregateOthers setting.<br />
* D-13554: In in-memory chart, percentile function might have return both Int64 and Double type of objects which cannot be sorted.<br />
* D-13481: Improved error message when trying to use deleted model.<br />
* D-13621: Dynamic value search dialog had incorrect font in lists.<br />
* D-13610: Some invalid BPMN files crashed BPMN editor.<br />
* D-13614: Checkbox label texts overflowed to right.<br />
* D-13520: Removed excessive parameters from the Query Designer for generic context queries.<br />
* D-12998: QPR icon was incorrectly positioned in header in Safari.<br />
* D-13480: Import to duration data type is removed from Snowflake datatables, and for local datatables duration type maximum size is checked.<br />
* D-13517: In Highcharts-based visualizationsm conditional formatting didn't work for other than the first y-axis mapping.<br />
* D-13529: In some presets containing several on-screen settings, when chart showed in error message, on-screen settings showed invalid selection.<br />
* D-13530: Opening dropdown list caused JavaScript error when the list contents should be empty after it previously contained items.<br />
* D-13486: Removed unreachable error message in CSV import.<br />
* D-13524: Fixed in-memory chart flow occurrences root measures "Event attribute (text)" and "Event attribute (number)" that caused error.<br />
<br />
== QPR ProcessAnalyzer 2023.2 (build 1478) (released 2023-03-22) ==<br />
<br />
'''Features:'''<br />
* B-07755: [[Business_Calendar|Business calendar]] for duration calculation is available for Snowflake models.<br />
* B-07719: In Snowflake dashboards, [[Big_Data_Chart#Using_measure_variables|measures can be assigned to variables]] and use the variables in other measures to create combined measures.<br />
* B-07746: Changed in-memory conformance checking to not show invalid flow violations where starting or ending event type is invalid.<br />
* B-07743: [[PA_Configuration_database_table#General_Settings|Default datasource]] can be configured for datatables created by scripts, allowing to set Snowflake as default.<br />
* B-07740: System memory indicator moved from the header to User settings Version information dialog.<br />
* B-07776: New SQL expressions functions Unicode, Char and Regexp, as a basis for future rule-based process mining.<br />
* B-07741: Backend support for aggregation operations Median, Percentile, Stdev, Stdevp, Var and Varp to Snowflake.<br />
* B-07742: Backend support for aggregation operation to list unique items in Snowflake.<br />
* B-07770: Optimized Snowflake SQL generation by combining consecutive WithColumn function calls into one select.<br />
<br />
'''Fixed issues:'''<br />
* D-13491: QPR ProcessAnalyzer server crashed now and then when sorting was in progress and the query was cancelled.<br />
* D-13380: Dimensioning integers in in-memory core calculation didn't work correctly as 0 and -1 were put to same bucket.<br />
* D-13385: In Workspace Bin, Delete Forever and Restore from Bin buttons were misaligned.<br />
* D-13332: Conformance checking didn't show in violations when there were multiple undesired events in same case.<br />
* D-13405: Images take now always all available space in image component area.<br />
* D-13417: KPI card without title was slightly misaligned vertically.<br />
* D-13438: Clicking selected event type or flow in flowchart didn't cancel the filter selection.<br />
* D-13350: Task log and Script log default filter end date is now empty by default.<br />
* D-13381: Disabled browser auto-complete from flowchart variation stepper and Workspace create/rename object dialog.<br />
* D-13347: Improved performance for in-memory business calendar calculation.<br />
* D-13335: In in-memory chart, filtering didn't work in "Flow occurrences" root "Flow occurrences with specific event attribute value" dimension.<br />
* D-13367: Percentage value wasn't displayed properly with German or Spanish language when event types were shown in object counts indicator.<br />
* D-13451: Exported filter file is now named based on selected filter name.<br />
* D-13378: In Big data chart, prevented error "Unable to aggregate from level RootCauses to level Custom".<br />
* D-13293: DataFrame query with root Flows and IncludeEvents and ExcludeEvents filter rules failed.<br />
* D-13370: Fixed issue where on-screen settings that didn't have any selectable items, showed a strange selection.<br />
* D-13392: Clustering analysis was incorrectly shown when originally in-memory chart was converted into big data chart by changing chart json settings.<br />
* D-12784: Some Snowflake queries incorrectly bypassed Snowflake caching because they used unique object names.<br />
* D-13456: Improved error messages for incorrectly configured on-screen settings.<br />
* D-13445: Conformance violations related translated terms have been fine-tuned for better translations into different languages.<br />
* D-13421: Improved error messages when trying to use model having some column mappings missing.<br />
* D-13485: Snowflake business calendar gave error when calendar contained Sunday.<br />
* D-13218: Windows event viewer incorrectly contained log entries that are not errors.<br />
* D-12634: Multiline text boxes width is set to non-changeable.<br />
* D-13034: Confirmation dialog to delete items permanently has been updated.<br />
* D-13288: In dialogs, the Create button didn't show the disabled state correctly.<br />
* D-13427: When dropdown lists didn't have any selectable items, the "N/A" text appeared and the list incorrectly took more space vertically.<br />
* D-13483: In Workspace, the new items menu was too narrow for Spanish texts.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.1 (build 1449) (released 2023-02-24) ==<br />
<br />
'''Features:'''<br />
* B-07690: System setting [[PA_Configuration_database_table#General_Settings|DatabaseId]] can be defined by administrator to get more simple table names in Snowflake.<br />
* B-07737: In flowchart Bottlenecks preset, originally used flow colors has been recovered.<br />
* B-07748: For Analyzed objects "Conformance checking findings" in charts, terminology has been revised and issue with the case count calculation fixed.<br />
* B-07663: In [[Chart_On-screen_Settings|on-screen settings]], when case/event attribute is selected, related attribute values list are reset.<br />
* B-07570: Backend support for [[Business_Calendar|business calendars]] in Snowflake.<br />
* B-07660: Backend support for conformance checking to show also the last event index and event type in NotCompleted reason.<br />
* B-07610: Memory counter related technical properties have been removed from expression language.<br />
<br />
'''Fixed issues:'''<br />
* D-13349: Opening dashboard containing Root causes preset with default settings jammed the system by generating lot of calculations (for more information, see previous release notes).<br />
* D-13277: Stacked charts with date type of data as series did incorrectly show gaps in columns/bars.<br />
* D-13270: Flowchart conditional formatting didn't work with duration multi-unit format.<br />
* D-13358: Calculation results caching works also across different user sessions.<br />
* D-13250: Dashboard with two charts connected with linked settings using variables ended up to to a never ending loop.<br />
* D-13230: SAP import did not automatically create columns to use the correct column types.<br />
* D-12857: Deeply recursive functions caused a crash without any trace.<br />
* D-12994: In Workspace, some buttons were not clickable due to breadcrumb covering them.<br />
* D-13249: In Workspace, there was incorrect error message for duplicate datatable names when there were items with only letter capitalization was different.<br />
* D-13232: In-memory chart Top variations preset is now sorted secondarily by average duration descending.<br />
* D-13300: Setting DashboardFilter variable to empty value didn't have any effect in dashboard but old value was incorrectly used.<br />
* D-12834: Limited the maximum number of dimensions to 20, to avoid too demanding queries for SQL Server.<br />
* D-12917: Changed visual indication of missing items in dropdown lists (it's no longer showing "***").<br />
* D-13111: In Root causes preset, there is now error message when trying to use weighting related columns when weighting isn't in use.<br />
* D-13124: SQLDataFrame query containing filter rule EventTypes aggregating from cases failed.<br />
* D-13207: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed.<br />
* D-13292: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed (rev.2).<br />
* D-12991: Dropdown list texts had some translations missing.<br />
<br />
== QPR ProcessAnalyzer 2023.1 (build 1433) (released 2023-02-07) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release contains a potentially severe issue, where some dashboards completely jam the system by generating lot of calculations. The issue may appear in dashboards that have been created in earlier releases and containing the Root causes preset with default settings. The issue will be fixed by the next release. The issue can be worked around by exporting the affected dashboard, modifying the dashboard file manually and importing the dashboard back. The required modification is to remove line(s) containing <pre>"preset": "RootCauses"</pre> and the comma from the preceding line.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Cases (analysis number: 5), Events (6), and EventTypes (7). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). Note that the legacy analyses removal don't affect the dashboarding functionality.<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [5, 6, 7];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2023.1, the '''.NET Desktop Runtime''' is not needed anymore for QPR ProcessAnalyzer Server, so it can be uninstalled. Also for QPR ScriptLauncher, ''.NET Desktop Runtime'' is not needed, but instead install the '''.NET Runtime''' (which is more lightweight). ''.NET Desktop Runtime'' contains the ''.NET Runtime'', so the actions are not mandatory when updating to QPR ProcessAnalyzer 2023.1.<br />
</div><br />
<br />
'''Features:'''<br />
* B-06997: Expression-based filter rules for Snowflake dashboards to allow versatile filtering and filtering from custom expressions.<br />
* B-07383: Improvements to linked settings to allow binding to variables, tags and filter rules [[Chart_Linked_Settings|(more information)]].<br />
* B-07508: Flowchart preset colors have been renewed to be more intuitive.<br />
* B-07184: Automation preset in flowchart has now options for selecting the Automation attribute and value.<br />
* B-07512: Changed datatable metadata can be refreshed from Snowflake, and all rows in the datatable can be deleted easily in Workspace [[QPR_ProcessAnalyzer_Project_Workspace#Datatables|(more information)]].<br />
* B-07440: Date when the release was made is now shown in User settings.<br />
* B-07595: WeekOfYear property for DateTime objects in expression language to get the week number of a year (between 1 and 53).<br />
* B-07623: In-memory expression language functions Random (to get random numbers) and Hash (to get hash value of string).<br />
* B-07612: Breadcrumb in Workspace has now a Home button to quickly navigate to the top level of the projects hierarchy.<br />
* B-07637: Language selector now shows the language options in local languages.<br />
* B-07228: Remove following deprecated analyses: Cases, Events, and EventTypes (see the release note above).<br />
* B-07538: Backend support: Snowflake root causes analysis can find event attribute related root causes.<br />
* B-07706: Backend support: Snowflake expression-based filter rules support for roots containing Where function.<br />
* B-07611: Removed following legacy filter rules: CaseAttributeTrend, EventAttributeTrend, EventTypeTrend, and Duration.<br />
* B-07598: Refactored client-side import for SQL scripting to use generic client-side task mechanism.<br />
* B-07716: ShortString columns are now properly detected in SQL Server queries.<br />
* B-07652: Now it's possible to pipe multiline expression strings to QPR ScriptLauncher.<br />
* B-07688: AddColumns function for Datatables to create multiple columns in one call.<br />
<br />
'''Fixed issues:'''<br />
* D-13092: Table conditional formatting didn't work when color code was fetched from other column.<br />
* D-13105: Some charts created in earlier release referring to non-existing presets names appeared as empty after software update.<br />
* D-13107: Flowcharts crashed and showed loading animation forever when setting color or flow thickness to non-numerical measure.<br />
* D-13104: In BPMN model editor, context menus to edit elements didn't appear.<br />
* D-12939: Script editor tabs Close buttons didn't work.<br />
* D-13154: "Search by case ID" didn't work in in-memory chart.<br />
* D-12933: CSV columns with only empty values were incorrectly auto-detected as integers.<br />
* D-12929: In-memory chart Root causes for case duration and Root causes for case attributes (weighted) had Custom expression missing.<br />
* D-12928: Pivot table headers were empty when there were two column levels and two values.<br />
* D-12924: Pivot table columns with Count and Distinct Count aggregations are now numeric and aligned right.<br />
* D-13033: Changing colors in chart settings Color palette caused "Item already exists" error and prevented changing colors.<br />
* D-12996: Tags referring to dashboard variables didn't work in Additional root expression.<br />
* D-12877: UI gave error in some situations: Uncaught TypeError: Cannot read properties of undefined (reading 'min').<br />
* D-13071: Prevented selecting two or more of the Y-axis, X-axis and series mappings at the same time for the same measure or dimension.<br />
* D-12895: Big data chart crashed when on-screen setting contained event type selector and there were no event type filter set.<br />
* D-13231: Tooltips for dashboard name, model selector and filter selector in header show now the content text instead of generic instruction.<br />
* D-13139: There was an error when tried to create filter for a custom expression where selected data type didn't match with the actual type of data.<br />
* D-12988: Chart presets selection in chart settings showed unnecessary tooltip.<br />
* D-12901: When set sampling over 1 million, Snowflake models gave error: parameter value out of range: size of fixed sample. Must be between 0 and 1,000,000.<br />
* D-12904: Creating expression filter having lower/greater logic with root objects sampling failed.<br />
* D-12923: Chart schema didn't accept pivotAggregation in dimensions/columns.<br />
* D-12926: Root causes columns Selected weight, Compared weight and Total weight have now correct float data type.<br />
* D-12880: In out-of-the box dashboards, chart titles and subtitles were not translated.<br />
* D-12916: Improved filter rule description text in Filter rule editor dialog for expression filter rules.<br />
* D-12889: No clear error message was given when user tried to export corrupted model from .pacm file.<br />
* D-12869: Date selector in on-screen settings had inconsistent vertical alignment.<br />
* D-12938: When creating a filter with lasso and selecting a single data point only, "equals" kind of filter rule is now created.<br />
* D-12989: "Running tasks as specific time" system report may have ended up in loop causing following error: Maximum call stack size exceeded error.<br />
* D-13010: Pivot table sometimes ended up to never-ending resizing loop when browser zoom was more than 100%.<br />
* D-12790: Expression language: DataFrame.SetColumns: Initializing and using variables defined in closure of SetColumns function parameter didn't work<br />
* D-12927: All on-screen settings were not be visible in narrow charts having several on-screen settings.<br />
* D-12937: Added maximum value limitation to several number input fields in charts.<br />
* D-12947: Message dialog didn't show line breaks correctly (e.g., in CSV file import).<br />
* D-12948: Defining column setting caused error when Measure Expression was not defined.<br />
* D-12946: Filter rule text couldn't be seen entirely from tooltip.<br />
* D-12983: When range filtering using integer values in Highcharts chart, filter is now shown as integer value.<br />
* D-12984: When range filtering in Highcharts charts and there is category axis, filter rule is now based on individual (category) values.<br />
* D-12930: When creating filters from charts using date type of X-axis with lasso, "greater than or equal" and "less than or equal" filter rules are not created.<br />
* D-12920: "Where" function in DataFrame lost column data types of the original DataFrame.<br />
* D-13048: Model notifications failed with certain measures that define variables in root expression leading to error: Variable "sampleSize" already exists in this context.<br />
* D-13116: BPMN editor had some translations missing.<br />
* D-13019: Datatable and script selectors show now datatable/script name instead of id, when opening selector having existing selections.<br />
* D-12951: Changing additional root expression in flowchart didn't refresh the flowchart.<br />
* D-13147: Filter rule boxes in header had different widths, and Add filter rule button vertical alignment was incorrect.<br />
* D-12907: Sometimes case attribute selection showed incorrect attribute name for empty model.<br />
* D-13148: Filters and Datatables system reports loaded unnecessarily twice which could be seen as blinking.<br />
* D-12844: In dataframe query, FlowOccurrences in root and GetValueFrom Cases with filter gave null reference exception<br />
* D-12915: Repeating certain query twice with aggregations in Events root generated invalid SQL<br />
* D-12728: Was huge amount logs in server during client side import (manual testing required as identification)<br />
* D-13156: Persist function failed to snowflake: Invalid unicode escape sequence '\u0027ACCE'; should be at most '\u0010FFFF'.<br />
* D-12876: Flows/FlowOccurrences in root didn't work with SqlExpressionValue filtering.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2022.8 (build 1397) (released 2023-01-11) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release fixes an issue where extracting large datasets from SAP increases memory consumption considerably and may lead to out-of-memory error. This release contains packages for both QPR ScriptLauncher and QPR ProcessAnalyzer Server. If SAP extractions are done using QPR ScriptLauncher in client side mode (ExecuteInClientSide=1), it's enough to update QPR ScriptLauncher to fix this issue.<br />
</div><br />
<br />
'''Fixed issues:'''<br />
* D-12941: Extracting data from SAP consumed unnecessary lot of memory and may have led to out-of-memory error (both when running using QPR ScriptLauncher and in server side).<br />
<br />
== QPR ProcessAnalyzer 2022.8 (build 1396) (released 2022-12-30) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Creating datatables with duplicate names in the same project is prevented, and possible existing duplicate names are automatically changed to unique names with a random suffix. If there are duplicate names, they can be renamed either before updating QPR ProcessAnalyzer (to avoid automatic renaming) or after the update (by changing suffixed names). If the renamed datatables are used by models, the linkage will break because it's based on the datatable name. Creating duplicate datatables has already been prevented in the UI, but the improved method works also in the API level.<br />
<br />
Following SQL query can be used to list datatables (and project id) having duplicate names:<br />
SELECT ITA_NAME, ITA_PROJECT_ID<br />
FROM PA_INTEGRATION_TABLE<br />
GROUP BY ITA_NAME, ITA_PROJECT_ID<br />
HAVING Count(*) > 1<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
If trying to use business calendar for a model that doesn't have the business calendar defined, there will now be an error message instead of showing the chart. Either unselect the business calendar checkbox for the measure or dimension, or define a business calendar to the model. In this situation in earlier releases the business calendar was ignored and full time calculation used.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07498: Automation and Operational Excellence presets and Root causes analysis (for Snowflake), Weighted root causes analysis and Event scattering preset (for Snowflake and in-memory), Root causes for case duration (in-memory).<br />
* B-07177: Flexible mappings, user selectable aggregations and conditional formatting for Pivot table, and flexible mappings for KPI Card.<br />
* B-07518: New function named Query to run call /api/expression/query.<br />
* B-07294: In Workspace, the left side projects hierarchy can be collapsed and expanded to make more space to project contents.<br />
* B-06814: In SQL expressions, new function DurationBetweenDates to calculate duration between timestamps precisely.<br />
* B-07519: Replaced DateDiff function with the new DurationBetweenDates function in big data chart.<br />
* B-07531: In SQL expressions, new mathematical functions Abs, Log, Mod, Power, Rand, Sign and Sqrt.<br />
* B-07297: To optimize performance, Snowflake queries are automatically cancelled if they are not needed by UI.<br />
* B-07569: To optimize performance, TakeSample function implementation is improved for Snowflake.<br />
* B-07198: Several performance improvements to DataFrame queries (used in Snowflake).<br />
* B-07464: Added Lead and Lag functions to SqlDataFrames to support getting previous and next event.<br />
* B-07470: New ExtractSap function to fetch data from SAP using expression language.<br />
* B-07536: New Pivot function to SqlDataFrames to enable root causes analysis.<br />
* B-07488: Primary keys can be set to datatables to improve calculation performance (UI will follow later).<br />
* B-07515: Added RootCauseAnalysis function to SqlDataFrames.<br />
* B-07546: RootCauseAnalysis function support for complex weighting expressions.<br />
* B-03052: Support for user-defined variables in /api/expression/query.<br />
* B-07565: Support for NumberPrecision, DatetimeTruncation and TimespanPrecision properties for Values section in in-memory query.<br />
* B-07513: For product activation file handling, replaced mutex based implementation with exclusive file lock.<br />
* B-07480: Expression language support for DataFlows for data extraction.<br />
* B-07613: Removed support for SQL Server based R scripting.<br />
* B-07567: Take datatable primary keys into use in expression builder to improve performance (part 2).<br />
* B-07588: Remove total memory information from log writing and DateDiff function for in-memory.<br />
<br />
'''Fixed issues:'''<br />
* D-12715: Snowflake calculated imprecisely some operations containing division and aggregation.<br />
* D-12761: Progress bar of the CSV import dialog didn't show any progress.<br />
* D-12799: Opening datatable contents dialog settings was slow when there were lot of rows in the datatable.<br />
* D-12089: Include conforming/nonconforming cases made BPMN editor no responding.<br />
* D-12496: Datagrid filter search keyword didn't work for rounded values, so the search was hidden for other than textual data.<br />
* D-12704: Durations as quarters was calculated incorrectly in charts.<br />
* D-12662: Fixed issue where some special literals in custom expressions didn't work.<br />
* D-12403: Setting Notifications on a model had some visual issues.<br />
* D-12859: Dependency wheel visualization crashed with nulls values in From and To mappings.<br />
* D-12660: Removed unnecessary float conversions in SQL expressions.<br />
* D-12653: In-memory datafram OrderByColumns function with mixed values failed.<br />
* D-12657: When trying to use milliseconds period in some presets, frontend frozed.<br />
* D-12706: Line breaks in data were shown in many places where it's undesired.<br />
* D-12719: Syncfusion dialog headers showed backslaces incorrectly.<br />
* D-12372: Refused to run the JavaScript URL because it violated the Content Security Policy directive.<br />
* D-12730: Logging out when filter selection is in progress, gave javascript error.<br />
* D-12705: Header object counts tooltip was sometimes messed after logout.<br />
* D-12384: Selected project was not highlighted for whole project name string.<br />
* D-12581: Prevented creating duplicate datatable names in same project in parallel execution.<br />
* D-12722: There was incorrect syntax near '<' when running SqlDataFrame expressions.<br />
* D-12736: Swedish and Finnish translation improvements for object counter tooltips.<br />
* D-12702: For BPMN Editor component "Something went wrong" error was given when switching from in-memory to Snowflake model.<br />
* D-12712: UI gave error: TypeError: Cannot read properties of undefined (reading 'id').<br />
* D-12738: Business calendar showed total business time when calendar configuration was invalid.<br />
* D-12776: Special character filter caused JavaScript SyntaxError.<br />
* D-12785: Unnecessary vertical scrollbar displayed for main header toolbar.<br />
* D-12164: There was unnecessary UnauthorizedAccess errors in logs.<br />
* D-12580: Case duration was not same when comparing Big data chart with in-memory chart for same data.<br />
* D-12768: Data grid links and variable change actions didn't work when grouping was used.<br />
* D-12735: FindRootCauses (in-memory) function filtered out cases with zero contribution.<br />
* D-12763: --#CallWebService didn't work from ScriptLauncher.<br />
* D-12789: There was timeout in SQL queries to scripting sandbox.<br />
<br />
== QPR ProcessAnalyzer 2022.7 (build 1331) (released 2022-11-15) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2022.7, to improve security expression language operations that modify data or connect to external datasources are prevented in dashboard custom expressions. The limitation is required, because when a dashboard is opened, its expressions are run with the user's permissions, and the user need to trust the expressions don't perform any unexpected operations, such as delete data. The full functionality of the expression language is available in the scripts and in the Expression Designer.<br />
<br />
The following functions and operations are prevented in dashboards: SendEmail(), CallWebService(), ImportOdbc(), ImportOdbcSecure(), Model.DeletePermanently(), Model.Restore(), Model.TriggerNotifications(), Project.DeletePermanently(), Project.Restore(), Project.CreateDatatable(), Datatable.AddColumn(), Datatable.DeletePermanently(), Datatable.Import(), Datatable.Merge(), Datatable.RemoveColumns(), Datatable.RenameColumns(), Datatable.Truncate(), RecycleBin.DeletePermanently(), and call SQL script. Calling expression scripts is allowed, but in the script all previously mentioned operations are prevented.<br />
<br />
Following SQL query can be executed in the QPR ProcessAnalyzer metadata database to reveal dashboards that potentially have prevented expressions:<br />
SELECT * FROM [PA_UI_ELEMENT] WHERE [UIE_PROPERTIES] LIKE '%SendEmail(%' OR [UIE_PROPERTIES] LIKE '%CallWebService(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbc(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbcSecure(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Restore(%' OR [UIE_PROPERTIES] LIKE '%TriggerNotifications(%' OR [UIE_PROPERTIES] LIKE '%CreateDatatable(%' OR [UIE_PROPERTIES] LIKE '%AddColumn(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Import(%' OR [UIE_PROPERTIES] LIKE '%Merge(%' OR [UIE_PROPERTIES] LIKE '%RemoveColumns(%' OR [UIE_PROPERTIES] LIKE '%RenameColumns(%'<br />
</div><br />
<br />
'''Features:'''<br />
* B-07287: Process Discovery and most important presets for Snowflake.<br />
* B-07271: "Last Row Aggregates Over-limit Rows" setting for big data chart.<br />
* B-06431: Snowflake datatables support for database views in the datasource.<br />
* B-07266: Security: "limited mode" to prevent data modifications and external calls from dashboard expressions.<br />
* B-07097: Improved flowchart root causes color scales.<br />
* B-07363: SQL LIKE function support for escape character.<br />
* B-06877: Improved variation queries performance in Snowflake, part 1.<br />
* B-07444: Improved variation queries performance in Snowflake, part 2.<br />
* B-07382: Support for empty strings and nulls in event type names in dataframe processing.<br />
* B-07273: WithRowNumberColumn, WithRankColumn, WithDenseRankColumn support for descending sorting.<br />
* B-07303: FindRootCauses function support for weighting expression.<br />
* B-07327: Unpivot function for SqlDataFrames (for root cause analysis).<br />
* B-07385: Align token lifetime with SESSION_MAXIMUM_DURATION setting.<br />
* B-07500: ColumnMappings property for IDataFrame and DataTables.<br />
* B-07499: IDataFrame.ApplyFilter function to filter events data using a JSON-based filter.<br />
* B-07469: Translation updates for release 2022.7.<br />
<br />
'''Fixed issues:'''<br />
* D-11630: Drag and drop from chart settings to main header was working incorrectly for filter and root cause rules.<br />
* D-12455: Moving a chart filter from one chart to another created a root cause analysis filter.<br />
* D-12266: Root causes analysis showed incorrect results when certain combination of filters.<br />
* D-12525: Numerical values in Excel export in data grid was formatted incorrectly.<br />
* D-12534: Restoring item from recycle bin changed project from Bin to previous project.<br />
* D-12529: Measure specific datalabel mapping did not work correctly when also mapped to Y-axis.<br />
* D-12532: Multi-selection options caused layout issue for Chart setting.<br />
* D-12541: Layout issue for Polish in multiselect list search dialog.<br />
* D-11277: Increase/decrease Icons were missing in the dimension sorting for Mac.<br />
* D-12552: Uncaught Error: Diagram.selectCollection given something that is not a Part: null.<br />
* D-12567: Tooltip incorrectly showed for label component containing only spaces.<br />
* D-12438: Operation was cancelled because it was replaced by a new operation.<br />
* D-12551: Some expressions didn't work as calculated case/event attributes.<br />
* D-11720: Chart buttons were not visible in Apple Safari and iPad.<br />
* D-12544: On-screen settings "options" parameter did not work.<br />
* D-12528: Multi-unit time unit selection appeared where it's not applicable.<br />
* D-12583: Error message should be provided for invalid settings input than just display JS errors.<br />
* D-12599: Tooltips didn't show correct measures/dimensions when "Show in tooltip" mappings are used.<br />
* D-12561: Chart settings content was incorrectly drawn outside of the chart dialog.<br />
* D-12568: Reload UI sometimes crashed chart having multiselect on-screen settings.<br />
* D-12572: Main header toolbar lost when refresh maximized PA chart.<br />
* D-12612: Drop Unused Filters After setting incorrectly allowed zero seconds.<br />
* D-12533: Error message keeped blinking in Analysis view.<br />
* D-12608: User could not select or add new case attribute when current select attribute doesn't exist.<br />
* D-12451: Prevented deleting running script.<br />
* D-12516: Windows event viewer warning: Failed to gracefully shutdown application.<br />
* D-12523: Business calendar performance - part 2.<br />
* D-12538: Column with same name could be added multiple times to datatable using expression language.<br />
* D-12582: Improved EMS mutex code to support multiple PA service in one server.<br />
* D-12624: Synchronize new (empty) data table generated failed queries in Snowflake.<br />
* D-12622: Advanced setting page reserved room for the expression editor frame that did not exist.<br />
* D-11295: In on-screen settings, some UI controls were vertically misaligned.<br />
* D-11625: The heights of the parameter option menu in the clustering tab was not well aligned.<br />
* D-12103: Small dropdown list layout issue.<br />
* D-12633: Align issue for Column related Advanced settings.<br />
* D-12505: Search dialog didn't escape % and _ characters correctly in dataframe processing.<br />
* D-12645: Tabs in expression settings dialog were partly hidden when dialog is narrow.<br />
* D-11382: Moving of flowchart was sometimes shaky.<br />
* D-12655: Filter rule tooltips in header were styled incorrectly.<br />
* D-12656: Large integer values in filter jsons were incorrectly presented as small integers.<br />
* D-12661: Some exported filters contained unnecessary "invert" property.<br />
* D-12500: Model with numeric case id's and filtering with the attribute mapped as case id: ERROR [22018] Numeric value <nowiki>''</nowiki> is not recognized.<br />
* D-12509: Filtering null values didn't work in boolean attributes in Snowflake.<br />
* D-12571: In dataframe processing in SQL Server, dividing two integers should not make rounding to integer.<br />
* D-12610: Setting for global DropUnusedFiltersAfter was missing.<br />
* D-12613: Filtering with case/event attributes with null values didn't match in Snowflake models.<br />
* D-12617: Model didn't work when DropUnusedFiltersAfter is 00:00:00.<br />
* D-12618: If model ConfigurationJson is null, Configuration property didn't work.<br />
* D-12620: Filtering didn't work when there are backslaces in attribute names in Snowflake models.<br />
* D-12643: AttributeFunctionCallExpression did not always work properly in array context.<br />
* D-12647: SqlDataFrame with SQL Server: Comparing literals to variant column values failed.<br />
* D-12648: Models that have DropUnusedModelsAfter setting caused "The sliding expiration value must be positive" error.<br />
* D-11526: It was unable to translate Unicode character \uD83D at index 176 to specified code page.<br />
* D-12637: In application startup arised FATAL Application startup exception System.UnauthorizedAccessException: Access to the path 'Global\MutexQPRPAActivation' is denied.<br />
<br />
== Old Releases ==<br />
See older releases in [[QPR ProcessAnalyzer Release Archive]]<br />
__NOTOC__<br />
<br />
[[Category: QPR ProcessAnalyzer]]</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=Snowflake_versus_In-memory_Features&diff=24477Snowflake versus In-memory Features2024-03-07T08:14:21Z<p>Ollvihe: </p>
<hr />
<div>This page describes differences in available features between in-memory and Snowflake dashboards. <br />
<br />
{| class="wikitable"<br />
! '''Feature'''<br />
! '''In-memory'''<br />
! '''Snowflake'''<br />
|-<br />
||Event filtering based on event attributes and expressions (by any criteria)<br />
||Only by event types<br />
|style="text-align:center;"|X<br />
|-<br />
||Filter rules can be defined for measures and dimensions<br />
||<br />
|style="text-align:center;"|X<br />
|-<br />
||Dynamic event type mapping (allows to set event type for each chart/flowchart)<br />
||<br />
|style="text-align:center;"|X<br />
|-<br />
||Notifications and alerts to initiate corrective actions<br />
|style="text-align:center;"|X<br />
||Planned in future<br />
|-<br />
||Calculated attributes to create reusable measures<br />
|style="text-align:center;"|X<br />
||Planned in future<br />
|-<br />
||Case level permissions for detailed access control<br />
|style="text-align:center;"|X<br />
||Planned in future<br />
|}</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=Storing_Secrets_for_Scripts&diff=24476Storing Secrets for Scripts2024-03-06T14:36:14Z<p>Ollvihe: /* Using secrets */</p>
<hr />
<div>Secrets provide method to store passwords and other confidential data in QPR ProcessAnalyzer, so that they can be used without users being able to see the original plaintext. For example in ETL scripts, SAP, Salesforce and ODBC passwords can be stored as secrets, which can be referred by their names in the ETL script commands.<br />
<br />
Each secret has a type which defines in which command the secret can be used. The purpose of the type is to improve security, so that the secret can only be used in the intended command.<br />
<br />
Secrets are project specific, so their permissions come from the project. To use a secret, the user needs to have ''GenericRead'' permission to the project. To define a secret, the ''ManageProject'' permission to the project is needed.<br />
<br />
== Setting secrets ==<br />
Secrets can be set by calling the [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#SetSecret|SetSecret]] function for Project entity. There is also the property [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Project|Secrets]] for projects to list all secrets in the project. Note that the secret value cannot be retrieved even by system administrators.<br />
<br />
== Using secrets ==<br />
Secrets can be used in the following commands:<br />
* [[SQL Scripting Commands|SQL scripting commands]]: ImportOdbcQuery, ImportSalesforceQuery and ImportSapQuery.<br />
* [[QPR_ProcessAnalyzer_Model_Datasources#Loading_Data_from_ODBC_Datasource|ODBC datasources of model]].<br />
* [[DataFrame_in_Expression_Language#ImportOdbcSecure|ImportODBCSecure]] function (expression language)<br />
* [[Generic_Functions_in_QPR_ProcessAnalyzer#CreateSnowflakeConnection|CreateSnowflakeConnection]] function (expression language)<br />
<br />
Note: Currently [[SQL Scripting Commands#--.23ImportSqlQuery|ImportSqlQuery]] and [[SQL Scripting Commands#--.23ImportOleDbQuery|ImportOleDbQuery]] don't yet support the secrets.</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=Generic_Functions_in_QPR_ProcessAnalyzer&diff=24475Generic Functions in QPR ProcessAnalyzer2024-03-06T14:34:43Z<p>Ollvihe: /* Snowflake connection functions */</p>
<hr />
<div>== Aggregation functions ==<br />
Following aggregation functions are available:<br />
* '''Average''': Average of the items (sum of items divided by count of items). Can be used for numbers, [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#DateTime|DateTimes]] and [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#TimeSpan|Timespans]].<br />
* '''Count''': Number of items. Can be used for any type of data.<br />
* '''Median''': Median, i.e. the middle value of the sorted data. If there are even number of items, the average of the two middle items. Can be used for numbers, [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#DateTime|DateTimes]] and [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#TimeSpan|Timespans]].<br />
* '''Min''': Lowest/first value in the data. Can be used for data that can be sorted.<br />
* '''Max''': Highest/last value in the data. Can be used for data that can be sorted.<br />
*'''Percentile''': Percentile value. Can be used for numbers, [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#DateTime|DateTimes]] and [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#TimeSpan|Timespans]].<br />
*'''Stdev''': Sample standard deviation. Can be calculated for numbers, [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#DateTime|DateTimes]] and [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#TimeSpan|Timespans]].<br />
*'''Stdevp''': Population standard deviation. Can be calculated for numbers, [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#DateTime|DateTimes]] and [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#TimeSpan|Timespans]].<br />
* '''Sum''': Sum of the items. Can be used for numbers and [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#TimeSpan|Timespans]].<br />
* '''StringJoin''': Joins array of strings together. The first parameter is a string that is placed between the joined strings.<br />
*'''Var''': Sample variance. Can be used for numbers.<br />
*'''Varp''': Population variance. Can be used for numbers.<br />
<br />
Examples:<br />
<pre><br />
Sum([3, 2, 4])<br />
Returns: 9<br />
<br />
Count([[1, 2], [3, 4, 5]])<br />
Returns: [2, 3]<br />
<br />
Sum([[1, 2], [3, 4, 5]])<br />
Returns: [3, 12]<br />
<br />
Percentile([1,2,3,4,5], 0.75)<br />
Return: 4<br />
<br />
Sum([])<br />
Returns: null<br />
<br />
StringJoin(", ", ["one", "two", "three"])<br />
Returns: one, two, three<br />
</pre><br />
<br />
When aggregating numerical values, ''null'' values are treated as zeros. Nulls can be removed with ''RemoveNulls'' function. In the Min and Max functions, nulls are ignored. Null values can be removed before aggregating (the following example shows how).<br />
<pre><br />
Average([1, 5, null])<br />
Returns: 2<br />
<br />
Average(RemoveNulls([1, 5, null])<br />
Returns: 3<br />
</pre><br />
<br />
Aggregation operations are performed to the leaf level. i.e. the deepest level in the hierarchy. When aggregating, the leaf level arrays are replaced by the aggregated values, and thus the depth of the hierarchy decreases by one. In addition to the aggregation functions, functions that modify the contents of leaf arrays ('''OrderBy''', '''Distinct''', ...), the operation will be performed separately for every leaf array.<br />
<br />
<pre><br />
OrderByValue([[4, 3], [2, 1]])<br />
Returns: [[3, 4], [1, 2]]<br />
</pre><br />
<br />
== Mathematical functions ==<br />
<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||Abs (Number)<br />
||Number<br />
||<br />
Calculates the absolute value of a specified number. Examples:<br />
<pre><br />
Abs(4)<br />
Returns: 4<br />
<br />
Abs(-2.7)<br />
Returns: 2.7<br />
<br />
Abs(0)<br />
Returns: 0<br />
</pre><br />
|-<br />
||Acos (Number)<br />
||Number<br />
||<br />
Calculates the angle whose cosine is the specified number. The parameter is a number representing a cosine, which must be between -1 and 1. Examples:<br />
<pre><br />
Acos(0.3584)<br />
Returns: 1.204242852965772<br />
<br />
Acos(-0.3584)<br />
Returns: 1.9373498006240213<br />
</pre><br />
|-<br />
||ArgMax (Object)<br />
||<br />
# Array or hierarchical object<br />
# Value expression<br />
||<br />
Returns those objects in the array giving maximum values for the given expression when evaluated in the object's context. Examples:<br />
<pre><br />
ArgMax([5, 1, 6, 4, 3, 3, 6, 5, 4, 1, 1], _)<br />
Returns: [6, 6]<br />
<br />
ArgMax(EventLogById(1).Cases, Duration)<br />
Returns: An array of cases having the longest duration.<br />
</pre><br />
|-<br />
||ArgMin (Object)<br />
||<br />
# Array or hierarchical object<br />
# Value expression<br />
||<br />
Returns those objects in the array giving minimum values for the given expression when evaluated in the object's context. Examples:<br />
<pre><br />
ArgMin([5, 1, 6, 4, 3, 3, 6, 5, 4, 1, 1], _)<br />
Returns: [1, 1, 1]<br />
<br />
ArgMin(EventLogById(1).Cases, Duration)<br />
Returns: An array of cases having the shortest duration.<br />
</pre><br />
|-<br />
||Asin (Number)<br />
||Number<br />
||<br />
Calculates the angle whose sine is the specified number. The parameter is a number representing a sine, which must be between -1 and 1. Examples:<br />
<pre><br />
Asin(-0.3584)<br />
Returns: 0.36655347382912462<br />
<br />
Asin(+0.3584)<br />
Returns: -0.36655347382912462<br />
</pre><br />
|-<br />
||Atan (Number)<br />
||Number<br />
||<br />
Calculates the angle whose tangent is the specified number. Examples:<br />
<pre><br />
Atan(1)<br />
Returns: 0.78539816339744828<br />
<br />
Atan(-1)<br />
Returns: -0.78539816339744828<br />
</pre><br />
|-<br />
||Ceiling (Integer)<br />
||<br />
Number<br />
||<br />
Returns the smallest integer that is greater than or equal to the specified number. Example:<br />
<pre><br />
Ceiling(1.3)<br />
Returns: 2<br />
</pre><br />
|-<br />
||Cos (Number)<br />
||Number<br />
||<br />
Calculates the cosine of the specified angle measured in radians. Examples:<br />
<pre><br />
Cos(1)<br />
Returns: 0.54030230586813977<br />
<br />
Cos(-1)<br />
Returns: 0.54030230586813977<br />
</pre><br />
|-<br />
||Exp (Number)<br />
||Number<br />
||<br />
Calculates the e raised to the specified power. Examples:<br />
<pre><br />
Exp(1)<br />
Returns: 2.7182818284590451<br />
<br />
Exp(-1)<br />
Returns: 0.36787944117144233<br />
</pre><br />
|-<br />
||Floor (Integer)<br />
||<br />
Number<br />
||<br />
Returns the largest integer that is less than or equal to the specified number. Example:<br />
<pre><br />
Floor(1.9)<br />
Returns: 1<br />
</pre><br />
|-<br />
||Hash (String)<br />
||String to hash<br />
||<br />
Returns 11 characters long hash value for the given string. There can be following characters in the hash: A-Za-z0-9+/. For null or empty string, "AAAAAAAAAAA" is returned.<br />
<br />
The hashing is a repeatable operation, i.e., the same input string always returns the same hash value. Note also that hashing lead to collisions, i.e., two different input strings may give the same hash value.<br />
<br />
The hash is calculated using Murmur3 algorithm (https://blog.teamleadnet.com/2012/08/murmurhash3-ultra-fast-hash-algorithm.html) and the first 64 bits of the 128-bit hash value is returned encoded as base64url without padding (RFC 4648 §5).<br />
<br />
Examples:<br />
<pre><br />
Hash("abcdef")<br />
Returns: 3sqiubzVXxA<br />
</pre><br />
|-<br />
||IEEERemainder (Number)<br />
||<br />
# Dividend (Number)<br />
# Divisor (Number)<br />
||<br />
Calculates the remainder resulting from the division of a specified number by another specified number. Uses formula:<br />
<pre><br />
dividend - (divisor * Round(dividend / divisor))<br />
</pre><br />
<br />
Note that the formula is different than in the % operator, which uses formula:<br />
<pre><br />
(Abs(dividend) - (Abs(divisor) * (Floor(Math.Abs(dividend) / Abs(divisor))))) * Sign(dividend) <br />
</pre><br />
<br />
Examples:<br />
<pre><br />
IEEERemainder(26, 4)<br />
Returns: 2<br />
<br />
IEEERemainder(0, 0)<br />
Returns: NaN<br />
</pre><br />
|-<br />
||Log (Number)<br />
||<br />
# Number<br />
# Logarithm base (Number)<br />
||<br />
Calculates the logarithm of a specified number. If the second parameter is not provided, it's the natural logarithm (base e). The second parameter can be used to define another base for the logarithm. Examples:<br />
<pre><br />
Log(5)<br />
Returns: 1.6094379124341003<br />
<br />
Log(10, 2)<br />
Returns: 3.3219280948873626<br />
</pre><br />
|-<br />
||Log10 (Number)<br />
||<br />
Number<br />
||<br />
Calculates the base 10 logarithm of a specified number. Examples:<br />
<pre><br />
Log10(5)<br />
Returns: 0.69897000433601886<br />
<br />
Log10(-5)<br />
Returns: NaN<br />
</pre><br />
|-<br />
||Pow (Number)<br />
||<br />
# Base number<br />
# Exponent number<br />
||<br />
Calculate a specified number raised to the specified power. Examples:<br />
<pre><br />
Pow(5, 3)<br />
Returns: 125<br />
<br />
Pow(-5, 3)<br />
Returns: -125<br />
</pre><br />
|-<br />
||Random (Number)<br />
||(none)<br />
||Returns a random number value between 0 and 1, where 0 is included, but 1 is not.<br />
<br />
Example:<br />
<pre><br />
Random()<br />
Returns: 0.1243234243 (for example)<br />
</pre><br />
|-<br />
||Round (Float)<br />
||<br />
Number of decimals (Integer)<br />
||<br />
For numbers, rounds the number to the specified number of decimal. Number of decimals can also be negative, in which case the number is rounded to the nearest tens, hundreds, thousands, etc.<br />
<br />
For DateTimes, rounds given date time by given time span or given number of seconds.<br />
<br />
Note that the number and DateTime to be rounded needs to be provided as a context object (not as a parameter).<br />
<br />
Examples:<br />
<pre><br />
(1.254).Round(1)<br />
Returns: 1.3<br />
<br />
(162.111111).Round(-2)<br />
Returns: 200<br />
<br />
DateTime(2017, 1, 2, 3, 4, 5).Round(10)<br />
Returns: DateTime(2017, 1, 2, 3, 4, 10)<br />
<br />
DateTime(2017, 1, 2, 3, 4, 5).Round(TimeSpan(1))<br />
Returns: DateTime(2017, 1, 2)<br />
</pre><br />
|-<br />
||Sign (Number)<br />
||<br />
Number<br />
||<br />
Calculates an integer that indicates the sign of a number, either -1, 0 or 1. Examples:<br />
<pre><br />
Sign(10)<br />
Returns: 1<br />
<br />
Sign(0)<br />
Returns: 0<br />
<br />
Sign(10)<br />
Returns: -1<br />
</pre><br />
|-<br />
||Sin (Number)<br />
||<br />
Number<br />
||<br />
Calculates the sine of the specified angle. Examples:<br />
<pre><br />
Sin(3.14)<br />
Returns: 0.0015926529164868282<br />
<br />
Sin(-3.14)<br />
Returns: -0.0015926529164868282<br />
</pre><br />
|-<br />
||Sqrt (Number)<br />
||<br />
Number<br />
||<br />
Calculates the square root of a specified number. Examples:<br />
<br />
<pre><br />
Sqrt(81)<br />
Returns: 9<br />
<br />
Sqrt(0.9)<br />
Returns: 0.3<br />
</pre><br />
|-<br />
||Tan (Number)<br />
||<br />
Number<br />
||<br />
Calculates the tangent of the specified angle. Examples:<br />
<br />
<pre><br />
Tan(1)<br />
Returns: 1.5574077246549023<br />
<br />
Tan(-1)<br />
Returns: -1.5574077246549023<br />
</pre><br />
|}<br />
<br />
== Conversion functions ==<br />
<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ToFloat (Number)<br />
||<br />
Object to convert<br />
||Converts the given object to a decimal number.<br />
|-<br />
||ToInteger (Integer)<br />
||<br />
Object to convert<br />
||<br />
Converts the given object into an integer. If the object can not be converted into an integer, an exception will be thrown. If the object as a decimal number, it will also be rounded to the nearest integer.<br />
<br />
Examples:<br />
<pre><br />
ToInteger(1.234)<br />
Returns: 1<br />
<br />
ToInteger(-1.5)<br />
Returns: -2<br />
<br />
ToInteger(1313.6)<br />
Returns: 1314<br />
<br />
ToInteger(123456789012345678)<br />
Returns: 123456789012345678<br />
<br />
ToInteger("5")<br />
Returns: 5<br />
<br />
ToInteger("-5")<br />
Returns: -5<br />
</pre><br />
|-<br />
||ToString (String)<br />
||<br />
# Object to convert<br />
# Date/Number/Timespan format (String)<br />
||<br />
Converts the given object to a string.<br />
<br />
The optional second parameter defines formatting that is needed when converting the following data types:<br />
* Date: https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings<br />
* Number: https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-numeric-format-strings<br />
* Timespan: https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-timespan-format-strings<br />
<br />
Examples:<br />
<pre><br />
ToString(1) + " < " + ToString(2)<br />
Returns: "1 < 2".<br />
<br />
"Case=\'" + ToString(a) + "\'"<br />
Returns: "Case='<string representation of object a>'"<br />
<br />
ToString(DateTime(2017,1,2,3,4,5,6))<br />
Returns: "2017-01-02T03:04:05"<br />
<br />
ToString(DateTime(2017,1,2,3,4,5,6), "dd.MM.yyyy")<br />
Returns "02.01.2017"<br />
<br />
ToString(1.2, "0.00")<br />
Returns "1.20"<br />
<br />
ToString(TimeSpan(16,4,3,17,250), "%d")<br />
Returns "16"<br />
</pre><br />
|}<br />
<br />
== Data source connectors ==<br />
<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||CallWebService (Dictionary)<br />
||Dictionary of parameters<br />
||<br />
CallWebService is a generic function for any kind of http requests. Support natively REST-style web services by automatically formatting and parsing json in the request and response, so dictionary/array objects are used without converting them to strings (see examples below). If using xml-based web services, formatting and parsing of xml needs to be taken care of manually.<br />
<br />
The function takes as a dictionary of following parameters:<br />
<br />
*'''Address''' (string): Url address to connect to.<br />
*'''Method''' (string): Http method to use, as one of the following: GET (default), POST, PUT, DELETE.<br />
*'''Body''' (string/dictionary/array): The http request body. In case the request content type is application/json, dictionary/array can be used directly without string conversion.<br />
*'''Content-Type''' (string): Defines the Content-Type http request header. If content type is application/x-www-form-urlencoded, form url encoding is applied for the request body.<br />
*'''Timeout''' (integer): Time to wait before the request times out, in case no response is received earlier. Defined as integer in milliseconds. By default 60000 milliseconds.<br />
*'''Headers''' (dictionary): Key-value pairs of HTTP request headers.<br />
*'''QueryParameters'''Â (dictionary): Key-value pairs of query parameters that are added to the url. Proper encoding of the url is taken care of by the function.<br />
*'''DefaultNetworkCredentials''' (boolean): When true, uses the default network credentials for the call. When false, the default network credentials are not used. The default network credentials can be used only if in the server configuration AllowForwardingNetworkCredentials setting is enabled.<br />
*'''Encoding''' (string): Defines the body encoding to use. Default value is UTF8. The supported options are listed in https://msdn.microsoft.com/en-us/library/system.text.encoding%28v=vs.110%29.aspx.<br />
<br />
CallWebService returns a dictionary with properties:<br />
* '''Response''' (string/dictionary/array): Response data as string, or if content type is application/json, as dictionary/array object.<br />
* '''StatusCode''' (integer): Http status code.<br />
* '''Headers''' (dictionary): All http response headers.<br />
<br />
The Content-Type http request header is set as follows: If the Content-Type parameter is provided, that is used. If Content-Type is not provided, and body is dictionary/array, request Content-Type is set to application/json. Otherwise no Content-Type header is set.<br />
<br />
If the Content-Type parameter is application/x-www-form-urlencoded, body is expected to be a dictionary where the name/values pairs are encoded using FormUrlEncodedContent method (see examples below).<br />
<br />
Examples:<br />
<br />
Get a webpage and check the status code of the response:<br />
<pre><br />
let resp = CallWebService(#{<br />
"Address": "https://www.google.com/search?q=QPR+ProcessAnalyzer"<br />
});<br />
resp.StatusCode;<br />
</pre><br />
<br />
Get the server version in a QPR ProcessAnalyzer environment:<br />
<pre><br />
let resp = CallWebService(#{<br />
"Address": "https://processanalyzer.onqpr.com/qprpa/api/serverinfo"<br />
});<br />
resp.Response.serverVersion;<br />
</pre><br />
<br />
Authenticate to QPR ProcessAnalyzer (to get an access_token) and call expression query (note the Content-Type required by the token request):<br />
<pre><br />
let server = "http://processanalyzer.onqpr.com/qprpa";<br />
let resp = CallWebService(#{<br />
"Address": server + "/token",<br />
"Method": "POST",<br />
"Content-Type": "application/x-www-form-urlencoded",<br />
"Body": #{<br />
"grant_type": "password",<br />
"username": "qpr",<br />
"password": "demo"<br />
}<br />
});<br />
resp = CallWebService(#{<br />
"Address": server + "/api/expression/query",<br />
"Method": "POST",<br />
"Content-Type": "application/json",<br />
"Headers": #{ "Authorization": "Bearer " + resp.Response.access_token },<br />
"Timeout": 120000,<br />
"Body": #{<br />
"Root": "Models",<br />
"Dimensions": null,<br />
"Values": [ #{"Name": "Name", "Expression": "Name"} ],<br />
"Ordering":[ #{"Name": "Name", "Direction": "Ascending"} ]<br />
}<br />
});<br />
resp.Response[0].Name<br />
</pre><br />
<br />
Upload contents of datatable id 321 to using Web API to a datatable id 123:<br />
<pre><br />
CallWebService(#{<br />
"Address": "https://processanalyzer.onqpr.com/qprpa/api/importfile?importMode=datatable&fileType=csv&objectId=123&append=true&csvTimeFormat=yyyy-MM-dd%20HH%3Amm%3Ass,fff",<br />
"Method": "POST",<br />
"Body": DatatableById(321).SqlDataFrame.Collect().ToCsv(),<br />
"Headers": #{ "Authorization": "Bearer " + resp.Response.access_token },<br />
"Timeout": 6000000<br />
});<br />
</pre><br />
|-<br />
||<span id="OpenAIChatCompletion">OpenAIChatCompletion</span> (Dictionary)<br />
||Request dictionary<br />
||Calls OpenAI's Chat Completions API (https://platform.openai.com/docs/api-reference/chat) to generate natural language response to user prompt. Both the request and response is a dictionary following the Chat Completions API specification. As specified in the API, the ''model'' and ''messages'' are mandatory fields in the request.<br />
<br />
To use the function, the OpenAi API key needs to be configured in [[PA_Configuration_database_table#General_Settings|OpenAIAPIKey]] configuration table.<br />
<br />
Example: Response to a user request:<br />
<pre><br />
let response = OpenAIChatCompletion(#{<br />
"model": "gpt-3.5-turbo",<br />
"messages": [<br />
#{<br />
"role": "system",<br />
"content": "You are a process mining expert making intelligent suggestions how to improve processes."<br />
},<br />
#{<br />
"role": "user",<br />
"content": "Give me three suggestions how to improve a sales process with bottlenecks."<br />
}<br />
]<br />
});<br />
response["choices"][0]["message"]["content"];<br />
</pre><br />
|}<br />
<br />
== Miscellaneous functions ==<br />
<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||Where<br />
||<br />
Condition expression<br />
||<br />
Returns the context object if the given expression evaluates to true.<br />
<br />
Examples:<br />
<pre><br />
[1,2,3,4].Where(_>2)<br />
Returns: [3,4]<br />
<br />
EventLogById(1).Cases.Where(Duration > TimeSpan(10))<br />
Returns all cases where duration is more than 10 days (in eventlog id 1).<br />
<br />
EventLogById(1).Events.Where(Timestamp < DateTime(2020, 1,1))<br />
Returns all events which occurred before 1.1.2020 (in eventlog id 1).<br />
</pre><br />
|-<br />
||<span id="If">If</span><br />
||<br />
# Condition expression<br />
# True expression<br />
# False expression<br />
||<br />
If the first parameter is true, returns the value of the second parameter. Otherwise returns the value of the third parameter. The function always evaluates only either the second or third parameter, but never both.<br />
<br />
Note that the function needs to starts with a capital letter, because otherwise it's interpreted as the [[QPR_ProcessAnalyzer_Expressions#Conditional_operator_.28if.29|if operator]].<br />
<br />
Examples:<br />
<pre><br />
If(Now.Second % 2 == 0, "Even second", "Odd second")<br />
Returns:<br />
"Event second" or "Odd second" depending on the time of the evaluation.<br />
<br />
For("i", 0, i < 10, i + 1, i).If(_ % 2 == 0, _, _remove)<br />
Returns:<br />
[0, 2, 4, 6, 8]<br />
</pre><br />
|-<br />
||<span id="RemoveNulls">RemoveNulls (Array)</span><br />
||<br />
Array<br />
||<br />
Removes all the supported null values from given hierarchical object. Never removes arrays containing removed null values. Returns given object with null values removed.<br />
<br />
Examples:<br />
<pre><br />
RemoveNulls([1, [], [null], [2, _remove, [_empty, 3, 4], _empty, null, 5]])<br />
Returns: [1, [], [], [2, [3, 4], 5]]<br />
<br />
RemoveNulls(["foo": null, "bar": 2, "poof": [1, _empty, 3]])<br />
Returns: [<br />
"foo": 0,<br />
"bar": 2,<br />
"poof": [ 1, 3 ]<br />
]<br />
</pre><br />
|-<br />
||Catch<br />
||<br />
# Expression to calculate<br />
# Result if exception (Object)<br />
||<br />
Calculates the given expression and if any exceptions are thrown during the calculation, catches that exception and returns the given result. Note that this function does not catch any syntactical errors.<br />
<br />
Examples:<br />
<pre><br />
Catch(1, 1234)<br />
Returns: 1<br />
<br />
Catch(undefined, 1234)<br />
Returns: 1234<br />
<br />
Catch([1,2].undefined, 1234)<br />
Returns: 1234<br />
<br />
Catch(EventLogById(-1), 1234)<br />
Returns: 1234<br />
</pre><br />
|-<br />
||AsParallel<br />
||<br />
Additional parameters<br />
||<br />
Performs all the following chaining operations in parallel to improve performance. Items are divided into parts which size is determined by the ParallelTaskSize parameter, and each part is executed as an independent task in parallel. Parallel execution has a certain cost, so it might not be optimal to run each item as a separate task (increase ParallelTaskSize to decrease number of tasks). On the other hand, to large ParallelTaskSize leads to too few parallel tasks, and then all processing capacity is not used.<br />
<br />
As a parameter, takes a dictionary that accepts optional property '''ParallelTaskSize''', which is the size of the segments the root array will be split into. If the length of the input array is not divisible by ParallelTaskSize, the last segment will have less items than this configured value. The default size is 1.<br />
<br />
The AsParallel function call doesn't need to be part of the chaining, and thus it can be called before the chaining.<br />
<br />
Examples:<br />
<pre><br />
Run several ODBC queries simultaneously:<br />
let regions = ["New York", "Los Angeles", "Dallas", "London"];<br />
AsParallel(["ParallelTaskSize": 1]);<br />
regions.ImportOdbc("...", "SELECT * FROM [Data] Where Region = '" + _ + "'")<br />
<br />
Run a complex filtering operation for cases:<br />
Cases.AsParallel(["ParallelTaskSize": 1000]).Where(...)<br />
<br />
Sum(Sum(([NumberRange(1, 100)].AsParallel(["ParallelTaskSize": 1]).For("i", 0, i < 100000, i + 1, i))[0]))<br />
Returns: 499995000000<br />
The same expression without parallel processing:<br />
Sum(Sum(NumberRange(1, 100).For("i", 0, i < 100000, i + 1, i)))<br />
Returns: 499995000000<br />
<br />
Sum([NumberRange(1, 100)].AsParallel(["ParallelTaskSize": 1]).WriteLog(_))<br />
Returns: 5050<br />
In addition, outputs all the numbers from 1 to 100 into log file in the order in which the tasks were executed.<br />
<br />
The previous example can also be written like this:<br />
AsParallel(["ParallelTaskSize": 1]);<br />
Sum(NumberRange(1, 100).WriteLog(_));<br />
Returns: 5050<br />
<br />
Count((([el.Cases].AsParallel(["ParallelTaskSize": 1000]):AnalyzeConformance(cm))[0]).Where(_==null))<br />
Returns the number of cases conforming to a design/conformance model cm.<br />
The same expression without parallel processing:<br />
Count((el.Cases:AnalyzeConformance(cm)).Where(_==null))<br />
<br />
AsParallel(["ParallelTaskSize": 1]);<br />
el.Cases.Events.Type.Name<br />
Returns a hierarchical object having cases of given event log (el) as root objects and array of event type names of the events in each case in the order of occurrence.<br />
The expressions related to every case in the returned hierarchical object are processed in a separate independent task (thus, each task will process "Events.Type.Name" expression in a separate task where the root object is a case).<br />
<br />
[[123, 456, 789]].AsParallel(["ParallelTaskSize":Â 1]).ScriptById(_).Run()<br />
Runs scripts with id's 123, 456 and 789 simultaneously.<br />
</pre><br />
|-<br />
||IsNull (Boolean)<br />
||<br />
Value to test (Object)<br />
||<br />
Tests whether given object is null, _empty or _remove. Returns ''true'' if it is any of those. If given a hierarchical object, applies the function as described in at the leaf level.<br />
<br />
Examples:<br />
<pre><br />
ForEach("item", [1, "a", null, _empty, _remove], IsNull(item))<br />
Returns: [false, false, true, true, true]<br />
<br />
IsNull(["foo":[null,"a"], "bar":[2,null]])<br />
Returns: [<br />
HierarchicalArray("foo", [true, false]),<br />
HierarchicalArray("bar", [false, true])<br />
]<br />
</pre><br />
|-<br />
||IsNullTop (Boolean)<br />
||<br />
Object to test (Object)<br />
||<br />
Tests whether given object is null, _empty or _remove. Returns ''true'' if it is any of those. The function does not aggregate values in hierarchical objects.<br />
<br />
Examples:<br />
<pre><br />
ForEach("item", [1, "a", null, _empty, _remove], IsNullTop(item))<br />
Returns: [false, false, true, true, true]<br />
<br />
IsNullTop(["foo":[null,"a"], "bar":[2,null]])<br />
Returns: false<br />
</pre><br />
|-<br />
||GroupBy<br />
||<br />
# Array to group<br />
# Group by expressions<br />
||<br />
Groups given array by given expressions. Returns the given array splitted into groups in a way that each specified group expression creates one level of hierarchical arrays having the root object the same as the group expression result.<br />
<br />
Examples:<br />
<pre><br />
GroupBy([1,2,2,3,3,4,5,5,4,4,4], _)<br />
<br />
Returns:<br />
[[1:[1], 2:[2, 2], 3:[3, 3], 4:[4, 4, 4, 4], 5:[5,5]]<br />
</pre><br />
|-<br />
||GroupByValue<br />
||Array to group<br />
||<br />
Groups all unique values in given array. Returns the given array in a format which has all the values in the original array only once as root objects and the root objects in the original array as contents of the arrays inside contexts.<br />
<br />
In a way, this just switches root objects of hierarchical arrays to be the actual values and actual values to be root objects (without duplicates).<br />
<br />
For every item in the array, the behavior is as follows:<br />
* If the item is not an array, the value is used also as the root object of the item.<br />
* If the item is an array, all the values are treated separately.<br />
* If the item is a hierarchical array, its root object will be used as root object and each separate value treated separately as scalars (ending up being root objects of the resulting object).<br />
<br />
Examples:<br />
<pre><br />
GroupByValue([1,2,2,3,3,4,5,5,4,4,4])<br />
Returns:<br />
(The same as GroupBy([1,2,2,3,3,4,5,5,4,4,4], _))<br />
[1:[1], 2:[2, 2], 3:[3, 3], 4:[4, 4, 4, 4], 5:[5,5]]<br />
<br />
GroupByValue([1:["a","b"],2:["b","c"],3:["c"],4:["d","e"],5:["d","d","d"]])<br />
Returns:<br />
["a":[1], "b":[1, 2], "c":[2, 3], "d":[4, 5, 5, 5], "e":[4]]<br />
<br />
Get count of item "2" in the array:<br />
Let(\"groupped\", GroupByValue([1,2,4,1,4,2,3,3,2,4])); Count(GetValueOfContext(2, groupped))<br />
Returns: 3<br />
</pre><br />
|-<br />
||Coalesce<br />
||<br />
# Object to coalesce<br />
# Result if Null<br />
||<br />
Returns the second parameter if the first parameter is null or empty. If the the given object is a hierarchical object, all the leaf level values are coalesced separately.<br />
<br />
Examples:<br />
<pre><br />
Coalesce(0, 1)<br />
Returns: 0<br />
<br />
Coalesce(null, 1)<br />
Coalesce(_empty, 1)<br />
Coalesce(_remove, 1)<br />
All return: 1<br />
<br />
Coalesce([[null, 1], [null, null]], 3)<br />
Returns: [[3, 1], [3, 3]]<br />
<br />
Coalesce([[null, 1], 2], 3)<br />
Returns: [[3, 1], null]<br />
<br />
Coalesce([1, [null, 2], null], 3)<br />
Returns: [1, [null, 2], 3]<br />
</pre><br />
|-<br />
||Transpose<br />
||<br />
Matrix to transpose<br />
||<br />
Transposes the given matrix.<br />
<br />
Examples:<br />
<pre><br />
Transpose([[1,2], [3,4], [1,4]])<br />
Returns: [[1, 3, 1], [2, 4, 4]]<br />
</pre><br />
|-<br />
||GarbageCollection<br />
||<br />
||Calling this function performs a garbage collection in the QPR ProcessAnalyzer Server. The function returns the maximum generation before the garbage collection was run. This function is an experimental functionality, which purpose is to investigate the memory consumption and memory handling behavior of the QPR ProcessAnalyzer Server.<br />
|-<br />
||GetContext<br />
||<br />
Hierarchical array<br />
||<br />
Returns the context of given hierarchical array, i.e. list of keys in the object. If the given object is not an hierarchical array, returns ''null''.<br />
<br />
Examples:<br />
<pre><br />
GetContext("a":1)<br />
Returns: "a"<br />
<br />
["a":1, "b":2, 2:3].GetContext(_)<br />
Returns: ["a", "b", 2]<br />
<br />
([1,2,3]:(_*2)).GetContext(_)<br />
Returns: [1, 2, 3]<br />
<br />
["a":1, 2, 3].GetContext(_)<br />
Returns: ["a", null, null]<br />
</pre><br />
|-<br />
||GetValueOfContext<br />
||<br />
# Context object<br />
# Hierarchical array<br />
||<br />
Returns the value of specified context object in given hierarchical array, i.e. the value behind the key. If the key if found multiple times, the first occurrence is returned. Returns ''_empty'' if the given key was not found.<br />
<br />
Examples:<br />
<pre><br />
GetValueOfContext("bar", ["foo":1, "bar":2])<br />
Returns: [2]<br />
<br />
GetValueOfContext("bar", ["foo":1, "bar":2, "bar":"second"])<br />
Returns: [2]<br />
<br />
GetValueOfContext("test", ["foo":1, "bar":2])<br />
Returns: _empty<br />
</pre><br />
|-<br />
||<span id="SendEmail">SendEmail</span><br />
||Parameters dictionary<br />
||Sends an email message using the provided parameters. [[PA_Configuration_database_table#SMTP_Server_Settings|SMTP server settings]] need to be configured to be able to send email messages. Following parameters are supported:<br />
* '''From''' (string) (mandatory): Email address where the email message appears to be coming from. Doesn't need to be a working address. If the From address is not defined, the system configured from address is used ([[PA Configuration database table#SMTP_Server_Settings|more information]]).<br />
* '''To''' (string array) (mandatory): List of email addresses where to send the message to. Note that there should be only one email address per string in the array.<br />
* '''Subject''' (string): Subject (title) of the email message.<br />
* '''Body'''Â (string): Body (text contents) of the email message.<br />
* '''Cc''' (string array): List of email addresses where to send the email as Cc.<br />
* '''Bcc''' (string array): List of email addresses where to send the email as Bcc.<br />
* '''IsBodyHtml''' (boolean): Defines whether the email message body is html (''true'') or plain text (''false''). By default false.<br />
* '''ReplyTo''' (string array): Defines a list of reply-to addresses for the email message.<br />
* '''BodyEncoding''' (string): Defines encoding for the message body. Supported encodings are ''ASCIIEncoding'', ''UTF7Encoding'', ''UTF8Encoding'' (default), ''UnicodeEncoding'' and ''UTF32Encoding''. More information: https://docs.microsoft.com/en-us/dotnet/api/system.text.encoding?redirectedfrom=MSDN&view=netcore-3.1#remarks.<br />
* '''SubjectEncoding''' (string): Defines encoding for the message subject. Supported encodings are same as in the ''BodyEncoding'' property. Default value is ''UTF8Encoding''.<br />
* '''Priority''' (string): Defines the email message priority. Available values are ''High'', ''Normal'' (default) and ''Low''. More information: https://docs.microsoft.com/en-us/dotnet/api/system.net.mail.mailpriority.<br />
* '''DeliveryNotification''' (string): Defines the delivery notifications for the email message. Specified as a comma separated list of following possible values ''Delay'', ''Never'', ''None'', ''OnFailure'' and ''OnSuccess''. More information: https://docs.microsoft.com/en-us/dotnet/api/system.net.mail.deliverynotificationoptions.<br />
* '''Sender''' (string): Defines the sender's email address. Usually the sender doesn't need to be defined. The sender is additional information for the email server.<br />
<br />
Example:<br />
<pre><br />
SendEmail(#{<br />
 "From": "example.from@address.com",<br />
 "To": ["recipient.one@address.com", "recipient.two@address.com", "recipient.three@address.com"],<br />
 "Subject": "Example E-mail",<br />
 "Body": "QPR ProcessAnalyzer example script started running"<br />
});<br />
</pre><br />
|-<br />
||WriteLog<br />
||<br />
message (Object)<br />
||<br />
When used in a script, writes the given text to the script log. The log entry is also made to the QPR ProcessAnalyzer log file. If the provided parameter is not a string, it's converted into string.<br />
<br />
The return value of the function is the provided message parameter, allowing to flexibly add the WriteLog into expressions (see the examples).<br />
<br />
Examples:<br />
<pre><br />
WriteLog("Calculation executed.")<br />
Writes to log: Calculation executed.<br />
<br />
Sum(WriteLog([1, 2, 3, 4]))<br />
Returns: 10<br />
Also writes an entry into the log showing the [1, 2, 3, 4] -array in the pretty printed fashion.<br />
<br />
NumberRange(0, 4).(WriteLog("Iteration #" + (_ + 1)), _)<br />
Returns: [0, 1, 2, 3, 4]<br />
Also writes the following entries into log:<br />
Iteration #1<br />
Iteration #2<br />
Iteration #3<br />
Iteration #4<br />
Iteration #5<br />
</pre><br />
|-<br />
||TakeSample<br />
||<br />
* Input array/DataFrame<br />
* Sample size (Integer)<br />
* Seed (Integer)<br />
* With replacements (Boolean)<br />
||<br />
Randomly chooses the defined number of items from the provided array or rows from the DataFrame, and returns a new array or DataFrame containing those items. If the sample size is larger than the number of items/rows, the TakeSample function has no effect. Note that the order of items may change from the original.<br />
<br />
The seed is optional, and if not provided, the seed to be used is automatically generated.<br />
<br />
The "with replacements" parameter is optional (by default false). When false, same items appear maximum of once in the resulting array. When true, same items may appear multiple times in the resulting array.<br />
<br />
Examples:<br />
<pre><br />
TakeSample([1,2,3,4,5,6,7,8,9,10], 4)<br />
Returns [1, 9, 3, 4] (note: results may change)<br />
<br />
TakeSample([1,2,3,4,5,6,7,8,9,10], 5, 9, true)<br />
Returns [5, 5, 1, 5, 3]<br />
<br />
TakeSample([1,2,3,4,5], 10)<br />
Returns [1,2,3,4,5]<br />
<br />
TakeSample(<br />
ToDataFrame(<br />
[[1,2],[3,4],[5,6]], ["a", "b"]<br />
),<br />
2<br />
).ToCsv()<br />
Returns<br />
a;b<br />
5;6<br />
3;4<br />
</pre><br />
|-<br />
||Eval<br />
||Expression (String)<br />
||<br />
Evaluates the given expression. The Eval function can be used e.g., when the expression to be evaluated is generated during runtime, or is fetched during the script run from an external source. The expression is evaluated in the context where the Eval function exists, so it's possible to use variables defined outside the evaluated expression (see the example).<br />
<br />
Examples:<br />
<pre><br />
Eval("1 + 1");<br />
Result: 2<br />
<br />
let myVar = 3;<br />
Eval("myVar + 2");<br />
Result: 5<br />
</pre><br />
|-<br />
||Sleep<br />
||Duration (Timespan or integer as milliseconds)<br />
||<br />
Suspends the expression execution for the given time duration. The parameter can either be a Timespan object or integer where the duration is specified as milliseconds.<br />
<br />
Examples:<br />
<pre><br />
Sleep(Timespan(0, 0, 1)));<br />
Result: Sleeps for 1 minute<br />
<br />
Sleep(1000);<br />
Sleep for 1 second<br />
</pre><br />
|-<br />
||ToSqlExpression<br />
||Expression (String)<br />
||<br />
Converts given string into SqlExpression. Note that the SqlExpression is not yet executed at this point.<br />
<br />
Examples:<br />
<pre><br />
let expr = ToSqlExpression("Column(\"Cost\")");<br />
</pre><br />
|-<br />
||Query<br />
||Query configuration (Object)<br />
||<br />
Runs expression query ([[Web_API:_Expression/query|Web API: Expression/query]]) and returns results as an in-memory DataFrame (for in-memory queries) or SqlDataFrame (for queries run in the datasource, e.g., in Snowflake). You can use charts to help with creating the configuration: Configure a chart, and click the ''Query'' button in the chart settings (''Advanced'' tab) to get the query configuration. Note that the json needs to be converted into expression language by adding hash characters (#) in the beginning of the curly braces of objects.<br />
<br />
Example: In-memory query:<br />
<pre><br />
let result = Query(#{<br />
"ModelId": 123,<br />
"Root": "Cases",<br />
"MaximumRowCount": 10,<br />
"Dimensions": [<br />
#{ "Name": "Account manager", "Expression": "Attribute(\"Account Manager\")" }<br />
],<br />
"Values": [<br />
#{ "Name": "Case count", "Expression": "Count(_)" }<br />
],<br />
"Ordering": [<br />
#{ "Name": "Case count", "Direction": "Descending" }<br />
]<br />
});<br />
</pre><br />
<br />
Example: SqlDataFrame query ("Where" function is used additionally):<br />
<pre><br />
let result = Query(#{<br />
"ProcessingMethod": "dataframe",<br />
"ContextType": "model",<br />
"ModelId": 123,<br />
"Root": "Cases",<br />
"MaximumRowCount": 10,<br />
"Dimensions": [<br />
#{ "Name": "Account manager", "Expression": "Column(\"Account Manager\")" }<br />
],<br />
"Values": [<br />
#{ "Name": "Case count", "AggregationFunction": "count" }<br />
],<br />
"Ordering": [<br />
#{ "Name": "Case count", "Direction": "Descending" }<br />
]<br />
})<br />
.Where(Like(Column("Account manager"), "Patricia%"))<br />
.Collect();<br />
</pre><br />
|}<br />
<br />
== Ordering functions ==<br />
<br />
{| class="wikitable"<br />
!'''Function'''<br />
! '''Parameters'''<br />
! '''Description'''<br />
|-<br />
||OrderBy (array)<br />
||<br />
# Array to order<br />
# Order expression<br />
||<br />
Orders the given array using values from the given order expression. The order expression is evaluated once for each item in the array. The order expression supports all atomic (=not collection) primitive value types.<br />
<br />
Examples:<br />
<pre><br />
OrderBy(["a", "x", "b", "z", "n", "l", "a"], _)<br />
Return:<br />
["a", "a", "b", "l", "n", "x", "z"]<br />
<br />
OrderBy([9,8,7,6,5,4,3,2,1], _%3)<br />
Returns:<br />
[9,6,3,7,4,1,8,5,2]<br />
<br />
OrderBy([9,8,7,6,5,4,3,2,1], _%3 + _/30)<br />
Returns:<br />
[3,6,9,1,4,7,2,5,8]<br />
</pre><br />
|-<br />
||OrderByDescending (array)<br />
||<br />
# Array to order<br />
# Order expression<br />
||Result is same as in the OrderBy function, except the order is reverse.<br />
|-<br />
||OrderByTop (array)<br />
||<br />
# Array to order<br />
# Order expression<br />
||<br />
Orders given top-level array by the value of given expression using ascending order. Supports all value types, including multi-dimensional arrays.<br />
<br />
Order expression is evaluated in the context of each array item whose value determines the order of that item.<br />
<br />
Examples:<br />
<pre><br />
OrderByTop([[1, 2, 3], [2, 2, 2], [3, 2, 1]], _[2])<br />
Returns: [[3, 2, 1], [2, 2, 2], [1, 2, 3]]<br />
</pre><br />
|-<br />
||OrderByValue (array)<br />
||<br />
# Array to order<br />
||<br />
Orders the given array using the natural order of items, for example numbers it's the increasing order, and for strings it's text ordering.<br />
<pre><br />
OrderByValue(["a", "x", "b", "z", "n", "l", "a"])<br />
Return:<br />
["a", "a", "b", "l", "n", "x", "z"]<br />
<br />
</pre><br />
|-<br />
||OrderByValueDescending (array)<br />
||<br />
# Array to order<br />
||<br />
Result is same as in the OrderByValue function, except the order is reverse.<br />
|}<br />
<br />
== Looping functions ==<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||For<br />
||<br />
# Iterated variable name (String)<br />
# Initial value for iterated property (object)<br />
# Iteration condition expression<br />
# Next iteration step expression<br />
# Expression to calculate iterated items<br />
||<br />
Iterates the given expression until the given condition is met, and returns the results of the iterated expressions for every iteration as an array.<br />
<br />
Examples:<br />
<pre><br />
For("i", 0, i < 4, i + 1, i)<br />
Returns: [0, 1, 2, 3]<br />
<br />
For("x", 0, x < 3, x + 1, For("y", 0, y < 3, y + 1, StringJoin(",", [x, y]))<br />
Returns: [["0,0", "0,1", "0,2"], ["1,0", "1,1", "1,2"], ["2,0", "2,1", "2,2"]]<br />
<br />
For("i", 0, i < 4, i + 1, DateTime(2010 + i))<br />
Returns: [DateTime(2010), DateTime(2011), DateTime(2012), DateTime(2013)]<br />
<br />
For("str", "a", str != "aaaaa", str + "a", str)<br />
Returns: ["a", "aa", "aaa", "aaaa"]<br />
</pre><br />
|-<br />
||ForEach (2 parameters)<br />
||<br />
# Array to iterate through<br />
# Function to call<br />
||<br />
Calls given function using all the elements of given array, where the calculation is done in the current context. The function must support calling with one parameter. Returns the results of the evaluation of given function for every iteration of the input array as an array.<br />
<br />
Examples:<br />
<pre><br />
let sourceModel = First(Models.Where(Name == "SAP_OrderToCash"));<br />
let attributes = sourceModel.EventAttributes;<br />
let events = sourceModel.EventLog.Events;<br />
let func = att => Attribute(att);<br />
events.ForEach(attributes, func)<br />
Returns an array containing arrays of all the event attribute values for all the events.<br />
<br />
let myFunction = item => _ + item * 2;<br />
(5).ForEach([1,2,3], myFunction)<br />
Returns 7, 9, 11 (=5+1*2, 5+2*2, 5+3*2)<br />
</pre><br />
|-<br />
||ForEach (3 parameters)<br />
||<br />
# Variable to repeat (String)<br />
# Array to repeat<br />
# Expression to calculate repeated items<br />
||<br />
Repeats the given expression as many times there are items in the given array. Item in the array is available as the given variable in the expression.<br />
Examples:<br />
<pre><br />
ForEach("i", [1,2,3], "Value is: " + i)<br />
Returns:<br />
Value is: 1<br />
Value is: 2<br />
Value is: 3<br />
<br />
ForEach("item", EventLogById(1).Cases, Let("c" + item.Name, item))<br />
Results: Creates expression variable variables like "c<casename>" for every case in the model.<br />
<br />
ForEach("myVariable", ["a", "b", "c"], myVariable + myVariable)<br />
Returns:<br />
aa<br />
bb<br />
cc<br />
</pre><br />
|-<br />
||NumberRange<br />
||<br />
# Start (Number)<br />
# End (Number)<br />
# Interval (Number)<br />
||<br />
Creates an array of numbers within the given range using the given interval. Interval parameter is optional, and by default it is one. The interval can also be negative to get a sequence of decreasing numbers (then the Start needs to be greater than the End).<br />
<br />
Examples:<br />
<pre><br />
NumberRange(1, 3)<br />
Returns: [1, 2, 3]<br />
<br />
NumberRange(-7, -1, 2)<br />
Returns: [-7, -5, -3, -1]<br />
<br />
NumberRange(1, 3, 0.5)<br />
Returns: [1, 1.5, 2, 2.5, 3]<br />
<br />
NumberRange(1, 3, 0.8)<br />
Returns: [1, 1.8, 2.6]<br />
<br />
NumberRange(6, 2, -2)<br />
Returns: [6, 4, 2]<br />
</pre><br />
|-<br />
||Repeat<br />
||<br />
# Number of times to repeat (Integer)<br />
# Expression to repeat<br />
||<br />
Repeats the defined expression the defined number of times.<br />
Examples:<br />
<pre><br />
Repeat(3, "Repeat me!")<br />
Returns:<br />
"Repeat me!"<br />
"Repeat me!"<br />
"Repeat me!"<br />
<br />
Repeat(1, 5)<br />
Returns<br />
5<br />
</pre><br />
|-<br />
||TimeRange<br />
||<br />
# Start (DateTime)<br />
# End (DateTime)<br />
# Interval (Timespan)<br />
||<br />
Generates a timestamp array starting from the start timestamp with the defined interval, and ending when the end timestamp is reached. Note that this function only creates timestamps with equal durations, so it's not possible to e.g. create timestamps for each month (to do that, you can use the loops).<br />
<pre><br />
Generate datetimes starting from Monday 2017-01-01 and ending to Monday 2017-12-31 including all Mondays between them:<br />
Timerange(Datetime(2018,1,1), Datetime(2018,1,1), Timespan(7))<br />
</pre><br />
|}<br />
<br />
== Recursion functions ==<br />
<br />
{| class="wikitable"<br />
!'''Function'''<br />
! '''Parameters'''<br />
! '''Description'''<br />
|-<br />
<br />
|-<br />
||Recurse<br />
||<br />
# Expression to call recursively<br />
# Stop condition expression<br />
# Maximum depth (Integer)<br />
||<br />
Evaluates the given expression recursively until given condition or recursion depth is met. The function returns all the traversed objects in a single array. When the stop condition expression evaluates to false, it will stop the current recursion without including the false evaluated object into the result. Default stop condition is '''!IsNull(_)'''. The default maximum depth is 1000.<br />
<br />
Examples:<br />
<pre><br />
(1).Recurse(_ + 1, _ < 5)<br />
Returns: [1, 2, 3, 4]<br />
<br />
event.Recurse(NextInCase)<br />
Returns: An array of all the events following given event inside the same case.<br />
<br />
event.Recurse(NextInCase, Type.Name != "Invoice")<br />
Returns: An array of all the events following given event inside the same case until event whose type name is "Invoice", which will itself not be included into the result.<br />
<br />
event.Recurse(NextInCase, Type.Name != "Invoice", 2)<br />
Returns: An array of all the events following given event inside the same case until event whose type name is "Invoice" or until the recursion depth of 2 has been reached, which will itself not be included into the result.<br />
</pre><br />
|-<br />
||RecurseWithHierarchy<br />
||<br />
# Expression to call recursively<br />
# Stop condition expression<br />
# Maximum depth (Integer)<br />
||<br />
Evaluates the given expression recursively until given condition or recursion depth is met. The function returns the traversed object hierarchy. When the stop condition expression evaluates to false, it will stop the current recursion without including the false evaluated object into the result. Default stop condition is '''!IsNull(_)'''. The default maximum depth is 1000.<br />
<br />
Examples:<br />
<pre><br />
[1,2].RecurseWithHierarchy([1,2], false, 2)<br />
Returns: [1:[1:[1,2],2:[1,2]],2:[1:[1,2], 2:[1,2]]]<br />
<br />
(1).RecurseWithHierarchy(_ + 1, _ < 5)<br />
Returns: 1:[2:[3:[4]]]<br />
<br />
RemoveLeaves(eventLog.Flows:From.Where(IsNull(_))).To.RecurseWithHierarchy(OutgoingFlows.To, !IsNull(_), 2)<br />
Returns: A hierarchy consisting of all the starter events of given event log and recursively all the event types reachable from them via flows until depth of 2 is reached.<br />
</pre><br />
|-<br />
||RecursiveFind<br />
||<br />
# Expression to call recursively<br />
# Find condition expression<br />
# Stop condition expression<br />
# Continue after finding (Boolean)<br />
# Maximum depth (Integer)<br />
||<br />
Evaluates given expression recursively until given condition or recursion depth is met. The function collects all the traversed objects that match the given find expression along the way. When the find condition expression evaluates to true for the current object, it causes the following:<br />
* Current object is added to the result array returned by the function call<br />
* If continue after finding is false, the recursion will not be continued on this branch<br />
<br />
When the stop condition expression evaluates to false, it will stop the current recursion without including the false evaluated object into the result. Default stop condition is '''!IsNull(_)'''. The default maximum depth is 1000.<br />
<br />
Continue after finding tells should the recursion be continued after a match has been found in the current branch.<br />
<br />
Examples:<br />
<pre><br />
(1).RecursiveFind(_ + 1, _ == 100)<br />
Returns: 100<br />
<br />
eventLog.Cases:GetAt(0, Events).RecursiveFind(NextInCase, Organization=="Finance", !IsNull(_))<br />
Returns: For each case, returns the first (by time) event whose organization equals to "Finance".<br />
<br />
eventLog.Cases:Events.Where(Organization=="Finance")<br />
eventLog.Cases:GetAt(0, Events).RecursiveFind(NextInCase, Organization=="Finance", true, true)<br />
Returns: Both return for each case all events whose organization equals to "Finance".<br />
</pre><br />
|}<br />
<br />
== Hierachical object functions ==<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||FindRepeats<br />
||<br />
# Array<br />
# Minimum repeated length (Integer)<br />
# Longest repeat length (Integer)<br />
||<br />
Searches for repeating patterns in given array. Parameters:<br />
# Array to search the patterns in.<br />
# Minimum integer length of a repeat that can be returned by this function (default = 0).<br />
# Boolean value indicating whether to return all the repeating patterns (true) or only the ones having the longest length (false) (default = false)<br />
Returns an array of arrays indicating the repeating patterns and their positions in the array formatted as follows:<br />
* Every repeating pattern has its own entry in the top-level array.<br />
* Every repeating pattern item in the top-level array is formatted internally as an array consisting of:<br />
** An array constining the repeating pattern itself.<br />
* An array consisting of all the indexes from which this pattern was found to start from.<br />
* Allows overlapping patterns.<br />
* Results are sorted primarily by the length of the pattern and secondarily by the number of indexes the pattern was found in.<br />
<br />
Examples:<br />
<pre><br />
FindRepeats([0, 1, 2, 0, 1, 2])<br />
Returns: [<br />
[[0, 1, 2], [0, 3]],<br />
[[0, 1], [0, 3]],<br />
[[1, 2], [1, 4]],<br />
[[0], [0, 3]],<br />
[[1], [1, 4]],<br />
[[2], [2, 5]]<br />
]<br />
<br />
FindRepeats([0, 1, 2, 0, 1, 2], 0, true)<br />
Returns: [[[0, 1, 2], [0, 3]]]<br />
<br />
FindRepeats([1, "b", DateTime(2017), 1, "b", DateTime(2017)], 3)<br />
Returns: [[1, "b", DateTime(2017)], [0, 3]]<br />
</pre><br />
|-<br />
||Flatten<br />
||<br />
# Array or hierarchical object<br />
# Include context object (boolean)<br />
||<br />
Collects all the actual leaf values from given array, array of arrays or hierarchical object and returns them in a single array. If given a hierarchical object, this function collects actual leaf values instead of leaf level values. Elements in the returned array are in the same order they were found when traversing the input object using depth first search.<br />
<br />
When context object is included, should context objects in the internal nodes of a hierarchical object be also included into the result. Default is false.<br />
<br />
Examples:<br />
<pre><br />
Flatten(1)<br />
Returns: 1<br />
<br />
Flatten([1, 2])<br />
Returns: [1,2]<br />
<br />
Flatten([[[1, 2],[3, 4]],[[5, 6]]])<br />
Returns: [1, 2, 3, 4, 5, 6]<br />
<br />
Flatten([[1, 2], 3])<br />
Returns: [1, 2, 3]<br />
<br />
Flatten([[1,2,3,4], null, [5], [1, null]])<br />
Returns: [1, 2, 3, 4, null, 5, 1, null]<br />
<br />
Flatten(["a":1, "b":2])<br />
Flatten(["a":1, "b":2], false)<br />
Returns: [1, 2]<br />
<br />
Flatten(["a":1, "b":2], true)<br />
Returns: ["a", 1, "b", 2]<br />
</pre><br />
|-<br />
||RemoveLeaves<br />
||<br />
# Hierarchical object<br />
||<br />
Remove one level of hierarchy from a hierarchical object replacing all the bottom level hierarchical arrays with the context objects of the hierarchical arrays. Returns the given object with all the bottom level hierarchical arrays with the context objects of the hierarchical arrays.<br />
<br />
Examples:<br />
<pre><br />
RemoveLeaves(["foo":1, "bar":2])<br />
Returns: ["foo", "bar"]<br />
<br />
RemoveLeaves(eventLog.Flows:From.Where(IsNull(_)))<br />
Results: All the flows starting the cases in the event log.<br />
</pre><br />
|-<br />
||ReplaceLeafValues<br />
||<br />
# Array or hierarchical object<br />
# Variable name used in the iteration (String)<br />
# Expression to get the result of each iteration<br />
# Number of levels up from the leaf level to operate (Integer)<br />
||<br />
Replace all leaf values of given array or hierarchical object at given levels up from the leaf level with results of given expression.<br />
<br />
Examples:<br />
<pre><br />
ReplaceLeafValues([1,2, null], "x", If(IsNull(x), null, x+1), 0)<br />
Result: [2, 4, null]<br />
<br />
ReplaceLeafValues([[[1,2],[2,3]],[[3,4],[4,5]]], "x", Flatten(x), 0)<br />
Result: [[[[1],[2]],[[2],[3]]],[[[3],[4]],[[4],[5]]]]<br />
<br />
ReplaceLeafValues([[[1,2],[2,3]],[[3,4],[4,5]]], "x", Flatten(x), 1)<br />
Result: [[[1,2],[2,3]],[[3,4],[4,5]]]<br />
<br />
ReplaceLeafValues([[[1,2],[2,3]],[[3,4],[4,5]]], "x", Flatten(x), 2)<br />
Result: [[1,2,2,3],[3,4,4,5]]<br />
<br />
ReplaceLeafValues([[[1,2],[2,3]],[[3,4],[4,5]]], "x", Flatten(x), 3)<br />
Result: [1,2,2,3,3,4,4,5]<br />
</pre><br />
|-<br />
||SliceMiddle<br />
||<br />
# Start index for the range to extract (Integer)<br />
# End index for the range to extract (Integer)<br />
# Levels up in the hierarchy (Integer)<br />
# Array to slice<br />
||<br />
Extracts a continuous range of an array or hierarchical object. If given a hierarchical object, applies the function at the level that is specified levels level up from the leaf level.<br />
<br />
Start index: Negative value means that the index is counting from the end of the array. If array does not have element at this given index, empty array is returned.<br />
<br />
End index: not included into the extracted range. Negative value means that the index is counting from the end of the array. If array does not have element at this given index, all the elements to the end from the start index will be extracted.<br />
<br />
Levels up: At which level of the hierarchical object are we operating (number of levels up from the leaf level). Should be at least 1 (since 0 level does not contain arrays).<br />
<br />
Examples:<br />
<pre><br />
SliceMiddle(1, 2, 1, [[0, 1, 2, 3], [4, 5, 6, 7]])<br />
Returns: [[1], [5]]<br />
<br />
SliceMiddle(2, 4, 1, [[0, 1, 2, 3], [4, 5, 6, 7]])<br />
Returns: [[2, 3], [6, 7]]<br />
<br />
SliceMiddle(0, 1, 2, [[0, 1, 2, 3], [4, 5, 6, 7]])<br />
Returns: [0, 1, 2, 3]<br />
<br />
SliceMiddle(3, 5, 1, [0, 1, 2, 3, 4, 5, 6, 7])<br />
Returns: [3, 4]<br />
<br />
SliceMiddle(-3, -1, 1, [0, 1, 2, 3, 4, 5, 6, 7])<br />
Returns: [5, 6]<br />
<br />
SliceMiddle(3, -1, 1, [0, 1, 2, 3, 4, 5, 6, 7])<br />
Returns: [3, 4, 5, 6]<br />
</pre><br />
|}<br />
<br />
== Snowflake connection functions ==<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||<span id="CallStoredProcedure">CallStoredProcedure</span><br />
||<br />
# Procedure name (string)<br />
# Procedure parameters (dictionary)<br />
# Additional parameters (dictionary)<br />
||<br />
Calls a Snowflake stored procedure (it needs to pre-exist in the Snowflake when this function is called). The function returns the return value of the stored procedure. If the result is a table, its contents will be returned as an in-memory DataFrame. Object results are returned as JSON strings.<br />
<br />
Parameters:<br />
# '''Procedure name''': Name of the called stored procedure.<br />
# '''Procedure parameters''': Dictionary of parameters passed to the stored procedure. Note: If the parameter name starts with an underscore (_), it's not be passed to the procedure call.<br />
# '''Additional parameters''': Dictionary of additional parameters affecting how the stored procedure is called. Supports parameter '''HasTabularResult''' (default ''false'') which need to be ''true'' when the stored procedure is expected to return a tabular result, and ''false'' when a scalar result. Note: When using the HasTabularResult=true, Snowflake ODBC driver version needs to be at least 3.1.0 (due to bug fix in the driver).<br />
<br />
Security note: All QPR ProcessAnalyzer users can use the CallStoredProcedure function and call Snowflake stored procedures that are in the schema configured to the [[PA_Configuration_database_table#General_Settings|Snowflake connection string]]. Create only stored procedures to that schema, that are safe for any user to run.<br />
<br />
Example 1: Stored procedure to calculate a sum of two numbers. Create following stored procedure to Snowflake:<br />
<pre><br />
CREATE OR REPLACE PROCEDURE SUMOFNUMBERS(NUMBER1 NUMBER, NUMBER2 NUMBER)<br />
RETURNS NUMBER<br />
LANGUAGE SQL<br />
EXECUTE AS OWNER<br />
AS '<br />
BEGIN<br />
RETURN NUMBER1 + NUMBER2;<br />
END';<br />
</pre><br />
<br />
The stored procedure can be called as follows:<br />
<pre><br />
CreateSnowflakeConnection()<br />
.CallStoredProcedure(<br />
"SUMOFNUMBERS",<br />
#{<br />
"NUMBER1": 3,<br />
"NUMBER2": 5<br />
}<br />
);<br />
<br />
Returns: 8<br />
</pre><br />
<br />
Example 2: Calls a stored procedure named train_ml_model with a dictionary parameter containing InputEvents key that has SQL query string as value which, when run in the same Snowflake connection, will return all the contents of data table. ColumnMappings key that has a dict-object containing column role mappings of the InputEvents data.<br />
<pre><br />
let dt = ModelById(1).EventsDataTable;<br />
CreateSnowflakeConnection()<br />
.CallStoredProcedure("train_ml_model", #{<br />
"ColumnMappings": dt.ColumnMappings,<br />
"InputEvents": dt.SqlDataFrame<br />
});<br />
</pre><br />
|-<br />
||<span id="CreateSnowflakeConnection">CreateSnowflakeConnection</span><br />
||Parameters dictionary<br />
||<br />
Creates an object representing connection to Snowflake. Takes as a parameter a dictionary with following settings names:<br />
* '''OdbcConnectionString''': Connection to Snowflake is made with this connection string.<br />
* '''OdbcConnectionStringKey''': [[Storing_Secrets_for_Scripts|Secret name]] containing the ODBC connection string to connect to Snowflake.<br />
* '''ProjectId''': Project id to use as the context of the secure string. If not defined, project id is queried from the current context object. Project id needs to be available when using the ''OdbcConnectionStringKey'' setting.<br />
<br />
If neither ''OdbcConnectionString'' or ''OdbcConnectionStringKey'' is defined, the system configured connection string will be used.<br />
<br />
Examples:<br />
<pre><br />
ProjectByName("My project")<br />
.CreateSnowflakeConnection(<br />
#{ "OdbcConnectionStringKey": "MyConnectionStringKey" }<br />
);<br />
</pre><br />
|-<br />
||ToSqlDataFrame<br />
||In-memory dataframe<br />
||Same functionality as in the [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#ToSqlDataFrame|Model.ToSqlDataFrame]], except the SQL dataframe is created for the connection which the function is called for.<br />
<br />
Example: Create an SQL dataframe that is passed as parameter to a Snowflake procedure:<br />
<pre><br />
let df = ToDataFrame([[0, "zero"], [2, "two"], [3, "three"]], ["id", "right"]);<br />
let connection = project.CreateSnowflakeConnection();<br />
connection.CallStoredProcedure("MyProcedure", #{"input": connection.ToSqlDataFrame(df)});<br />
</pre><br />
|}</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Objects_in_Expression_Language&diff=24474QPR ProcessAnalyzer Objects in Expression Language2024-03-06T13:24:32Z<p>Ollvihe: /* Project */</p>
<hr />
<div>==Filter==<br />
Filters contain a set of filter rules used to filter cases and events in models. Filters are objects located in the models. Filters are owned by the creator user, and when a filter publish mode is private, only the creator can use it.<br />
<br />
{| class="wikitable"<br />
!'''Filter properties'''<br />
! '''Description'''<br />
|-<br />
||CreatedBy (User)<br />
||Returns the user who created the filter.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Returns date when the filter created date.<br />
|-<br />
||Description (String)<br />
||Returns description of the filter.<br />
|-<br />
||Id (Integer)<br />
||Returns id of the filter.<br />
|-<br />
||LastModifiedBy (User)<br />
||Returns user who modified the filter.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Returns date when the filter last modified.<br />
|-<br />
||Model<br />
||Returns model where the filter belongs to.<br />
|-<br />
||ModelId (Integer)<br />
||Returns model where the filter belongs to.<br />
|-<br />
||Name (String)<br />
||Returns the name of the filter.<br />
|-<br />
||Project<br />
||Returns project where the filter belongs to.<br />
|-<br />
||ProjectId (Integer)<br />
||Returns project id where the filter belongs to.<br />
|-<br />
||PublishMode (String)<br />
||Returns publish mode of the filter, one of the following: '''Private''', '''Public''', or '''Default'''.<br />
|-<br />
||Rules (Dictionary)<br />
||Returns a dictionary containing the filter rules in the filter.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Filter Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||<br />
Deletes the filter permanently. To delete own filters, the '''Filtering''' permission is needed, and to delete any filters the '''ManageViews''' permission is needed.<br />
|-<br />
||Modify<br />
||Dictionary<br />
||<br />
Modifies filter properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: ''Name'', ''Description'', ''PublishMode'', and ''Rules''.<br />
<br />
The function returns the updated filter object. Requires ''GenericWrite'' permission for the Project and global ''CreateModel'' permission.<br />
<br />
Example:<br />
<pre><br />
FilterById(1)<br />
.Modify(#{<br />
"Name": "My filter",<br />
"Description": "My description",<br />
"PublishMode": "Public",<br />
"Rules": #{<br />
"Items": [<br />
#{<br />
"Type": "IncludeCases",<br />
"Items": [<br />
#{<br />
"Type": "CaseAttributeValue",<br />
"Attribute": "Account Manager",<br />
"StringifiedValues": [<br />
"0Mary Wilson"<br />
]<br />
}<br />
]<br />
}<br />
]<br />
}<br />
}<br />
)<br />
</pre><br />
|}<br />
<br />
Function to get filter id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||FilterById<br />
||<br />
* Filter id (Integer)<br />
||<br />
Returns Filter object corresponding to the provided filter id.<br />
|}<br />
<br />
==Model==<br />
Notes:<br />
* For in-memory models that are offline, the object counts represent the situation when the model was last time online (loaded into the memory). ''null'' is returned if the model has never been loaded into the memory.<br />
* If [[Case_Level_Permissions|Case permissions]] are used for the model, and user doesn't have '''GenericWrite''' permission for the model, ''null'' is returned for data security reasons. Users that have the '''GenericWrite''' permission, see null when the model is offline, and when online, they see counts where the case level permissions settings are applied.<br />
* Properties ''CaseAttributes'', ''EventAttributes'' and ''Eventlog'' work only for the in-memory models and they require the model to be loaded into the memory. If the model is not in the memory, it is loaded when these properties is used. Other model properties down require the model to be in the memory.<br />
<br />
{| class="wikitable"<br />
!'''Model properties'''<br />
! '''Description'''<br />
|-<br />
||Calendars (BusinessCalendar*)<br />
||<br />
Returns all [[Business_Calendar|business calendars]] stored to the Model as an array. Returns an empty array, if there are no business calendars stored to the model. Note: UI allows to set only one business calendar for a Model.<br />
|-<br />
||CaseAttributes (AttributeType*)<br />
||[[#AttributeType|CaseAttributes]] in the model returned in the alphabetical order. Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||CasesDatatable (Datatable)<br />
||Returns the Datatable the model uses as a datasource for cases. Returns ''null'' if the cases Datatable is not defined or if model uses other than the Datatable datasource.<br />
|-<br />
||Configuration (Dictionary)<br />
||Returns the Model configuration as dictionary. Example:<br />
<pre><br />
ModelById(123).Configuration.DataSource.Events.DataTableName<br />
</pre><br />
|-<br />
||ConfigurationJson (String)<br />
||Returns the Model configuration as JSON string.<br />
|-<br />
||CreatedBy (User)<br />
||User who created the model.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the model was created.<br />
|-<br />
||DefaultCalendar (BusinessCalendar)<br />
||Returns the default [[Business_Calendar|business calendar]] of the Model. Returns ''null'', if there are no calendars in the Model or no calendar has been set as a default calendar. Note: UI allows to set only one business calendar for a Model, which is also the default calendar.<br />
|-<br />
||DefaultFilter (Filter)<br />
||Default filter of the model. Returns ''null'' if the model does not have a default filter.<br />
|-<br />
||DefaultFilterId (Integer)<br />
||Default filter id of the model. Returns ''null'' if the model does not have a default filter.<br />
|-<br />
||Description (String)<br />
||Model description. The model description may contain line breaks.<br />
|-<br />
||DeletedDate (DateTime)<br />
||Timestamp when Model was deleted (moved to the recycle bin).<br />
|-<br />
||DeletedBy (User)<br />
||User how deleted the Model.<br />
|-<br />
||Diagrams (Diagram*)<br />
||Returns an array of all [[Diagram_in_Expression_Language|diagrams]] in the model.<br />
|-<br />
||EstimatedMemory (Integer)<br />
||Returns an estimation of how much memory in bytes the model requires.<br />
|-<br />
||EventsDatatable (Datatable)<br />
||Returns the Datatable the model uses as a datasource for events. Returns ''null'' if the events Datatable is not defined or if model uses other than the Datatable datasource.<br />
|-<br />
||EventAttributes (AttributeType*)<br />
||[[#AttributeType|EventAttributes]] in the model returned in the alphabetical order. Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||EventLog (EventLog)<br />
||EventLog containing the entire model (i.e. event log where no filters have been applied). Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||Filters (Filter*)<br />
||Returns an array of all [[#Filter|filters]] in the model.<br />
|-<br />
||Id (Integer)<br />
||Model Id. Model Id is generated by QPR ProcessAnalyzer when the model is created.<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last time modified the model properties. Note that datatables containing the eventlog data are separate objects having similar fields to track the last modification and last data import.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the model was modified the last time.<br />
|-<br />
||Name (String)<br />
||Model name.<br />
|-<br />
||NCache (Integer)<br />
||Number of objects related to the model when the model is loaded into the memory.<br />
|-<br />
||NCaseAttributes (Integer)<br />
||Number of [[#AttributeType|CaseAttributes]] in model. Works only for in-memory models.<br />
|-<br />
||NCases (Integer)<br />
||Number of [[#Case|Cases]] in the model. Works only for in-memory models.<br />
|-<br />
||NEventAttributes (Integer)<br />
||Number of [[#AttributeType|EventAttributes]] in model. Works only for in-memory models.<br />
|-<br />
||NEvents (Integer)<br />
||Number of [[#Event|Events]] in model. Works only for in-memory models.<br />
|-<br />
||NEventTypes (Integer)<br />
||Number of [[#EventType|EventTypes]] in the model. Works only for in-memory models.<br />
|-<br />
||NOpens (Integer)<br />
||Number of times analysis has been requested from the model.<br />
|-<br />
||Project (Project)<br />
||[[#Project|Project]] where the model belongs to.<br />
|-<br />
||ProjectId (Integer)<br />
||[[#Project|Project]] id where the model belongs to.<br />
|-<br />
||Status (String)<br />
||<br />
Memory availability status of the model. There are the following statuses:<br />
* '''Loading''': The model is currently loading into the memory. When the loading is ready, the status changes to ''online''. If the loading fails, the status changes to ''offline''.<br />
* '''Offline''': The model is currently not loaded into the memory. The model needs to be loaded into the memory, so that analyses can be calculated from the model (occurs automatically when an analysis is requested).<br />
* '''Online''': The model is in the memory and ready for analysis calculation. If the model is dropped from the memory, its status changes to ''offline''.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Model Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||CalendarByName (BusinessCalendar)<br />
||<br />
name (String)<br />
||<br />
Returns a [[Business_Calendar|business calendar]] stored to the Model by the name of the calendar. Business calendars can be stored to models in the model properties. Returns ''null'', if a calendar with the provided name is not stored to the model.<br />
<br />
Examples:<br />
<pre><br />
ModelById(123).CalendarByName("MyCalendar")<br />
</pre><br />
|-<br />
||CreateDiagram (Diagram)<br />
||Parameters dictionary<br />
||<br />
Creates a [[Diagram_in_Expression_Language|diagram]] to the model. Parameters is a dictionary containing diagram properties. Following properties are available:<br />
* '''Name''' (string): Diagram name that distinguishes diagrams in a model.<br />
* '''Description''' (string): Diagram description text.<br />
* '''Content''' (dictionary): Diagram content as dictionary.<br />
<br />
Example:<br />
<pre><br />
ModelById(1)<br />
.CreateDiagram(#{<br />
"Name": "My diagram",<br />
"Description": "This is my new diagram",<br />
"Content": #{ ... },<br />
})<br />
</pre><br />
|-<br />
||CreateFilter (Filter)<br />
||Parameters dictionary<br />
||Creates a filter to a model. Requires ''GenericWrite'' permission for the project and global ''CreateModel'' permission. If a filter with that name already exists in the model, an exception is thrown.<br />
The parameters dictionary may have the following properties:<br />
* '''Name''': Name of the filter. This property is mandatory.<br />
* '''Description''': Description of the filter. This property is optional.<br />
* '''Rules''': Filter rules for the filter defined as a dictionary according to the [[Filtering_in_QPR_ProcessAnalyzer_Queries|filter json format]]. This property is mandatory.<br />
* '''PublishMode''': Publish mode of the filter which is one of the following: ''Private'', ''Public'' or ''Default''. This property is optional, and the default value is ''Private''.<br />
<br />
Example:<br />
<pre><br />
let newFilter = modelById(1).CreateFilter(#{ <br />
"Name": "My Filter",<br />
"Rules": #{<br />
"Items": [#{<br />
"Type": "IncludeCases",<br />
"Items": [#{<br />
"Type": "CaseAttributeValue",<br />
"Attribute": "Account Manager",<br />
"StringifiedValues": [ "0Robert Miller" ]<br />
}]<br />
}]<br />
},<br />
"PublishMode": "Public"<br />
});<br />
}<br />
</pre><br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||Deletes the Model permanently. The model doesn't need to be in the recycle bin to be able to delete it permanently.<br />
|-<br />
||Modify (Model)<br />
||Dictionary<br />
||<br />
Modifies model properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: ''Name'', ''Description'', ''ProjectId'', and ''Configuration''.<br />
<br />
The function returns the updated model object. Requires the ''GenericWrite'' permission for the project and the global ''CreateModel'' permission.<br />
<br />
Example:<br />
<pre><br />
ModelById(1)<br />
.Modify(#{<br />
"Name": "My model",<br />
"Description": "My description",<br />
"ProjectId": 2,<br />
"Configuration": #{<br />
"DataSource": #{<br />
"Cases": #{<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My cases datatable",<br />
"Columns": #{<br />
"CaseId": "Case Name"<br />
}<br />
},<br />
"Events": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My events datatable",<br />
"Columns": #{<br />
"CaseId": "Case Name",<br />
"EventType": "Event Type",<br />
"Timestamp": "Start Time"<br />
}<br />
}<br />
}<br />
}<br />
}<br />
)<br />
</pre><br />
|-<br />
||ResetPreprocessings<br />
||(none)<br />
||<br />
Removes all cached items related to the Model, e.g. preprocessings and calculation results. In practice, the Model is reset to a state where it was right after the model was loaded into memory.<br />
|-<br />
||Restore<br />
||(none)<br />
||Restores the Model from the recycle bin back to the original location.<br />
|-<br />
||<span id="ToSqlDataFrame">ToSqlDataFrame</span><br />
||In-memory dataframe<br />
||Converts an in-memory dataframe to an SQL dataframe. In practice, an SQL query is created from the in-memory dataframe and the query is executed in the datasource so that the data is available in the datasource for further SQL operations. This function is intended only to small amounts of data which is less than 16384 rows.<br />
<br />
Example: Select matching cases from events data using in-memory dataframe:<br />
<pre><br />
let model = ModelById(1);<br />
let dfEvents = model.EventsDatatable.SqlDataFrame;<br />
let inMemoryDf = ToDataFrame(<br />
[["1"], ["2"], ["3"]],<br />
[#{"Name": "id", "DataType": "String"}]<br />
);<br />
model.ToSqlDataFrame(inMemoryDf)<br />
.Join(dfEvents, ["id": "CaseId"])<br />
.SelectDistinct(["CaseId"])<br />
.Collect();<br />
</pre><br />
|-<br />
||<span id="TriggerNotifications">TriggerNotifications</span> (Boolean)<br />
||Notification names (String*)<br />
||Triggers the given notifications for the Model. Notifications are given by their names. Triggering means that the configured rules are run and notification emails are sent as defined by the rules. If the notification names parameter is not provided, all notifications in the Model are triggered.<br />
<br />
The function return ''true'' if any notification were triggered, otherwise ''false''.<br />
<pre><br />
ModelById(123).TriggerNotifications(["Notification 1", "Notification 2"]);<br />
Triggers notifications Notification 1 and Notification 2 in model id 123.<br />
<br />
ModelById(123).TriggerNotifications();<br />
Triggers all notifications in model id 123.<br />
</pre><br />
|}<br />
<br />
Function to get Model by model id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ModelById<br />
||<br />
* Model id (Integer)<br />
||<br />
Returns [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Model|Model]] object corresponding to the provided model id.<br />
|}<br />
<br />
== Project ==<br />
{| class="wikitable"<br />
!'''Project properties'''<br />
! '''Description'''<br />
|-<br />
||CreatedBy (User)<br />
||User who created the Project.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the Project was created.<br />
|-<br />
||Dashboards (Dashboard*)<br />
||Returns all [[Dashboard_in_Expression_Language|dashboards]] in the project.<br />
|-<br />
||Datatables (Datatable*)<br />
||Returns all Datatables in the project.<br />
|-<br />
||DeletedDate (DateTime)<br />
||Timestamp when the Project was deleted (moved to the recycle bin).<br />
|-<br />
||Description (String)<br />
||Project description. The project description may contain line breaks.<br />
|-<br />
||DeletedBy (User)<br />
||User who deleted the Project (moved to the recycle bin).<br />
|-<br />
||Id (Integer)<br />
||Id of the Project.<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last modified the Project.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the Project was last modified (refers to the project name, description and parent, not the contents of the project).<br />
|-<br />
||Name (String)<br />
||Name of the Project.<br />
|-<br />
||Models (Model*)<br />
||Models that are in the Project.<br />
|-<br />
||Parent (Project)<br />
||Parent project, i.e. a Project where the Project is located in the hierarchy of Projects. Returns ''null'' for root level Projects. Throws an error if user doesn't have access to the parent project.<br />
|-<br />
||ParentProjectId (Integer)<br />
||Parent project id. Returns ''null'' for root level Projects. The parent project id is returned even if user doesn't have access to the parent project.<br />
|-<br />
||Scripts (Script*)<br />
||Scripts that are in the Project.<br />
|-<br />
||Secrets (Dictionary*)<br />
||Returns array of all [[Storing_Secrets_for_Scripts|secrets]] in the project as Dictionary with following properties:<br />
* '''Name''' (string): Name of the secret.<br />
* '''Type''' (string): Type of the secret which is one of the following: "odbc", "sap", "salesforce".<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Project functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||CreateDashboard (Dashboard)<br />
||Parameters dictionary<br />
||Creates a dashboard to the project. ''EditDashboards'' permission to the project is required. The parameter is dictionary with following supported dashboard properties:<br />
* '''Name''' (String): Name of the dashboard.<br />
* '''Identifier''' (String): Identifier of the dashboard.<br />
* '''Description''' (String): Description of the dashboard.<br />
* '''Content''' (Dictionary): Content of the dashboard.<br />
<br />
Example: Create empty dashboard.<br />
<pre><br />
ProjectById(1)<br />
.CreateDashboard(#{<br />
"Name": "My dashboard",<br />
"Identifier": "MyDashboard"<br />
});<br />
</pre><br />
<br />
Example: Create dashboard with a chart.<br />
<pre><br />
ProjectById(1)<br />
.CreateDashboard(#{<br />
"Name": "My dashboard",<br />
"Content": #{<br />
"version": 4,<br />
"typeName": "View",<br />
"name": "My dashboard",<br />
"subElements": [<br />
#{<br />
"position": #{<br />
"x": 0,<br />
"y": 0,<br />
"width": 0.5,<br />
"height": 0.5,<br />
"zOrder": 0<br />
},<br />
"element": #{<br />
"typeName": "Chart",<br />
"configuration": #{<br />
"root": #{<br />
"expressionType": "Cases",<br />
"expressionParameters": #{}<br />
},<br />
"measures": [#{<br />
"expressionType": "Count",<br />
"expressionParameters": #{}<br />
}]<br />
}<br />
}<br />
}<br />
]<br />
}<br />
});<br />
</pre><br />
|-<br />
||<span id="CreateDatatable">CreateDatatable</span> (Datatable)<br />
||<br />
* Parameters dictionary<br />
||Creates datatable to the project. After creation, there are no columns or rows in the datatable. The function returns the created datatable entity. Following properties can be set for the datatable:<br />
* '''Name''' (string): Name of the datatable. This parameter is mandatory.<br />
* '''Description''' (string): Description for the datatable. This parameter is optional.<br />
* '''NameInDataSource''' (string): Table name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''SchemaNameInDataSource''' (string): Schema name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''DatabaseNameInDataSource''' (string): Database name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''Type''' (string): Defines where the data for the datatable is located. Available values are '''Snowflake''', '''SqlServer''', and '''Local'''. This parameter is optional and default value is defined by the [[PA_Configuration_database_table#General_Settings|DefaultDataSource]] setting.<br />
* '''Connection''': Connection object for the datatable. This parameter is optional.<br />
<br />
Example: Create a new datatable:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable"<br />
});<br />
</pre><br />
<br />
Example: Create Snowflake datatable linked to a custom table:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable",<br />
"Description": "My description",<br />
"NameInDataSource": "MyTable",<br />
"SchemaNameInDataSource": "MySchema",<br />
"DatabaseNameInDataSource": "MyDatabase",<br />
"Type": "Snowflake"<br />
});<br />
</pre><br />
<br />
Example: Create Snowflake datatable where connection string is stored as a [[Storing_Secrets_for_Scripts|secret]]:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable",<br />
"Type": "Snowflake",<br />
"Connection": ProjectById(1).CreateSnowflakeConnection(#{ "OdbcConnectionStringKey": "MyKey" })<br />
});<br />
</pre><br />
|-<br />
||CreateModel (Model)<br />
||<br />
* Parameters dictionary<br />
||Creates a model to a project. Requires ''GenericWrite'' permission for the Project and global ''CreateModel'' permission. If a model with that name already exists, an exception is thrown.<br />
<br />
Parameters dictionary has the following properties:<br />
* '''Name''': Name of the model. This property is mandatory.<br />
* '''Description''': Description of the model. This property is optional.<br />
* '''Configuration''': Configuration dictionary for the model. This property is technically optional, but a working model requires at least datasource settings to be defined.<br />
<br />
Example:<br />
<pre><br />
ProjectById(1).CreateModel(#{ <br />
"Name": "My model",<br />
"Description": "My description",<br />
"Configuration": {<br />
"DataSource": {<br />
"Cases": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My cases datatable",<br />
"Columns": {<br />
"CaseId": "Case Name"<br />
}<br />
},<br />
"Events": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My events datatable",<br />
"Columns": {<br />
"CaseId": "Case Name",<br />
"EventType": "Event Type",<br />
"Timestamp": "Start Time"<br />
}<br />
}<br />
}<br />
}<br />
});<br />
</pre><br />
|-<br />
||DatatableByName (Datatable)<br />
||Datatable name (String)<br />
||<br />
Returns Datatable by its name located in the project. Returns null, if Datatable with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).DatatableByName("MyDatatable1")<br />
</pre><br />
<br />
Example: Get datatable by name, and create it if it doesn't exist:<br />
<pre><br />
let project = ProjectById(123);<br />
let datatableName = "MyDatatable1";<br />
let datatable = project.DatatableByName(datatableName);<br />
if (datatable == null) {<br />
datatable = project.CreateDatatable(datatableName);<br />
}<br />
</pre><br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||Deletes the Project permanently. Note that the Project doesn't need to be in the recycle bin to be able to delete it permanently.<br />
|-<br />
||Restore<br />
||(none)<br />
||Restores the Project from the recycle bin back to the original location.<br />
|-<br />
||ModelByName (Model)<br />
||Model name (String)<br />
||<br />
Returns Model by its name located in the project. Returns null, if Model with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).ModelByName("My Model 1")<br />
</pre><br />
|-<br />
||ScriptByName (Script)<br />
||Script name (String)<br />
||<br />
Returns Script by its name located in the project. Returns null, if Script with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).ScriptByName("MyScript1")<br />
</pre><br />
|-<br />
||<span id="SetSecret">SetSecret</span><br />
||<br />
# Secret type (string)<br />
# Secret name (string)<br />
# Secret value (string)<br />
||Sets or adds a [[Storing_Secrets_for_Scripts|secret]] for the project. Setting the secret value to ''null'' removes the secret. There can be several secrets with the same name in the same project if the type of the secret is different. Setting secrets requires the project specific ''ManageProject'' permission.<br />
<br />
Parameters:<br />
# '''Type''' (string): Secret type which is one of the following:<br />
#* "odbc": ODBC connection string (e.g., to extract data, or load a model directly)<br />
#* "externaldatatableconnection": ODBC connection string used for a datatable<br />
#* "sap": SAP password<br />
#* "salesforce": Salesforce password<br />
# '''Name''' (string): Secret name, used to refer to the secret in the commands.<br />
# '''Value''' (string): Secret value which contains the confidential information.<br />
<br />
Example: Set SAP password:<br />
<pre><br />
ProjectById(1).SetSecret("sap", "MySapPassword", "I l0ve 5AP!");<br />
</pre><br />
<br />
Example: Remove SAP password:<br />
<pre><br />
ProjectById(1).SetSecret("sap", "MySapPassword", null);<br />
</pre><br />
|}<br />
<br />
Function to get Project by id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ProjectById<br />
||Project id (Integer)<br />
||<br />
Returns project object corresponding to the provided project id.<br />
|-<br />
||ProjectByName<br />
||Project name (String)<br />
||<br />
Returns project object by given project name. If there is no such project or user doesn't have access to it, ''null'' value is returned. If there are multiple projects with the same name, one of them is returned.<br />
<br />
Example:<br />
<pre><br />
let project = ProjectByName("My Project");<br />
</pre><br />
|}<br />
<br />
== Script ==<br />
Scripts are entities that contain executable code, that can be run. Usually scripts contains ETL routines but also other kind of tasks are possible.<br />
<br />
{| class="wikitable"<br />
!'''Script properties'''<br />
! '''Description'''<br />
|-<br />
||Code (String)<br />
||Script code.<br />
|-<br />
||CreatedBy (User)<br />
||User who created the Script.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the Script was created.<br />
|-<br />
||CurrentRunStart (DateTime)<br />
||Timestamp of the current run start. Null if the script is currently not running.<br />
|-<br />
||Description (String)<br />
||Description of the Script.<br />
|-<br />
||Id (Integer)<br />
||Id of the Script.<br />
|-<br />
||Language (String)<br />
||Either of the following scripting language: '''Expression''' or '''SQL'''. When language is Expression, the script is run as an expression script, and when language is SQL, the script is run as an SQL script (using the sandbox database).<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last modified the Script.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the Script was last modified.<br />
|-<br />
||LastRunEnd (DateTime)<br />
||Timestamp of the last completed script run end (either successful completion or failure). Null if the Script hasn't been run yet.<br />
|-<br />
||LastRunResult (String)<br />
||Result of the last run. Options are:<br />
* '''Completed''': The last run was completed successfully.<br />
* '''Failed''': An error occurred during the last run, so likely the script did not complete as intended.<br />
* '''Aborted''': Script run was manually stopped prematurely by a user, so the script did not proceeded in the end.<br />
<br />
Null if the Script hasn't been run yet.<br />
|-<br />
||LastRunStart (DateTime)<br />
||Timestamp of the last completed script run start time. Null if the Script hasn't been run yet.<br />
|-<br />
||Name (String)<br />
||Name of the Script.<br />
|-<br />
||OperationId (Integer)<br />
||Id of the operation which runs the Script. Null if the script is currently not running.<br />
|-<br />
||Project (Project)<br />
||Project where the Script is located. Null if the script is in the global context.<br />
|-<br />
||ProjectId (Integer)<br />
||Id of the project where the Script is located. Null if the script is in the global context.<br />
|-<br />
||Status (String)<br />
||Current status of the script. Options are:<br />
* '''Ready''': Script is not running. In this status, the script can be started (changing the status to ''Running'').<br />
* '''Running''': Script is running. In this status, the script can be stopped (changing the status to ''Stopping''). Calling stop just requests a script to stop, and the actual stopping occurs some time later.<br />
* '''Stopping''': Script has been requested to be stopped, but it's still running. In this status, neither start nor stop can be called for the script. When the script eventually stops, its status changes to ''Ready''.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Script functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||Run (Object)<br />
||Dictionary of parameters<br />
||<br />
Runs the script using the provided parameters. The parameters are available in the script as variables (see the example). Any type of variables can be passed to the script. Note that if the script assumes certain variables, but that they are not passed to the script, the script run will throw an error. <br />
<br />
For SQL scripts, the passed parameters are available in the script as variables in format '''@_parameter_<ParameterName>''' where <ParameterName> is the name of the parameter, e.g. ''parameter_myParameter1''. Only string type of parameters can be used, so any other type of data in parameter values is converted into strings.<br />
<br />
The return value of the script is returned by the Run function. Expression scripts return a value with the ''return'' statement or alternatively the result of the last line of the script is the return value. If the script does not return any value, the Run function returns ''_empty''. For SQL scripts, the return value is the last dataset produced by the script (returned as a DataFrame) (SQL scripts might create several datasets using the ''--#ShowReport'' command or the ''Show'' parameter).<br />
<br />
When a script is called using the Run function, the called script status does not change, because it's the parent script that is ''Running''. Also the called script log is not filled, but instead the logging goes to the calling script.<br />
<br />
It's possible to call a script using the Run function several times simultaneously.<br />
<br />
If there is an error when running the called script, the Run function throws the error to the calling script.<br />
<br />
Scripts are run in the script entity context, so for example the following properties are available:<br />
* Id: Script id<br />
* Name: Script name<br />
* Project.Id: Project id where the script is located<br />
* Project.Name: Name of the project where the script is located<br />
<br />
Example: Following script (id 123) raises a specified number to a specified power:<br />
<pre><br />
return Pow(numberToRaise, exponent);<br />
</pre><br />
<br />
The script can be called as follows:<br />
<pre><br />
let runResult = ScriptById(123).Run(#{<br />
"numberToRaise": 4,<br />
"exponent": 2<br />
})<br />
Returns: 16<br />
</pre> <br />
|}<br />
<br />
Function to get a script by the script id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ScriptById<br />
||<br />
* Script id (Integer)<br />
||<br />
Returns Script object corresponding to the given script id. If script with the given id doesn't exist or user doesn't have permissions to it, an error is given.<br />
|}<br />
<br />
== User/Group ==<br />
User objects represents users and user groups. Note that some properties can only be used for users and some for groups.<br />
<br />
{| class="wikitable"<br />
!'''User/group properties'''<br />
! '''Description'''<br />
|-<br />
||Description (String)<br />
||Description of the user.<br />
|-<br />
||Email (String)<br />
||Email address of the user.<br />
|-<br />
||FullName (String)<br />
||Full name of the user or group name.<br />
|-<br />
||GlobalPermissions (String*)<br />
||Array of global [[Roles and Permissions#Global_and_Project_Roles|permissions]] of the user. Global permissions come from the global roles assigned to the user and groups that the user belongs to. Note that to get the effective permissions for certain objects, also project specific permissions need to be taken into account.<br />
|-<br />
||GroupMemberNames (String*)<br />
||Array of names of members of a user group. This property is available for groups.<br />
|-<br />
||GroupMembers (User*)<br />
||Array of members of a user group. This property is available for groups.<br />
|-<br />
||GroupNames (String*)<br />
||Array of names of user groups the user belongs to. This property is available for users.<br />
|-<br />
||Groups (User*)<br />
||Array of user groups the user belongs to. This property is available for users.<br />
|-<br />
||HasPassword (Boolean)<br />
||Returns true if user has a password defined in QPR ProcessAnalyzer and thus user can authenticate using the password. If user doesn't have a password, the SAML authentication is the only way to log in. ''ManageUsers'' permission is needed to access this property for other users.<br />
|-<br />
||Id (Integer)<br />
||Id of the user, which is unique for every user.<br />
|-<br />
||IsActive (Boolean)<br />
||Returns true only if the user is active (not disabled).<br />
|-<br />
||IsGroup (Boolean)<br />
||Returns true if the user is a user group.<br />
|-<br />
||IsLocked (Boolean)<br />
||Returns true if user account is currently [[User_Session_Management#Preventing_password_guessing_attacks|locked]]. ''ManageUsers'' permission is needed to access this property.<br />
|-<br />
||LastLockedDate (DateTime)<br />
||Returns date when user account was locked the last time. Returns ''null'' if the user account has never been locked. ''ManageUsers'' permission is needed to access this property.<br />
|-<br />
||LastLoginDate (DateTime)<br />
||Returns date when the user made last successful login. ''ManageUsers'' permission is needed to access this property for other users.<br />
|-<br />
||Name (String)<br />
||Login name of the user or group.<br />
|-<br />
||Roles (Object**)<br />
||<br />
Returns all roles of the user (both global and project roles) as a nested array structure.<br />
<br />
Example:<br />
<pre><br />
ToJson(Users.Where(name == "qpr").Roles)<br />
Returns (for example):<br />
[<br />
[{"calcId": "Project:1"}, "Administrator"],<br />
[{"calcId": "Project:2"}, "Analyzer"],<br />
[{"calcId": "Project:3"}, "Viewer"],<br />
[null, "RunScripts"],<br />
[null, "Administrator"]<br />
]<br />
</pre><br />
|}<br />
<br />
{| class="wikitable"<br />
!'''User/group functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||EffectivePermissionsFor (String Array)<br />
||<br />
* Project to get permissions<br />
||<br />
Returns effective (actual) permission of the user to the given project. Project is given as a [[#Project|project object]] (not as a project id). Effective permissions determine the actual permissions that the user has, i.e. a combination of all permissions assigned to the user and groups the user belong to, including both project specific and global roles.<br />
<br />
Permissions for the EffectivePermissionsFor function are as follows:<br />
* All users can query their own permissions<br />
* To get permissions for any user, the user needs to have [[Roles_and_Permissions|ManageUsers permission]].<br />
<br />
Note that ''inactive'' users don't have any effective permissions, so the EffectivePermissionsFor function does not return any permissions for those users.<br />
<br />
Examples:<br />
<pre><br />
EffectivePermissionsFor(ModelById(1234).Project)<br />
Returns (for example): ["EditDashboards", "Filtering", "GenericRead"]<br />
</pre><br />
|-<br />
||GetAttribute<br />
||<br />
||<br />
Returns user attribute value by given attribute name and optionally by the model/project/dashboard context. Supported data types are String, Integer, Float, and DateTime. To store more complex data types, data can be converted into json and stored as string. If the attribute doesn't exist, null is returned.<br />
<br />
For example, if using dashboard as context, the attributes are effectively bound to each user and each dashboard separately. Thus, there can be several attributes with the same name as long as the dashboard is different.<br />
<br />
Parameters:<br />
# '''Attribute name''' (String): Name of the attribute.<br />
# '''Attribute context''' (Project/Model/Dashboard): Optional context object the attribute is linked to.<br />
<br />
Users have permissions to get attributes for themselves, and also (administrator) users with global ''ManageUsers'' permission can get attributes for all users. In addition, if using the context object, the ''GenericRead'' permission is required for the context object.<br />
<br />
Example: Get user attribute MyDataValue for myself:<br />
<pre><br />
CurrentUser<br />
.GetAttribute("MyDataValue");<br />
</pre><br />
<br />
Example: Get user attribute MyDataValue for user John:<br />
<pre><br />
Users<br />
.Where(Name=="John")<br />
.GetAttribute("MyDataValue");<br />
</pre><br />
<br />
Example: Get user attribute MyDataValue for user 1 related to dashboard id 1:<br />
<pre><br />
UserById(1)<br />
.GetAttribute("MyDataValue", DashboardById(1));<br />
</pre><br />
|-<br />
||SetAttribute<br />
||<br />
||<br />
Sets user attribute value for given attribute name and optionally for the model/project/dashboard context. Supported data types are String, Integer, Float, and DateTime. To store more complex data types, data can be converted into json and stored as string. If setting value ''null'', the user attribute is removed. Required permissions are same as in the GetAttribute function.<br />
<br />
Parameters:<br />
# '''Attribute name''' (String): Name of the attribute.<br />
# '''Attribute value''' (String/Integer/Float/DateTime): Attribute value to be stored.<br />
# '''Attribute context''' (Project/Model/Dashboard): Optional context object the attribute value is linked to.<br />
<br />
Example: Set user attribute MyDataValue for myself:<br />
<pre><br />
CurrentUser<br />
.SetAttribute("MyDataValue ", "value");<br />
</pre><br />
<br />
Example: Set value 123 as user attribute MyDataValue for user John:<br />
<pre><br />
Users<br />
.Where(Name=="John")<br />
.SetAttribute("MyDataValue", 123);<br />
</pre><br />
<br />
Example: Set current time as user attribute MyDataValue for user 1 related to dashboard id 1:<br />
<pre><br />
UserById(1)<br />
.GetAttribute("MyDataValue", Now, DashboardById(1));<br />
</pre><br />
|}<br />
<br />
Function to get User by user id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||UserById<br />
||<br />
* User id (Integer)<br />
||<br />
Returns User object corresponding to the provided user id.<br />
|}</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Objects_in_Expression_Language&diff=24473QPR ProcessAnalyzer Objects in Expression Language2024-03-06T13:21:41Z<p>Ollvihe: /* Project */</p>
<hr />
<div>==Filter==<br />
Filters contain a set of filter rules used to filter cases and events in models. Filters are objects located in the models. Filters are owned by the creator user, and when a filter publish mode is private, only the creator can use it.<br />
<br />
{| class="wikitable"<br />
!'''Filter properties'''<br />
! '''Description'''<br />
|-<br />
||CreatedBy (User)<br />
||Returns the user who created the filter.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Returns date when the filter created date.<br />
|-<br />
||Description (String)<br />
||Returns description of the filter.<br />
|-<br />
||Id (Integer)<br />
||Returns id of the filter.<br />
|-<br />
||LastModifiedBy (User)<br />
||Returns user who modified the filter.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Returns date when the filter last modified.<br />
|-<br />
||Model<br />
||Returns model where the filter belongs to.<br />
|-<br />
||ModelId (Integer)<br />
||Returns model where the filter belongs to.<br />
|-<br />
||Name (String)<br />
||Returns the name of the filter.<br />
|-<br />
||Project<br />
||Returns project where the filter belongs to.<br />
|-<br />
||ProjectId (Integer)<br />
||Returns project id where the filter belongs to.<br />
|-<br />
||PublishMode (String)<br />
||Returns publish mode of the filter, one of the following: '''Private''', '''Public''', or '''Default'''.<br />
|-<br />
||Rules (Dictionary)<br />
||Returns a dictionary containing the filter rules in the filter.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Filter Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||<br />
Deletes the filter permanently. To delete own filters, the '''Filtering''' permission is needed, and to delete any filters the '''ManageViews''' permission is needed.<br />
|-<br />
||Modify<br />
||Dictionary<br />
||<br />
Modifies filter properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: ''Name'', ''Description'', ''PublishMode'', and ''Rules''.<br />
<br />
The function returns the updated filter object. Requires ''GenericWrite'' permission for the Project and global ''CreateModel'' permission.<br />
<br />
Example:<br />
<pre><br />
FilterById(1)<br />
.Modify(#{<br />
"Name": "My filter",<br />
"Description": "My description",<br />
"PublishMode": "Public",<br />
"Rules": #{<br />
"Items": [<br />
#{<br />
"Type": "IncludeCases",<br />
"Items": [<br />
#{<br />
"Type": "CaseAttributeValue",<br />
"Attribute": "Account Manager",<br />
"StringifiedValues": [<br />
"0Mary Wilson"<br />
]<br />
}<br />
]<br />
}<br />
]<br />
}<br />
}<br />
)<br />
</pre><br />
|}<br />
<br />
Function to get filter id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||FilterById<br />
||<br />
* Filter id (Integer)<br />
||<br />
Returns Filter object corresponding to the provided filter id.<br />
|}<br />
<br />
==Model==<br />
Notes:<br />
* For in-memory models that are offline, the object counts represent the situation when the model was last time online (loaded into the memory). ''null'' is returned if the model has never been loaded into the memory.<br />
* If [[Case_Level_Permissions|Case permissions]] are used for the model, and user doesn't have '''GenericWrite''' permission for the model, ''null'' is returned for data security reasons. Users that have the '''GenericWrite''' permission, see null when the model is offline, and when online, they see counts where the case level permissions settings are applied.<br />
* Properties ''CaseAttributes'', ''EventAttributes'' and ''Eventlog'' work only for the in-memory models and they require the model to be loaded into the memory. If the model is not in the memory, it is loaded when these properties is used. Other model properties down require the model to be in the memory.<br />
<br />
{| class="wikitable"<br />
!'''Model properties'''<br />
! '''Description'''<br />
|-<br />
||Calendars (BusinessCalendar*)<br />
||<br />
Returns all [[Business_Calendar|business calendars]] stored to the Model as an array. Returns an empty array, if there are no business calendars stored to the model. Note: UI allows to set only one business calendar for a Model.<br />
|-<br />
||CaseAttributes (AttributeType*)<br />
||[[#AttributeType|CaseAttributes]] in the model returned in the alphabetical order. Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||CasesDatatable (Datatable)<br />
||Returns the Datatable the model uses as a datasource for cases. Returns ''null'' if the cases Datatable is not defined or if model uses other than the Datatable datasource.<br />
|-<br />
||Configuration (Dictionary)<br />
||Returns the Model configuration as dictionary. Example:<br />
<pre><br />
ModelById(123).Configuration.DataSource.Events.DataTableName<br />
</pre><br />
|-<br />
||ConfigurationJson (String)<br />
||Returns the Model configuration as JSON string.<br />
|-<br />
||CreatedBy (User)<br />
||User who created the model.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the model was created.<br />
|-<br />
||DefaultCalendar (BusinessCalendar)<br />
||Returns the default [[Business_Calendar|business calendar]] of the Model. Returns ''null'', if there are no calendars in the Model or no calendar has been set as a default calendar. Note: UI allows to set only one business calendar for a Model, which is also the default calendar.<br />
|-<br />
||DefaultFilter (Filter)<br />
||Default filter of the model. Returns ''null'' if the model does not have a default filter.<br />
|-<br />
||DefaultFilterId (Integer)<br />
||Default filter id of the model. Returns ''null'' if the model does not have a default filter.<br />
|-<br />
||Description (String)<br />
||Model description. The model description may contain line breaks.<br />
|-<br />
||DeletedDate (DateTime)<br />
||Timestamp when Model was deleted (moved to the recycle bin).<br />
|-<br />
||DeletedBy (User)<br />
||User how deleted the Model.<br />
|-<br />
||Diagrams (Diagram*)<br />
||Returns an array of all [[Diagram_in_Expression_Language|diagrams]] in the model.<br />
|-<br />
||EstimatedMemory (Integer)<br />
||Returns an estimation of how much memory in bytes the model requires.<br />
|-<br />
||EventsDatatable (Datatable)<br />
||Returns the Datatable the model uses as a datasource for events. Returns ''null'' if the events Datatable is not defined or if model uses other than the Datatable datasource.<br />
|-<br />
||EventAttributes (AttributeType*)<br />
||[[#AttributeType|EventAttributes]] in the model returned in the alphabetical order. Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||EventLog (EventLog)<br />
||EventLog containing the entire model (i.e. event log where no filters have been applied). Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||Filters (Filter*)<br />
||Returns an array of all [[#Filter|filters]] in the model.<br />
|-<br />
||Id (Integer)<br />
||Model Id. Model Id is generated by QPR ProcessAnalyzer when the model is created.<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last time modified the model properties. Note that datatables containing the eventlog data are separate objects having similar fields to track the last modification and last data import.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the model was modified the last time.<br />
|-<br />
||Name (String)<br />
||Model name.<br />
|-<br />
||NCache (Integer)<br />
||Number of objects related to the model when the model is loaded into the memory.<br />
|-<br />
||NCaseAttributes (Integer)<br />
||Number of [[#AttributeType|CaseAttributes]] in model. Works only for in-memory models.<br />
|-<br />
||NCases (Integer)<br />
||Number of [[#Case|Cases]] in the model. Works only for in-memory models.<br />
|-<br />
||NEventAttributes (Integer)<br />
||Number of [[#AttributeType|EventAttributes]] in model. Works only for in-memory models.<br />
|-<br />
||NEvents (Integer)<br />
||Number of [[#Event|Events]] in model. Works only for in-memory models.<br />
|-<br />
||NEventTypes (Integer)<br />
||Number of [[#EventType|EventTypes]] in the model. Works only for in-memory models.<br />
|-<br />
||NOpens (Integer)<br />
||Number of times analysis has been requested from the model.<br />
|-<br />
||Project (Project)<br />
||[[#Project|Project]] where the model belongs to.<br />
|-<br />
||ProjectId (Integer)<br />
||[[#Project|Project]] id where the model belongs to.<br />
|-<br />
||Status (String)<br />
||<br />
Memory availability status of the model. There are the following statuses:<br />
* '''Loading''': The model is currently loading into the memory. When the loading is ready, the status changes to ''online''. If the loading fails, the status changes to ''offline''.<br />
* '''Offline''': The model is currently not loaded into the memory. The model needs to be loaded into the memory, so that analyses can be calculated from the model (occurs automatically when an analysis is requested).<br />
* '''Online''': The model is in the memory and ready for analysis calculation. If the model is dropped from the memory, its status changes to ''offline''.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Model Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||CalendarByName (BusinessCalendar)<br />
||<br />
name (String)<br />
||<br />
Returns a [[Business_Calendar|business calendar]] stored to the Model by the name of the calendar. Business calendars can be stored to models in the model properties. Returns ''null'', if a calendar with the provided name is not stored to the model.<br />
<br />
Examples:<br />
<pre><br />
ModelById(123).CalendarByName("MyCalendar")<br />
</pre><br />
|-<br />
||CreateDiagram (Diagram)<br />
||Parameters dictionary<br />
||<br />
Creates a [[Diagram_in_Expression_Language|diagram]] to the model. Parameters is a dictionary containing diagram properties. Following properties are available:<br />
* '''Name''' (string): Diagram name that distinguishes diagrams in a model.<br />
* '''Description''' (string): Diagram description text.<br />
* '''Content''' (dictionary): Diagram content as dictionary.<br />
<br />
Example:<br />
<pre><br />
ModelById(1)<br />
.CreateDiagram(#{<br />
"Name": "My diagram",<br />
"Description": "This is my new diagram",<br />
"Content": #{ ... },<br />
})<br />
</pre><br />
|-<br />
||CreateFilter (Filter)<br />
||Parameters dictionary<br />
||Creates a filter to a model. Requires ''GenericWrite'' permission for the project and global ''CreateModel'' permission. If a filter with that name already exists in the model, an exception is thrown.<br />
The parameters dictionary may have the following properties:<br />
* '''Name''': Name of the filter. This property is mandatory.<br />
* '''Description''': Description of the filter. This property is optional.<br />
* '''Rules''': Filter rules for the filter defined as a dictionary according to the [[Filtering_in_QPR_ProcessAnalyzer_Queries|filter json format]]. This property is mandatory.<br />
* '''PublishMode''': Publish mode of the filter which is one of the following: ''Private'', ''Public'' or ''Default''. This property is optional, and the default value is ''Private''.<br />
<br />
Example:<br />
<pre><br />
let newFilter = modelById(1).CreateFilter(#{ <br />
"Name": "My Filter",<br />
"Rules": #{<br />
"Items": [#{<br />
"Type": "IncludeCases",<br />
"Items": [#{<br />
"Type": "CaseAttributeValue",<br />
"Attribute": "Account Manager",<br />
"StringifiedValues": [ "0Robert Miller" ]<br />
}]<br />
}]<br />
},<br />
"PublishMode": "Public"<br />
});<br />
}<br />
</pre><br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||Deletes the Model permanently. The model doesn't need to be in the recycle bin to be able to delete it permanently.<br />
|-<br />
||Modify (Model)<br />
||Dictionary<br />
||<br />
Modifies model properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: ''Name'', ''Description'', ''ProjectId'', and ''Configuration''.<br />
<br />
The function returns the updated model object. Requires the ''GenericWrite'' permission for the project and the global ''CreateModel'' permission.<br />
<br />
Example:<br />
<pre><br />
ModelById(1)<br />
.Modify(#{<br />
"Name": "My model",<br />
"Description": "My description",<br />
"ProjectId": 2,<br />
"Configuration": #{<br />
"DataSource": #{<br />
"Cases": #{<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My cases datatable",<br />
"Columns": #{<br />
"CaseId": "Case Name"<br />
}<br />
},<br />
"Events": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My events datatable",<br />
"Columns": #{<br />
"CaseId": "Case Name",<br />
"EventType": "Event Type",<br />
"Timestamp": "Start Time"<br />
}<br />
}<br />
}<br />
}<br />
}<br />
)<br />
</pre><br />
|-<br />
||ResetPreprocessings<br />
||(none)<br />
||<br />
Removes all cached items related to the Model, e.g. preprocessings and calculation results. In practice, the Model is reset to a state where it was right after the model was loaded into memory.<br />
|-<br />
||Restore<br />
||(none)<br />
||Restores the Model from the recycle bin back to the original location.<br />
|-<br />
||<span id="ToSqlDataFrame">ToSqlDataFrame</span><br />
||In-memory dataframe<br />
||Converts an in-memory dataframe to an SQL dataframe. In practice, an SQL query is created from the in-memory dataframe and the query is executed in the datasource so that the data is available in the datasource for further SQL operations. This function is intended only to small amounts of data which is less than 16384 rows.<br />
<br />
Example: Select matching cases from events data using in-memory dataframe:<br />
<pre><br />
let model = ModelById(1);<br />
let dfEvents = model.EventsDatatable.SqlDataFrame;<br />
let inMemoryDf = ToDataFrame(<br />
[["1"], ["2"], ["3"]],<br />
[#{"Name": "id", "DataType": "String"}]<br />
);<br />
model.ToSqlDataFrame(inMemoryDf)<br />
.Join(dfEvents, ["id": "CaseId"])<br />
.SelectDistinct(["CaseId"])<br />
.Collect();<br />
</pre><br />
|-<br />
||<span id="TriggerNotifications">TriggerNotifications</span> (Boolean)<br />
||Notification names (String*)<br />
||Triggers the given notifications for the Model. Notifications are given by their names. Triggering means that the configured rules are run and notification emails are sent as defined by the rules. If the notification names parameter is not provided, all notifications in the Model are triggered.<br />
<br />
The function return ''true'' if any notification were triggered, otherwise ''false''.<br />
<pre><br />
ModelById(123).TriggerNotifications(["Notification 1", "Notification 2"]);<br />
Triggers notifications Notification 1 and Notification 2 in model id 123.<br />
<br />
ModelById(123).TriggerNotifications();<br />
Triggers all notifications in model id 123.<br />
</pre><br />
|}<br />
<br />
Function to get Model by model id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ModelById<br />
||<br />
* Model id (Integer)<br />
||<br />
Returns [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Model|Model]] object corresponding to the provided model id.<br />
|}<br />
<br />
== Project ==<br />
{| class="wikitable"<br />
!'''Project properties'''<br />
! '''Description'''<br />
|-<br />
||CreatedBy (User)<br />
||User who created the Project.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the Project was created.<br />
|-<br />
||Dashboards (Dashboard*)<br />
||Returns all [[Dashboard_in_Expression_Language|dashboards]] in the project.<br />
|-<br />
||Datatables (Datatable*)<br />
||Returns all Datatables in the project.<br />
|-<br />
||DeletedDate (DateTime)<br />
||Timestamp when the Project was deleted (moved to the recycle bin).<br />
|-<br />
||Description (String)<br />
||Project description. The project description may contain line breaks.<br />
|-<br />
||DeletedBy (User)<br />
||User who deleted the Project (moved to the recycle bin).<br />
|-<br />
||Id (Integer)<br />
||Id of the Project.<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last modified the Project.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the Project was last modified (refers to the project name, description and parent, not the contents of the project).<br />
|-<br />
||Name (String)<br />
||Name of the Project.<br />
|-<br />
||Models (Model*)<br />
||Models that are in the Project.<br />
|-<br />
||Parent (Project)<br />
||Parent project, i.e. a Project where the Project is located in the hierarchy of Projects. Returns ''null'' for root level Projects. Throws an error if user doesn't have access to the parent project.<br />
|-<br />
||ParentProjectId (Integer)<br />
||Parent project id. Returns ''null'' for root level Projects. The parent project id is returned even if user doesn't have access to the parent project.<br />
|-<br />
||Scripts (Script*)<br />
||Scripts that are in the Project.<br />
|-<br />
||Secrets (Dictionary*)<br />
||Returns array of all [[Storing_Secrets_for_Scripts|secrets]] in the project as Dictionary with following properties:<br />
* '''Name''' (string): Name of the secret.<br />
* '''Type''' (string): Type of the secret which is one of the following: "odbc", "sap", "salesforce".<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Project functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||CreateDashboard (Dashboard)<br />
||Parameters dictionary<br />
||Creates a dashboard to the project. ''EditDashboards'' permission to the project is required. The parameter is dictionary with following supported dashboard properties:<br />
* '''Name''' (String): Name of the dashboard.<br />
* '''Identifier''' (String): Identifier of the dashboard.<br />
* '''Description''' (String): Description of the dashboard.<br />
* '''Content''' (Dictionary): Content of the dashboard.<br />
<br />
Example: Create empty dashboard.<br />
<pre><br />
ProjectById(1)<br />
.CreateDashboard(#{<br />
"Name": "My dashboard",<br />
"Identifier": "MyDashboard"<br />
});<br />
</pre><br />
<br />
Example: Create dashboard with a chart.<br />
<pre><br />
ProjectById(1)<br />
.CreateDashboard(#{<br />
"Name": "My dashboard",<br />
"Content": #{<br />
"version": 4,<br />
"typeName": "View",<br />
"name": "My dashboard",<br />
"subElements": [<br />
#{<br />
"position": #{<br />
"x": 0,<br />
"y": 0,<br />
"width": 0.5,<br />
"height": 0.5,<br />
"zOrder": 0<br />
},<br />
"element": #{<br />
"typeName": "Chart",<br />
"configuration": #{<br />
"root": #{<br />
"expressionType": "Cases",<br />
"expressionParameters": #{}<br />
},<br />
"measures": [#{<br />
"expressionType": "Count",<br />
"expressionParameters": #{}<br />
}]<br />
}<br />
}<br />
}<br />
]<br />
}<br />
});<br />
</pre><br />
|-<br />
||<span id="CreateDatatable">CreateDatatable</span> (Datatable)<br />
||<br />
* Parameters dictionary<br />
||Creates datatable to the project. After creation, there are no columns or rows in the datatable. The function returns the created datatable entity. Following properties can be set for the datatable:<br />
* '''Name''' (string): Name of the datatable. This parameter is mandatory.<br />
* '''Description''' (string): Description for the datatable. This parameter is optional.<br />
* '''NameInDataSource''' (string): Table name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''SchemaNameInDataSource''' (string): Schema name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''DatabaseNameInDataSource''' (string): Database name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''Type''' (string): Defines where the data for the datatable is located. Available values are '''Snowflake''', '''SqlServer''', and '''Local'''. This parameter is optional and default value is defined by the [[PA_Configuration_database_table#General_Settings|DefaultDataSource]] setting.<br />
* '''Connection''': Connection object for the datatable. This parameter is optional.<br />
<br />
Example: Create a new datatable:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable"<br />
});<br />
</pre><br />
<br />
Example: Create Snowflake datatable linked to a custom table:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable",<br />
"Description": "My description",<br />
"NameInDataSource": "MyTable",<br />
"SchemaNameInDataSource": "MySchema",<br />
"DatabaseNameInDataSource": "MyDatabase",<br />
"Type": "Snowflake"<br />
});<br />
</pre><br />
<br />
Example: Create Snowflake datatable where connection string is stored as a [[Storing_Secrets_for_Scripts|secret]]:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable",<br />
"Type": "Snowflake",<br />
"Connection": ProjectById(1).CreateSnowflakeConnection(#{ "OdbcConnectionStringKey": "MyKey" })<br />
});<br />
</pre><br />
|-<br />
||CreateModel (Model)<br />
||<br />
* Parameters dictionary<br />
||Creates a model to a project. Requires ''GenericWrite'' permission for the Project and global ''CreateModel'' permission. If a model with that name already exists, an exception is thrown.<br />
<br />
Parameters dictionary has the following properties:<br />
* '''Name''': Name of the model. This property is mandatory.<br />
* '''Description''': Description of the model. This property is optional.<br />
* '''Configuration''': Configuration dictionary for the model. This property is technically optional, but a working model requires at least datasource settings to be defined.<br />
<br />
Example:<br />
<pre><br />
ProjectById(1).CreateModel(#{ <br />
"Name": "My model",<br />
"Description": "My description",<br />
"Configuration": {<br />
"DataSource": {<br />
"Cases": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My cases datatable",<br />
"Columns": {<br />
"CaseId": "Case Name"<br />
}<br />
},<br />
"Events": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My events datatable",<br />
"Columns": {<br />
"CaseId": "Case Name",<br />
"EventType": "Event Type",<br />
"Timestamp": "Start Time"<br />
}<br />
}<br />
}<br />
}<br />
});<br />
</pre><br />
|-<br />
||DatatableByName (Datatable)<br />
||Datatable name (String)<br />
||<br />
Returns Datatable by its name located in the project. Returns null, if Datatable with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).DatatableByName("MyDatatable1")<br />
</pre><br />
<br />
Example: Get datatable by name, and create it if it doesn't exist:<br />
<pre><br />
let project = ProjectById(123);<br />
let datatableName = "MyDatatable1";<br />
let datatable = project.DatatableByName(datatableName);<br />
if (datatable == null) {<br />
datatable = project.CreateDatatable(datatableName);<br />
}<br />
</pre><br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||Deletes the Project permanently. Note that the Project doesn't need to be in the recycle bin to be able to delete it permanently.<br />
|-<br />
||Restore<br />
||(none)<br />
||Restores the Project from the recycle bin back to the original location.<br />
|-<br />
||ModelByName (Model)<br />
||Model name (String)<br />
||<br />
Returns Model by its name located in the project. Returns null, if Model with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).ModelByName("My Model 1")<br />
</pre><br />
|-<br />
||ScriptByName (Script)<br />
||Script name (String)<br />
||<br />
Returns Script by its name located in the project. Returns null, if Script with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).ScriptByName("MyScript1")<br />
</pre><br />
|-<br />
||<span id="SetSecret">SetSecret</span><br />
||<br />
# Secret type (string)<br />
# Secret name (string)<br />
# Secret value (string)<br />
||Sets or adds a [[Storing_Secrets_for_Scripts|secret]] for the project. Setting the secret value to ''null'' removes the secret. There can be several secrets with the same name in the same project if the type of the secret is different. Setting secrets requires the project specific ''ManageProject'' permission.<br />
<br />
Parameters:<br />
# '''Type''' (string): Secret type which is one of the following: "odbc" (ODBC connection string), "sap" (SAP password), "salesforce" (Salesforce password).<br />
# '''Name''' (string): Secret name, used to refer to the secret in the commands.<br />
# '''Value''' (string): Secret value which contains the confidential information.<br />
<br />
Example: Set SAP password:<br />
<pre><br />
ProjectById(1).SetSecret("sap", "MySapPassword", "I l0ve 5AP!");<br />
</pre><br />
<br />
Example: Remove SAP password:<br />
<pre><br />
ProjectById(1).SetSecret("sap", "MySapPassword", null);<br />
</pre><br />
|}<br />
<br />
Function to get Project by id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ProjectById<br />
||Project id (Integer)<br />
||<br />
Returns project object corresponding to the provided project id.<br />
|-<br />
||ProjectByName<br />
||Project name (String)<br />
||<br />
Returns project object by given project name. If there is no such project or user doesn't have access to it, ''null'' value is returned. If there are multiple projects with the same name, one of them is returned.<br />
<br />
Example:<br />
<pre><br />
let project = ProjectByName("My Project");<br />
</pre><br />
|}<br />
<br />
== Script ==<br />
Scripts are entities that contain executable code, that can be run. Usually scripts contains ETL routines but also other kind of tasks are possible.<br />
<br />
{| class="wikitable"<br />
!'''Script properties'''<br />
! '''Description'''<br />
|-<br />
||Code (String)<br />
||Script code.<br />
|-<br />
||CreatedBy (User)<br />
||User who created the Script.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the Script was created.<br />
|-<br />
||CurrentRunStart (DateTime)<br />
||Timestamp of the current run start. Null if the script is currently not running.<br />
|-<br />
||Description (String)<br />
||Description of the Script.<br />
|-<br />
||Id (Integer)<br />
||Id of the Script.<br />
|-<br />
||Language (String)<br />
||Either of the following scripting language: '''Expression''' or '''SQL'''. When language is Expression, the script is run as an expression script, and when language is SQL, the script is run as an SQL script (using the sandbox database).<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last modified the Script.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the Script was last modified.<br />
|-<br />
||LastRunEnd (DateTime)<br />
||Timestamp of the last completed script run end (either successful completion or failure). Null if the Script hasn't been run yet.<br />
|-<br />
||LastRunResult (String)<br />
||Result of the last run. Options are:<br />
* '''Completed''': The last run was completed successfully.<br />
* '''Failed''': An error occurred during the last run, so likely the script did not complete as intended.<br />
* '''Aborted''': Script run was manually stopped prematurely by a user, so the script did not proceeded in the end.<br />
<br />
Null if the Script hasn't been run yet.<br />
|-<br />
||LastRunStart (DateTime)<br />
||Timestamp of the last completed script run start time. Null if the Script hasn't been run yet.<br />
|-<br />
||Name (String)<br />
||Name of the Script.<br />
|-<br />
||OperationId (Integer)<br />
||Id of the operation which runs the Script. Null if the script is currently not running.<br />
|-<br />
||Project (Project)<br />
||Project where the Script is located. Null if the script is in the global context.<br />
|-<br />
||ProjectId (Integer)<br />
||Id of the project where the Script is located. Null if the script is in the global context.<br />
|-<br />
||Status (String)<br />
||Current status of the script. Options are:<br />
* '''Ready''': Script is not running. In this status, the script can be started (changing the status to ''Running'').<br />
* '''Running''': Script is running. In this status, the script can be stopped (changing the status to ''Stopping''). Calling stop just requests a script to stop, and the actual stopping occurs some time later.<br />
* '''Stopping''': Script has been requested to be stopped, but it's still running. In this status, neither start nor stop can be called for the script. When the script eventually stops, its status changes to ''Ready''.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Script functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||Run (Object)<br />
||Dictionary of parameters<br />
||<br />
Runs the script using the provided parameters. The parameters are available in the script as variables (see the example). Any type of variables can be passed to the script. Note that if the script assumes certain variables, but that they are not passed to the script, the script run will throw an error. <br />
<br />
For SQL scripts, the passed parameters are available in the script as variables in format '''@_parameter_<ParameterName>''' where <ParameterName> is the name of the parameter, e.g. ''parameter_myParameter1''. Only string type of parameters can be used, so any other type of data in parameter values is converted into strings.<br />
<br />
The return value of the script is returned by the Run function. Expression scripts return a value with the ''return'' statement or alternatively the result of the last line of the script is the return value. If the script does not return any value, the Run function returns ''_empty''. For SQL scripts, the return value is the last dataset produced by the script (returned as a DataFrame) (SQL scripts might create several datasets using the ''--#ShowReport'' command or the ''Show'' parameter).<br />
<br />
When a script is called using the Run function, the called script status does not change, because it's the parent script that is ''Running''. Also the called script log is not filled, but instead the logging goes to the calling script.<br />
<br />
It's possible to call a script using the Run function several times simultaneously.<br />
<br />
If there is an error when running the called script, the Run function throws the error to the calling script.<br />
<br />
Scripts are run in the script entity context, so for example the following properties are available:<br />
* Id: Script id<br />
* Name: Script name<br />
* Project.Id: Project id where the script is located<br />
* Project.Name: Name of the project where the script is located<br />
<br />
Example: Following script (id 123) raises a specified number to a specified power:<br />
<pre><br />
return Pow(numberToRaise, exponent);<br />
</pre><br />
<br />
The script can be called as follows:<br />
<pre><br />
let runResult = ScriptById(123).Run(#{<br />
"numberToRaise": 4,<br />
"exponent": 2<br />
})<br />
Returns: 16<br />
</pre> <br />
|}<br />
<br />
Function to get a script by the script id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ScriptById<br />
||<br />
* Script id (Integer)<br />
||<br />
Returns Script object corresponding to the given script id. If script with the given id doesn't exist or user doesn't have permissions to it, an error is given.<br />
|}<br />
<br />
== User/Group ==<br />
User objects represents users and user groups. Note that some properties can only be used for users and some for groups.<br />
<br />
{| class="wikitable"<br />
!'''User/group properties'''<br />
! '''Description'''<br />
|-<br />
||Description (String)<br />
||Description of the user.<br />
|-<br />
||Email (String)<br />
||Email address of the user.<br />
|-<br />
||FullName (String)<br />
||Full name of the user or group name.<br />
|-<br />
||GlobalPermissions (String*)<br />
||Array of global [[Roles and Permissions#Global_and_Project_Roles|permissions]] of the user. Global permissions come from the global roles assigned to the user and groups that the user belongs to. Note that to get the effective permissions for certain objects, also project specific permissions need to be taken into account.<br />
|-<br />
||GroupMemberNames (String*)<br />
||Array of names of members of a user group. This property is available for groups.<br />
|-<br />
||GroupMembers (User*)<br />
||Array of members of a user group. This property is available for groups.<br />
|-<br />
||GroupNames (String*)<br />
||Array of names of user groups the user belongs to. This property is available for users.<br />
|-<br />
||Groups (User*)<br />
||Array of user groups the user belongs to. This property is available for users.<br />
|-<br />
||HasPassword (Boolean)<br />
||Returns true if user has a password defined in QPR ProcessAnalyzer and thus user can authenticate using the password. If user doesn't have a password, the SAML authentication is the only way to log in. ''ManageUsers'' permission is needed to access this property for other users.<br />
|-<br />
||Id (Integer)<br />
||Id of the user, which is unique for every user.<br />
|-<br />
||IsActive (Boolean)<br />
||Returns true only if the user is active (not disabled).<br />
|-<br />
||IsGroup (Boolean)<br />
||Returns true if the user is a user group.<br />
|-<br />
||IsLocked (Boolean)<br />
||Returns true if user account is currently [[User_Session_Management#Preventing_password_guessing_attacks|locked]]. ''ManageUsers'' permission is needed to access this property.<br />
|-<br />
||LastLockedDate (DateTime)<br />
||Returns date when user account was locked the last time. Returns ''null'' if the user account has never been locked. ''ManageUsers'' permission is needed to access this property.<br />
|-<br />
||LastLoginDate (DateTime)<br />
||Returns date when the user made last successful login. ''ManageUsers'' permission is needed to access this property for other users.<br />
|-<br />
||Name (String)<br />
||Login name of the user or group.<br />
|-<br />
||Roles (Object**)<br />
||<br />
Returns all roles of the user (both global and project roles) as a nested array structure.<br />
<br />
Example:<br />
<pre><br />
ToJson(Users.Where(name == "qpr").Roles)<br />
Returns (for example):<br />
[<br />
[{"calcId": "Project:1"}, "Administrator"],<br />
[{"calcId": "Project:2"}, "Analyzer"],<br />
[{"calcId": "Project:3"}, "Viewer"],<br />
[null, "RunScripts"],<br />
[null, "Administrator"]<br />
]<br />
</pre><br />
|}<br />
<br />
{| class="wikitable"<br />
!'''User/group functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||EffectivePermissionsFor (String Array)<br />
||<br />
* Project to get permissions<br />
||<br />
Returns effective (actual) permission of the user to the given project. Project is given as a [[#Project|project object]] (not as a project id). Effective permissions determine the actual permissions that the user has, i.e. a combination of all permissions assigned to the user and groups the user belong to, including both project specific and global roles.<br />
<br />
Permissions for the EffectivePermissionsFor function are as follows:<br />
* All users can query their own permissions<br />
* To get permissions for any user, the user needs to have [[Roles_and_Permissions|ManageUsers permission]].<br />
<br />
Note that ''inactive'' users don't have any effective permissions, so the EffectivePermissionsFor function does not return any permissions for those users.<br />
<br />
Examples:<br />
<pre><br />
EffectivePermissionsFor(ModelById(1234).Project)<br />
Returns (for example): ["EditDashboards", "Filtering", "GenericRead"]<br />
</pre><br />
|-<br />
||GetAttribute<br />
||<br />
||<br />
Returns user attribute value by given attribute name and optionally by the model/project/dashboard context. Supported data types are String, Integer, Float, and DateTime. To store more complex data types, data can be converted into json and stored as string. If the attribute doesn't exist, null is returned.<br />
<br />
For example, if using dashboard as context, the attributes are effectively bound to each user and each dashboard separately. Thus, there can be several attributes with the same name as long as the dashboard is different.<br />
<br />
Parameters:<br />
# '''Attribute name''' (String): Name of the attribute.<br />
# '''Attribute context''' (Project/Model/Dashboard): Optional context object the attribute is linked to.<br />
<br />
Users have permissions to get attributes for themselves, and also (administrator) users with global ''ManageUsers'' permission can get attributes for all users. In addition, if using the context object, the ''GenericRead'' permission is required for the context object.<br />
<br />
Example: Get user attribute MyDataValue for myself:<br />
<pre><br />
CurrentUser<br />
.GetAttribute("MyDataValue");<br />
</pre><br />
<br />
Example: Get user attribute MyDataValue for user John:<br />
<pre><br />
Users<br />
.Where(Name=="John")<br />
.GetAttribute("MyDataValue");<br />
</pre><br />
<br />
Example: Get user attribute MyDataValue for user 1 related to dashboard id 1:<br />
<pre><br />
UserById(1)<br />
.GetAttribute("MyDataValue", DashboardById(1));<br />
</pre><br />
|-<br />
||SetAttribute<br />
||<br />
||<br />
Sets user attribute value for given attribute name and optionally for the model/project/dashboard context. Supported data types are String, Integer, Float, and DateTime. To store more complex data types, data can be converted into json and stored as string. If setting value ''null'', the user attribute is removed. Required permissions are same as in the GetAttribute function.<br />
<br />
Parameters:<br />
# '''Attribute name''' (String): Name of the attribute.<br />
# '''Attribute value''' (String/Integer/Float/DateTime): Attribute value to be stored.<br />
# '''Attribute context''' (Project/Model/Dashboard): Optional context object the attribute value is linked to.<br />
<br />
Example: Set user attribute MyDataValue for myself:<br />
<pre><br />
CurrentUser<br />
.SetAttribute("MyDataValue ", "value");<br />
</pre><br />
<br />
Example: Set value 123 as user attribute MyDataValue for user John:<br />
<pre><br />
Users<br />
.Where(Name=="John")<br />
.SetAttribute("MyDataValue", 123);<br />
</pre><br />
<br />
Example: Set current time as user attribute MyDataValue for user 1 related to dashboard id 1:<br />
<pre><br />
UserById(1)<br />
.GetAttribute("MyDataValue", Now, DashboardById(1));<br />
</pre><br />
|}<br />
<br />
Function to get User by user id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||UserById<br />
||<br />
* User id (Integer)<br />
||<br />
Returns User object corresponding to the provided user id.<br />
|}</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&diff=24472QPR ProcessAnalyzer Release Notes2024-03-06T12:23:57Z<p>Ollvihe: /* Next Release: QPR ProcessAnalyzer 2024.3 (planned release date 2024-04-02) */</p>
<hr />
<div>This page lists all new features and fixed issues for each QPR ProcessAnalyzer release.<br />
<br />
== Next Release: QPR ProcessAnalyzer 2024.3 (planned release date 2024-04-02) ==<br />
<br />
'''Features:'''<br />
* B-08242: [[Actions_to_Run_Script_in_Table|Custom actions]] can be started from dashboard table context menu, e.g., create ticket, trigger automation and fetch external information.<br />
* B-08231: Snowflake performance improved by changing object counts query (shown in header) into two queries, so that the filtered object count uses eventlog caching.<br />
* B-07906: Implemented cross joins to SQL dataframes.<br />
* B-03047: Removed support for dashboard panels.<br />
* B-08214: Removed unused columns from the PA_VIEW table.<br />
<br />
'''Fixed issues:'''<br />
<br />
* D-14048: Fixed issue where in-memory root causes analysis for case attributes didn't show attributes with ShortString data type.<br />
* D-14049: Added some missing translations for table column filter and BPMN editor.<br />
* D-14021: FindRootCauses function WeightingExpression was run in incorrect context for in-memory model.<br />
* D-14020: Query which goes from EventTypes to Cases did not show the error when using GetValueFrom function.<br />
* D-13976: Fixed issue where gateway-based imports were not synchronous.<br />
<br />
== Latest: Additional release for QPR ProcessAnalyzer 2024.2 (build 5509) (released 2024-02-27) ==<br />
<br />
'''Features:'''<br />
<br />
* B-06280: User management dialog shows whether users have password defined and unnecessary passwords can be removed to improve security.<br />
<br />
'''Fixed issues:'''<br />
<br />
* D-14045: Fixed issue where users with Viewer or Analyzer role couldn't create filters in Snowflake models.<br />
<br />
== QPR ProcessAnalyzer 2024.2 (build 5438) (released 2024-02-21) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue: Snowflake models and dashboards don't work with Viewer and Analyzer role permisions. The reason is that cache tables created to Snowflake incorrectly require the write permissions. Workaround is to give users the Designer role which will give the needed permissions. Note that the Designer role gives many permissions to the user for the project [[Roles_and_Permissions#Roles_and_Permissions|(more information)]]. This issue has been fixed in the next release (D-14045).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
The legacy User permissions report (analysis number 11) and Filters report (analysis number 30) used in SQL scripts have been removed. Use instead the expressions language to query filters and user permissions, e.g., [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|Models.Filters]] and [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
New version of the Design diagram component has been improved with object-specific measures, and the previous common measures are not migrated into object-specific measures. Thus, the measures need to be configured again, or manually edit the chart json settings (if needed please ask instructions from QPR CustomerCare).<br />
</div><br />
<br />
'''Features:'''<br />
* B-08022: Design diagram supports now BPMN notation, elbow style flows and object-specific measures.<br />
* B-08232: Entire future eventlogs can be [[Create_Predicted_Eventlog|predicted]] based on generative AI models running in Snowflake.<br />
* B-08166: Added expression language function [[Generic_Functions_in_QPR_ProcessAnalyzer#OpenAIChatCompletion|OpenAIChatCompletion]] to answer natural language prompts based on OpenAI ChatGPT API.<br />
* B-08177: Snowflake query performance has been improved by introducing caching of filtered eventlogs using Snowflake tables.<br />
* B-08196: Conditional formatting rules can be defined for [[QPR_ProcessAnalyzer_Table#Textual_equal_rules_for_background_color|textual and boolean values]].<br />
* B-08213: Big data chart expressions event type selections to be multi-select where applicable.<br />
* B-08205: Expression language API is available for storing [[Storing_Secrets_for_Scripts|secrets]] for scripts.<br />
* B-07780: Chart [[QPR_ProcessAnalyzer_Chart#Variable_mappings|variable mappings]] has been removed - use the [[Chart_Linked_Settings|linked settings]] instead. Dashboards using variable mappings are automatically converted to use linked settings.<br />
* B-08117: Added ToSqlDataFrame function to convert in-memory dataframe into SQL dataframes.<br />
* B-08174: Only non-default parameters values are written to the operation log.<br />
* B-08200: Timestamps in System reports are shown in user workstation local time.<br />
* B-08171: Dashboard id has been added to queries, to track from which dashboard queries are originating.<br />
* B-07144: Remove legacy User permissions report (analysis number 11) and Filters report (analysis number 30) in SQL scripts (see note above).<br />
* B-08193: Added retry mechanism to QPR ScriptLauncher to recover if connection to server breaks.<br />
* B-08202: Updated copyright for year 2024.<br />
* B-08199: Frontend components have been updated.<br />
* B-08203: Backend components have been updated.<br />
* B-08209: Translations updated for release 2024.2.<br />
<br />
'''Fixed issues:'''<br />
* D-13972: Some measures/dimensions/columns in Big data chart didn't show the expressions level filtering.<br />
* D-14015: Fixed business calendar incorrect calculation when business period covered entire day.<br />
* D-14014: Fixed issue where Snowflake business calendar could not have end time as 00:00.<br />
* D-13962: System variable values were interpreted incorrectly when used in linked settings.<br />
* D-13971: HiddenInNavigation and SortOrder variables didn't work in navigation menu dashboards list.<br />
* D-13959: Removed possibility to add datatable columns with the legacy "any" data type.<br />
* D-13991: Improved drop-down selector component to handle empty strings as variable values.<br />
* D-13965: Datatable column name length was validated incorrectly which may have caused error in saving with too long column names.<br />
* D-13958: Project names showed unnecessary html escaping in the "Move to" menu.<br />
* D-13964: Model attributes and notifications dialogs gave error when trying to use dashboard tags.<br />
* D-13960: Added missing translations for list of permission list and 12-hour clock format.<br />
* D-13966: Fixed issue were root causes chart tooltip sometimes didn't disappear.<br />
* D-13969: Datatable column schema export sometimes showed empty for the key column.<br />
* D-13862: Session token was not accepted when url path capitalization is different.<br />
* D-13942: Datatable could not be dimensioned if it has column named "CaseId".<br />
* D-13980: Business calendar dialog crashed when tried to open it for a model without access.<br />
* D-13983: Notifications dialog didn't validate situation when same name was used in a measure and dimension.<br />
* D-13981: Dashboard import set incorrect model id to dashboard if there was no access to any model.<br />
* D-11276: Translations were missing for 12-hour clock dates (AM and PM) in dashboards.<br />
* D-13977: Multi-select dropdown lists showed some special characters incorrectly.<br />
* D-13945: Syncfusion toast message didn't work when text contains ${[]}.<br />
* D-13930: Pivot table throws javascript error when certain clicks.<br />
* D-13273: Duplicate datatable row count didn't shown correctly.<br />
* D-13994: There was an error in the in-memory chart with some flow related measures about duplicate variable names when same measure was defined twice.<br />
* D-13985: Models list dots menu had texts misaligned in narrow screens.<br />
* D-13995: In Workspace, wrong datatable was selected after duplication when non-default sorting was applied.<br />
* D-13997: Workspace tables column filtering search caused JavaScript errors.<br />
* D-13978: In table Excel export, the last row representing other items appeared incorrectly for in-memory chart.<br />
* D-14007: In System reports, model related selections are hidden from the Analyzed objects lists.<br />
* D-14005: In big data chart, changing to custom expression caused crash with some expressions having case/event attribute.<br />
* D-14003: When dimensioning was not used, pivot table values were incorrectly rounded in the server side.<br />
* D-14004: Removed empty filters from queries to optimize them.<br />
* D-13988: Fixed issue where data grid context menu rendered initially as too high.<br />
* D-13979: BPMN model editor element settings use now Open Sans font.<br />
* D-14013: Fixed incorrect expression "Duration between first and last occurrence" in big data chart event types.<br />
* D-13984: Fixed the error of refusing to run the JavaScript URL.<br />
* D-14031: ThrownObject property was not included to http error response when error came from the script.<br />
<br />
== QPR ProcessAnalyzer 2024.1 (build 4784) (released 2024-01-10) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue fixed in QPR ProcessAnalyzer 2024.2: In Big data chart, some measures, dimensions and columns have the filtering option missing. The issue concerns for example Duration between events, Path starting/until between specific events, and Cases where event occurs before other selections. Workaround is to set the filter in the chart json settings: the filter can be configured to another expression and copied to the correct expression.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
QPR ProcessAnalyzer Server and QPR ScriptLauncher are now using .Net 8 (previous was .Net 6). When updating to this release, install the .Net 8 Runtime ([[Updating_QPR_ProcessAnalyzer_Server|see more]]). The .Net 6 doesn't need to be uninstalled immediately because .Net 6 and .Net 8 work side-by-side, but due to security reasons, the unused .Net 6 should eventually be uninstalled.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In this release, all filters that don't contain any filter rules, are removed. These are legacy filters which have not been visible in the UI.<br />
</div><br />
<br />
'''Features:'''<br />
* B-08019: New component [[Design_Diagram|Design Diagram]] for showing user-created diagrams in dashboards where to visualize process mining metrics.<br />
* B-08087: Generic [[Dropdown_List_Selector|dropdown list selector]] works with Snowflake models allowing to add selection lists for any values.<br />
* B-08163: Linked settings support for binding to [[Chart_Linked_Settings#Binding_to_case_attribute_filters_with_attribute_name_and_attribute_values|case attribute filter values without defining case attribute name]].<br />
* B-08170: Snowflake model filters can be [[Filtering_in_QPR_ProcessAnalyzer#Filter_actions|saved as new models]] which can be used to create snapshots of part of models.<br />
* B-08093: Multiple dashboards can be exported to same file, and model can be set for imported dashboards.<br />
* B-08161: Added [[Datatable_in_Expression_Language#Modify|Modify]] function to change datatable properties and improved [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#CreateDatatable|CreateDatatable]] function for creating datatables.<br />
* B-08122: Added new system report to list dashboards.<br />
* B-08173: Removed legacy filters that didn't have any filter rules.<br />
* B-07961: In OperationLog, changed parameters to json format and added request id.<br />
* B-08069: Added DashboardId property to [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog]] in expression language.<br />
* B-08139: Added [[Datatable_in_Expression_Language#UpdateRows|UpdateRows]] function to update existing rows in datatables with similar logic than SQL update.<br />
* B-08115: Added [[Datatable_in_Expression_Language#DeleteRows|DeleteRows]] function to delete rows in datatables with similar logic than SQL delete.<br />
* B-08149: QPR ProcessAnalyzer has been updated to .Net 8.<br />
* B-08054: Changed Scripts property in generic context to return all scripts, instead of legacy system level scripts.<br />
* B-08138: Changed Synchronize function to remove all columns when no Snowflake table exists.<br />
* B-07689: For datatables, [[Datatable_in_Expression_Language#ForeignKeys|foreign keys]] to other datatables can be defined using expression language.<br />
* B-08176: Translation updates for release 2024.1.<br />
* B-08175: Workspace should show timestamps in user's local time.<br />
<br />
'''Fixed issues:'''<br />
* D-13913: Datatable properties dialog incorrectly showed linked models from other projects.<br />
* D-13916: Chart filter could not be defined for some expressions in Big data chart.<br />
* D-13933: Navigation menu selected item wasn't highlighted when used Snowflake models.<br />
* D-13906: In Conformance Analysis, deviating flows were not translated.<br />
* D-13907: Improved translation related to datatable properties dialog "Used by models" field.<br />
* D-13904: There was an unclear error message in Snowflake, as exception code 1 was returned without AttributeName and ModelName properties when non-existing attribute was in filter.<br />
* D-13911: Fixed small glitches in the opening and closing of drop-down lists.<br />
* D-13918: Datatable could be configured incorrectly to use table for other datatable.<br />
* D-13932: Duplicating datatable with custom table in datasource losed all data.<br />
* D-11002: Removed legacy in-memory prediction preset.<br />
* D-13912: Added check that array cannot be stored to dashboard Content property.<br />
* D-13936: Query designer default query didn't work with Snowflake models.<br />
* D-13938: There was an incorrect logging with some operations related to ScriptLauncher.<br />
* D-13923: Snowflake expressions didn't work with Where function in root referring to case attribute.<br />
* D-13939: ApplyFilter function gave null reference error for non-existing attribute name.<br />
* D-13931: There were issues with AllowExternalDatasources and EnableFullFunctionality settings.<br />
<br />
== QPR ProcessAnalyzer 2023.7 (build 4326) (released 2023-11-28) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Limitation for the maximum amount of data (B-07636) causes a behavior change in in-memory charts that have the Maximum rows settings empty and have the sorting defined. In certain cases, the order in which measures are evaluated changes (due to an internal performance optimization). If there are custom expressions that define variables, the variables may not be available in other measures anymore. As a resolution, either redefine the variables in those measure expressions or add those measures secondarily to the sorting.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Default query timeout of 30 minutes has been added for --#ImportOdbcQuery, --#ImportSqlQuery and --#ImportOleDbQuery commands. If a query run is taking longer than the timeout, the query is stopped. The timeout can be adjusted using the '''QueryExecutionTimeout''' parameter. Previously, there has been no timeout, so queries that take more than 30 minutes require configuring a longer timeout.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Incorrectly configured [[Chart_Linked_Settings|linked settings]] in charts (available in the ''Advanced'' tab) give now an error message, if they are referring to non-existing measures, dimensions or columns. Previously, incorrect linked settings were ignored. To fix the error message, remove the incorrect linked settings.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07511: Datatables have a [[Datatable_Properties_Dialog|dialog]] to view datatable properties, write description, set the Snowflake source table, add/modify/delete columns, and set the datatable key.<br />
* B-08150: Added setting [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|Apply chart filters first]] to determine whether chart filter rules or dashboard filter rules are applied first when chart queries are filtered.<br />
* B-08091: When filtering charts in Snowflake, case attribute filter is created instead of case id filter.<br />
* B-08091: [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|New setting]] to define whether cases or events are filtered by default.<br />
* B-08091: New preset "Looping paths" to detect whether there are repeating patterns of events.<br />
* B-08091: Duration between events calculation ignores negative durations in Snowflake.<br />
* B-08091: Chart loading animation has been renewed.<br />
* B-07636: To prevent dashboards from jamming when querying too much data, added [[QPR_ProcessAnalyzer_Chart#Available_Visualizations|limitations]] to the amount of data that charts can visualize. Note that the limitation concerns the aggregated data that is visualized, not the source event log data.<br />
* B-08017: [[Dashboard_in_Expression_Language|Dashboards API]] has been added to expression language, allowing to create, modify and delete dashboards in scripts.<br />
* B-08056: Following properties have been added to [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#User.2FGroup|user objects]] in expression language: IsLocked, LastLockedDate, LastLoginDate.<br />
* B-08053: [[Navigation_Menu#System_Reports|User rights report]] has been refactored to use [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property in the expression language. The change also simplifies the report as now it only shows the direct role assignments that are visible in the [[Manage_Users_and_Groups|User Management]].<br />
* B-08151: For Snowflake expressions support for following [[SQL_Expressions#Window_functions|windowing functions]]: sum, average, median, min, and max.<br />
* B-08050: When a model is created, the default filter is not created anymore (this is a refactoring that doesn't have any impact on user interface).<br />
* B-08123: Translation updates for 2023.7.<br />
* B-08092: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13876: In CreateSnowflakeConnection function, ProjectId parameter is optional when OdbcConnectionStringKey is not specified.<br />
* D-13898: Snowflake: Exclude case attribute filter didn't work when there was null values and was selecting at least two values.<br />
* D-13890: Fixed XES file import to work.<br />
* D-13894: Business calendar based duration calculation was incorrect in some durations that spanned to several weeks (for Snowflake and in-memory models).<br />
* D-13899: Using broken OdbcConnectionString in a datatable prevented the datatable from being deleted.<br />
* D-13883: Script run stucked after running a script with error that uses client-side ODBC import.<br />
* D-13879: SqlExpressionValue filter when excluding events didn't work with filter rule root expression only.<br />
* D-13896: Adding or removing columns to datatable didn't change the LastModifiedDate.<br />
* D-13882: User details weren't written to operation log when creating or modifying users.<br />
* D-13771: User rights system report didn't give error when changing columns.<br />
* D-13893: Some event filtering caused null pointer error when primary key had been defined.<br />
* D-13873: Fixed pivot table visual issues after component update.<br />
* D-13900: When adding, renaming or removing columns for Snowflake table fails, operation is now rolled back without any changes.<br />
* D-13866: Querying GET api/uielements was quite slow right after server start.<br />
* D-13864: Combinations of translatable and hardcoded strings didn't get translated in UI.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.6 (build 3933) (released 2023-10-24) ==<br />
<br />
'''Features:'''<br />
* B-08055: Error message for locked account has been replaced with generic error message, so that username enumeration is not possible.<br />
<br />
'''Fixed issues:'''<br />
* D-13884: Attributes dialog crashed with some older model configurations.<br />
* D-13843: In charts, selected case and event attributes switched away when attribute data type was ShortString.<br />
* D-13877: Some Snowflake expressions gave error "exceeds maximum length limit of 255 characters" when selecting lot of items.<br />
* D-13878: Snowflake expression filters for case attribute values didn't accept other than string type of case attributes.<br />
* D-13871: Some statistical calculations with percentages didn't work with Last Row Aggregates Over-limit Rows setting.<br />
* D-13875: Using some case level filters in a model without cases datatable didn't work.<br />
* D-13861: Dashboard opens are now logged to the Task log (i.e., calling GET /api/dashboards/{dashboardid}).<br />
* D-13870: Workspace projects hierarchy focused project showed light grey background making the project name not readable.<br />
* D-13867: When starting datatable refresh and going to other tab, went back to Datatables tab when query completed.<br />
* D-13853: If chart Custom Layout settings had extra series defined, chart may have crashed.<br />
* D-13869: Export as CSV button didn't work in the datatable contents dialog when dialog was still loading.<br />
* D-13872: Main progress spinner had unnecessary small scrollbar on top right.<br />
* D-13863: In the REST API method GET /api/users, password field (that has always been null) has been removed.<br />
<br />
== QPR ProcessAnalyzer 2023.6 (build 3847) (released 2023-10-17) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is removed in this release. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
'''Features:'''<br />
* B-07992: Added 10 new presets including Queue analysis, Four eyes principle, Self-looping events, and Path until selected event. There are also presets for Individual Cases Flow and Range of event type occurrences which use Gantt chart.<br />
* B-08011: Added following date related operations for Snowflake: Day of year, Day of month, Day of week, Week of year, Half-year only, Quarter only, Month only, Hours only, Minutes only, Seconds only, and Milliseconds only. These are available when calculating with date type of data.<br />
* B-08016: [[QPR_ProcessAnalyzer_Table#Table_actions|Table actions to set variables]] can also be opened to a new browser tab. Also improved user interface for table actions.<br />
* B-08018: For Snowflake expressions, added Flows aggregations FromEventType and ToEventType to get starting/ending event type, and FlowOccurrences aggregations FromEvent and ToEvent to get starting/ending event.<br />
* B-08001: Added [[Generic_Functions_in_QPR_ProcessAnalyzer#CallStoredProcedure|CallStoredProcedure]] function to call Snowflake stored procedures. This allows to start ETL transformation in Snowflake orchestrated by QPR ProcessAnalyzer script.<br />
* B-08013: Added [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property to expression language to replace the legacy UserPermissions analysis (11).<br />
* B-07976: Snowflake [[Filtering_in_QPR_ProcessAnalyzer_Queries#Expression|expression based filter rules]] support additional expression columns allowing more Big data chart expressions to be filterable.<br />
* B-08015: Big data chart doesn't anymore support calculation in SQL Server (using local datatables).<br />
* B-06270: Improved error messages and made them translatable by taking into use exception codes provided by server.<br />
* B-08021: Added possibility to store [[Diagram_in_Expression_Language|designed diagrams]] for models and expression language API for reading and modifying diagrams.<br />
* B-08037: Dropped following unused tables database: PA_IDEA, PA_IDEA_VOTE, PA_REPORT, PA_REPORT_SETTING, PA_SESSION_SERVICE, PA_VIEW_FILTER_RULE, PA_VIEW_FILTER_RULE_PARAMETER.<br />
* B-08052: Language translations have been updated to 2023.6.<br />
* B-08051: Frontend side components have been updated.<br />
* B-08034: Backend side components have been updated.<br />
<br />
'''Fixed issues:'''<br />
* D-13830: Object counts indicator in header showed incorrect counts when there was disabled filter rules in Snowflake models.<br />
* D-13833: In-memory charts didn't work with boolean type of dimensions when filtering with the false value.<br />
* D-13858: Target value measures didn't update chart when controlled using an on-screen setting.<br />
* D-13827: Calculated attributes data type was incorrectly set as Any by the Attributes dialog.<br />
* D-13849: Multiselect list search didn't allow spaces.<br />
* D-13829: Multiselect dropdown lists height jumped couple of pixels when selecting values.<br />
* D-13835: Deselecting a selected data point didn't remove chart filter rule.<br />
* D-13702: Improved Snowflake query performance in situations when there are lot of filter rules (by decreasing number of CTE's).<br />
* D-13819: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13820: Fixed incorrect manifest.json file to avoid "not found" errors when fetching web site icon.<br />
* D-13865: Break, continue, and return statements didn't work properly when called from inside a catch block.<br />
* D-13795: There was a Python error in clustering analysis with Snowflake model.<br />
* D-13823: Some tooltips in Workspace project hierarchy didn't work and caused a JavaScript error.<br />
* D-13824: BPMN editor align context menu layout looked strange.<br />
* D-13813: QPR logo button in the top left was misaligned in Firefox.<br />
* D-13797: Snowflake query may have given following error when using sampling: ambiguous column name '_EventType_NotNull_1'.<br />
* D-13774: TakeSample function with certain columns caused SQL compilation error: ambiguous column name 'Case Name'.<br />
* D-13782: Snowflake: Aggregating from variations didn't work when using sampling.<br />
* D-13836: Some tooltips had a strange two-colored background.<br />
* D-13834: Removed Model statistics column from clustering and root causes analysis.<br />
* D-13860: Removed filter button from the custom expressions in Task log analyzed objects.<br />
* D-13838: Removed Split data by filtering column from clustering analysis.<br />
* D-13832: Script and model status updates incorrectly sent next update when previous was still pending.<br />
* D-13839: Charts reset zoom button font size was too small.<br />
* D-13817: Importing data to Snowflake datatable with Append=0 doesn't now drop the underlying Snowflake table.<br />
* D-13825: Some models could not have been deleted from recycle bin.<br />
* D-13852: Recycle bin Projects and Models tab didn't show correct content when Recycle bin only contained either models or projects.<br />
* D-13841: In-memory chart Data type selection type has been corrected to string.<br />
* D-13842: Second time and Third time selections has been hidden in in-memory chart measures.<br />
* D-13850: In Chrome, there were console errors related in incorrect text field autocomplete type and text field without form.<br />
* D-13847: Improved browser side performance by removing unnecessary operations.<br />
* D-13859: Chart without dimensions showed an unnecessary Remove dimension button.<br />
* D-12598: When script is stopped in server, ScriptLauncher could still incorrectly continue to import data.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.5 (build 3334) (released 2023-09-07) ==<br />
<br />
'''Fixed issues:'''<br />
* D-13826: Measures or dimensions with case or event attribute and value selections incorrectly removed calculated attributes when dashboard was opened or chart settings were changed.<br />
* D-13821: Font size of some Highcharts tooltips was too small. Issue appeared when there were tooltips mappings in measures or dimensions.<br />
* D-13810: Simplified help links: now all Help buttons go to the QPR ProcessAnalyzer wiki main page.<br />
* D-13822: Snowflake clustering analysis showed empty strings and nulls as case attribute values in an unclear way as just nothing.<br />
<br />
== QPR ProcessAnalyzer 2023.5 (build 3304) (released 2023-09-05) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In Big Data Chart, the '''Case conformance''' measure and dimension has changed in a way that now it provides boolean values (true/false) instead of integer values (1/0). If [[Measure,_Dimension_and_Column_Settings#Other_settings|colorMappings]] are used for this measure or dimension to set specific colors to visualize conformant and nonconformant cases, the mapped values need to be changed as follows: '''1''' -> '''true''' and '''0''' -> '''false'''. Without the change, the mapped colors are not effective.<br />
<br />
Exmaple: Old configuration:<br />
<pre><br />
"colorMappings": {<br />
"1": "#36d475ff",<br />
"0": "#f5403bff"<br />
}<br />
</pre><br />
New configuration:<br />
<pre><br />
"colorMappings": {<br />
"true": "#36d475ff",<br />
"false": "#f5403bff"<br />
}<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is deprecated. Big data chart has allowed to process data both in Snowflake and SQL Server. Now the support for SQL Server is deprecated and the Big data chart will only support calculation in Snowflake. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). The OperationLog analysis is replaced by the [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog function]] and the Infcluencers analysis is replaced by the [[FindRootCauses_Function|FindRootCauses function]].<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [12, 14, 15, 16, 29];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
By default, Snowflake ODBC driver generates quite much logging to files which might unnecessarily fill up the disk space. It's recommended to set the LogLevel parameter to value 0. The path where the logs are created can be seen in Windows registry (key LogPath). More information about configuring Snowflake ODBC parameters: https://docs.snowflake.com/en/developer-guide/odbc/odbc-parameters.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07971: Machine learning based [[Clustering_Analysis|Clustering analysis]] can be run in Snowflake.<br />
* B-07989: In dashboard designer the stacking order of charts can be changed with buttons [[QPR_ProcessAnalyzer_Dashboard_Designer#Viewing_and_Editing_Dashboards|Bring to front, Send to back, Bring forward and Send backward]].<br />
* B-07977: For [[Sankey_Chart|sankey diagram]], added Start level and End level mappings to define custom start and end level for the sankey flows. Implemented also color mappings to define specific colors for specific values.<br />
* B-08010: To improve performance, charts are loaded and updated only when they are visible in the dashboard.<br />
* B-07975: Added following [[SQL_Expressions#Date_functions|date related functions]] to Snowflake: DayOfYear, DayOfWeek, WeekOfYear, Quarter.<br />
* B-07908: When [[QPR_ProcessAnalyzer_Project_Workspace#Duplicating_Model|model is duplicated]], also filters in the model are also duplicated.<br />
* B-07904: Filters and models API for expression language has been completed.<br />
* B-07991: In [[Filter_Selectors|case and event type filter selectors]], threshold whether the dropdown list or search dialog is shown can be defined using the ''Maximum Rows'' setting. Also the search dialog filters search results by other filter rules in the dashboard.<br />
* B-07999: Filters report has been changed to use the [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|expression language API for filters]].<br />
* B-07540: Added [[QPR_ProcessAnalyzer_Expressions#Throwing_objects|throw statement]] to expression language.<br />
* B-07813: UI components are updated. There are small visual improvements, such as in flowchart flows are routed a bit differently and in charts the hidden series is shown as strike-through in the legend.<br />
* B-07963: Following legacy analysis types have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29) (see more information in the note above).<br />
<br />
'''Fixed issues:'''<br />
* D-13777: Filters could not be created in charts when "Update Filter During Selection" setting was disabled.<br />
* D-13767: Automation per Event Types preset in in-memory incorrectly showed only one event type.<br />
* D-13756: Changing background color in KPI card didn't have any effect.<br />
* D-13812: "Exclude events" was incorrectly translated to "Exclure les cas" in French.<br />
* D-13815: Dashboard designer background grid was not visible in entire area in edit mode. Improved also the grid to match to snapping in move and resize.<br />
* D-13674: Business calendar dialog layout was incorrect when a model with a long name was selected to copy holidays.<br />
* D-13811: Table actions link to a new window didn't go to dashboard if there were other parameters in the link.<br />
* D-13601: Fixed issue where some presets may have given error when attribute value selection and the automatically selected attribute conflicted by the data type.<br />
* D-13753: While Snowflake model was selected, in Filters and User Rights reports the Columns list could not be opened.<br />
* D-13720: Now table column filter and sorting are preserved when resizing or zooming page.<br />
* D-13785: In tables increased number of rows to 20000 that are inspected to get available items shown in Excel-style column filter.<br />
* D-13759: Some statistical calculations had bad performance with large number of rows.<br />
* D-13787: Conformance statistics component didn't have scrollbars when text didn't fit to the visible area.<br />
* D-13788: In-memory "Nonconformance reason" selection caused error when two of them was selected in the same chart.<br />
* D-13783: When Analyzed objects was Generic analysis, column selection incorrectly caused "Analysis has not been selected" error.<br />
* D-13776: When measure name contained quotation mark, notification preview didn't work.<br />
* D-13747: Filtering with integer type of case id with case attribute value filter caused error in Snowflake.<br />
* D-13791: In Firefox, model selection in chart settings didn't show models in the first open.<br />
* D-11984: Recycle bin buttons didn't fit to the screen when screen width was small.<br />
* D-13780: Using CaseId case attribute in clustering analysis did not work with Snowflake 106 cases standard model.<br />
* D-13781: Clustering analysis produced Python error with a certain simple Snowflake model.<br />
* D-13730: Snowflake: Case attribute filtering didn't work when there are cases without row in cases table.<br />
* D-13803: There was chart configuration validation error in browser console when measures were moved into dimensions in Big data chart.<br />
* D-13758: There was performance issue with the Recent tasks system preset.<br />
* D-13793: Snowflake clustering failed when cluster count is larger than case count.<br />
* D-13763: SQL expression based filter rule with Where function to filter events didn't filter anything in Snowflake.<br />
* D-13804: Added missing Millisecond function to Snowflake.<br />
* D-13772: Expression EventLog.Cases.Events caused error "Value cannot be null".<br />
* D-13755: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13739: When switching between System reports there was error: "Uncaught Error: 2nd dimension not found. at y.getExpressionConfiguration".<br />
* D-12109: Sometimes flowcharts showed message "Error in querying event type measures. Input string was not in a correct format".<br />
* D-12473: Cost Savings by Automation preset gave sometimes error "Unable to cast object of type 'System.Double' to type 'System.String'".<br />
* D-13750: Snowflake model didn't work with the Case Duration vs. Manual Activities preset.<br />
* D-13657: There was error converting data type nvarchar to bigint.<br />
* D-13796: Some Snowflake operations didn't work with zero rows and columns.<br />
* D-12494: Now when chart size changes, the table column filters and sorting are preserved.<br />
* D-13736: In Performance benchmarking dialog, the Export result button exported wrong benchmark performance analysis result.<br />
* D-13609: Improved conformance analysis related filter names.<br />
* D-13594: Recycle bin buttons were not visible when opening recycle bin in a narrow screen.<br />
* D-13226: Tooltips in the model properties dialog are now translated.<br />
* D-12569: Table incorrectly showed ellipsis for narrow boolean type of columns showing checkboxes.<br />
* D-13391: Emptying date or datetime picker value was not registered and it didn't trigger functionality.<br />
* D-12621: Value search dialog didn't work with values containing backslashes.<br />
* D-13796: Some Snowflake operation didn't work with zero rows/columns.<br />
<br />
== QPR ProcessAnalyzer 2023.4 (build 2628) (released 2023-06-14) ==<br />
<br />
'''Features:'''<br />
* B-07767: Added [[Gantt_Chart|Gantt chart]] to visualize timeline of cases and events divided into swimlanes.<br />
* B-06383: Added [[Sankey_Chart|Sankey chart]] to visualize flow from one set of values to another.<br />
* B-07941: Implemented many more presets running in Snowflake models for compliance and operational excellence use cases. There are also presets for the path analysis and process bottlenecks identification.<br />
* B-07864: Snowflake conformance analysis shows now [[Conformance_Analysis#Top_Deviations_(in-memory)_/_Deviating_Flows_(Snowflake)|reasons for conformance deviations]], such as which event occurrences deviated from the design model.<br />
* B-07909: Snowflake conformance analysis visualizes [[Conformance_Analysis#Undesired_Events_(Snowflake)|undesired event types]] in table and flowchart.<br />
* B-07823: Flowchart Bottlenecks preset has been changed to show bottlenecks for event types. Also renewed the [[QPR_ProcessAnalyzer_Logs#Task_Log|Tasks reports]] to use expression language based interface.<br />
* B-07891: User interface has been [[Languages_and_Localization|translated into Portuguese]].<br />
* B-07873: Improved [[QPR_ProcessAnalyzer_Pivot_Table|pivot table]] visual layout to highlight totals and aggregated rows. Also the row titles are now visible in the top left.<br />
* B-07905: Added [[SQL_Expressions#Rank_functions|Rank related functions]] to Snowflake for writing more versatile custom KPI's, e.g., FirstValue, LastValue, NthValue, Lead and Lag.<br />
* B-07912: Added more SQL expression [[SQL_Expressions#Array_functions|array functions ArrayToString and ArrayOverlap]] to Snowflake.<br />
* B-06449: Added SQL expression functions ToTimestamp and TryToTimestamp for parsing timestamps from strings using provided format.<br />
* B-07959: Added new functions Base64Encode and Base64Decode to help using basic HTTP authentication when calling web services.<br />
* B-07206: SQL expressions support data [[SqlDataFrame_in_Expression_Language#WithClusterColumn|clustering]] which is an unsupervised machine learning algorithm to group data based on similarities.<br />
* B-07848: Data can be extracted from SAP using the encrypted [[Importing_Data_from_SAP#SNC_encrypted_connection|SNC connection]].<br />
* B-07903: Added expression language API to create and modify filters and models.<br />
* B-03103: [[QPR_ProcessAnalyzer_Logs#Task_Log|Task log]] (operation log) can be accessed in expression language.<br />
* B-07872: List aggregation with Distinct=true orders now items by their value.<br />
* B-07940: Removed "Count" aggregation from textual values in Big data chart (you can use the Case count, Event count, etc. selection instead).<br />
* B-07757: Backend support for datatables linking to user-definable Snowflake database, schema and table.<br />
* B-07825: Improved error message when trying to use non-existing attributes in Snowflake queries.<br />
* B-03101: To expression language, added try-catch-finally statement to handle thrown exceptions.<br />
* B-07861: Removed available and total virtual memory information from User settings dialog.<br />
* B-07902: Optimized sequences of joins in Snowflake queries to improve performance.<br />
* B-07837: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13709: If image width-to-height ratio was lower than container's ratio, image was incorrectly stretched to fit the container.<br />
* D-13660: Disabling filter rules didn't work in Snowflake models.<br />
* D-13526: Passing dataframes from SQL scripts to expression scripts didn't work.<br />
* D-13661: Snowflake conformance analysis crashed when there was no access to conformance related Snowflake UDF's.<br />
* D-13693: Resolved major Snowflake conformance analysis performance issues in the BPMN model handling.<br />
* D-13716: Snowflake root causes analysis incorrectly bypassed Snowflake cache.<br />
* D-13707: In SQL Scripting, the datatable analysis (number 18) didn't always copy the data table contents to the target table correctly.<br />
* D-13653: Big data flowchart Root causes preset showed incorrect legend.<br />
* D-13626: Flowchart froze when converting into big data flowchart and vice versa by modifying chart json settings.<br />
* D-13656: Root causes for attribute gave error "Failed to compare two elements in the array" in some situations.<br />
* D-11563: Pivot table had a minimum height of 300px, which caused bottom part of it to be out of view.<br />
* D-13704: In CSV file import, parsing now allows spaces between column separator and text quotation mark.<br />
* D-13598: Chart gave unclear error message when events datatable was not defined.<br />
* D-13655: Improved error messages for BPMN editor and conformance statistics.<br />
* D-13528: Error message for certain erroneous SQL expressions was unclear.<br />
* D-13677: "Flow occurrences with specific case attribute value" selection didn't work for in-memory chart.<br />
* D-13663: Pivot table border line was slightly broken in the header area.<br />
* D-13608: There was incorrect alignment of items in the table paging controls.<br />
* D-13703: Importing CSV file with some special characters to Snowflake failed (due to incorrect escaping in Snowflake staging files).<br />
* D-13708: Duplicating datatable using user defined table, removed data the source table.<br />
* D-13717: Dependency wheel crashed when there were zero weights and showing data labels.<br />
* D-13348: There was an unclear error message when Snowflake query had a certain incorrect expression.<br />
* D-13732: Pivot table Excel export contained headers formatted incorrectly.<br />
* D-13729: There was a JavaScript error when limited user tried to access business calendar.<br />
* D-13662: Percentile function didn't always work with timespan types.<br />
* D-13646: Using incorrectly configured model without cases datatable caused null reference error.<br />
* D-13629: When tried to use chart with a non-existing model, there is now a proper translated error message.<br />
<br />
== QPR ProcessAnalyzer 2023.3 (build 1990) (released 2023-05-03) ==<br />
<br />
'''Features:'''<br />
* B-07818: [[Conformance_Analysis|Conformance analysis]] is supported in Snowflake with following dashboard components: Big data chart, BPMN editor, Conformance statistics, and Design model selector.<br />
* B-07833: [[Root_Causes#Root_causes_in_flowchart|Root causes analysis for flowchart]] is available for Snowflake showing how the event and flow occurrences explain selected phenomena.<br />
* B-07786: Big data chart has more [[Big_Data_Chart#Measure_aggregations|measure aggregations]], such as median, percentile, standard deviation and variance. Also for textual items, unique values can be listed.<br />
* B-07795: [[QPR_ProcessAnalyzer_Table#Conditional_formatting|Conditional formatting]] supports also columns with non-numerical contents.<br />
* B-07830: [[Big_Data_Chart#Measure_aggregations|None and Any aggregations]] for Snowflake and user-friendly formatting for conformance violations.<br />
* B-06527: Error messages in [[Importing_Data_to_Datatable_from_CSV_File|CSV file import]] show also the column number to help working with CSV files with lot of columns.<br />
* B-07747: In-memory conformance checking accepts design models with multiple tasks having same name (same is followed by the Snowflake implementation).<br />
* B-07659: In-memory flowchart preset Case Conformance to visualize conformance checking violations.<br />
* B-07571: Added function IsConformant to backend to check whether cases are conformant.<br />
* B-07863: Added function ConformanceViolationsFlows to backend to return nonconformance reasons for violating cases.<br />
* B-07844: Support for "array" aggregation to return aggregated items as array.<br />
* B-07856: Support for creating and accessing arrays and objects in SQL expressions.<br />
* B-07860: Array handling functions and Tasks property for DesignModel entity.<br />
* B-07847: Added throttling for QPR ScriptLauncher client-side imports to limit memory usage.<br />
* B-07811: Snowflake query optimization to omit columns that are not used by the query.<br />
<br />
'''Fixed issues:'''<br />
* D-13632: Going from variations to event types led to very poor performance with certain models.<br />
* D-13628: Statistical calculations were incorrectly not applied in chart CSV export.<br />
* D-13575: SQL script may have given error "Operand type clash: nvarchar(max) was incompatible with sql_variant".<br />
* D-13597: UI supports now datatable column type "ShortString" (previously datatable contents preview and CSV import didn't work).<br />
* D-13536: Using business calendar sometimes gave error "System.InvalidOperationException: Collection was modified".<br />
* D-13477: Chart types without y-axis mapping caused an error when series mapping was used.<br />
* D-13453: _model variable was not available for Snowflake expression filter rules.<br />
* D-13527: Checkbox height didn't increase when long label needed to span to multiple lines.<br />
* D-13363: Snowflake query with EvaluateAfterAggregations and IsHidden failed when dimensioning by case id column.<br />
* D-13383: Snowflake query gave error "Invalid column name 'FromCase Name'".<br />
* D-13523: Request id was incorrectly shown as zeros in error messages.<br />
* D-13541: In CSV import, error message for maximum number of columns exceeded is improved (maximum is 300 column for SQL Server).<br />
* D-13583: Objects count in header didn't work for empty Snowflake model.<br />
* D-13553: Larger pacm files can now be imported, as there isn't error "Request body too large. The max request body size is 30000000 bytes".<br />
* D-13306: Stack overflow error was given when using SqlDataFrames.<br />
* D-13487: When Flows root and there was filter in Values expression, some flows were lost.<br />
* D-13540: SqlDataFrame query with 300 columns failed to error "WithExpressionColumn: No name given for the new column".<br />
* D-13429: Ordering in List aggregation couldn't find columns in dataframe query.<br />
* D-13406: Dataframe query with root FlowOccurrences and get value from cases caused error.<br />
* D-13538: There was incorrect handling of escaping characters in column names used in dimensions.<br />
* D-13633: Fixed ordering in List aggregation with null and empty values.<br />
* D-13636: Query that dimensions by numeric case attribute with AggregateOthers true, caused error.<br />
* D-13589: Creating Snowflake datatable did not connect to Snowflake.<br />
* D-13623: Value expressions without aggregation didn't work with AggregateOthers setting.<br />
* D-13554: In in-memory chart, percentile function might have return both Int64 and Double type of objects which cannot be sorted.<br />
* D-13481: Improved error message when trying to use deleted model.<br />
* D-13621: Dynamic value search dialog had incorrect font in lists.<br />
* D-13610: Some invalid BPMN files crashed BPMN editor.<br />
* D-13614: Checkbox label texts overflowed to right.<br />
* D-13520: Removed excessive parameters from the Query Designer for generic context queries.<br />
* D-12998: QPR icon was incorrectly positioned in header in Safari.<br />
* D-13480: Import to duration data type is removed from Snowflake datatables, and for local datatables duration type maximum size is checked.<br />
* D-13517: In Highcharts-based visualizationsm conditional formatting didn't work for other than the first y-axis mapping.<br />
* D-13529: In some presets containing several on-screen settings, when chart showed in error message, on-screen settings showed invalid selection.<br />
* D-13530: Opening dropdown list caused JavaScript error when the list contents should be empty after it previously contained items.<br />
* D-13486: Removed unreachable error message in CSV import.<br />
* D-13524: Fixed in-memory chart flow occurrences root measures "Event attribute (text)" and "Event attribute (number)" that caused error.<br />
<br />
== QPR ProcessAnalyzer 2023.2 (build 1478) (released 2023-03-22) ==<br />
<br />
'''Features:'''<br />
* B-07755: [[Business_Calendar|Business calendar]] for duration calculation is available for Snowflake models.<br />
* B-07719: In Snowflake dashboards, [[Big_Data_Chart#Using_measure_variables|measures can be assigned to variables]] and use the variables in other measures to create combined measures.<br />
* B-07746: Changed in-memory conformance checking to not show invalid flow violations where starting or ending event type is invalid.<br />
* B-07743: [[PA_Configuration_database_table#General_Settings|Default datasource]] can be configured for datatables created by scripts, allowing to set Snowflake as default.<br />
* B-07740: System memory indicator moved from the header to User settings Version information dialog.<br />
* B-07776: New SQL expressions functions Unicode, Char and Regexp, as a basis for future rule-based process mining.<br />
* B-07741: Backend support for aggregation operations Median, Percentile, Stdev, Stdevp, Var and Varp to Snowflake.<br />
* B-07742: Backend support for aggregation operation to list unique items in Snowflake.<br />
* B-07770: Optimized Snowflake SQL generation by combining consecutive WithColumn function calls into one select.<br />
<br />
'''Fixed issues:'''<br />
* D-13491: QPR ProcessAnalyzer server crashed now and then when sorting was in progress and the query was cancelled.<br />
* D-13380: Dimensioning integers in in-memory core calculation didn't work correctly as 0 and -1 were put to same bucket.<br />
* D-13385: In Workspace Bin, Delete Forever and Restore from Bin buttons were misaligned.<br />
* D-13332: Conformance checking didn't show in violations when there were multiple undesired events in same case.<br />
* D-13405: Images take now always all available space in image component area.<br />
* D-13417: KPI card without title was slightly misaligned vertically.<br />
* D-13438: Clicking selected event type or flow in flowchart didn't cancel the filter selection.<br />
* D-13350: Task log and Script log default filter end date is now empty by default.<br />
* D-13381: Disabled browser auto-complete from flowchart variation stepper and Workspace create/rename object dialog.<br />
* D-13347: Improved performance for in-memory business calendar calculation.<br />
* D-13335: In in-memory chart, filtering didn't work in "Flow occurrences" root "Flow occurrences with specific event attribute value" dimension.<br />
* D-13367: Percentage value wasn't displayed properly with German or Spanish language when event types were shown in object counts indicator.<br />
* D-13451: Exported filter file is now named based on selected filter name.<br />
* D-13378: In Big data chart, prevented error "Unable to aggregate from level RootCauses to level Custom".<br />
* D-13293: DataFrame query with root Flows and IncludeEvents and ExcludeEvents filter rules failed.<br />
* D-13370: Fixed issue where on-screen settings that didn't have any selectable items, showed a strange selection.<br />
* D-13392: Clustering analysis was incorrectly shown when originally in-memory chart was converted into big data chart by changing chart json settings.<br />
* D-12784: Some Snowflake queries incorrectly bypassed Snowflake caching because they used unique object names.<br />
* D-13456: Improved error messages for incorrectly configured on-screen settings.<br />
* D-13445: Conformance violations related translated terms have been fine-tuned for better translations into different languages.<br />
* D-13421: Improved error messages when trying to use model having some column mappings missing.<br />
* D-13485: Snowflake business calendar gave error when calendar contained Sunday.<br />
* D-13218: Windows event viewer incorrectly contained log entries that are not errors.<br />
* D-12634: Multiline text boxes width is set to non-changeable.<br />
* D-13034: Confirmation dialog to delete items permanently has been updated.<br />
* D-13288: In dialogs, the Create button didn't show the disabled state correctly.<br />
* D-13427: When dropdown lists didn't have any selectable items, the "N/A" text appeared and the list incorrectly took more space vertically.<br />
* D-13483: In Workspace, the new items menu was too narrow for Spanish texts.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.1 (build 1449) (released 2023-02-24) ==<br />
<br />
'''Features:'''<br />
* B-07690: System setting [[PA_Configuration_database_table#General_Settings|DatabaseId]] can be defined by administrator to get more simple table names in Snowflake.<br />
* B-07737: In flowchart Bottlenecks preset, originally used flow colors has been recovered.<br />
* B-07748: For Analyzed objects "Conformance checking findings" in charts, terminology has been revised and issue with the case count calculation fixed.<br />
* B-07663: In [[Chart_On-screen_Settings|on-screen settings]], when case/event attribute is selected, related attribute values list are reset.<br />
* B-07570: Backend support for [[Business_Calendar|business calendars]] in Snowflake.<br />
* B-07660: Backend support for conformance checking to show also the last event index and event type in NotCompleted reason.<br />
* B-07610: Memory counter related technical properties have been removed from expression language.<br />
<br />
'''Fixed issues:'''<br />
* D-13349: Opening dashboard containing Root causes preset with default settings jammed the system by generating lot of calculations (for more information, see previous release notes).<br />
* D-13277: Stacked charts with date type of data as series did incorrectly show gaps in columns/bars.<br />
* D-13270: Flowchart conditional formatting didn't work with duration multi-unit format.<br />
* D-13358: Calculation results caching works also across different user sessions.<br />
* D-13250: Dashboard with two charts connected with linked settings using variables ended up to to a never ending loop.<br />
* D-13230: SAP import did not automatically create columns to use the correct column types.<br />
* D-12857: Deeply recursive functions caused a crash without any trace.<br />
* D-12994: In Workspace, some buttons were not clickable due to breadcrumb covering them.<br />
* D-13249: In Workspace, there was incorrect error message for duplicate datatable names when there were items with only letter capitalization was different.<br />
* D-13232: In-memory chart Top variations preset is now sorted secondarily by average duration descending.<br />
* D-13300: Setting DashboardFilter variable to empty value didn't have any effect in dashboard but old value was incorrectly used.<br />
* D-12834: Limited the maximum number of dimensions to 20, to avoid too demanding queries for SQL Server.<br />
* D-12917: Changed visual indication of missing items in dropdown lists (it's no longer showing "***").<br />
* D-13111: In Root causes preset, there is now error message when trying to use weighting related columns when weighting isn't in use.<br />
* D-13124: SQLDataFrame query containing filter rule EventTypes aggregating from cases failed.<br />
* D-13207: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed.<br />
* D-13292: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed (rev.2).<br />
* D-12991: Dropdown list texts had some translations missing.<br />
<br />
== QPR ProcessAnalyzer 2023.1 (build 1433) (released 2023-02-07) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release contains a potentially severe issue, where some dashboards completely jam the system by generating lot of calculations. The issue may appear in dashboards that have been created in earlier releases and containing the Root causes preset with default settings. The issue will be fixed by the next release. The issue can be worked around by exporting the affected dashboard, modifying the dashboard file manually and importing the dashboard back. The required modification is to remove line(s) containing <pre>"preset": "RootCauses"</pre> and the comma from the preceding line.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Cases (analysis number: 5), Events (6), and EventTypes (7). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). Note that the legacy analyses removal don't affect the dashboarding functionality.<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [5, 6, 7];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2023.1, the '''.NET Desktop Runtime''' is not needed anymore for QPR ProcessAnalyzer Server, so it can be uninstalled. Also for QPR ScriptLauncher, ''.NET Desktop Runtime'' is not needed, but instead install the '''.NET Runtime''' (which is more lightweight). ''.NET Desktop Runtime'' contains the ''.NET Runtime'', so the actions are not mandatory when updating to QPR ProcessAnalyzer 2023.1.<br />
</div><br />
<br />
'''Features:'''<br />
* B-06997: Expression-based filter rules for Snowflake dashboards to allow versatile filtering and filtering from custom expressions.<br />
* B-07383: Improvements to linked settings to allow binding to variables, tags and filter rules [[Chart_Linked_Settings|(more information)]].<br />
* B-07508: Flowchart preset colors have been renewed to be more intuitive.<br />
* B-07184: Automation preset in flowchart has now options for selecting the Automation attribute and value.<br />
* B-07512: Changed datatable metadata can be refreshed from Snowflake, and all rows in the datatable can be deleted easily in Workspace [[QPR_ProcessAnalyzer_Project_Workspace#Datatables|(more information)]].<br />
* B-07440: Date when the release was made is now shown in User settings.<br />
* B-07595: WeekOfYear property for DateTime objects in expression language to get the week number of a year (between 1 and 53).<br />
* B-07623: In-memory expression language functions Random (to get random numbers) and Hash (to get hash value of string).<br />
* B-07612: Breadcrumb in Workspace has now a Home button to quickly navigate to the top level of the projects hierarchy.<br />
* B-07637: Language selector now shows the language options in local languages.<br />
* B-07228: Remove following deprecated analyses: Cases, Events, and EventTypes (see the release note above).<br />
* B-07538: Backend support: Snowflake root causes analysis can find event attribute related root causes.<br />
* B-07706: Backend support: Snowflake expression-based filter rules support for roots containing Where function.<br />
* B-07611: Removed following legacy filter rules: CaseAttributeTrend, EventAttributeTrend, EventTypeTrend, and Duration.<br />
* B-07598: Refactored client-side import for SQL scripting to use generic client-side task mechanism.<br />
* B-07716: ShortString columns are now properly detected in SQL Server queries.<br />
* B-07652: Now it's possible to pipe multiline expression strings to QPR ScriptLauncher.<br />
* B-07688: AddColumns function for Datatables to create multiple columns in one call.<br />
<br />
'''Fixed issues:'''<br />
* D-13092: Table conditional formatting didn't work when color code was fetched from other column.<br />
* D-13105: Some charts created in earlier release referring to non-existing presets names appeared as empty after software update.<br />
* D-13107: Flowcharts crashed and showed loading animation forever when setting color or flow thickness to non-numerical measure.<br />
* D-13104: In BPMN model editor, context menus to edit elements didn't appear.<br />
* D-12939: Script editor tabs Close buttons didn't work.<br />
* D-13154: "Search by case ID" didn't work in in-memory chart.<br />
* D-12933: CSV columns with only empty values were incorrectly auto-detected as integers.<br />
* D-12929: In-memory chart Root causes for case duration and Root causes for case attributes (weighted) had Custom expression missing.<br />
* D-12928: Pivot table headers were empty when there were two column levels and two values.<br />
* D-12924: Pivot table columns with Count and Distinct Count aggregations are now numeric and aligned right.<br />
* D-13033: Changing colors in chart settings Color palette caused "Item already exists" error and prevented changing colors.<br />
* D-12996: Tags referring to dashboard variables didn't work in Additional root expression.<br />
* D-12877: UI gave error in some situations: Uncaught TypeError: Cannot read properties of undefined (reading 'min').<br />
* D-13071: Prevented selecting two or more of the Y-axis, X-axis and series mappings at the same time for the same measure or dimension.<br />
* D-12895: Big data chart crashed when on-screen setting contained event type selector and there were no event type filter set.<br />
* D-13231: Tooltips for dashboard name, model selector and filter selector in header show now the content text instead of generic instruction.<br />
* D-13139: There was an error when tried to create filter for a custom expression where selected data type didn't match with the actual type of data.<br />
* D-12988: Chart presets selection in chart settings showed unnecessary tooltip.<br />
* D-12901: When set sampling over 1 million, Snowflake models gave error: parameter value out of range: size of fixed sample. Must be between 0 and 1,000,000.<br />
* D-12904: Creating expression filter having lower/greater logic with root objects sampling failed.<br />
* D-12923: Chart schema didn't accept pivotAggregation in dimensions/columns.<br />
* D-12926: Root causes columns Selected weight, Compared weight and Total weight have now correct float data type.<br />
* D-12880: In out-of-the box dashboards, chart titles and subtitles were not translated.<br />
* D-12916: Improved filter rule description text in Filter rule editor dialog for expression filter rules.<br />
* D-12889: No clear error message was given when user tried to export corrupted model from .pacm file.<br />
* D-12869: Date selector in on-screen settings had inconsistent vertical alignment.<br />
* D-12938: When creating a filter with lasso and selecting a single data point only, "equals" kind of filter rule is now created.<br />
* D-12989: "Running tasks as specific time" system report may have ended up in loop causing following error: Maximum call stack size exceeded error.<br />
* D-13010: Pivot table sometimes ended up to never-ending resizing loop when browser zoom was more than 100%.<br />
* D-12790: Expression language: DataFrame.SetColumns: Initializing and using variables defined in closure of SetColumns function parameter didn't work<br />
* D-12927: All on-screen settings were not be visible in narrow charts having several on-screen settings.<br />
* D-12937: Added maximum value limitation to several number input fields in charts.<br />
* D-12947: Message dialog didn't show line breaks correctly (e.g., in CSV file import).<br />
* D-12948: Defining column setting caused error when Measure Expression was not defined.<br />
* D-12946: Filter rule text couldn't be seen entirely from tooltip.<br />
* D-12983: When range filtering using integer values in Highcharts chart, filter is now shown as integer value.<br />
* D-12984: When range filtering in Highcharts charts and there is category axis, filter rule is now based on individual (category) values.<br />
* D-12930: When creating filters from charts using date type of X-axis with lasso, "greater than or equal" and "less than or equal" filter rules are not created.<br />
* D-12920: "Where" function in DataFrame lost column data types of the original DataFrame.<br />
* D-13048: Model notifications failed with certain measures that define variables in root expression leading to error: Variable "sampleSize" already exists in this context.<br />
* D-13116: BPMN editor had some translations missing.<br />
* D-13019: Datatable and script selectors show now datatable/script name instead of id, when opening selector having existing selections.<br />
* D-12951: Changing additional root expression in flowchart didn't refresh the flowchart.<br />
* D-13147: Filter rule boxes in header had different widths, and Add filter rule button vertical alignment was incorrect.<br />
* D-12907: Sometimes case attribute selection showed incorrect attribute name for empty model.<br />
* D-13148: Filters and Datatables system reports loaded unnecessarily twice which could be seen as blinking.<br />
* D-12844: In dataframe query, FlowOccurrences in root and GetValueFrom Cases with filter gave null reference exception<br />
* D-12915: Repeating certain query twice with aggregations in Events root generated invalid SQL<br />
* D-12728: Was huge amount logs in server during client side import (manual testing required as identification)<br />
* D-13156: Persist function failed to snowflake: Invalid unicode escape sequence '\u0027ACCE'; should be at most '\u0010FFFF'.<br />
* D-12876: Flows/FlowOccurrences in root didn't work with SqlExpressionValue filtering.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2022.8 (build 1397) (released 2023-01-11) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release fixes an issue where extracting large datasets from SAP increases memory consumption considerably and may lead to out-of-memory error. This release contains packages for both QPR ScriptLauncher and QPR ProcessAnalyzer Server. If SAP extractions are done using QPR ScriptLauncher in client side mode (ExecuteInClientSide=1), it's enough to update QPR ScriptLauncher to fix this issue.<br />
</div><br />
<br />
'''Fixed issues:'''<br />
* D-12941: Extracting data from SAP consumed unnecessary lot of memory and may have led to out-of-memory error (both when running using QPR ScriptLauncher and in server side).<br />
<br />
== QPR ProcessAnalyzer 2022.8 (build 1396) (released 2022-12-30) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Creating datatables with duplicate names in the same project is prevented, and possible existing duplicate names are automatically changed to unique names with a random suffix. If there are duplicate names, they can be renamed either before updating QPR ProcessAnalyzer (to avoid automatic renaming) or after the update (by changing suffixed names). If the renamed datatables are used by models, the linkage will break because it's based on the datatable name. Creating duplicate datatables has already been prevented in the UI, but the improved method works also in the API level.<br />
<br />
Following SQL query can be used to list datatables (and project id) having duplicate names:<br />
SELECT ITA_NAME, ITA_PROJECT_ID<br />
FROM PA_INTEGRATION_TABLE<br />
GROUP BY ITA_NAME, ITA_PROJECT_ID<br />
HAVING Count(*) > 1<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
If trying to use business calendar for a model that doesn't have the business calendar defined, there will now be an error message instead of showing the chart. Either unselect the business calendar checkbox for the measure or dimension, or define a business calendar to the model. In this situation in earlier releases the business calendar was ignored and full time calculation used.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07498: Automation and Operational Excellence presets and Root causes analysis (for Snowflake), Weighted root causes analysis and Event scattering preset (for Snowflake and in-memory), Root causes for case duration (in-memory).<br />
* B-07177: Flexible mappings, user selectable aggregations and conditional formatting for Pivot table, and flexible mappings for KPI Card.<br />
* B-07518: New function named Query to run call /api/expression/query.<br />
* B-07294: In Workspace, the left side projects hierarchy can be collapsed and expanded to make more space to project contents.<br />
* B-06814: In SQL expressions, new function DurationBetweenDates to calculate duration between timestamps precisely.<br />
* B-07519: Replaced DateDiff function with the new DurationBetweenDates function in big data chart.<br />
* B-07531: In SQL expressions, new mathematical functions Abs, Log, Mod, Power, Rand, Sign and Sqrt.<br />
* B-07297: To optimize performance, Snowflake queries are automatically cancelled if they are not needed by UI.<br />
* B-07569: To optimize performance, TakeSample function implementation is improved for Snowflake.<br />
* B-07198: Several performance improvements to DataFrame queries (used in Snowflake).<br />
* B-07464: Added Lead and Lag functions to SqlDataFrames to support getting previous and next event.<br />
* B-07470: New ExtractSap function to fetch data from SAP using expression language.<br />
* B-07536: New Pivot function to SqlDataFrames to enable root causes analysis.<br />
* B-07488: Primary keys can be set to datatables to improve calculation performance (UI will follow later).<br />
* B-07515: Added RootCauseAnalysis function to SqlDataFrames.<br />
* B-07546: RootCauseAnalysis function support for complex weighting expressions.<br />
* B-03052: Support for user-defined variables in /api/expression/query.<br />
* B-07565: Support for NumberPrecision, DatetimeTruncation and TimespanPrecision properties for Values section in in-memory query.<br />
* B-07513: For product activation file handling, replaced mutex based implementation with exclusive file lock.<br />
* B-07480: Expression language support for DataFlows for data extraction.<br />
* B-07613: Removed support for SQL Server based R scripting.<br />
* B-07567: Take datatable primary keys into use in expression builder to improve performance (part 2).<br />
* B-07588: Remove total memory information from log writing and DateDiff function for in-memory.<br />
<br />
'''Fixed issues:'''<br />
* D-12715: Snowflake calculated imprecisely some operations containing division and aggregation.<br />
* D-12761: Progress bar of the CSV import dialog didn't show any progress.<br />
* D-12799: Opening datatable contents dialog settings was slow when there were lot of rows in the datatable.<br />
* D-12089: Include conforming/nonconforming cases made BPMN editor no responding.<br />
* D-12496: Datagrid filter search keyword didn't work for rounded values, so the search was hidden for other than textual data.<br />
* D-12704: Durations as quarters was calculated incorrectly in charts.<br />
* D-12662: Fixed issue where some special literals in custom expressions didn't work.<br />
* D-12403: Setting Notifications on a model had some visual issues.<br />
* D-12859: Dependency wheel visualization crashed with nulls values in From and To mappings.<br />
* D-12660: Removed unnecessary float conversions in SQL expressions.<br />
* D-12653: In-memory datafram OrderByColumns function with mixed values failed.<br />
* D-12657: When trying to use milliseconds period in some presets, frontend frozed.<br />
* D-12706: Line breaks in data were shown in many places where it's undesired.<br />
* D-12719: Syncfusion dialog headers showed backslaces incorrectly.<br />
* D-12372: Refused to run the JavaScript URL because it violated the Content Security Policy directive.<br />
* D-12730: Logging out when filter selection is in progress, gave javascript error.<br />
* D-12705: Header object counts tooltip was sometimes messed after logout.<br />
* D-12384: Selected project was not highlighted for whole project name string.<br />
* D-12581: Prevented creating duplicate datatable names in same project in parallel execution.<br />
* D-12722: There was incorrect syntax near '<' when running SqlDataFrame expressions.<br />
* D-12736: Swedish and Finnish translation improvements for object counter tooltips.<br />
* D-12702: For BPMN Editor component "Something went wrong" error was given when switching from in-memory to Snowflake model.<br />
* D-12712: UI gave error: TypeError: Cannot read properties of undefined (reading 'id').<br />
* D-12738: Business calendar showed total business time when calendar configuration was invalid.<br />
* D-12776: Special character filter caused JavaScript SyntaxError.<br />
* D-12785: Unnecessary vertical scrollbar displayed for main header toolbar.<br />
* D-12164: There was unnecessary UnauthorizedAccess errors in logs.<br />
* D-12580: Case duration was not same when comparing Big data chart with in-memory chart for same data.<br />
* D-12768: Data grid links and variable change actions didn't work when grouping was used.<br />
* D-12735: FindRootCauses (in-memory) function filtered out cases with zero contribution.<br />
* D-12763: --#CallWebService didn't work from ScriptLauncher.<br />
* D-12789: There was timeout in SQL queries to scripting sandbox.<br />
<br />
== QPR ProcessAnalyzer 2022.7 (build 1331) (released 2022-11-15) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2022.7, to improve security expression language operations that modify data or connect to external datasources are prevented in dashboard custom expressions. The limitation is required, because when a dashboard is opened, its expressions are run with the user's permissions, and the user need to trust the expressions don't perform any unexpected operations, such as delete data. The full functionality of the expression language is available in the scripts and in the Expression Designer.<br />
<br />
The following functions and operations are prevented in dashboards: SendEmail(), CallWebService(), ImportOdbc(), ImportOdbcSecure(), Model.DeletePermanently(), Model.Restore(), Model.TriggerNotifications(), Project.DeletePermanently(), Project.Restore(), Project.CreateDatatable(), Datatable.AddColumn(), Datatable.DeletePermanently(), Datatable.Import(), Datatable.Merge(), Datatable.RemoveColumns(), Datatable.RenameColumns(), Datatable.Truncate(), RecycleBin.DeletePermanently(), and call SQL script. Calling expression scripts is allowed, but in the script all previously mentioned operations are prevented.<br />
<br />
Following SQL query can be executed in the QPR ProcessAnalyzer metadata database to reveal dashboards that potentially have prevented expressions:<br />
SELECT * FROM [PA_UI_ELEMENT] WHERE [UIE_PROPERTIES] LIKE '%SendEmail(%' OR [UIE_PROPERTIES] LIKE '%CallWebService(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbc(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbcSecure(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Restore(%' OR [UIE_PROPERTIES] LIKE '%TriggerNotifications(%' OR [UIE_PROPERTIES] LIKE '%CreateDatatable(%' OR [UIE_PROPERTIES] LIKE '%AddColumn(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Import(%' OR [UIE_PROPERTIES] LIKE '%Merge(%' OR [UIE_PROPERTIES] LIKE '%RemoveColumns(%' OR [UIE_PROPERTIES] LIKE '%RenameColumns(%'<br />
</div><br />
<br />
'''Features:'''<br />
* B-07287: Process Discovery and most important presets for Snowflake.<br />
* B-07271: "Last Row Aggregates Over-limit Rows" setting for big data chart.<br />
* B-06431: Snowflake datatables support for database views in the datasource.<br />
* B-07266: Security: "limited mode" to prevent data modifications and external calls from dashboard expressions.<br />
* B-07097: Improved flowchart root causes color scales.<br />
* B-07363: SQL LIKE function support for escape character.<br />
* B-06877: Improved variation queries performance in Snowflake, part 1.<br />
* B-07444: Improved variation queries performance in Snowflake, part 2.<br />
* B-07382: Support for empty strings and nulls in event type names in dataframe processing.<br />
* B-07273: WithRowNumberColumn, WithRankColumn, WithDenseRankColumn support for descending sorting.<br />
* B-07303: FindRootCauses function support for weighting expression.<br />
* B-07327: Unpivot function for SqlDataFrames (for root cause analysis).<br />
* B-07385: Align token lifetime with SESSION_MAXIMUM_DURATION setting.<br />
* B-07500: ColumnMappings property for IDataFrame and DataTables.<br />
* B-07499: IDataFrame.ApplyFilter function to filter events data using a JSON-based filter.<br />
* B-07469: Translation updates for release 2022.7.<br />
<br />
'''Fixed issues:'''<br />
* D-11630: Drag and drop from chart settings to main header was working incorrectly for filter and root cause rules.<br />
* D-12455: Moving a chart filter from one chart to another created a root cause analysis filter.<br />
* D-12266: Root causes analysis showed incorrect results when certain combination of filters.<br />
* D-12525: Numerical values in Excel export in data grid was formatted incorrectly.<br />
* D-12534: Restoring item from recycle bin changed project from Bin to previous project.<br />
* D-12529: Measure specific datalabel mapping did not work correctly when also mapped to Y-axis.<br />
* D-12532: Multi-selection options caused layout issue for Chart setting.<br />
* D-12541: Layout issue for Polish in multiselect list search dialog.<br />
* D-11277: Increase/decrease Icons were missing in the dimension sorting for Mac.<br />
* D-12552: Uncaught Error: Diagram.selectCollection given something that is not a Part: null.<br />
* D-12567: Tooltip incorrectly showed for label component containing only spaces.<br />
* D-12438: Operation was cancelled because it was replaced by a new operation.<br />
* D-12551: Some expressions didn't work as calculated case/event attributes.<br />
* D-11720: Chart buttons were not visible in Apple Safari and iPad.<br />
* D-12544: On-screen settings "options" parameter did not work.<br />
* D-12528: Multi-unit time unit selection appeared where it's not applicable.<br />
* D-12583: Error message should be provided for invalid settings input than just display JS errors.<br />
* D-12599: Tooltips didn't show correct measures/dimensions when "Show in tooltip" mappings are used.<br />
* D-12561: Chart settings content was incorrectly drawn outside of the chart dialog.<br />
* D-12568: Reload UI sometimes crashed chart having multiselect on-screen settings.<br />
* D-12572: Main header toolbar lost when refresh maximized PA chart.<br />
* D-12612: Drop Unused Filters After setting incorrectly allowed zero seconds.<br />
* D-12533: Error message keeped blinking in Analysis view.<br />
* D-12608: User could not select or add new case attribute when current select attribute doesn't exist.<br />
* D-12451: Prevented deleting running script.<br />
* D-12516: Windows event viewer warning: Failed to gracefully shutdown application.<br />
* D-12523: Business calendar performance - part 2.<br />
* D-12538: Column with same name could be added multiple times to datatable using expression language.<br />
* D-12582: Improved EMS mutex code to support multiple PA service in one server.<br />
* D-12624: Synchronize new (empty) data table generated failed queries in Snowflake.<br />
* D-12622: Advanced setting page reserved room for the expression editor frame that did not exist.<br />
* D-11295: In on-screen settings, some UI controls were vertically misaligned.<br />
* D-11625: The heights of the parameter option menu in the clustering tab was not well aligned.<br />
* D-12103: Small dropdown list layout issue.<br />
* D-12633: Align issue for Column related Advanced settings.<br />
* D-12505: Search dialog didn't escape % and _ characters correctly in dataframe processing.<br />
* D-12645: Tabs in expression settings dialog were partly hidden when dialog is narrow.<br />
* D-11382: Moving of flowchart was sometimes shaky.<br />
* D-12655: Filter rule tooltips in header were styled incorrectly.<br />
* D-12656: Large integer values in filter jsons were incorrectly presented as small integers.<br />
* D-12661: Some exported filters contained unnecessary "invert" property.<br />
* D-12500: Model with numeric case id's and filtering with the attribute mapped as case id: ERROR [22018] Numeric value <nowiki>''</nowiki> is not recognized.<br />
* D-12509: Filtering null values didn't work in boolean attributes in Snowflake.<br />
* D-12571: In dataframe processing in SQL Server, dividing two integers should not make rounding to integer.<br />
* D-12610: Setting for global DropUnusedFiltersAfter was missing.<br />
* D-12613: Filtering with case/event attributes with null values didn't match in Snowflake models.<br />
* D-12617: Model didn't work when DropUnusedFiltersAfter is 00:00:00.<br />
* D-12618: If model ConfigurationJson is null, Configuration property didn't work.<br />
* D-12620: Filtering didn't work when there are backslaces in attribute names in Snowflake models.<br />
* D-12643: AttributeFunctionCallExpression did not always work properly in array context.<br />
* D-12647: SqlDataFrame with SQL Server: Comparing literals to variant column values failed.<br />
* D-12648: Models that have DropUnusedModelsAfter setting caused "The sliding expiration value must be positive" error.<br />
* D-11526: It was unable to translate Unicode character \uD83D at index 176 to specified code page.<br />
* D-12637: In application startup arised FATAL Application startup exception System.UnauthorizedAccessException: Access to the path 'Global\MutexQPRPAActivation' is denied.<br />
<br />
== Old Releases ==<br />
See older releases in [[QPR ProcessAnalyzer Release Archive]]<br />
__NOTOC__<br />
<br />
[[Category: QPR ProcessAnalyzer]]</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=Roles_and_Permissions&diff=24471Roles and Permissions2024-03-05T10:10:12Z<p>Ollvihe: /* Project Permissions */</p>
<hr />
<div>QPR ProcessAnalyzer has a role-based access control, where all operations require appropriate rights in order to be executable. Rights are given to ''users'' and ''groups''' by assigning ''roles'' to them. Roles are a collection of ''permissions''. Permissions are fixed in QPR ProcessAnalyzer allowing certain operations to be done. Some roles are ''project roles'' meaning that role (and its permissions) is applicable only for that project. Roles can also be ''global'' which gives rights to all projects in the system. Users belonging to a group, have all the roles assigned to that group.<br />
<br />
== Roles and Permissions ==<br />
By default, QPR ProcessAnalyzer system contains roles that are shown in the following table (roles are as columns). The roles have been mapped to certain ''permissions'' that are also shown in the following table (permissions are as rows).<br />
<br />
{| style="color:black; cellpadding="10" class="wikitable"<br />
!scope="row" colspan="2"| ||!scope="row" colspan="3"|Global roles||!scope="row" colspan="4"|Project roles<br />
|-<br />
!Permission||Allowed operations||Administrator||Create models||SQL Scripting||Administrator||Designer||Analyzer||Viewer<br />
|-<br />
||'''View dashboards'''<br>(GenericRead)||<br />
* View project's and model's information (name, description, configuration etc.)<br />
* List datatables and view their contents<br />
* Open dashboards (queries made by the dashboards are still restricted by the permissions)<br />
* Run analyses for model and view the analysis results<br />
* See own private filters, all published filters and the model default filter (not allowed to create/modify/delete filters)<br />
||[[File:Tick.gif|center]]|| || ||[[File:Tick.gif|center]]||[[File:Tick.gif|center]]||[[File:Tick.gif|center]]||[[File:Tick.gif|center]]<br />
|-<br />
||'''Save filters'''<br>(Filtering)||<br />
* Create, modify and delete own filters (private and public, but not model default)<br />
* Publish own private filters for other users (but not set the model default filter). Published filters are still user's own, so other users cannot modify them.<br />
||[[File:Tick.gif|center]]|| || ||[[File:Tick.gif|center]]||[[File:Tick.gif|center]]||[[File:Tick.gif|center]]||<br />
|-<br />
||'''Design dashboards'''<br>(EditDashboards)||<br />
* Create, modify and delete dashboards in the project.<br />
||[[File:Tick.gif|center]]|| || ||[[File:Tick.gif|center]]||[[File:Tick.gif|center]]||[[File:Tick.gif|center]]||<br />
|-<br />
||'''Import data'''<br>(GenericWrite)||<br />
* Import data to datatables, modify/remove rows in datatable, add/modify/remove columns in datatable<br />
* Create, edit, delete design diagrams<br />
* Edit model settings (but not possible to create or delete models)<br />
||[[File:Tick.gif|center]]|| || ||[[File:Tick.gif|center]]||[[File:Tick.gif|center]]||||<br />
|-<br />
||'''Manage filters'''<br>(ManageViews)||<br />
* View, create, modify and delete all filters in the model (also other users' private filters).<br />
* Set the model default filter.<br />
||[[File:Tick.gif|center]]|| || ||[[File:Tick.gif|center]]|| || ||<br />
|-<br />
||'''Manage project'''<br>(ManageProject)||<br />
* Modify project information, such as name and description.<br />
||[[File:Tick.gif|center]]|| || ||[[File:Tick.gif|center]]|| || ||<br />
|-<br />
||'''Delete models'''<br>(DeleteModel)||<br />
As a project specific permission:<br />
* Moving model to recycle bin (soft deleting)<br />
* Delete datatables (for datatables deletion is always permanent)<br />
As a global permission:<br />
* Permanently deleting models and projects (remove from the recycle bin)<br />
||[[File:Tick.gif|center]]|| || ||[[File:Tick.gif|center]]|| || ||<br />
|-<br />
||'''Manage scrips'''<br>(ManageScripts)||<br />
* Create, modify and delete scripts in the project.<br />
||[[File:Tick.gif|center]]<br />
|| || ||[[File:Tick.gif|center]]|| || ||<br />
|-<br />
||'''Manage&nbsp;operations'''<br>(ManageOperations)||<br />
* View the [[QPR_ProcessAnalyzer_Logs#Task_Log|Task log]]<br />
* Terminate in progress tasks run by any user<br />
||[[File:Tick.gif|center]]|| || || || || ||<br />
|-<br />
||'''Manage users'''<br>(ManageUsers)||<br />
* Manage users, groups, roles and permissions. Also changing any user password is possible. Note that with this permission, user can assign any permissions to itself.<br />
||[[File:Tick.gif|center]]|| || || || || ||<br />
|-<br />
||'''Create model'''<br>(CreateModel)||<br />
* Create projects, models and datatables. When a project is created, the user gets project Administrator role for the project (giving full permissions to the project).<br />
||[[File:Tick.gif|center]]||[[File:Tick.gif|center]]||||||||||<br />
|-<br />
||'''SQL scripting'''<br>(RunScripts)||<br />
* Run SQL scripts in sandbox.<br />
|||| ||[[File:Tick.gif|center]]|||| || ||<br />
|}<br />
<br />
== User Management Concepts ==<br />
<br />
[[File:User management schema.png|right|800px]]<br />
<br />
User management in QPR ProcessAnalyzer is based on the following concepts (which are also illustrated in the diagram on the right):<br />
* '''User''': Each person using the system should have an own user account. When a successful authentication has been made a ''session'' is created for a certain user. In addition to groups, roles can be assigned directly to users.<br />
* '''Group''': Group contain selected roles and also selected users are assigned to the group, giving the roles to those users. Groups make managing users easier.<br />
* '''Role''': Role contains specific permissions and thus giving certain kind of rights in the system. There are commonly used roles available in QPR ProcessAnalyzer, and additionally new roles can be created for customized use cases. Roles can be divided into two types:<br />
** '''Global role''' are used to give rights in the entire QPR ProcessAnalyzer system.<br />
** '''Project role''' are used to give rights in a certain project. When assigning projects roles, the project is also defined.<br />
* '''Permission''': Permission defines what user can do (e.g. read, create, modify, delete) to certain kinds of objects. Permissions are fixes in the system, i.e. new permissions cannot be added by users.<br />
<br />
The diagram also includes term ''role assignment'' which links one user/group (either of those), one project, and one role together.<br />
<br />
(In the diagram, ''0..N'' means that an entity is linked to none, one or several other entities, ''1..N'' means that an entity is linked one or several other entities, and ''1'' means that the linkage is always to a single entity.)<br />
<br />
== Dashboard Permissions ==<br />
* View dashboard: '''EditDashboards''' for the project.<br />
* Create dashboard: '''EditDashboards''' for the project.<br />
* Edit dashboard: '''EditDashboards''' for the project.<br />
* Move dashboard: '''EditDashboards''' for the original project and for the target project.<br />
* Delete dashboard (permanently): '''EditDashboards''' for the project.<br />
<br />
== Model Permissions ==<br />
* View model: '''GenericRead''' for the project.<br />
* Create model: '''GenericRead''' and '''GenericWrite''' for the project and global '''CreateModel'''.<br />
* Import model from pacm file: '''GenericRead''', '''GenericWrite''' and '''ManageViews''' for the project and global '''CreateModel'''.<br />
* Change model properties (e.g. name): '''GenericRead''' and '''GenericWrite''' for the project.<br />
* Move model: '''GenericRead''' and '''DeleteModel''' for the source project, and '''GenericRead''' and '''GenericWrite''' for the target project.<br />
* Delete model (to bin): '''GenericRead''' and '''DeleteModel''' for the project.<br />
* Delete model (permanently): global '''DeleteModel'''.<br />
* Copy model: '''GenericRead''' and '''GenericWrite''' for the project and global '''CreateModel'''.<br />
* Initiate model loading: '''GenericRead''' for the project (*).<br />
<br />
(*) The model loading might also require other permissions, e.g. access to the datatables or permissions required by the commands in the loading script. Models are not loaded using the permissions of the initiating user, but instead models are loaded in the following security context: '''GenericRead''' and '''GenericWrite''' for the project, global '''RunScripts'''. Models might also be loaded automatically during the server startup and this behavior ensures consistency regardless on how the model was loaded.<br />
<br />
== Project Permissions ==<br />
* View project: '''GenericRead''' for the project. (There are separate permissions for viewing different type of objects in the project.)<br />
* Create project: global '''CreateModel''', and '''GenericRead''' for the parent project (if creating a child project).<br />
* Change project properties (e.g. name): '''GenericRead''' and '''ManageProject''' for the project.<br />
* Move project: '''ManageProject''' for the moved project, '''GenericRead''' for the original parent project, and '''CreateModel''' for the target parent project.<br />
* Delete project (to bin): '''ManageProject''' and '''DeleteModel''' for the project.<br />
* Delete project (permanently): global '''DeleteModel''' and '''ManageProject''' permission for the project.<br />
* Copy project: Global '''CreateModel''' permission, and '''GenericRead''' and '''ManageProject''' for the copied project.<br />
<br />
== Datatable Permission ==<br />
* List datatables, view datatable properties and data contents: '''GenericRead''' for the project.<br />
* Create datatable: '''GenericWrite''' for the project and global '''CreateModel'''.<br />
* Change datatable properties, import data to datatable, modify/delete datatable rows, add/modify/delete datatable columns: '''GenericWrite''' for the project.<br />
* Move datatable between projects: '''GenericWrite''' and '''DeleteModel''' to source project, '''GenericWrite''' for target project, and global '''CreateModel'''.<br />
* Delete datatable (permanently): '''GenericWrite''' and '''DeleteModel''' for the project.<br />
<br />
== Filter Permissions ==<br />
* View own private filters, all published filters, and model default filter: '''GenericRead''' for the project.<br />
* View all filters: '''ManageViews''' for the project.<br />
* Create filter: '''Filtering''' for the project.<br />
* Edit own filters: '''Filtering''' for the project.<br />
* Edit all filters: '''ManageViews''' for the project.<br />
* Publish own filters: '''Filtering''' for the project.<br />
* Publish all filters: '''ManageViews''' for the project.<br />
* Delete own filters (permanently): '''Filtering''' for the project.<br />
* Delete any filters (permanently): '''ManageViews''' for the project.<br />
* Set model default filter: '''ManageViews''' for the project.<br />
<br />
Note: When a filter is published, the filter still has owner which is applied for the permissions.<br />
<br />
== Script Permissions ==<br />
* View, call and run expression script: '''GenericRead''' for the project.<br />
* Create, edit and delete expression script: '''ManageScripts''' for the project.<br />
* View, call and run SQL script: global '''RunScripts''' and '''GenericRead''' for the project.<br />
* Create, edit and delete SQL script: global '''RunScripts''' and '''ManageScripts''' for the project.<br />
<br />
[[Category: QPR ProcessAnalyzer]]</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&diff=24470QPR ProcessAnalyzer Release Notes2024-03-04T22:37:10Z<p>Ollvihe: /* QPR ProcessAnalyzer 2024.2 (build 5438) (released 2024-02-21) */</p>
<hr />
<div>This page lists all new features and fixed issues for each QPR ProcessAnalyzer release.<br />
<br />
== Next Release: QPR ProcessAnalyzer 2024.3 (planned release date 2024-04-02) ==<br />
<br />
'''Features:'''<br />
* B-08231: Snowflake performance improved by changing object counts query (shown in header) into two queries, so that the filtered object count uses eventlog caching.<br />
* B-07906: Implemented cross joins to SQL dataframes.<br />
* B-03047: Removed support for dashboard panels.<br />
* B-08214: Removed unused columns from the PA_VIEW table.<br />
<br />
'''Fixed issues:'''<br />
<br />
* D-14048: Fixed issue where in-memory root causes analysis for case attributes didn't show attributes with ShortString data type.<br />
* D-14049: Added some missing translations for table column filter and BPMN editor.<br />
* D-14021: FindRootCauses function WeightingExpression was run in incorrect context for in-memory model.<br />
* D-14020: Query which goes from EventTypes to Cases did not show the error when using GetValueFrom function.<br />
* D-13976: Fixed issue where gateway-based imports were not synchronous.<br />
<br />
== Latest: Additional release for QPR ProcessAnalyzer 2024.2 (build 5509) (released 2024-02-27) ==<br />
<br />
'''Features:'''<br />
<br />
* B-06280: User management dialog shows whether users have password defined and unnecessary passwords can be removed to improve security.<br />
<br />
'''Fixed issues:'''<br />
<br />
* D-14045: Fixed issue where users with Viewer or Analyzer role couldn't create filters in Snowflake models.<br />
<br />
== QPR ProcessAnalyzer 2024.2 (build 5438) (released 2024-02-21) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue: Snowflake models and dashboards don't work with Viewer and Analyzer role permisions. The reason is that cache tables created to Snowflake incorrectly require the write permissions. Workaround is to give users the Designer role which will give the needed permissions. Note that the Designer role gives many permissions to the user for the project [[Roles_and_Permissions#Roles_and_Permissions|(more information)]]. This issue has been fixed in the next release (D-14045).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
The legacy User permissions report (analysis number 11) and Filters report (analysis number 30) used in SQL scripts have been removed. Use instead the expressions language to query filters and user permissions, e.g., [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|Models.Filters]] and [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
New version of the Design diagram component has been improved with object-specific measures, and the previous common measures are not migrated into object-specific measures. Thus, the measures need to be configured again, or manually edit the chart json settings (if needed please ask instructions from QPR CustomerCare).<br />
</div><br />
<br />
'''Features:'''<br />
* B-08022: Design diagram supports now BPMN notation, elbow style flows and object-specific measures.<br />
* B-08232: Entire future eventlogs can be [[Create_Predicted_Eventlog|predicted]] based on generative AI models running in Snowflake.<br />
* B-08166: Added expression language function [[Generic_Functions_in_QPR_ProcessAnalyzer#OpenAIChatCompletion|OpenAIChatCompletion]] to answer natural language prompts based on OpenAI ChatGPT API.<br />
* B-08177: Snowflake query performance has been improved by introducing caching of filtered eventlogs using Snowflake tables.<br />
* B-08196: Conditional formatting rules can be defined for [[QPR_ProcessAnalyzer_Table#Textual_equal_rules_for_background_color|textual and boolean values]].<br />
* B-08213: Big data chart expressions event type selections to be multi-select where applicable.<br />
* B-08205: Expression language API is available for storing [[Storing_Secrets_for_Scripts|secrets]] for scripts.<br />
* B-07780: Chart [[QPR_ProcessAnalyzer_Chart#Variable_mappings|variable mappings]] has been removed - use the [[Chart_Linked_Settings|linked settings]] instead. Dashboards using variable mappings are automatically converted to use linked settings.<br />
* B-08117: Added ToSqlDataFrame function to convert in-memory dataframe into SQL dataframes.<br />
* B-08174: Only non-default parameters values are written to the operation log.<br />
* B-08200: Timestamps in System reports are shown in user workstation local time.<br />
* B-08171: Dashboard id has been added to queries, to track from which dashboard queries are originating.<br />
* B-07144: Remove legacy User permissions report (analysis number 11) and Filters report (analysis number 30) in SQL scripts (see note above).<br />
* B-08193: Added retry mechanism to QPR ScriptLauncher to recover if connection to server breaks.<br />
* B-08202: Updated copyright for year 2024.<br />
* B-08199: Frontend components have been updated.<br />
* B-08203: Backend components have been updated.<br />
* B-08209: Translations updated for release 2024.2.<br />
<br />
'''Fixed issues:'''<br />
* D-13972: Some measures/dimensions/columns in Big data chart didn't show the expressions level filtering.<br />
* D-14015: Fixed business calendar incorrect calculation when business period covered entire day.<br />
* D-14014: Fixed issue where Snowflake business calendar could not have end time as 00:00.<br />
* D-13962: System variable values were interpreted incorrectly when used in linked settings.<br />
* D-13971: HiddenInNavigation and SortOrder variables didn't work in navigation menu dashboards list.<br />
* D-13959: Removed possibility to add datatable columns with the legacy "any" data type.<br />
* D-13991: Improved drop-down selector component to handle empty strings as variable values.<br />
* D-13965: Datatable column name length was validated incorrectly which may have caused error in saving with too long column names.<br />
* D-13958: Project names showed unnecessary html escaping in the "Move to" menu.<br />
* D-13964: Model attributes and notifications dialogs gave error when trying to use dashboard tags.<br />
* D-13960: Added missing translations for list of permission list and 12-hour clock format.<br />
* D-13966: Fixed issue were root causes chart tooltip sometimes didn't disappear.<br />
* D-13969: Datatable column schema export sometimes showed empty for the key column.<br />
* D-13862: Session token was not accepted when url path capitalization is different.<br />
* D-13942: Datatable could not be dimensioned if it has column named "CaseId".<br />
* D-13980: Business calendar dialog crashed when tried to open it for a model without access.<br />
* D-13983: Notifications dialog didn't validate situation when same name was used in a measure and dimension.<br />
* D-13981: Dashboard import set incorrect model id to dashboard if there was no access to any model.<br />
* D-11276: Translations were missing for 12-hour clock dates (AM and PM) in dashboards.<br />
* D-13977: Multi-select dropdown lists showed some special characters incorrectly.<br />
* D-13945: Syncfusion toast message didn't work when text contains ${[]}.<br />
* D-13930: Pivot table throws javascript error when certain clicks.<br />
* D-13273: Duplicate datatable row count didn't shown correctly.<br />
* D-13994: There was an error in the in-memory chart with some flow related measures about duplicate variable names when same measure was defined twice.<br />
* D-13985: Models list dots menu had texts misaligned in narrow screens.<br />
* D-13995: In Workspace, wrong datatable was selected after duplication when non-default sorting was applied.<br />
* D-13997: Workspace tables column filtering search caused JavaScript errors.<br />
* D-13978: In table Excel export, the last row representing other items appeared incorrectly for in-memory chart.<br />
* D-14007: In System reports, model related selections are hidden from the Analyzed objects lists.<br />
* D-14005: In big data chart, changing to custom expression caused crash with some expressions having case/event attribute.<br />
* D-14003: When dimensioning was not used, pivot table values were incorrectly rounded in the server side.<br />
* D-14004: Removed empty filters from queries to optimize them.<br />
* D-13988: Fixed issue where data grid context menu rendered initially as too high.<br />
* D-13979: BPMN model editor element settings use now Open Sans font.<br />
* D-14013: Fixed incorrect expression "Duration between first and last occurrence" in big data chart event types.<br />
* D-13984: Fixed the error of refusing to run the JavaScript URL.<br />
* D-14031: ThrownObject property was not included to http error response when error came from the script.<br />
<br />
== QPR ProcessAnalyzer 2024.1 (build 4784) (released 2024-01-10) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue fixed in QPR ProcessAnalyzer 2024.2: In Big data chart, some measures, dimensions and columns have the filtering option missing. The issue concerns for example Duration between events, Path starting/until between specific events, and Cases where event occurs before other selections. Workaround is to set the filter in the chart json settings: the filter can be configured to another expression and copied to the correct expression.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
QPR ProcessAnalyzer Server and QPR ScriptLauncher are now using .Net 8 (previous was .Net 6). When updating to this release, install the .Net 8 Runtime ([[Updating_QPR_ProcessAnalyzer_Server|see more]]). The .Net 6 doesn't need to be uninstalled immediately because .Net 6 and .Net 8 work side-by-side, but due to security reasons, the unused .Net 6 should eventually be uninstalled.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In this release, all filters that don't contain any filter rules, are removed. These are legacy filters which have not been visible in the UI.<br />
</div><br />
<br />
'''Features:'''<br />
* B-08019: New component [[Design_Diagram|Design Diagram]] for showing user-created diagrams in dashboards where to visualize process mining metrics.<br />
* B-08087: Generic [[Dropdown_List_Selector|dropdown list selector]] works with Snowflake models allowing to add selection lists for any values.<br />
* B-08163: Linked settings support for binding to [[Chart_Linked_Settings#Binding_to_case_attribute_filters_with_attribute_name_and_attribute_values|case attribute filter values without defining case attribute name]].<br />
* B-08170: Snowflake model filters can be [[Filtering_in_QPR_ProcessAnalyzer#Filter_actions|saved as new models]] which can be used to create snapshots of part of models.<br />
* B-08093: Multiple dashboards can be exported to same file, and model can be set for imported dashboards.<br />
* B-08161: Added [[Datatable_in_Expression_Language#Modify|Modify]] function to change datatable properties and improved [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#CreateDatatable|CreateDatatable]] function for creating datatables.<br />
* B-08122: Added new system report to list dashboards.<br />
* B-08173: Removed legacy filters that didn't have any filter rules.<br />
* B-07961: In OperationLog, changed parameters to json format and added request id.<br />
* B-08069: Added DashboardId property to [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog]] in expression language.<br />
* B-08139: Added [[Datatable_in_Expression_Language#UpdateRows|UpdateRows]] function to update existing rows in datatables with similar logic than SQL update.<br />
* B-08115: Added [[Datatable_in_Expression_Language#DeleteRows|DeleteRows]] function to delete rows in datatables with similar logic than SQL delete.<br />
* B-08149: QPR ProcessAnalyzer has been updated to .Net 8.<br />
* B-08054: Changed Scripts property in generic context to return all scripts, instead of legacy system level scripts.<br />
* B-08138: Changed Synchronize function to remove all columns when no Snowflake table exists.<br />
* B-07689: For datatables, [[Datatable_in_Expression_Language#ForeignKeys|foreign keys]] to other datatables can be defined using expression language.<br />
* B-08176: Translation updates for release 2024.1.<br />
* B-08175: Workspace should show timestamps in user's local time.<br />
<br />
'''Fixed issues:'''<br />
* D-13913: Datatable properties dialog incorrectly showed linked models from other projects.<br />
* D-13916: Chart filter could not be defined for some expressions in Big data chart.<br />
* D-13933: Navigation menu selected item wasn't highlighted when used Snowflake models.<br />
* D-13906: In Conformance Analysis, deviating flows were not translated.<br />
* D-13907: Improved translation related to datatable properties dialog "Used by models" field.<br />
* D-13904: There was an unclear error message in Snowflake, as exception code 1 was returned without AttributeName and ModelName properties when non-existing attribute was in filter.<br />
* D-13911: Fixed small glitches in the opening and closing of drop-down lists.<br />
* D-13918: Datatable could be configured incorrectly to use table for other datatable.<br />
* D-13932: Duplicating datatable with custom table in datasource losed all data.<br />
* D-11002: Removed legacy in-memory prediction preset.<br />
* D-13912: Added check that array cannot be stored to dashboard Content property.<br />
* D-13936: Query designer default query didn't work with Snowflake models.<br />
* D-13938: There was an incorrect logging with some operations related to ScriptLauncher.<br />
* D-13923: Snowflake expressions didn't work with Where function in root referring to case attribute.<br />
* D-13939: ApplyFilter function gave null reference error for non-existing attribute name.<br />
* D-13931: There were issues with AllowExternalDatasources and EnableFullFunctionality settings.<br />
<br />
== QPR ProcessAnalyzer 2023.7 (build 4326) (released 2023-11-28) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Limitation for the maximum amount of data (B-07636) causes a behavior change in in-memory charts that have the Maximum rows settings empty and have the sorting defined. In certain cases, the order in which measures are evaluated changes (due to an internal performance optimization). If there are custom expressions that define variables, the variables may not be available in other measures anymore. As a resolution, either redefine the variables in those measure expressions or add those measures secondarily to the sorting.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Default query timeout of 30 minutes has been added for --#ImportOdbcQuery, --#ImportSqlQuery and --#ImportOleDbQuery commands. If a query run is taking longer than the timeout, the query is stopped. The timeout can be adjusted using the '''QueryExecutionTimeout''' parameter. Previously, there has been no timeout, so queries that take more than 30 minutes require configuring a longer timeout.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Incorrectly configured [[Chart_Linked_Settings|linked settings]] in charts (available in the ''Advanced'' tab) give now an error message, if they are referring to non-existing measures, dimensions or columns. Previously, incorrect linked settings were ignored. To fix the error message, remove the incorrect linked settings.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07511: Datatables have a [[Datatable_Properties_Dialog|dialog]] to view datatable properties, write description, set the Snowflake source table, add/modify/delete columns, and set the datatable key.<br />
* B-08150: Added setting [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|Apply chart filters first]] to determine whether chart filter rules or dashboard filter rules are applied first when chart queries are filtered.<br />
* B-08091: When filtering charts in Snowflake, case attribute filter is created instead of case id filter.<br />
* B-08091: [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|New setting]] to define whether cases or events are filtered by default.<br />
* B-08091: New preset "Looping paths" to detect whether there are repeating patterns of events.<br />
* B-08091: Duration between events calculation ignores negative durations in Snowflake.<br />
* B-08091: Chart loading animation has been renewed.<br />
* B-07636: To prevent dashboards from jamming when querying too much data, added [[QPR_ProcessAnalyzer_Chart#Available_Visualizations|limitations]] to the amount of data that charts can visualize. Note that the limitation concerns the aggregated data that is visualized, not the source event log data.<br />
* B-08017: [[Dashboard_in_Expression_Language|Dashboards API]] has been added to expression language, allowing to create, modify and delete dashboards in scripts.<br />
* B-08056: Following properties have been added to [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#User.2FGroup|user objects]] in expression language: IsLocked, LastLockedDate, LastLoginDate.<br />
* B-08053: [[Navigation_Menu#System_Reports|User rights report]] has been refactored to use [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property in the expression language. The change also simplifies the report as now it only shows the direct role assignments that are visible in the [[Manage_Users_and_Groups|User Management]].<br />
* B-08151: For Snowflake expressions support for following [[SQL_Expressions#Window_functions|windowing functions]]: sum, average, median, min, and max.<br />
* B-08050: When a model is created, the default filter is not created anymore (this is a refactoring that doesn't have any impact on user interface).<br />
* B-08123: Translation updates for 2023.7.<br />
* B-08092: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13876: In CreateSnowflakeConnection function, ProjectId parameter is optional when OdbcConnectionStringKey is not specified.<br />
* D-13898: Snowflake: Exclude case attribute filter didn't work when there was null values and was selecting at least two values.<br />
* D-13890: Fixed XES file import to work.<br />
* D-13894: Business calendar based duration calculation was incorrect in some durations that spanned to several weeks (for Snowflake and in-memory models).<br />
* D-13899: Using broken OdbcConnectionString in a datatable prevented the datatable from being deleted.<br />
* D-13883: Script run stucked after running a script with error that uses client-side ODBC import.<br />
* D-13879: SqlExpressionValue filter when excluding events didn't work with filter rule root expression only.<br />
* D-13896: Adding or removing columns to datatable didn't change the LastModifiedDate.<br />
* D-13882: User details weren't written to operation log when creating or modifying users.<br />
* D-13771: User rights system report didn't give error when changing columns.<br />
* D-13893: Some event filtering caused null pointer error when primary key had been defined.<br />
* D-13873: Fixed pivot table visual issues after component update.<br />
* D-13900: When adding, renaming or removing columns for Snowflake table fails, operation is now rolled back without any changes.<br />
* D-13866: Querying GET api/uielements was quite slow right after server start.<br />
* D-13864: Combinations of translatable and hardcoded strings didn't get translated in UI.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.6 (build 3933) (released 2023-10-24) ==<br />
<br />
'''Features:'''<br />
* B-08055: Error message for locked account has been replaced with generic error message, so that username enumeration is not possible.<br />
<br />
'''Fixed issues:'''<br />
* D-13884: Attributes dialog crashed with some older model configurations.<br />
* D-13843: In charts, selected case and event attributes switched away when attribute data type was ShortString.<br />
* D-13877: Some Snowflake expressions gave error "exceeds maximum length limit of 255 characters" when selecting lot of items.<br />
* D-13878: Snowflake expression filters for case attribute values didn't accept other than string type of case attributes.<br />
* D-13871: Some statistical calculations with percentages didn't work with Last Row Aggregates Over-limit Rows setting.<br />
* D-13875: Using some case level filters in a model without cases datatable didn't work.<br />
* D-13861: Dashboard opens are now logged to the Task log (i.e., calling GET /api/dashboards/{dashboardid}).<br />
* D-13870: Workspace projects hierarchy focused project showed light grey background making the project name not readable.<br />
* D-13867: When starting datatable refresh and going to other tab, went back to Datatables tab when query completed.<br />
* D-13853: If chart Custom Layout settings had extra series defined, chart may have crashed.<br />
* D-13869: Export as CSV button didn't work in the datatable contents dialog when dialog was still loading.<br />
* D-13872: Main progress spinner had unnecessary small scrollbar on top right.<br />
* D-13863: In the REST API method GET /api/users, password field (that has always been null) has been removed.<br />
<br />
== QPR ProcessAnalyzer 2023.6 (build 3847) (released 2023-10-17) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is removed in this release. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
'''Features:'''<br />
* B-07992: Added 10 new presets including Queue analysis, Four eyes principle, Self-looping events, and Path until selected event. There are also presets for Individual Cases Flow and Range of event type occurrences which use Gantt chart.<br />
* B-08011: Added following date related operations for Snowflake: Day of year, Day of month, Day of week, Week of year, Half-year only, Quarter only, Month only, Hours only, Minutes only, Seconds only, and Milliseconds only. These are available when calculating with date type of data.<br />
* B-08016: [[QPR_ProcessAnalyzer_Table#Table_actions|Table actions to set variables]] can also be opened to a new browser tab. Also improved user interface for table actions.<br />
* B-08018: For Snowflake expressions, added Flows aggregations FromEventType and ToEventType to get starting/ending event type, and FlowOccurrences aggregations FromEvent and ToEvent to get starting/ending event.<br />
* B-08001: Added [[Generic_Functions_in_QPR_ProcessAnalyzer#CallStoredProcedure|CallStoredProcedure]] function to call Snowflake stored procedures. This allows to start ETL transformation in Snowflake orchestrated by QPR ProcessAnalyzer script.<br />
* B-08013: Added [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property to expression language to replace the legacy UserPermissions analysis (11).<br />
* B-07976: Snowflake [[Filtering_in_QPR_ProcessAnalyzer_Queries#Expression|expression based filter rules]] support additional expression columns allowing more Big data chart expressions to be filterable.<br />
* B-08015: Big data chart doesn't anymore support calculation in SQL Server (using local datatables).<br />
* B-06270: Improved error messages and made them translatable by taking into use exception codes provided by server.<br />
* B-08021: Added possibility to store [[Diagram_in_Expression_Language|designed diagrams]] for models and expression language API for reading and modifying diagrams.<br />
* B-08037: Dropped following unused tables database: PA_IDEA, PA_IDEA_VOTE, PA_REPORT, PA_REPORT_SETTING, PA_SESSION_SERVICE, PA_VIEW_FILTER_RULE, PA_VIEW_FILTER_RULE_PARAMETER.<br />
* B-08052: Language translations have been updated to 2023.6.<br />
* B-08051: Frontend side components have been updated.<br />
* B-08034: Backend side components have been updated.<br />
<br />
'''Fixed issues:'''<br />
* D-13830: Object counts indicator in header showed incorrect counts when there was disabled filter rules in Snowflake models.<br />
* D-13833: In-memory charts didn't work with boolean type of dimensions when filtering with the false value.<br />
* D-13858: Target value measures didn't update chart when controlled using an on-screen setting.<br />
* D-13827: Calculated attributes data type was incorrectly set as Any by the Attributes dialog.<br />
* D-13849: Multiselect list search didn't allow spaces.<br />
* D-13829: Multiselect dropdown lists height jumped couple of pixels when selecting values.<br />
* D-13835: Deselecting a selected data point didn't remove chart filter rule.<br />
* D-13702: Improved Snowflake query performance in situations when there are lot of filter rules (by decreasing number of CTE's).<br />
* D-13819: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13820: Fixed incorrect manifest.json file to avoid "not found" errors when fetching web site icon.<br />
* D-13865: Break, continue, and return statements didn't work properly when called from inside a catch block.<br />
* D-13795: There was a Python error in clustering analysis with Snowflake model.<br />
* D-13823: Some tooltips in Workspace project hierarchy didn't work and caused a JavaScript error.<br />
* D-13824: BPMN editor align context menu layout looked strange.<br />
* D-13813: QPR logo button in the top left was misaligned in Firefox.<br />
* D-13797: Snowflake query may have given following error when using sampling: ambiguous column name '_EventType_NotNull_1'.<br />
* D-13774: TakeSample function with certain columns caused SQL compilation error: ambiguous column name 'Case Name'.<br />
* D-13782: Snowflake: Aggregating from variations didn't work when using sampling.<br />
* D-13836: Some tooltips had a strange two-colored background.<br />
* D-13834: Removed Model statistics column from clustering and root causes analysis.<br />
* D-13860: Removed filter button from the custom expressions in Task log analyzed objects.<br />
* D-13838: Removed Split data by filtering column from clustering analysis.<br />
* D-13832: Script and model status updates incorrectly sent next update when previous was still pending.<br />
* D-13839: Charts reset zoom button font size was too small.<br />
* D-13817: Importing data to Snowflake datatable with Append=0 doesn't now drop the underlying Snowflake table.<br />
* D-13825: Some models could not have been deleted from recycle bin.<br />
* D-13852: Recycle bin Projects and Models tab didn't show correct content when Recycle bin only contained either models or projects.<br />
* D-13841: In-memory chart Data type selection type has been corrected to string.<br />
* D-13842: Second time and Third time selections has been hidden in in-memory chart measures.<br />
* D-13850: In Chrome, there were console errors related in incorrect text field autocomplete type and text field without form.<br />
* D-13847: Improved browser side performance by removing unnecessary operations.<br />
* D-13859: Chart without dimensions showed an unnecessary Remove dimension button.<br />
* D-12598: When script is stopped in server, ScriptLauncher could still incorrectly continue to import data.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.5 (build 3334) (released 2023-09-07) ==<br />
<br />
'''Fixed issues:'''<br />
* D-13826: Measures or dimensions with case or event attribute and value selections incorrectly removed calculated attributes when dashboard was opened or chart settings were changed.<br />
* D-13821: Font size of some Highcharts tooltips was too small. Issue appeared when there were tooltips mappings in measures or dimensions.<br />
* D-13810: Simplified help links: now all Help buttons go to the QPR ProcessAnalyzer wiki main page.<br />
* D-13822: Snowflake clustering analysis showed empty strings and nulls as case attribute values in an unclear way as just nothing.<br />
<br />
== QPR ProcessAnalyzer 2023.5 (build 3304) (released 2023-09-05) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In Big Data Chart, the '''Case conformance''' measure and dimension has changed in a way that now it provides boolean values (true/false) instead of integer values (1/0). If [[Measure,_Dimension_and_Column_Settings#Other_settings|colorMappings]] are used for this measure or dimension to set specific colors to visualize conformant and nonconformant cases, the mapped values need to be changed as follows: '''1''' -> '''true''' and '''0''' -> '''false'''. Without the change, the mapped colors are not effective.<br />
<br />
Exmaple: Old configuration:<br />
<pre><br />
"colorMappings": {<br />
"1": "#36d475ff",<br />
"0": "#f5403bff"<br />
}<br />
</pre><br />
New configuration:<br />
<pre><br />
"colorMappings": {<br />
"true": "#36d475ff",<br />
"false": "#f5403bff"<br />
}<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is deprecated. Big data chart has allowed to process data both in Snowflake and SQL Server. Now the support for SQL Server is deprecated and the Big data chart will only support calculation in Snowflake. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). The OperationLog analysis is replaced by the [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog function]] and the Infcluencers analysis is replaced by the [[FindRootCauses_Function|FindRootCauses function]].<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [12, 14, 15, 16, 29];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
By default, Snowflake ODBC driver generates quite much logging to files which might unnecessarily fill up the disk space. It's recommended to set the LogLevel parameter to value 0. The path where the logs are created can be seen in Windows registry (key LogPath). More information about configuring Snowflake ODBC parameters: https://docs.snowflake.com/en/developer-guide/odbc/odbc-parameters.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07971: Machine learning based [[Clustering_Analysis|Clustering analysis]] can be run in Snowflake.<br />
* B-07989: In dashboard designer the stacking order of charts can be changed with buttons [[QPR_ProcessAnalyzer_Dashboard_Designer#Viewing_and_Editing_Dashboards|Bring to front, Send to back, Bring forward and Send backward]].<br />
* B-07977: For [[Sankey_Chart|sankey diagram]], added Start level and End level mappings to define custom start and end level for the sankey flows. Implemented also color mappings to define specific colors for specific values.<br />
* B-08010: To improve performance, charts are loaded and updated only when they are visible in the dashboard.<br />
* B-07975: Added following [[SQL_Expressions#Date_functions|date related functions]] to Snowflake: DayOfYear, DayOfWeek, WeekOfYear, Quarter.<br />
* B-07908: When [[QPR_ProcessAnalyzer_Project_Workspace#Duplicating_Model|model is duplicated]], also filters in the model are also duplicated.<br />
* B-07904: Filters and models API for expression language has been completed.<br />
* B-07991: In [[Filter_Selectors|case and event type filter selectors]], threshold whether the dropdown list or search dialog is shown can be defined using the ''Maximum Rows'' setting. Also the search dialog filters search results by other filter rules in the dashboard.<br />
* B-07999: Filters report has been changed to use the [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|expression language API for filters]].<br />
* B-07540: Added [[QPR_ProcessAnalyzer_Expressions#Throwing_objects|throw statement]] to expression language.<br />
* B-07813: UI components are updated. There are small visual improvements, such as in flowchart flows are routed a bit differently and in charts the hidden series is shown as strike-through in the legend.<br />
* B-07963: Following legacy analysis types have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29) (see more information in the note above).<br />
<br />
'''Fixed issues:'''<br />
* D-13777: Filters could not be created in charts when "Update Filter During Selection" setting was disabled.<br />
* D-13767: Automation per Event Types preset in in-memory incorrectly showed only one event type.<br />
* D-13756: Changing background color in KPI card didn't have any effect.<br />
* D-13812: "Exclude events" was incorrectly translated to "Exclure les cas" in French.<br />
* D-13815: Dashboard designer background grid was not visible in entire area in edit mode. Improved also the grid to match to snapping in move and resize.<br />
* D-13674: Business calendar dialog layout was incorrect when a model with a long name was selected to copy holidays.<br />
* D-13811: Table actions link to a new window didn't go to dashboard if there were other parameters in the link.<br />
* D-13601: Fixed issue where some presets may have given error when attribute value selection and the automatically selected attribute conflicted by the data type.<br />
* D-13753: While Snowflake model was selected, in Filters and User Rights reports the Columns list could not be opened.<br />
* D-13720: Now table column filter and sorting are preserved when resizing or zooming page.<br />
* D-13785: In tables increased number of rows to 20000 that are inspected to get available items shown in Excel-style column filter.<br />
* D-13759: Some statistical calculations had bad performance with large number of rows.<br />
* D-13787: Conformance statistics component didn't have scrollbars when text didn't fit to the visible area.<br />
* D-13788: In-memory "Nonconformance reason" selection caused error when two of them was selected in the same chart.<br />
* D-13783: When Analyzed objects was Generic analysis, column selection incorrectly caused "Analysis has not been selected" error.<br />
* D-13776: When measure name contained quotation mark, notification preview didn't work.<br />
* D-13747: Filtering with integer type of case id with case attribute value filter caused error in Snowflake.<br />
* D-13791: In Firefox, model selection in chart settings didn't show models in the first open.<br />
* D-11984: Recycle bin buttons didn't fit to the screen when screen width was small.<br />
* D-13780: Using CaseId case attribute in clustering analysis did not work with Snowflake 106 cases standard model.<br />
* D-13781: Clustering analysis produced Python error with a certain simple Snowflake model.<br />
* D-13730: Snowflake: Case attribute filtering didn't work when there are cases without row in cases table.<br />
* D-13803: There was chart configuration validation error in browser console when measures were moved into dimensions in Big data chart.<br />
* D-13758: There was performance issue with the Recent tasks system preset.<br />
* D-13793: Snowflake clustering failed when cluster count is larger than case count.<br />
* D-13763: SQL expression based filter rule with Where function to filter events didn't filter anything in Snowflake.<br />
* D-13804: Added missing Millisecond function to Snowflake.<br />
* D-13772: Expression EventLog.Cases.Events caused error "Value cannot be null".<br />
* D-13755: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13739: When switching between System reports there was error: "Uncaught Error: 2nd dimension not found. at y.getExpressionConfiguration".<br />
* D-12109: Sometimes flowcharts showed message "Error in querying event type measures. Input string was not in a correct format".<br />
* D-12473: Cost Savings by Automation preset gave sometimes error "Unable to cast object of type 'System.Double' to type 'System.String'".<br />
* D-13750: Snowflake model didn't work with the Case Duration vs. Manual Activities preset.<br />
* D-13657: There was error converting data type nvarchar to bigint.<br />
* D-13796: Some Snowflake operations didn't work with zero rows and columns.<br />
* D-12494: Now when chart size changes, the table column filters and sorting are preserved.<br />
* D-13736: In Performance benchmarking dialog, the Export result button exported wrong benchmark performance analysis result.<br />
* D-13609: Improved conformance analysis related filter names.<br />
* D-13594: Recycle bin buttons were not visible when opening recycle bin in a narrow screen.<br />
* D-13226: Tooltips in the model properties dialog are now translated.<br />
* D-12569: Table incorrectly showed ellipsis for narrow boolean type of columns showing checkboxes.<br />
* D-13391: Emptying date or datetime picker value was not registered and it didn't trigger functionality.<br />
* D-12621: Value search dialog didn't work with values containing backslashes.<br />
* D-13796: Some Snowflake operation didn't work with zero rows/columns.<br />
<br />
== QPR ProcessAnalyzer 2023.4 (build 2628) (released 2023-06-14) ==<br />
<br />
'''Features:'''<br />
* B-07767: Added [[Gantt_Chart|Gantt chart]] to visualize timeline of cases and events divided into swimlanes.<br />
* B-06383: Added [[Sankey_Chart|Sankey chart]] to visualize flow from one set of values to another.<br />
* B-07941: Implemented many more presets running in Snowflake models for compliance and operational excellence use cases. There are also presets for the path analysis and process bottlenecks identification.<br />
* B-07864: Snowflake conformance analysis shows now [[Conformance_Analysis#Top_Deviations_(in-memory)_/_Deviating_Flows_(Snowflake)|reasons for conformance deviations]], such as which event occurrences deviated from the design model.<br />
* B-07909: Snowflake conformance analysis visualizes [[Conformance_Analysis#Undesired_Events_(Snowflake)|undesired event types]] in table and flowchart.<br />
* B-07823: Flowchart Bottlenecks preset has been changed to show bottlenecks for event types. Also renewed the [[QPR_ProcessAnalyzer_Logs#Task_Log|Tasks reports]] to use expression language based interface.<br />
* B-07891: User interface has been [[Languages_and_Localization|translated into Portuguese]].<br />
* B-07873: Improved [[QPR_ProcessAnalyzer_Pivot_Table|pivot table]] visual layout to highlight totals and aggregated rows. Also the row titles are now visible in the top left.<br />
* B-07905: Added [[SQL_Expressions#Rank_functions|Rank related functions]] to Snowflake for writing more versatile custom KPI's, e.g., FirstValue, LastValue, NthValue, Lead and Lag.<br />
* B-07912: Added more SQL expression [[SQL_Expressions#Array_functions|array functions ArrayToString and ArrayOverlap]] to Snowflake.<br />
* B-06449: Added SQL expression functions ToTimestamp and TryToTimestamp for parsing timestamps from strings using provided format.<br />
* B-07959: Added new functions Base64Encode and Base64Decode to help using basic HTTP authentication when calling web services.<br />
* B-07206: SQL expressions support data [[SqlDataFrame_in_Expression_Language#WithClusterColumn|clustering]] which is an unsupervised machine learning algorithm to group data based on similarities.<br />
* B-07848: Data can be extracted from SAP using the encrypted [[Importing_Data_from_SAP#SNC_encrypted_connection|SNC connection]].<br />
* B-07903: Added expression language API to create and modify filters and models.<br />
* B-03103: [[QPR_ProcessAnalyzer_Logs#Task_Log|Task log]] (operation log) can be accessed in expression language.<br />
* B-07872: List aggregation with Distinct=true orders now items by their value.<br />
* B-07940: Removed "Count" aggregation from textual values in Big data chart (you can use the Case count, Event count, etc. selection instead).<br />
* B-07757: Backend support for datatables linking to user-definable Snowflake database, schema and table.<br />
* B-07825: Improved error message when trying to use non-existing attributes in Snowflake queries.<br />
* B-03101: To expression language, added try-catch-finally statement to handle thrown exceptions.<br />
* B-07861: Removed available and total virtual memory information from User settings dialog.<br />
* B-07902: Optimized sequences of joins in Snowflake queries to improve performance.<br />
* B-07837: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13709: If image width-to-height ratio was lower than container's ratio, image was incorrectly stretched to fit the container.<br />
* D-13660: Disabling filter rules didn't work in Snowflake models.<br />
* D-13526: Passing dataframes from SQL scripts to expression scripts didn't work.<br />
* D-13661: Snowflake conformance analysis crashed when there was no access to conformance related Snowflake UDF's.<br />
* D-13693: Resolved major Snowflake conformance analysis performance issues in the BPMN model handling.<br />
* D-13716: Snowflake root causes analysis incorrectly bypassed Snowflake cache.<br />
* D-13707: In SQL Scripting, the datatable analysis (number 18) didn't always copy the data table contents to the target table correctly.<br />
* D-13653: Big data flowchart Root causes preset showed incorrect legend.<br />
* D-13626: Flowchart froze when converting into big data flowchart and vice versa by modifying chart json settings.<br />
* D-13656: Root causes for attribute gave error "Failed to compare two elements in the array" in some situations.<br />
* D-11563: Pivot table had a minimum height of 300px, which caused bottom part of it to be out of view.<br />
* D-13704: In CSV file import, parsing now allows spaces between column separator and text quotation mark.<br />
* D-13598: Chart gave unclear error message when events datatable was not defined.<br />
* D-13655: Improved error messages for BPMN editor and conformance statistics.<br />
* D-13528: Error message for certain erroneous SQL expressions was unclear.<br />
* D-13677: "Flow occurrences with specific case attribute value" selection didn't work for in-memory chart.<br />
* D-13663: Pivot table border line was slightly broken in the header area.<br />
* D-13608: There was incorrect alignment of items in the table paging controls.<br />
* D-13703: Importing CSV file with some special characters to Snowflake failed (due to incorrect escaping in Snowflake staging files).<br />
* D-13708: Duplicating datatable using user defined table, removed data the source table.<br />
* D-13717: Dependency wheel crashed when there were zero weights and showing data labels.<br />
* D-13348: There was an unclear error message when Snowflake query had a certain incorrect expression.<br />
* D-13732: Pivot table Excel export contained headers formatted incorrectly.<br />
* D-13729: There was a JavaScript error when limited user tried to access business calendar.<br />
* D-13662: Percentile function didn't always work with timespan types.<br />
* D-13646: Using incorrectly configured model without cases datatable caused null reference error.<br />
* D-13629: When tried to use chart with a non-existing model, there is now a proper translated error message.<br />
<br />
== QPR ProcessAnalyzer 2023.3 (build 1990) (released 2023-05-03) ==<br />
<br />
'''Features:'''<br />
* B-07818: [[Conformance_Analysis|Conformance analysis]] is supported in Snowflake with following dashboard components: Big data chart, BPMN editor, Conformance statistics, and Design model selector.<br />
* B-07833: [[Root_Causes#Root_causes_in_flowchart|Root causes analysis for flowchart]] is available for Snowflake showing how the event and flow occurrences explain selected phenomena.<br />
* B-07786: Big data chart has more [[Big_Data_Chart#Measure_aggregations|measure aggregations]], such as median, percentile, standard deviation and variance. Also for textual items, unique values can be listed.<br />
* B-07795: [[QPR_ProcessAnalyzer_Table#Conditional_formatting|Conditional formatting]] supports also columns with non-numerical contents.<br />
* B-07830: [[Big_Data_Chart#Measure_aggregations|None and Any aggregations]] for Snowflake and user-friendly formatting for conformance violations.<br />
* B-06527: Error messages in [[Importing_Data_to_Datatable_from_CSV_File|CSV file import]] show also the column number to help working with CSV files with lot of columns.<br />
* B-07747: In-memory conformance checking accepts design models with multiple tasks having same name (same is followed by the Snowflake implementation).<br />
* B-07659: In-memory flowchart preset Case Conformance to visualize conformance checking violations.<br />
* B-07571: Added function IsConformant to backend to check whether cases are conformant.<br />
* B-07863: Added function ConformanceViolationsFlows to backend to return nonconformance reasons for violating cases.<br />
* B-07844: Support for "array" aggregation to return aggregated items as array.<br />
* B-07856: Support for creating and accessing arrays and objects in SQL expressions.<br />
* B-07860: Array handling functions and Tasks property for DesignModel entity.<br />
* B-07847: Added throttling for QPR ScriptLauncher client-side imports to limit memory usage.<br />
* B-07811: Snowflake query optimization to omit columns that are not used by the query.<br />
<br />
'''Fixed issues:'''<br />
* D-13632: Going from variations to event types led to very poor performance with certain models.<br />
* D-13628: Statistical calculations were incorrectly not applied in chart CSV export.<br />
* D-13575: SQL script may have given error "Operand type clash: nvarchar(max) was incompatible with sql_variant".<br />
* D-13597: UI supports now datatable column type "ShortString" (previously datatable contents preview and CSV import didn't work).<br />
* D-13536: Using business calendar sometimes gave error "System.InvalidOperationException: Collection was modified".<br />
* D-13477: Chart types without y-axis mapping caused an error when series mapping was used.<br />
* D-13453: _model variable was not available for Snowflake expression filter rules.<br />
* D-13527: Checkbox height didn't increase when long label needed to span to multiple lines.<br />
* D-13363: Snowflake query with EvaluateAfterAggregations and IsHidden failed when dimensioning by case id column.<br />
* D-13383: Snowflake query gave error "Invalid column name 'FromCase Name'".<br />
* D-13523: Request id was incorrectly shown as zeros in error messages.<br />
* D-13541: In CSV import, error message for maximum number of columns exceeded is improved (maximum is 300 column for SQL Server).<br />
* D-13583: Objects count in header didn't work for empty Snowflake model.<br />
* D-13553: Larger pacm files can now be imported, as there isn't error "Request body too large. The max request body size is 30000000 bytes".<br />
* D-13306: Stack overflow error was given when using SqlDataFrames.<br />
* D-13487: When Flows root and there was filter in Values expression, some flows were lost.<br />
* D-13540: SqlDataFrame query with 300 columns failed to error "WithExpressionColumn: No name given for the new column".<br />
* D-13429: Ordering in List aggregation couldn't find columns in dataframe query.<br />
* D-13406: Dataframe query with root FlowOccurrences and get value from cases caused error.<br />
* D-13538: There was incorrect handling of escaping characters in column names used in dimensions.<br />
* D-13633: Fixed ordering in List aggregation with null and empty values.<br />
* D-13636: Query that dimensions by numeric case attribute with AggregateOthers true, caused error.<br />
* D-13589: Creating Snowflake datatable did not connect to Snowflake.<br />
* D-13623: Value expressions without aggregation didn't work with AggregateOthers setting.<br />
* D-13554: In in-memory chart, percentile function might have return both Int64 and Double type of objects which cannot be sorted.<br />
* D-13481: Improved error message when trying to use deleted model.<br />
* D-13621: Dynamic value search dialog had incorrect font in lists.<br />
* D-13610: Some invalid BPMN files crashed BPMN editor.<br />
* D-13614: Checkbox label texts overflowed to right.<br />
* D-13520: Removed excessive parameters from the Query Designer for generic context queries.<br />
* D-12998: QPR icon was incorrectly positioned in header in Safari.<br />
* D-13480: Import to duration data type is removed from Snowflake datatables, and for local datatables duration type maximum size is checked.<br />
* D-13517: In Highcharts-based visualizationsm conditional formatting didn't work for other than the first y-axis mapping.<br />
* D-13529: In some presets containing several on-screen settings, when chart showed in error message, on-screen settings showed invalid selection.<br />
* D-13530: Opening dropdown list caused JavaScript error when the list contents should be empty after it previously contained items.<br />
* D-13486: Removed unreachable error message in CSV import.<br />
* D-13524: Fixed in-memory chart flow occurrences root measures "Event attribute (text)" and "Event attribute (number)" that caused error.<br />
<br />
== QPR ProcessAnalyzer 2023.2 (build 1478) (released 2023-03-22) ==<br />
<br />
'''Features:'''<br />
* B-07755: [[Business_Calendar|Business calendar]] for duration calculation is available for Snowflake models.<br />
* B-07719: In Snowflake dashboards, [[Big_Data_Chart#Using_measure_variables|measures can be assigned to variables]] and use the variables in other measures to create combined measures.<br />
* B-07746: Changed in-memory conformance checking to not show invalid flow violations where starting or ending event type is invalid.<br />
* B-07743: [[PA_Configuration_database_table#General_Settings|Default datasource]] can be configured for datatables created by scripts, allowing to set Snowflake as default.<br />
* B-07740: System memory indicator moved from the header to User settings Version information dialog.<br />
* B-07776: New SQL expressions functions Unicode, Char and Regexp, as a basis for future rule-based process mining.<br />
* B-07741: Backend support for aggregation operations Median, Percentile, Stdev, Stdevp, Var and Varp to Snowflake.<br />
* B-07742: Backend support for aggregation operation to list unique items in Snowflake.<br />
* B-07770: Optimized Snowflake SQL generation by combining consecutive WithColumn function calls into one select.<br />
<br />
'''Fixed issues:'''<br />
* D-13491: QPR ProcessAnalyzer server crashed now and then when sorting was in progress and the query was cancelled.<br />
* D-13380: Dimensioning integers in in-memory core calculation didn't work correctly as 0 and -1 were put to same bucket.<br />
* D-13385: In Workspace Bin, Delete Forever and Restore from Bin buttons were misaligned.<br />
* D-13332: Conformance checking didn't show in violations when there were multiple undesired events in same case.<br />
* D-13405: Images take now always all available space in image component area.<br />
* D-13417: KPI card without title was slightly misaligned vertically.<br />
* D-13438: Clicking selected event type or flow in flowchart didn't cancel the filter selection.<br />
* D-13350: Task log and Script log default filter end date is now empty by default.<br />
* D-13381: Disabled browser auto-complete from flowchart variation stepper and Workspace create/rename object dialog.<br />
* D-13347: Improved performance for in-memory business calendar calculation.<br />
* D-13335: In in-memory chart, filtering didn't work in "Flow occurrences" root "Flow occurrences with specific event attribute value" dimension.<br />
* D-13367: Percentage value wasn't displayed properly with German or Spanish language when event types were shown in object counts indicator.<br />
* D-13451: Exported filter file is now named based on selected filter name.<br />
* D-13378: In Big data chart, prevented error "Unable to aggregate from level RootCauses to level Custom".<br />
* D-13293: DataFrame query with root Flows and IncludeEvents and ExcludeEvents filter rules failed.<br />
* D-13370: Fixed issue where on-screen settings that didn't have any selectable items, showed a strange selection.<br />
* D-13392: Clustering analysis was incorrectly shown when originally in-memory chart was converted into big data chart by changing chart json settings.<br />
* D-12784: Some Snowflake queries incorrectly bypassed Snowflake caching because they used unique object names.<br />
* D-13456: Improved error messages for incorrectly configured on-screen settings.<br />
* D-13445: Conformance violations related translated terms have been fine-tuned for better translations into different languages.<br />
* D-13421: Improved error messages when trying to use model having some column mappings missing.<br />
* D-13485: Snowflake business calendar gave error when calendar contained Sunday.<br />
* D-13218: Windows event viewer incorrectly contained log entries that are not errors.<br />
* D-12634: Multiline text boxes width is set to non-changeable.<br />
* D-13034: Confirmation dialog to delete items permanently has been updated.<br />
* D-13288: In dialogs, the Create button didn't show the disabled state correctly.<br />
* D-13427: When dropdown lists didn't have any selectable items, the "N/A" text appeared and the list incorrectly took more space vertically.<br />
* D-13483: In Workspace, the new items menu was too narrow for Spanish texts.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.1 (build 1449) (released 2023-02-24) ==<br />
<br />
'''Features:'''<br />
* B-07690: System setting [[PA_Configuration_database_table#General_Settings|DatabaseId]] can be defined by administrator to get more simple table names in Snowflake.<br />
* B-07737: In flowchart Bottlenecks preset, originally used flow colors has been recovered.<br />
* B-07748: For Analyzed objects "Conformance checking findings" in charts, terminology has been revised and issue with the case count calculation fixed.<br />
* B-07663: In [[Chart_On-screen_Settings|on-screen settings]], when case/event attribute is selected, related attribute values list are reset.<br />
* B-07570: Backend support for [[Business_Calendar|business calendars]] in Snowflake.<br />
* B-07660: Backend support for conformance checking to show also the last event index and event type in NotCompleted reason.<br />
* B-07610: Memory counter related technical properties have been removed from expression language.<br />
<br />
'''Fixed issues:'''<br />
* D-13349: Opening dashboard containing Root causes preset with default settings jammed the system by generating lot of calculations (for more information, see previous release notes).<br />
* D-13277: Stacked charts with date type of data as series did incorrectly show gaps in columns/bars.<br />
* D-13270: Flowchart conditional formatting didn't work with duration multi-unit format.<br />
* D-13358: Calculation results caching works also across different user sessions.<br />
* D-13250: Dashboard with two charts connected with linked settings using variables ended up to to a never ending loop.<br />
* D-13230: SAP import did not automatically create columns to use the correct column types.<br />
* D-12857: Deeply recursive functions caused a crash without any trace.<br />
* D-12994: In Workspace, some buttons were not clickable due to breadcrumb covering them.<br />
* D-13249: In Workspace, there was incorrect error message for duplicate datatable names when there were items with only letter capitalization was different.<br />
* D-13232: In-memory chart Top variations preset is now sorted secondarily by average duration descending.<br />
* D-13300: Setting DashboardFilter variable to empty value didn't have any effect in dashboard but old value was incorrectly used.<br />
* D-12834: Limited the maximum number of dimensions to 20, to avoid too demanding queries for SQL Server.<br />
* D-12917: Changed visual indication of missing items in dropdown lists (it's no longer showing "***").<br />
* D-13111: In Root causes preset, there is now error message when trying to use weighting related columns when weighting isn't in use.<br />
* D-13124: SQLDataFrame query containing filter rule EventTypes aggregating from cases failed.<br />
* D-13207: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed.<br />
* D-13292: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed (rev.2).<br />
* D-12991: Dropdown list texts had some translations missing.<br />
<br />
== QPR ProcessAnalyzer 2023.1 (build 1433) (released 2023-02-07) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release contains a potentially severe issue, where some dashboards completely jam the system by generating lot of calculations. The issue may appear in dashboards that have been created in earlier releases and containing the Root causes preset with default settings. The issue will be fixed by the next release. The issue can be worked around by exporting the affected dashboard, modifying the dashboard file manually and importing the dashboard back. The required modification is to remove line(s) containing <pre>"preset": "RootCauses"</pre> and the comma from the preceding line.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Cases (analysis number: 5), Events (6), and EventTypes (7). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). Note that the legacy analyses removal don't affect the dashboarding functionality.<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [5, 6, 7];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2023.1, the '''.NET Desktop Runtime''' is not needed anymore for QPR ProcessAnalyzer Server, so it can be uninstalled. Also for QPR ScriptLauncher, ''.NET Desktop Runtime'' is not needed, but instead install the '''.NET Runtime''' (which is more lightweight). ''.NET Desktop Runtime'' contains the ''.NET Runtime'', so the actions are not mandatory when updating to QPR ProcessAnalyzer 2023.1.<br />
</div><br />
<br />
'''Features:'''<br />
* B-06997: Expression-based filter rules for Snowflake dashboards to allow versatile filtering and filtering from custom expressions.<br />
* B-07383: Improvements to linked settings to allow binding to variables, tags and filter rules [[Chart_Linked_Settings|(more information)]].<br />
* B-07508: Flowchart preset colors have been renewed to be more intuitive.<br />
* B-07184: Automation preset in flowchart has now options for selecting the Automation attribute and value.<br />
* B-07512: Changed datatable metadata can be refreshed from Snowflake, and all rows in the datatable can be deleted easily in Workspace [[QPR_ProcessAnalyzer_Project_Workspace#Datatables|(more information)]].<br />
* B-07440: Date when the release was made is now shown in User settings.<br />
* B-07595: WeekOfYear property for DateTime objects in expression language to get the week number of a year (between 1 and 53).<br />
* B-07623: In-memory expression language functions Random (to get random numbers) and Hash (to get hash value of string).<br />
* B-07612: Breadcrumb in Workspace has now a Home button to quickly navigate to the top level of the projects hierarchy.<br />
* B-07637: Language selector now shows the language options in local languages.<br />
* B-07228: Remove following deprecated analyses: Cases, Events, and EventTypes (see the release note above).<br />
* B-07538: Backend support: Snowflake root causes analysis can find event attribute related root causes.<br />
* B-07706: Backend support: Snowflake expression-based filter rules support for roots containing Where function.<br />
* B-07611: Removed following legacy filter rules: CaseAttributeTrend, EventAttributeTrend, EventTypeTrend, and Duration.<br />
* B-07598: Refactored client-side import for SQL scripting to use generic client-side task mechanism.<br />
* B-07716: ShortString columns are now properly detected in SQL Server queries.<br />
* B-07652: Now it's possible to pipe multiline expression strings to QPR ScriptLauncher.<br />
* B-07688: AddColumns function for Datatables to create multiple columns in one call.<br />
<br />
'''Fixed issues:'''<br />
* D-13092: Table conditional formatting didn't work when color code was fetched from other column.<br />
* D-13105: Some charts created in earlier release referring to non-existing presets names appeared as empty after software update.<br />
* D-13107: Flowcharts crashed and showed loading animation forever when setting color or flow thickness to non-numerical measure.<br />
* D-13104: In BPMN model editor, context menus to edit elements didn't appear.<br />
* D-12939: Script editor tabs Close buttons didn't work.<br />
* D-13154: "Search by case ID" didn't work in in-memory chart.<br />
* D-12933: CSV columns with only empty values were incorrectly auto-detected as integers.<br />
* D-12929: In-memory chart Root causes for case duration and Root causes for case attributes (weighted) had Custom expression missing.<br />
* D-12928: Pivot table headers were empty when there were two column levels and two values.<br />
* D-12924: Pivot table columns with Count and Distinct Count aggregations are now numeric and aligned right.<br />
* D-13033: Changing colors in chart settings Color palette caused "Item already exists" error and prevented changing colors.<br />
* D-12996: Tags referring to dashboard variables didn't work in Additional root expression.<br />
* D-12877: UI gave error in some situations: Uncaught TypeError: Cannot read properties of undefined (reading 'min').<br />
* D-13071: Prevented selecting two or more of the Y-axis, X-axis and series mappings at the same time for the same measure or dimension.<br />
* D-12895: Big data chart crashed when on-screen setting contained event type selector and there were no event type filter set.<br />
* D-13231: Tooltips for dashboard name, model selector and filter selector in header show now the content text instead of generic instruction.<br />
* D-13139: There was an error when tried to create filter for a custom expression where selected data type didn't match with the actual type of data.<br />
* D-12988: Chart presets selection in chart settings showed unnecessary tooltip.<br />
* D-12901: When set sampling over 1 million, Snowflake models gave error: parameter value out of range: size of fixed sample. Must be between 0 and 1,000,000.<br />
* D-12904: Creating expression filter having lower/greater logic with root objects sampling failed.<br />
* D-12923: Chart schema didn't accept pivotAggregation in dimensions/columns.<br />
* D-12926: Root causes columns Selected weight, Compared weight and Total weight have now correct float data type.<br />
* D-12880: In out-of-the box dashboards, chart titles and subtitles were not translated.<br />
* D-12916: Improved filter rule description text in Filter rule editor dialog for expression filter rules.<br />
* D-12889: No clear error message was given when user tried to export corrupted model from .pacm file.<br />
* D-12869: Date selector in on-screen settings had inconsistent vertical alignment.<br />
* D-12938: When creating a filter with lasso and selecting a single data point only, "equals" kind of filter rule is now created.<br />
* D-12989: "Running tasks as specific time" system report may have ended up in loop causing following error: Maximum call stack size exceeded error.<br />
* D-13010: Pivot table sometimes ended up to never-ending resizing loop when browser zoom was more than 100%.<br />
* D-12790: Expression language: DataFrame.SetColumns: Initializing and using variables defined in closure of SetColumns function parameter didn't work<br />
* D-12927: All on-screen settings were not be visible in narrow charts having several on-screen settings.<br />
* D-12937: Added maximum value limitation to several number input fields in charts.<br />
* D-12947: Message dialog didn't show line breaks correctly (e.g., in CSV file import).<br />
* D-12948: Defining column setting caused error when Measure Expression was not defined.<br />
* D-12946: Filter rule text couldn't be seen entirely from tooltip.<br />
* D-12983: When range filtering using integer values in Highcharts chart, filter is now shown as integer value.<br />
* D-12984: When range filtering in Highcharts charts and there is category axis, filter rule is now based on individual (category) values.<br />
* D-12930: When creating filters from charts using date type of X-axis with lasso, "greater than or equal" and "less than or equal" filter rules are not created.<br />
* D-12920: "Where" function in DataFrame lost column data types of the original DataFrame.<br />
* D-13048: Model notifications failed with certain measures that define variables in root expression leading to error: Variable "sampleSize" already exists in this context.<br />
* D-13116: BPMN editor had some translations missing.<br />
* D-13019: Datatable and script selectors show now datatable/script name instead of id, when opening selector having existing selections.<br />
* D-12951: Changing additional root expression in flowchart didn't refresh the flowchart.<br />
* D-13147: Filter rule boxes in header had different widths, and Add filter rule button vertical alignment was incorrect.<br />
* D-12907: Sometimes case attribute selection showed incorrect attribute name for empty model.<br />
* D-13148: Filters and Datatables system reports loaded unnecessarily twice which could be seen as blinking.<br />
* D-12844: In dataframe query, FlowOccurrences in root and GetValueFrom Cases with filter gave null reference exception<br />
* D-12915: Repeating certain query twice with aggregations in Events root generated invalid SQL<br />
* D-12728: Was huge amount logs in server during client side import (manual testing required as identification)<br />
* D-13156: Persist function failed to snowflake: Invalid unicode escape sequence '\u0027ACCE'; should be at most '\u0010FFFF'.<br />
* D-12876: Flows/FlowOccurrences in root didn't work with SqlExpressionValue filtering.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2022.8 (build 1397) (released 2023-01-11) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release fixes an issue where extracting large datasets from SAP increases memory consumption considerably and may lead to out-of-memory error. This release contains packages for both QPR ScriptLauncher and QPR ProcessAnalyzer Server. If SAP extractions are done using QPR ScriptLauncher in client side mode (ExecuteInClientSide=1), it's enough to update QPR ScriptLauncher to fix this issue.<br />
</div><br />
<br />
'''Fixed issues:'''<br />
* D-12941: Extracting data from SAP consumed unnecessary lot of memory and may have led to out-of-memory error (both when running using QPR ScriptLauncher and in server side).<br />
<br />
== QPR ProcessAnalyzer 2022.8 (build 1396) (released 2022-12-30) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Creating datatables with duplicate names in the same project is prevented, and possible existing duplicate names are automatically changed to unique names with a random suffix. If there are duplicate names, they can be renamed either before updating QPR ProcessAnalyzer (to avoid automatic renaming) or after the update (by changing suffixed names). If the renamed datatables are used by models, the linkage will break because it's based on the datatable name. Creating duplicate datatables has already been prevented in the UI, but the improved method works also in the API level.<br />
<br />
Following SQL query can be used to list datatables (and project id) having duplicate names:<br />
SELECT ITA_NAME, ITA_PROJECT_ID<br />
FROM PA_INTEGRATION_TABLE<br />
GROUP BY ITA_NAME, ITA_PROJECT_ID<br />
HAVING Count(*) > 1<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
If trying to use business calendar for a model that doesn't have the business calendar defined, there will now be an error message instead of showing the chart. Either unselect the business calendar checkbox for the measure or dimension, or define a business calendar to the model. In this situation in earlier releases the business calendar was ignored and full time calculation used.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07498: Automation and Operational Excellence presets and Root causes analysis (for Snowflake), Weighted root causes analysis and Event scattering preset (for Snowflake and in-memory), Root causes for case duration (in-memory).<br />
* B-07177: Flexible mappings, user selectable aggregations and conditional formatting for Pivot table, and flexible mappings for KPI Card.<br />
* B-07518: New function named Query to run call /api/expression/query.<br />
* B-07294: In Workspace, the left side projects hierarchy can be collapsed and expanded to make more space to project contents.<br />
* B-06814: In SQL expressions, new function DurationBetweenDates to calculate duration between timestamps precisely.<br />
* B-07519: Replaced DateDiff function with the new DurationBetweenDates function in big data chart.<br />
* B-07531: In SQL expressions, new mathematical functions Abs, Log, Mod, Power, Rand, Sign and Sqrt.<br />
* B-07297: To optimize performance, Snowflake queries are automatically cancelled if they are not needed by UI.<br />
* B-07569: To optimize performance, TakeSample function implementation is improved for Snowflake.<br />
* B-07198: Several performance improvements to DataFrame queries (used in Snowflake).<br />
* B-07464: Added Lead and Lag functions to SqlDataFrames to support getting previous and next event.<br />
* B-07470: New ExtractSap function to fetch data from SAP using expression language.<br />
* B-07536: New Pivot function to SqlDataFrames to enable root causes analysis.<br />
* B-07488: Primary keys can be set to datatables to improve calculation performance (UI will follow later).<br />
* B-07515: Added RootCauseAnalysis function to SqlDataFrames.<br />
* B-07546: RootCauseAnalysis function support for complex weighting expressions.<br />
* B-03052: Support for user-defined variables in /api/expression/query.<br />
* B-07565: Support for NumberPrecision, DatetimeTruncation and TimespanPrecision properties for Values section in in-memory query.<br />
* B-07513: For product activation file handling, replaced mutex based implementation with exclusive file lock.<br />
* B-07480: Expression language support for DataFlows for data extraction.<br />
* B-07613: Removed support for SQL Server based R scripting.<br />
* B-07567: Take datatable primary keys into use in expression builder to improve performance (part 2).<br />
* B-07588: Remove total memory information from log writing and DateDiff function for in-memory.<br />
<br />
'''Fixed issues:'''<br />
* D-12715: Snowflake calculated imprecisely some operations containing division and aggregation.<br />
* D-12761: Progress bar of the CSV import dialog didn't show any progress.<br />
* D-12799: Opening datatable contents dialog settings was slow when there were lot of rows in the datatable.<br />
* D-12089: Include conforming/nonconforming cases made BPMN editor no responding.<br />
* D-12496: Datagrid filter search keyword didn't work for rounded values, so the search was hidden for other than textual data.<br />
* D-12704: Durations as quarters was calculated incorrectly in charts.<br />
* D-12662: Fixed issue where some special literals in custom expressions didn't work.<br />
* D-12403: Setting Notifications on a model had some visual issues.<br />
* D-12859: Dependency wheel visualization crashed with nulls values in From and To mappings.<br />
* D-12660: Removed unnecessary float conversions in SQL expressions.<br />
* D-12653: In-memory datafram OrderByColumns function with mixed values failed.<br />
* D-12657: When trying to use milliseconds period in some presets, frontend frozed.<br />
* D-12706: Line breaks in data were shown in many places where it's undesired.<br />
* D-12719: Syncfusion dialog headers showed backslaces incorrectly.<br />
* D-12372: Refused to run the JavaScript URL because it violated the Content Security Policy directive.<br />
* D-12730: Logging out when filter selection is in progress, gave javascript error.<br />
* D-12705: Header object counts tooltip was sometimes messed after logout.<br />
* D-12384: Selected project was not highlighted for whole project name string.<br />
* D-12581: Prevented creating duplicate datatable names in same project in parallel execution.<br />
* D-12722: There was incorrect syntax near '<' when running SqlDataFrame expressions.<br />
* D-12736: Swedish and Finnish translation improvements for object counter tooltips.<br />
* D-12702: For BPMN Editor component "Something went wrong" error was given when switching from in-memory to Snowflake model.<br />
* D-12712: UI gave error: TypeError: Cannot read properties of undefined (reading 'id').<br />
* D-12738: Business calendar showed total business time when calendar configuration was invalid.<br />
* D-12776: Special character filter caused JavaScript SyntaxError.<br />
* D-12785: Unnecessary vertical scrollbar displayed for main header toolbar.<br />
* D-12164: There was unnecessary UnauthorizedAccess errors in logs.<br />
* D-12580: Case duration was not same when comparing Big data chart with in-memory chart for same data.<br />
* D-12768: Data grid links and variable change actions didn't work when grouping was used.<br />
* D-12735: FindRootCauses (in-memory) function filtered out cases with zero contribution.<br />
* D-12763: --#CallWebService didn't work from ScriptLauncher.<br />
* D-12789: There was timeout in SQL queries to scripting sandbox.<br />
<br />
== QPR ProcessAnalyzer 2022.7 (build 1331) (released 2022-11-15) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2022.7, to improve security expression language operations that modify data or connect to external datasources are prevented in dashboard custom expressions. The limitation is required, because when a dashboard is opened, its expressions are run with the user's permissions, and the user need to trust the expressions don't perform any unexpected operations, such as delete data. The full functionality of the expression language is available in the scripts and in the Expression Designer.<br />
<br />
The following functions and operations are prevented in dashboards: SendEmail(), CallWebService(), ImportOdbc(), ImportOdbcSecure(), Model.DeletePermanently(), Model.Restore(), Model.TriggerNotifications(), Project.DeletePermanently(), Project.Restore(), Project.CreateDatatable(), Datatable.AddColumn(), Datatable.DeletePermanently(), Datatable.Import(), Datatable.Merge(), Datatable.RemoveColumns(), Datatable.RenameColumns(), Datatable.Truncate(), RecycleBin.DeletePermanently(), and call SQL script. Calling expression scripts is allowed, but in the script all previously mentioned operations are prevented.<br />
<br />
Following SQL query can be executed in the QPR ProcessAnalyzer metadata database to reveal dashboards that potentially have prevented expressions:<br />
SELECT * FROM [PA_UI_ELEMENT] WHERE [UIE_PROPERTIES] LIKE '%SendEmail(%' OR [UIE_PROPERTIES] LIKE '%CallWebService(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbc(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbcSecure(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Restore(%' OR [UIE_PROPERTIES] LIKE '%TriggerNotifications(%' OR [UIE_PROPERTIES] LIKE '%CreateDatatable(%' OR [UIE_PROPERTIES] LIKE '%AddColumn(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Import(%' OR [UIE_PROPERTIES] LIKE '%Merge(%' OR [UIE_PROPERTIES] LIKE '%RemoveColumns(%' OR [UIE_PROPERTIES] LIKE '%RenameColumns(%'<br />
</div><br />
<br />
'''Features:'''<br />
* B-07287: Process Discovery and most important presets for Snowflake.<br />
* B-07271: "Last Row Aggregates Over-limit Rows" setting for big data chart.<br />
* B-06431: Snowflake datatables support for database views in the datasource.<br />
* B-07266: Security: "limited mode" to prevent data modifications and external calls from dashboard expressions.<br />
* B-07097: Improved flowchart root causes color scales.<br />
* B-07363: SQL LIKE function support for escape character.<br />
* B-06877: Improved variation queries performance in Snowflake, part 1.<br />
* B-07444: Improved variation queries performance in Snowflake, part 2.<br />
* B-07382: Support for empty strings and nulls in event type names in dataframe processing.<br />
* B-07273: WithRowNumberColumn, WithRankColumn, WithDenseRankColumn support for descending sorting.<br />
* B-07303: FindRootCauses function support for weighting expression.<br />
* B-07327: Unpivot function for SqlDataFrames (for root cause analysis).<br />
* B-07385: Align token lifetime with SESSION_MAXIMUM_DURATION setting.<br />
* B-07500: ColumnMappings property for IDataFrame and DataTables.<br />
* B-07499: IDataFrame.ApplyFilter function to filter events data using a JSON-based filter.<br />
* B-07469: Translation updates for release 2022.7.<br />
<br />
'''Fixed issues:'''<br />
* D-11630: Drag and drop from chart settings to main header was working incorrectly for filter and root cause rules.<br />
* D-12455: Moving a chart filter from one chart to another created a root cause analysis filter.<br />
* D-12266: Root causes analysis showed incorrect results when certain combination of filters.<br />
* D-12525: Numerical values in Excel export in data grid was formatted incorrectly.<br />
* D-12534: Restoring item from recycle bin changed project from Bin to previous project.<br />
* D-12529: Measure specific datalabel mapping did not work correctly when also mapped to Y-axis.<br />
* D-12532: Multi-selection options caused layout issue for Chart setting.<br />
* D-12541: Layout issue for Polish in multiselect list search dialog.<br />
* D-11277: Increase/decrease Icons were missing in the dimension sorting for Mac.<br />
* D-12552: Uncaught Error: Diagram.selectCollection given something that is not a Part: null.<br />
* D-12567: Tooltip incorrectly showed for label component containing only spaces.<br />
* D-12438: Operation was cancelled because it was replaced by a new operation.<br />
* D-12551: Some expressions didn't work as calculated case/event attributes.<br />
* D-11720: Chart buttons were not visible in Apple Safari and iPad.<br />
* D-12544: On-screen settings "options" parameter did not work.<br />
* D-12528: Multi-unit time unit selection appeared where it's not applicable.<br />
* D-12583: Error message should be provided for invalid settings input than just display JS errors.<br />
* D-12599: Tooltips didn't show correct measures/dimensions when "Show in tooltip" mappings are used.<br />
* D-12561: Chart settings content was incorrectly drawn outside of the chart dialog.<br />
* D-12568: Reload UI sometimes crashed chart having multiselect on-screen settings.<br />
* D-12572: Main header toolbar lost when refresh maximized PA chart.<br />
* D-12612: Drop Unused Filters After setting incorrectly allowed zero seconds.<br />
* D-12533: Error message keeped blinking in Analysis view.<br />
* D-12608: User could not select or add new case attribute when current select attribute doesn't exist.<br />
* D-12451: Prevented deleting running script.<br />
* D-12516: Windows event viewer warning: Failed to gracefully shutdown application.<br />
* D-12523: Business calendar performance - part 2.<br />
* D-12538: Column with same name could be added multiple times to datatable using expression language.<br />
* D-12582: Improved EMS mutex code to support multiple PA service in one server.<br />
* D-12624: Synchronize new (empty) data table generated failed queries in Snowflake.<br />
* D-12622: Advanced setting page reserved room for the expression editor frame that did not exist.<br />
* D-11295: In on-screen settings, some UI controls were vertically misaligned.<br />
* D-11625: The heights of the parameter option menu in the clustering tab was not well aligned.<br />
* D-12103: Small dropdown list layout issue.<br />
* D-12633: Align issue for Column related Advanced settings.<br />
* D-12505: Search dialog didn't escape % and _ characters correctly in dataframe processing.<br />
* D-12645: Tabs in expression settings dialog were partly hidden when dialog is narrow.<br />
* D-11382: Moving of flowchart was sometimes shaky.<br />
* D-12655: Filter rule tooltips in header were styled incorrectly.<br />
* D-12656: Large integer values in filter jsons were incorrectly presented as small integers.<br />
* D-12661: Some exported filters contained unnecessary "invert" property.<br />
* D-12500: Model with numeric case id's and filtering with the attribute mapped as case id: ERROR [22018] Numeric value <nowiki>''</nowiki> is not recognized.<br />
* D-12509: Filtering null values didn't work in boolean attributes in Snowflake.<br />
* D-12571: In dataframe processing in SQL Server, dividing two integers should not make rounding to integer.<br />
* D-12610: Setting for global DropUnusedFiltersAfter was missing.<br />
* D-12613: Filtering with case/event attributes with null values didn't match in Snowflake models.<br />
* D-12617: Model didn't work when DropUnusedFiltersAfter is 00:00:00.<br />
* D-12618: If model ConfigurationJson is null, Configuration property didn't work.<br />
* D-12620: Filtering didn't work when there are backslaces in attribute names in Snowflake models.<br />
* D-12643: AttributeFunctionCallExpression did not always work properly in array context.<br />
* D-12647: SqlDataFrame with SQL Server: Comparing literals to variant column values failed.<br />
* D-12648: Models that have DropUnusedModelsAfter setting caused "The sliding expiration value must be positive" error.<br />
* D-11526: It was unable to translate Unicode character \uD83D at index 176 to specified code page.<br />
* D-12637: In application startup arised FATAL Application startup exception System.UnauthorizedAccessException: Access to the path 'Global\MutexQPRPAActivation' is denied.<br />
<br />
== Old Releases ==<br />
See older releases in [[QPR ProcessAnalyzer Release Archive]]<br />
__NOTOC__<br />
<br />
[[Category: QPR ProcessAnalyzer]]</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&diff=24469QPR ProcessAnalyzer Release Notes2024-03-04T21:02:02Z<p>Ollvihe: /* Next Release: QPR ProcessAnalyzer 2024.3 (planned release date 2024-04-02) */</p>
<hr />
<div>This page lists all new features and fixed issues for each QPR ProcessAnalyzer release.<br />
<br />
== Next Release: QPR ProcessAnalyzer 2024.3 (planned release date 2024-04-02) ==<br />
<br />
'''Features:'''<br />
* B-08231: Snowflake performance improved by changing object counts query (shown in header) into two queries, so that the filtered object count uses eventlog caching.<br />
* B-07906: Implemented cross joins to SQL dataframes.<br />
* B-03047: Removed support for dashboard panels.<br />
* B-08214: Removed unused columns from the PA_VIEW table.<br />
<br />
'''Fixed issues:'''<br />
<br />
* D-14048: Fixed issue where in-memory root causes analysis for case attributes didn't show attributes with ShortString data type.<br />
* D-14049: Added some missing translations for table column filter and BPMN editor.<br />
* D-14021: FindRootCauses function WeightingExpression was run in incorrect context for in-memory model.<br />
* D-14020: Query which goes from EventTypes to Cases did not show the error when using GetValueFrom function.<br />
* D-13976: Fixed issue where gateway-based imports were not synchronous.<br />
<br />
== Latest: Additional release for QPR ProcessAnalyzer 2024.2 (build 5509) (released 2024-02-27) ==<br />
<br />
'''Features:'''<br />
<br />
* B-06280: User management dialog shows whether users have password defined and unnecessary passwords can be removed to improve security.<br />
<br />
'''Fixed issues:'''<br />
<br />
* D-14045: Fixed issue where users with Viewer or Analyzer role couldn't create filters in Snowflake models.<br />
<br />
== QPR ProcessAnalyzer 2024.2 (build 5438) (released 2024-02-21) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue: Using Snowflake models and dashboards doesn't work with Viewer and Analyzer roles. The reason is that cache tables created to Snowflake incorrectly require the GenericWrite permission. Workaround is to give users the Designer role which will give the needed GenericWrite permission. Note that the Designer role gives many permissions to the user for the project [[Roles_and_Permissions#Roles_and_Permissions|(more information)]]. Fixed in the next release (D-14045).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
The legacy User permissions report (analysis number 11) and Filters report (analysis number 30) used in SQL scripts have been removed. Use instead the expressions language to query filters and user permissions, e.g., [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|Models.Filters]] and [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
New version of the Design diagram component has been improved with object-specific measures, and the previous common measures are not migrated into object-specific measures. Thus, the measures need to be configured again, or manually edit the chart json settings (if needed please ask instructions from QPR CustomerCare).<br />
</div><br />
<br />
'''Features:'''<br />
* B-08022: Design diagram supports now BPMN notation, elbow style flows and object-specific measures.<br />
* B-08232: Entire future eventlogs can be [[Create_Predicted_Eventlog|predicted]] based on generative AI models running in Snowflake.<br />
* B-08166: Added expression language function [[Generic_Functions_in_QPR_ProcessAnalyzer#OpenAIChatCompletion|OpenAIChatCompletion]] to answer natural language prompts based on OpenAI ChatGPT API.<br />
* B-08177: Snowflake query performance has been improved by introducing caching of filtered eventlogs using Snowflake tables.<br />
* B-08196: Conditional formatting rules can be defined for [[QPR_ProcessAnalyzer_Table#Textual_equal_rules_for_background_color|textual and boolean values]].<br />
* B-08213: Big data chart expressions event type selections to be multi-select where applicable.<br />
* B-08205: Expression language API is available for storing [[Storing_Secrets_for_Scripts|secrets]] for scripts.<br />
* B-07780: Chart [[QPR_ProcessAnalyzer_Chart#Variable_mappings|variable mappings]] has been removed - use the [[Chart_Linked_Settings|linked settings]] instead. Dashboards using variable mappings are automatically converted to use linked settings.<br />
* B-08117: Added ToSqlDataFrame function to convert in-memory dataframe into SQL dataframes.<br />
* B-08174: Only non-default parameters values are written to the operation log.<br />
* B-08200: Timestamps in System reports are shown in user workstation local time.<br />
* B-08171: Dashboard id has been added to queries, to track from which dashboard queries are originating.<br />
* B-07144: Remove legacy User permissions report (analysis number 11) and Filters report (analysis number 30) in SQL scripts (see note above).<br />
* B-08193: Added retry mechanism to QPR ScriptLauncher to recover if connection to server breaks.<br />
* B-08202: Updated copyright for year 2024.<br />
* B-08199: Frontend components have been updated.<br />
* B-08203: Backend components have been updated.<br />
* B-08209: Translations updated for release 2024.2.<br />
<br />
'''Fixed issues:'''<br />
* D-13972: Some measures/dimensions/columns in Big data chart didn't show the expressions level filtering.<br />
* D-14015: Fixed business calendar incorrect calculation when business period covered entire day.<br />
* D-14014: Fixed issue where Snowflake business calendar could not have end time as 00:00.<br />
* D-13962: System variable values were interpreted incorrectly when used in linked settings.<br />
* D-13971: HiddenInNavigation and SortOrder variables didn't work in navigation menu dashboards list.<br />
* D-13959: Removed possibility to add datatable columns with the legacy "any" data type.<br />
* D-13991: Improved drop-down selector component to handle empty strings as variable values.<br />
* D-13965: Datatable column name length was validated incorrectly which may have caused error in saving with too long column names.<br />
* D-13958: Project names showed unnecessary html escaping in the "Move to" menu.<br />
* D-13964: Model attributes and notifications dialogs gave error when trying to use dashboard tags.<br />
* D-13960: Added missing translations for list of permission list and 12-hour clock format.<br />
* D-13966: Fixed issue were root causes chart tooltip sometimes didn't disappear.<br />
* D-13969: Datatable column schema export sometimes showed empty for the key column.<br />
* D-13862: Session token was not accepted when url path capitalization is different.<br />
* D-13942: Datatable could not be dimensioned if it has column named "CaseId".<br />
* D-13980: Business calendar dialog crashed when tried to open it for a model without access.<br />
* D-13983: Notifications dialog didn't validate situation when same name was used in a measure and dimension.<br />
* D-13981: Dashboard import set incorrect model id to dashboard if there was no access to any model.<br />
* D-11276: Translations were missing for 12-hour clock dates (AM and PM) in dashboards.<br />
* D-13977: Multi-select dropdown lists showed some special characters incorrectly.<br />
* D-13945: Syncfusion toast message didn't work when text contains ${[]}.<br />
* D-13930: Pivot table throws javascript error when certain clicks.<br />
* D-13273: Duplicate datatable row count didn't shown correctly.<br />
* D-13994: There was an error in the in-memory chart with some flow related measures about duplicate variable names when same measure was defined twice.<br />
* D-13985: Models list dots menu had texts misaligned in narrow screens.<br />
* D-13995: In Workspace, wrong datatable was selected after duplication when non-default sorting was applied.<br />
* D-13997: Workspace tables column filtering search caused JavaScript errors.<br />
* D-13978: In table Excel export, the last row representing other items appeared incorrectly for in-memory chart.<br />
* D-14007: In System reports, model related selections are hidden from the Analyzed objects lists.<br />
* D-14005: In big data chart, changing to custom expression caused crash with some expressions having case/event attribute.<br />
* D-14003: When dimensioning was not used, pivot table values were incorrectly rounded in the server side.<br />
* D-14004: Removed empty filters from queries to optimize them.<br />
* D-13988: Fixed issue where data grid context menu rendered initially as too high.<br />
* D-13979: BPMN model editor element settings use now Open Sans font.<br />
* D-14013: Fixed incorrect expression "Duration between first and last occurrence" in big data chart event types.<br />
* D-13984: Fixed the error of refusing to run the JavaScript URL.<br />
* D-14031: ThrownObject property was not included to http error response when error came from the script.<br />
<br />
== QPR ProcessAnalyzer 2024.1 (build 4784) (released 2024-01-10) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue fixed in QPR ProcessAnalyzer 2024.2: In Big data chart, some measures, dimensions and columns have the filtering option missing. The issue concerns for example Duration between events, Path starting/until between specific events, and Cases where event occurs before other selections. Workaround is to set the filter in the chart json settings: the filter can be configured to another expression and copied to the correct expression.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
QPR ProcessAnalyzer Server and QPR ScriptLauncher are now using .Net 8 (previous was .Net 6). When updating to this release, install the .Net 8 Runtime ([[Updating_QPR_ProcessAnalyzer_Server|see more]]). The .Net 6 doesn't need to be uninstalled immediately because .Net 6 and .Net 8 work side-by-side, but due to security reasons, the unused .Net 6 should eventually be uninstalled.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In this release, all filters that don't contain any filter rules, are removed. These are legacy filters which have not been visible in the UI.<br />
</div><br />
<br />
'''Features:'''<br />
* B-08019: New component [[Design_Diagram|Design Diagram]] for showing user-created diagrams in dashboards where to visualize process mining metrics.<br />
* B-08087: Generic [[Dropdown_List_Selector|dropdown list selector]] works with Snowflake models allowing to add selection lists for any values.<br />
* B-08163: Linked settings support for binding to [[Chart_Linked_Settings#Binding_to_case_attribute_filters_with_attribute_name_and_attribute_values|case attribute filter values without defining case attribute name]].<br />
* B-08170: Snowflake model filters can be [[Filtering_in_QPR_ProcessAnalyzer#Filter_actions|saved as new models]] which can be used to create snapshots of part of models.<br />
* B-08093: Multiple dashboards can be exported to same file, and model can be set for imported dashboards.<br />
* B-08161: Added [[Datatable_in_Expression_Language#Modify|Modify]] function to change datatable properties and improved [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#CreateDatatable|CreateDatatable]] function for creating datatables.<br />
* B-08122: Added new system report to list dashboards.<br />
* B-08173: Removed legacy filters that didn't have any filter rules.<br />
* B-07961: In OperationLog, changed parameters to json format and added request id.<br />
* B-08069: Added DashboardId property to [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog]] in expression language.<br />
* B-08139: Added [[Datatable_in_Expression_Language#UpdateRows|UpdateRows]] function to update existing rows in datatables with similar logic than SQL update.<br />
* B-08115: Added [[Datatable_in_Expression_Language#DeleteRows|DeleteRows]] function to delete rows in datatables with similar logic than SQL delete.<br />
* B-08149: QPR ProcessAnalyzer has been updated to .Net 8.<br />
* B-08054: Changed Scripts property in generic context to return all scripts, instead of legacy system level scripts.<br />
* B-08138: Changed Synchronize function to remove all columns when no Snowflake table exists.<br />
* B-07689: For datatables, [[Datatable_in_Expression_Language#ForeignKeys|foreign keys]] to other datatables can be defined using expression language.<br />
* B-08176: Translation updates for release 2024.1.<br />
* B-08175: Workspace should show timestamps in user's local time.<br />
<br />
'''Fixed issues:'''<br />
* D-13913: Datatable properties dialog incorrectly showed linked models from other projects.<br />
* D-13916: Chart filter could not be defined for some expressions in Big data chart.<br />
* D-13933: Navigation menu selected item wasn't highlighted when used Snowflake models.<br />
* D-13906: In Conformance Analysis, deviating flows were not translated.<br />
* D-13907: Improved translation related to datatable properties dialog "Used by models" field.<br />
* D-13904: There was an unclear error message in Snowflake, as exception code 1 was returned without AttributeName and ModelName properties when non-existing attribute was in filter.<br />
* D-13911: Fixed small glitches in the opening and closing of drop-down lists.<br />
* D-13918: Datatable could be configured incorrectly to use table for other datatable.<br />
* D-13932: Duplicating datatable with custom table in datasource losed all data.<br />
* D-11002: Removed legacy in-memory prediction preset.<br />
* D-13912: Added check that array cannot be stored to dashboard Content property.<br />
* D-13936: Query designer default query didn't work with Snowflake models.<br />
* D-13938: There was an incorrect logging with some operations related to ScriptLauncher.<br />
* D-13923: Snowflake expressions didn't work with Where function in root referring to case attribute.<br />
* D-13939: ApplyFilter function gave null reference error for non-existing attribute name.<br />
* D-13931: There were issues with AllowExternalDatasources and EnableFullFunctionality settings.<br />
<br />
== QPR ProcessAnalyzer 2023.7 (build 4326) (released 2023-11-28) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Limitation for the maximum amount of data (B-07636) causes a behavior change in in-memory charts that have the Maximum rows settings empty and have the sorting defined. In certain cases, the order in which measures are evaluated changes (due to an internal performance optimization). If there are custom expressions that define variables, the variables may not be available in other measures anymore. As a resolution, either redefine the variables in those measure expressions or add those measures secondarily to the sorting.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Default query timeout of 30 minutes has been added for --#ImportOdbcQuery, --#ImportSqlQuery and --#ImportOleDbQuery commands. If a query run is taking longer than the timeout, the query is stopped. The timeout can be adjusted using the '''QueryExecutionTimeout''' parameter. Previously, there has been no timeout, so queries that take more than 30 minutes require configuring a longer timeout.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Incorrectly configured [[Chart_Linked_Settings|linked settings]] in charts (available in the ''Advanced'' tab) give now an error message, if they are referring to non-existing measures, dimensions or columns. Previously, incorrect linked settings were ignored. To fix the error message, remove the incorrect linked settings.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07511: Datatables have a [[Datatable_Properties_Dialog|dialog]] to view datatable properties, write description, set the Snowflake source table, add/modify/delete columns, and set the datatable key.<br />
* B-08150: Added setting [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|Apply chart filters first]] to determine whether chart filter rules or dashboard filter rules are applied first when chart queries are filtered.<br />
* B-08091: When filtering charts in Snowflake, case attribute filter is created instead of case id filter.<br />
* B-08091: [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|New setting]] to define whether cases or events are filtered by default.<br />
* B-08091: New preset "Looping paths" to detect whether there are repeating patterns of events.<br />
* B-08091: Duration between events calculation ignores negative durations in Snowflake.<br />
* B-08091: Chart loading animation has been renewed.<br />
* B-07636: To prevent dashboards from jamming when querying too much data, added [[QPR_ProcessAnalyzer_Chart#Available_Visualizations|limitations]] to the amount of data that charts can visualize. Note that the limitation concerns the aggregated data that is visualized, not the source event log data.<br />
* B-08017: [[Dashboard_in_Expression_Language|Dashboards API]] has been added to expression language, allowing to create, modify and delete dashboards in scripts.<br />
* B-08056: Following properties have been added to [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#User.2FGroup|user objects]] in expression language: IsLocked, LastLockedDate, LastLoginDate.<br />
* B-08053: [[Navigation_Menu#System_Reports|User rights report]] has been refactored to use [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property in the expression language. The change also simplifies the report as now it only shows the direct role assignments that are visible in the [[Manage_Users_and_Groups|User Management]].<br />
* B-08151: For Snowflake expressions support for following [[SQL_Expressions#Window_functions|windowing functions]]: sum, average, median, min, and max.<br />
* B-08050: When a model is created, the default filter is not created anymore (this is a refactoring that doesn't have any impact on user interface).<br />
* B-08123: Translation updates for 2023.7.<br />
* B-08092: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13876: In CreateSnowflakeConnection function, ProjectId parameter is optional when OdbcConnectionStringKey is not specified.<br />
* D-13898: Snowflake: Exclude case attribute filter didn't work when there was null values and was selecting at least two values.<br />
* D-13890: Fixed XES file import to work.<br />
* D-13894: Business calendar based duration calculation was incorrect in some durations that spanned to several weeks (for Snowflake and in-memory models).<br />
* D-13899: Using broken OdbcConnectionString in a datatable prevented the datatable from being deleted.<br />
* D-13883: Script run stucked after running a script with error that uses client-side ODBC import.<br />
* D-13879: SqlExpressionValue filter when excluding events didn't work with filter rule root expression only.<br />
* D-13896: Adding or removing columns to datatable didn't change the LastModifiedDate.<br />
* D-13882: User details weren't written to operation log when creating or modifying users.<br />
* D-13771: User rights system report didn't give error when changing columns.<br />
* D-13893: Some event filtering caused null pointer error when primary key had been defined.<br />
* D-13873: Fixed pivot table visual issues after component update.<br />
* D-13900: When adding, renaming or removing columns for Snowflake table fails, operation is now rolled back without any changes.<br />
* D-13866: Querying GET api/uielements was quite slow right after server start.<br />
* D-13864: Combinations of translatable and hardcoded strings didn't get translated in UI.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.6 (build 3933) (released 2023-10-24) ==<br />
<br />
'''Features:'''<br />
* B-08055: Error message for locked account has been replaced with generic error message, so that username enumeration is not possible.<br />
<br />
'''Fixed issues:'''<br />
* D-13884: Attributes dialog crashed with some older model configurations.<br />
* D-13843: In charts, selected case and event attributes switched away when attribute data type was ShortString.<br />
* D-13877: Some Snowflake expressions gave error "exceeds maximum length limit of 255 characters" when selecting lot of items.<br />
* D-13878: Snowflake expression filters for case attribute values didn't accept other than string type of case attributes.<br />
* D-13871: Some statistical calculations with percentages didn't work with Last Row Aggregates Over-limit Rows setting.<br />
* D-13875: Using some case level filters in a model without cases datatable didn't work.<br />
* D-13861: Dashboard opens are now logged to the Task log (i.e., calling GET /api/dashboards/{dashboardid}).<br />
* D-13870: Workspace projects hierarchy focused project showed light grey background making the project name not readable.<br />
* D-13867: When starting datatable refresh and going to other tab, went back to Datatables tab when query completed.<br />
* D-13853: If chart Custom Layout settings had extra series defined, chart may have crashed.<br />
* D-13869: Export as CSV button didn't work in the datatable contents dialog when dialog was still loading.<br />
* D-13872: Main progress spinner had unnecessary small scrollbar on top right.<br />
* D-13863: In the REST API method GET /api/users, password field (that has always been null) has been removed.<br />
<br />
== QPR ProcessAnalyzer 2023.6 (build 3847) (released 2023-10-17) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is removed in this release. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
'''Features:'''<br />
* B-07992: Added 10 new presets including Queue analysis, Four eyes principle, Self-looping events, and Path until selected event. There are also presets for Individual Cases Flow and Range of event type occurrences which use Gantt chart.<br />
* B-08011: Added following date related operations for Snowflake: Day of year, Day of month, Day of week, Week of year, Half-year only, Quarter only, Month only, Hours only, Minutes only, Seconds only, and Milliseconds only. These are available when calculating with date type of data.<br />
* B-08016: [[QPR_ProcessAnalyzer_Table#Table_actions|Table actions to set variables]] can also be opened to a new browser tab. Also improved user interface for table actions.<br />
* B-08018: For Snowflake expressions, added Flows aggregations FromEventType and ToEventType to get starting/ending event type, and FlowOccurrences aggregations FromEvent and ToEvent to get starting/ending event.<br />
* B-08001: Added [[Generic_Functions_in_QPR_ProcessAnalyzer#CallStoredProcedure|CallStoredProcedure]] function to call Snowflake stored procedures. This allows to start ETL transformation in Snowflake orchestrated by QPR ProcessAnalyzer script.<br />
* B-08013: Added [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property to expression language to replace the legacy UserPermissions analysis (11).<br />
* B-07976: Snowflake [[Filtering_in_QPR_ProcessAnalyzer_Queries#Expression|expression based filter rules]] support additional expression columns allowing more Big data chart expressions to be filterable.<br />
* B-08015: Big data chart doesn't anymore support calculation in SQL Server (using local datatables).<br />
* B-06270: Improved error messages and made them translatable by taking into use exception codes provided by server.<br />
* B-08021: Added possibility to store [[Diagram_in_Expression_Language|designed diagrams]] for models and expression language API for reading and modifying diagrams.<br />
* B-08037: Dropped following unused tables database: PA_IDEA, PA_IDEA_VOTE, PA_REPORT, PA_REPORT_SETTING, PA_SESSION_SERVICE, PA_VIEW_FILTER_RULE, PA_VIEW_FILTER_RULE_PARAMETER.<br />
* B-08052: Language translations have been updated to 2023.6.<br />
* B-08051: Frontend side components have been updated.<br />
* B-08034: Backend side components have been updated.<br />
<br />
'''Fixed issues:'''<br />
* D-13830: Object counts indicator in header showed incorrect counts when there was disabled filter rules in Snowflake models.<br />
* D-13833: In-memory charts didn't work with boolean type of dimensions when filtering with the false value.<br />
* D-13858: Target value measures didn't update chart when controlled using an on-screen setting.<br />
* D-13827: Calculated attributes data type was incorrectly set as Any by the Attributes dialog.<br />
* D-13849: Multiselect list search didn't allow spaces.<br />
* D-13829: Multiselect dropdown lists height jumped couple of pixels when selecting values.<br />
* D-13835: Deselecting a selected data point didn't remove chart filter rule.<br />
* D-13702: Improved Snowflake query performance in situations when there are lot of filter rules (by decreasing number of CTE's).<br />
* D-13819: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13820: Fixed incorrect manifest.json file to avoid "not found" errors when fetching web site icon.<br />
* D-13865: Break, continue, and return statements didn't work properly when called from inside a catch block.<br />
* D-13795: There was a Python error in clustering analysis with Snowflake model.<br />
* D-13823: Some tooltips in Workspace project hierarchy didn't work and caused a JavaScript error.<br />
* D-13824: BPMN editor align context menu layout looked strange.<br />
* D-13813: QPR logo button in the top left was misaligned in Firefox.<br />
* D-13797: Snowflake query may have given following error when using sampling: ambiguous column name '_EventType_NotNull_1'.<br />
* D-13774: TakeSample function with certain columns caused SQL compilation error: ambiguous column name 'Case Name'.<br />
* D-13782: Snowflake: Aggregating from variations didn't work when using sampling.<br />
* D-13836: Some tooltips had a strange two-colored background.<br />
* D-13834: Removed Model statistics column from clustering and root causes analysis.<br />
* D-13860: Removed filter button from the custom expressions in Task log analyzed objects.<br />
* D-13838: Removed Split data by filtering column from clustering analysis.<br />
* D-13832: Script and model status updates incorrectly sent next update when previous was still pending.<br />
* D-13839: Charts reset zoom button font size was too small.<br />
* D-13817: Importing data to Snowflake datatable with Append=0 doesn't now drop the underlying Snowflake table.<br />
* D-13825: Some models could not have been deleted from recycle bin.<br />
* D-13852: Recycle bin Projects and Models tab didn't show correct content when Recycle bin only contained either models or projects.<br />
* D-13841: In-memory chart Data type selection type has been corrected to string.<br />
* D-13842: Second time and Third time selections has been hidden in in-memory chart measures.<br />
* D-13850: In Chrome, there were console errors related in incorrect text field autocomplete type and text field without form.<br />
* D-13847: Improved browser side performance by removing unnecessary operations.<br />
* D-13859: Chart without dimensions showed an unnecessary Remove dimension button.<br />
* D-12598: When script is stopped in server, ScriptLauncher could still incorrectly continue to import data.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.5 (build 3334) (released 2023-09-07) ==<br />
<br />
'''Fixed issues:'''<br />
* D-13826: Measures or dimensions with case or event attribute and value selections incorrectly removed calculated attributes when dashboard was opened or chart settings were changed.<br />
* D-13821: Font size of some Highcharts tooltips was too small. Issue appeared when there were tooltips mappings in measures or dimensions.<br />
* D-13810: Simplified help links: now all Help buttons go to the QPR ProcessAnalyzer wiki main page.<br />
* D-13822: Snowflake clustering analysis showed empty strings and nulls as case attribute values in an unclear way as just nothing.<br />
<br />
== QPR ProcessAnalyzer 2023.5 (build 3304) (released 2023-09-05) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In Big Data Chart, the '''Case conformance''' measure and dimension has changed in a way that now it provides boolean values (true/false) instead of integer values (1/0). If [[Measure,_Dimension_and_Column_Settings#Other_settings|colorMappings]] are used for this measure or dimension to set specific colors to visualize conformant and nonconformant cases, the mapped values need to be changed as follows: '''1''' -> '''true''' and '''0''' -> '''false'''. Without the change, the mapped colors are not effective.<br />
<br />
Exmaple: Old configuration:<br />
<pre><br />
"colorMappings": {<br />
"1": "#36d475ff",<br />
"0": "#f5403bff"<br />
}<br />
</pre><br />
New configuration:<br />
<pre><br />
"colorMappings": {<br />
"true": "#36d475ff",<br />
"false": "#f5403bff"<br />
}<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is deprecated. Big data chart has allowed to process data both in Snowflake and SQL Server. Now the support for SQL Server is deprecated and the Big data chart will only support calculation in Snowflake. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). The OperationLog analysis is replaced by the [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog function]] and the Infcluencers analysis is replaced by the [[FindRootCauses_Function|FindRootCauses function]].<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [12, 14, 15, 16, 29];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
By default, Snowflake ODBC driver generates quite much logging to files which might unnecessarily fill up the disk space. It's recommended to set the LogLevel parameter to value 0. The path where the logs are created can be seen in Windows registry (key LogPath). More information about configuring Snowflake ODBC parameters: https://docs.snowflake.com/en/developer-guide/odbc/odbc-parameters.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07971: Machine learning based [[Clustering_Analysis|Clustering analysis]] can be run in Snowflake.<br />
* B-07989: In dashboard designer the stacking order of charts can be changed with buttons [[QPR_ProcessAnalyzer_Dashboard_Designer#Viewing_and_Editing_Dashboards|Bring to front, Send to back, Bring forward and Send backward]].<br />
* B-07977: For [[Sankey_Chart|sankey diagram]], added Start level and End level mappings to define custom start and end level for the sankey flows. Implemented also color mappings to define specific colors for specific values.<br />
* B-08010: To improve performance, charts are loaded and updated only when they are visible in the dashboard.<br />
* B-07975: Added following [[SQL_Expressions#Date_functions|date related functions]] to Snowflake: DayOfYear, DayOfWeek, WeekOfYear, Quarter.<br />
* B-07908: When [[QPR_ProcessAnalyzer_Project_Workspace#Duplicating_Model|model is duplicated]], also filters in the model are also duplicated.<br />
* B-07904: Filters and models API for expression language has been completed.<br />
* B-07991: In [[Filter_Selectors|case and event type filter selectors]], threshold whether the dropdown list or search dialog is shown can be defined using the ''Maximum Rows'' setting. Also the search dialog filters search results by other filter rules in the dashboard.<br />
* B-07999: Filters report has been changed to use the [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|expression language API for filters]].<br />
* B-07540: Added [[QPR_ProcessAnalyzer_Expressions#Throwing_objects|throw statement]] to expression language.<br />
* B-07813: UI components are updated. There are small visual improvements, such as in flowchart flows are routed a bit differently and in charts the hidden series is shown as strike-through in the legend.<br />
* B-07963: Following legacy analysis types have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29) (see more information in the note above).<br />
<br />
'''Fixed issues:'''<br />
* D-13777: Filters could not be created in charts when "Update Filter During Selection" setting was disabled.<br />
* D-13767: Automation per Event Types preset in in-memory incorrectly showed only one event type.<br />
* D-13756: Changing background color in KPI card didn't have any effect.<br />
* D-13812: "Exclude events" was incorrectly translated to "Exclure les cas" in French.<br />
* D-13815: Dashboard designer background grid was not visible in entire area in edit mode. Improved also the grid to match to snapping in move and resize.<br />
* D-13674: Business calendar dialog layout was incorrect when a model with a long name was selected to copy holidays.<br />
* D-13811: Table actions link to a new window didn't go to dashboard if there were other parameters in the link.<br />
* D-13601: Fixed issue where some presets may have given error when attribute value selection and the automatically selected attribute conflicted by the data type.<br />
* D-13753: While Snowflake model was selected, in Filters and User Rights reports the Columns list could not be opened.<br />
* D-13720: Now table column filter and sorting are preserved when resizing or zooming page.<br />
* D-13785: In tables increased number of rows to 20000 that are inspected to get available items shown in Excel-style column filter.<br />
* D-13759: Some statistical calculations had bad performance with large number of rows.<br />
* D-13787: Conformance statistics component didn't have scrollbars when text didn't fit to the visible area.<br />
* D-13788: In-memory "Nonconformance reason" selection caused error when two of them was selected in the same chart.<br />
* D-13783: When Analyzed objects was Generic analysis, column selection incorrectly caused "Analysis has not been selected" error.<br />
* D-13776: When measure name contained quotation mark, notification preview didn't work.<br />
* D-13747: Filtering with integer type of case id with case attribute value filter caused error in Snowflake.<br />
* D-13791: In Firefox, model selection in chart settings didn't show models in the first open.<br />
* D-11984: Recycle bin buttons didn't fit to the screen when screen width was small.<br />
* D-13780: Using CaseId case attribute in clustering analysis did not work with Snowflake 106 cases standard model.<br />
* D-13781: Clustering analysis produced Python error with a certain simple Snowflake model.<br />
* D-13730: Snowflake: Case attribute filtering didn't work when there are cases without row in cases table.<br />
* D-13803: There was chart configuration validation error in browser console when measures were moved into dimensions in Big data chart.<br />
* D-13758: There was performance issue with the Recent tasks system preset.<br />
* D-13793: Snowflake clustering failed when cluster count is larger than case count.<br />
* D-13763: SQL expression based filter rule with Where function to filter events didn't filter anything in Snowflake.<br />
* D-13804: Added missing Millisecond function to Snowflake.<br />
* D-13772: Expression EventLog.Cases.Events caused error "Value cannot be null".<br />
* D-13755: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13739: When switching between System reports there was error: "Uncaught Error: 2nd dimension not found. at y.getExpressionConfiguration".<br />
* D-12109: Sometimes flowcharts showed message "Error in querying event type measures. Input string was not in a correct format".<br />
* D-12473: Cost Savings by Automation preset gave sometimes error "Unable to cast object of type 'System.Double' to type 'System.String'".<br />
* D-13750: Snowflake model didn't work with the Case Duration vs. Manual Activities preset.<br />
* D-13657: There was error converting data type nvarchar to bigint.<br />
* D-13796: Some Snowflake operations didn't work with zero rows and columns.<br />
* D-12494: Now when chart size changes, the table column filters and sorting are preserved.<br />
* D-13736: In Performance benchmarking dialog, the Export result button exported wrong benchmark performance analysis result.<br />
* D-13609: Improved conformance analysis related filter names.<br />
* D-13594: Recycle bin buttons were not visible when opening recycle bin in a narrow screen.<br />
* D-13226: Tooltips in the model properties dialog are now translated.<br />
* D-12569: Table incorrectly showed ellipsis for narrow boolean type of columns showing checkboxes.<br />
* D-13391: Emptying date or datetime picker value was not registered and it didn't trigger functionality.<br />
* D-12621: Value search dialog didn't work with values containing backslashes.<br />
* D-13796: Some Snowflake operation didn't work with zero rows/columns.<br />
<br />
== QPR ProcessAnalyzer 2023.4 (build 2628) (released 2023-06-14) ==<br />
<br />
'''Features:'''<br />
* B-07767: Added [[Gantt_Chart|Gantt chart]] to visualize timeline of cases and events divided into swimlanes.<br />
* B-06383: Added [[Sankey_Chart|Sankey chart]] to visualize flow from one set of values to another.<br />
* B-07941: Implemented many more presets running in Snowflake models for compliance and operational excellence use cases. There are also presets for the path analysis and process bottlenecks identification.<br />
* B-07864: Snowflake conformance analysis shows now [[Conformance_Analysis#Top_Deviations_(in-memory)_/_Deviating_Flows_(Snowflake)|reasons for conformance deviations]], such as which event occurrences deviated from the design model.<br />
* B-07909: Snowflake conformance analysis visualizes [[Conformance_Analysis#Undesired_Events_(Snowflake)|undesired event types]] in table and flowchart.<br />
* B-07823: Flowchart Bottlenecks preset has been changed to show bottlenecks for event types. Also renewed the [[QPR_ProcessAnalyzer_Logs#Task_Log|Tasks reports]] to use expression language based interface.<br />
* B-07891: User interface has been [[Languages_and_Localization|translated into Portuguese]].<br />
* B-07873: Improved [[QPR_ProcessAnalyzer_Pivot_Table|pivot table]] visual layout to highlight totals and aggregated rows. Also the row titles are now visible in the top left.<br />
* B-07905: Added [[SQL_Expressions#Rank_functions|Rank related functions]] to Snowflake for writing more versatile custom KPI's, e.g., FirstValue, LastValue, NthValue, Lead and Lag.<br />
* B-07912: Added more SQL expression [[SQL_Expressions#Array_functions|array functions ArrayToString and ArrayOverlap]] to Snowflake.<br />
* B-06449: Added SQL expression functions ToTimestamp and TryToTimestamp for parsing timestamps from strings using provided format.<br />
* B-07959: Added new functions Base64Encode and Base64Decode to help using basic HTTP authentication when calling web services.<br />
* B-07206: SQL expressions support data [[SqlDataFrame_in_Expression_Language#WithClusterColumn|clustering]] which is an unsupervised machine learning algorithm to group data based on similarities.<br />
* B-07848: Data can be extracted from SAP using the encrypted [[Importing_Data_from_SAP#SNC_encrypted_connection|SNC connection]].<br />
* B-07903: Added expression language API to create and modify filters and models.<br />
* B-03103: [[QPR_ProcessAnalyzer_Logs#Task_Log|Task log]] (operation log) can be accessed in expression language.<br />
* B-07872: List aggregation with Distinct=true orders now items by their value.<br />
* B-07940: Removed "Count" aggregation from textual values in Big data chart (you can use the Case count, Event count, etc. selection instead).<br />
* B-07757: Backend support for datatables linking to user-definable Snowflake database, schema and table.<br />
* B-07825: Improved error message when trying to use non-existing attributes in Snowflake queries.<br />
* B-03101: To expression language, added try-catch-finally statement to handle thrown exceptions.<br />
* B-07861: Removed available and total virtual memory information from User settings dialog.<br />
* B-07902: Optimized sequences of joins in Snowflake queries to improve performance.<br />
* B-07837: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13709: If image width-to-height ratio was lower than container's ratio, image was incorrectly stretched to fit the container.<br />
* D-13660: Disabling filter rules didn't work in Snowflake models.<br />
* D-13526: Passing dataframes from SQL scripts to expression scripts didn't work.<br />
* D-13661: Snowflake conformance analysis crashed when there was no access to conformance related Snowflake UDF's.<br />
* D-13693: Resolved major Snowflake conformance analysis performance issues in the BPMN model handling.<br />
* D-13716: Snowflake root causes analysis incorrectly bypassed Snowflake cache.<br />
* D-13707: In SQL Scripting, the datatable analysis (number 18) didn't always copy the data table contents to the target table correctly.<br />
* D-13653: Big data flowchart Root causes preset showed incorrect legend.<br />
* D-13626: Flowchart froze when converting into big data flowchart and vice versa by modifying chart json settings.<br />
* D-13656: Root causes for attribute gave error "Failed to compare two elements in the array" in some situations.<br />
* D-11563: Pivot table had a minimum height of 300px, which caused bottom part of it to be out of view.<br />
* D-13704: In CSV file import, parsing now allows spaces between column separator and text quotation mark.<br />
* D-13598: Chart gave unclear error message when events datatable was not defined.<br />
* D-13655: Improved error messages for BPMN editor and conformance statistics.<br />
* D-13528: Error message for certain erroneous SQL expressions was unclear.<br />
* D-13677: "Flow occurrences with specific case attribute value" selection didn't work for in-memory chart.<br />
* D-13663: Pivot table border line was slightly broken in the header area.<br />
* D-13608: There was incorrect alignment of items in the table paging controls.<br />
* D-13703: Importing CSV file with some special characters to Snowflake failed (due to incorrect escaping in Snowflake staging files).<br />
* D-13708: Duplicating datatable using user defined table, removed data the source table.<br />
* D-13717: Dependency wheel crashed when there were zero weights and showing data labels.<br />
* D-13348: There was an unclear error message when Snowflake query had a certain incorrect expression.<br />
* D-13732: Pivot table Excel export contained headers formatted incorrectly.<br />
* D-13729: There was a JavaScript error when limited user tried to access business calendar.<br />
* D-13662: Percentile function didn't always work with timespan types.<br />
* D-13646: Using incorrectly configured model without cases datatable caused null reference error.<br />
* D-13629: When tried to use chart with a non-existing model, there is now a proper translated error message.<br />
<br />
== QPR ProcessAnalyzer 2023.3 (build 1990) (released 2023-05-03) ==<br />
<br />
'''Features:'''<br />
* B-07818: [[Conformance_Analysis|Conformance analysis]] is supported in Snowflake with following dashboard components: Big data chart, BPMN editor, Conformance statistics, and Design model selector.<br />
* B-07833: [[Root_Causes#Root_causes_in_flowchart|Root causes analysis for flowchart]] is available for Snowflake showing how the event and flow occurrences explain selected phenomena.<br />
* B-07786: Big data chart has more [[Big_Data_Chart#Measure_aggregations|measure aggregations]], such as median, percentile, standard deviation and variance. Also for textual items, unique values can be listed.<br />
* B-07795: [[QPR_ProcessAnalyzer_Table#Conditional_formatting|Conditional formatting]] supports also columns with non-numerical contents.<br />
* B-07830: [[Big_Data_Chart#Measure_aggregations|None and Any aggregations]] for Snowflake and user-friendly formatting for conformance violations.<br />
* B-06527: Error messages in [[Importing_Data_to_Datatable_from_CSV_File|CSV file import]] show also the column number to help working with CSV files with lot of columns.<br />
* B-07747: In-memory conformance checking accepts design models with multiple tasks having same name (same is followed by the Snowflake implementation).<br />
* B-07659: In-memory flowchart preset Case Conformance to visualize conformance checking violations.<br />
* B-07571: Added function IsConformant to backend to check whether cases are conformant.<br />
* B-07863: Added function ConformanceViolationsFlows to backend to return nonconformance reasons for violating cases.<br />
* B-07844: Support for "array" aggregation to return aggregated items as array.<br />
* B-07856: Support for creating and accessing arrays and objects in SQL expressions.<br />
* B-07860: Array handling functions and Tasks property for DesignModel entity.<br />
* B-07847: Added throttling for QPR ScriptLauncher client-side imports to limit memory usage.<br />
* B-07811: Snowflake query optimization to omit columns that are not used by the query.<br />
<br />
'''Fixed issues:'''<br />
* D-13632: Going from variations to event types led to very poor performance with certain models.<br />
* D-13628: Statistical calculations were incorrectly not applied in chart CSV export.<br />
* D-13575: SQL script may have given error "Operand type clash: nvarchar(max) was incompatible with sql_variant".<br />
* D-13597: UI supports now datatable column type "ShortString" (previously datatable contents preview and CSV import didn't work).<br />
* D-13536: Using business calendar sometimes gave error "System.InvalidOperationException: Collection was modified".<br />
* D-13477: Chart types without y-axis mapping caused an error when series mapping was used.<br />
* D-13453: _model variable was not available for Snowflake expression filter rules.<br />
* D-13527: Checkbox height didn't increase when long label needed to span to multiple lines.<br />
* D-13363: Snowflake query with EvaluateAfterAggregations and IsHidden failed when dimensioning by case id column.<br />
* D-13383: Snowflake query gave error "Invalid column name 'FromCase Name'".<br />
* D-13523: Request id was incorrectly shown as zeros in error messages.<br />
* D-13541: In CSV import, error message for maximum number of columns exceeded is improved (maximum is 300 column for SQL Server).<br />
* D-13583: Objects count in header didn't work for empty Snowflake model.<br />
* D-13553: Larger pacm files can now be imported, as there isn't error "Request body too large. The max request body size is 30000000 bytes".<br />
* D-13306: Stack overflow error was given when using SqlDataFrames.<br />
* D-13487: When Flows root and there was filter in Values expression, some flows were lost.<br />
* D-13540: SqlDataFrame query with 300 columns failed to error "WithExpressionColumn: No name given for the new column".<br />
* D-13429: Ordering in List aggregation couldn't find columns in dataframe query.<br />
* D-13406: Dataframe query with root FlowOccurrences and get value from cases caused error.<br />
* D-13538: There was incorrect handling of escaping characters in column names used in dimensions.<br />
* D-13633: Fixed ordering in List aggregation with null and empty values.<br />
* D-13636: Query that dimensions by numeric case attribute with AggregateOthers true, caused error.<br />
* D-13589: Creating Snowflake datatable did not connect to Snowflake.<br />
* D-13623: Value expressions without aggregation didn't work with AggregateOthers setting.<br />
* D-13554: In in-memory chart, percentile function might have return both Int64 and Double type of objects which cannot be sorted.<br />
* D-13481: Improved error message when trying to use deleted model.<br />
* D-13621: Dynamic value search dialog had incorrect font in lists.<br />
* D-13610: Some invalid BPMN files crashed BPMN editor.<br />
* D-13614: Checkbox label texts overflowed to right.<br />
* D-13520: Removed excessive parameters from the Query Designer for generic context queries.<br />
* D-12998: QPR icon was incorrectly positioned in header in Safari.<br />
* D-13480: Import to duration data type is removed from Snowflake datatables, and for local datatables duration type maximum size is checked.<br />
* D-13517: In Highcharts-based visualizationsm conditional formatting didn't work for other than the first y-axis mapping.<br />
* D-13529: In some presets containing several on-screen settings, when chart showed in error message, on-screen settings showed invalid selection.<br />
* D-13530: Opening dropdown list caused JavaScript error when the list contents should be empty after it previously contained items.<br />
* D-13486: Removed unreachable error message in CSV import.<br />
* D-13524: Fixed in-memory chart flow occurrences root measures "Event attribute (text)" and "Event attribute (number)" that caused error.<br />
<br />
== QPR ProcessAnalyzer 2023.2 (build 1478) (released 2023-03-22) ==<br />
<br />
'''Features:'''<br />
* B-07755: [[Business_Calendar|Business calendar]] for duration calculation is available for Snowflake models.<br />
* B-07719: In Snowflake dashboards, [[Big_Data_Chart#Using_measure_variables|measures can be assigned to variables]] and use the variables in other measures to create combined measures.<br />
* B-07746: Changed in-memory conformance checking to not show invalid flow violations where starting or ending event type is invalid.<br />
* B-07743: [[PA_Configuration_database_table#General_Settings|Default datasource]] can be configured for datatables created by scripts, allowing to set Snowflake as default.<br />
* B-07740: System memory indicator moved from the header to User settings Version information dialog.<br />
* B-07776: New SQL expressions functions Unicode, Char and Regexp, as a basis for future rule-based process mining.<br />
* B-07741: Backend support for aggregation operations Median, Percentile, Stdev, Stdevp, Var and Varp to Snowflake.<br />
* B-07742: Backend support for aggregation operation to list unique items in Snowflake.<br />
* B-07770: Optimized Snowflake SQL generation by combining consecutive WithColumn function calls into one select.<br />
<br />
'''Fixed issues:'''<br />
* D-13491: QPR ProcessAnalyzer server crashed now and then when sorting was in progress and the query was cancelled.<br />
* D-13380: Dimensioning integers in in-memory core calculation didn't work correctly as 0 and -1 were put to same bucket.<br />
* D-13385: In Workspace Bin, Delete Forever and Restore from Bin buttons were misaligned.<br />
* D-13332: Conformance checking didn't show in violations when there were multiple undesired events in same case.<br />
* D-13405: Images take now always all available space in image component area.<br />
* D-13417: KPI card without title was slightly misaligned vertically.<br />
* D-13438: Clicking selected event type or flow in flowchart didn't cancel the filter selection.<br />
* D-13350: Task log and Script log default filter end date is now empty by default.<br />
* D-13381: Disabled browser auto-complete from flowchart variation stepper and Workspace create/rename object dialog.<br />
* D-13347: Improved performance for in-memory business calendar calculation.<br />
* D-13335: In in-memory chart, filtering didn't work in "Flow occurrences" root "Flow occurrences with specific event attribute value" dimension.<br />
* D-13367: Percentage value wasn't displayed properly with German or Spanish language when event types were shown in object counts indicator.<br />
* D-13451: Exported filter file is now named based on selected filter name.<br />
* D-13378: In Big data chart, prevented error "Unable to aggregate from level RootCauses to level Custom".<br />
* D-13293: DataFrame query with root Flows and IncludeEvents and ExcludeEvents filter rules failed.<br />
* D-13370: Fixed issue where on-screen settings that didn't have any selectable items, showed a strange selection.<br />
* D-13392: Clustering analysis was incorrectly shown when originally in-memory chart was converted into big data chart by changing chart json settings.<br />
* D-12784: Some Snowflake queries incorrectly bypassed Snowflake caching because they used unique object names.<br />
* D-13456: Improved error messages for incorrectly configured on-screen settings.<br />
* D-13445: Conformance violations related translated terms have been fine-tuned for better translations into different languages.<br />
* D-13421: Improved error messages when trying to use model having some column mappings missing.<br />
* D-13485: Snowflake business calendar gave error when calendar contained Sunday.<br />
* D-13218: Windows event viewer incorrectly contained log entries that are not errors.<br />
* D-12634: Multiline text boxes width is set to non-changeable.<br />
* D-13034: Confirmation dialog to delete items permanently has been updated.<br />
* D-13288: In dialogs, the Create button didn't show the disabled state correctly.<br />
* D-13427: When dropdown lists didn't have any selectable items, the "N/A" text appeared and the list incorrectly took more space vertically.<br />
* D-13483: In Workspace, the new items menu was too narrow for Spanish texts.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.1 (build 1449) (released 2023-02-24) ==<br />
<br />
'''Features:'''<br />
* B-07690: System setting [[PA_Configuration_database_table#General_Settings|DatabaseId]] can be defined by administrator to get more simple table names in Snowflake.<br />
* B-07737: In flowchart Bottlenecks preset, originally used flow colors has been recovered.<br />
* B-07748: For Analyzed objects "Conformance checking findings" in charts, terminology has been revised and issue with the case count calculation fixed.<br />
* B-07663: In [[Chart_On-screen_Settings|on-screen settings]], when case/event attribute is selected, related attribute values list are reset.<br />
* B-07570: Backend support for [[Business_Calendar|business calendars]] in Snowflake.<br />
* B-07660: Backend support for conformance checking to show also the last event index and event type in NotCompleted reason.<br />
* B-07610: Memory counter related technical properties have been removed from expression language.<br />
<br />
'''Fixed issues:'''<br />
* D-13349: Opening dashboard containing Root causes preset with default settings jammed the system by generating lot of calculations (for more information, see previous release notes).<br />
* D-13277: Stacked charts with date type of data as series did incorrectly show gaps in columns/bars.<br />
* D-13270: Flowchart conditional formatting didn't work with duration multi-unit format.<br />
* D-13358: Calculation results caching works also across different user sessions.<br />
* D-13250: Dashboard with two charts connected with linked settings using variables ended up to to a never ending loop.<br />
* D-13230: SAP import did not automatically create columns to use the correct column types.<br />
* D-12857: Deeply recursive functions caused a crash without any trace.<br />
* D-12994: In Workspace, some buttons were not clickable due to breadcrumb covering them.<br />
* D-13249: In Workspace, there was incorrect error message for duplicate datatable names when there were items with only letter capitalization was different.<br />
* D-13232: In-memory chart Top variations preset is now sorted secondarily by average duration descending.<br />
* D-13300: Setting DashboardFilter variable to empty value didn't have any effect in dashboard but old value was incorrectly used.<br />
* D-12834: Limited the maximum number of dimensions to 20, to avoid too demanding queries for SQL Server.<br />
* D-12917: Changed visual indication of missing items in dropdown lists (it's no longer showing "***").<br />
* D-13111: In Root causes preset, there is now error message when trying to use weighting related columns when weighting isn't in use.<br />
* D-13124: SQLDataFrame query containing filter rule EventTypes aggregating from cases failed.<br />
* D-13207: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed.<br />
* D-13292: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed (rev.2).<br />
* D-12991: Dropdown list texts had some translations missing.<br />
<br />
== QPR ProcessAnalyzer 2023.1 (build 1433) (released 2023-02-07) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release contains a potentially severe issue, where some dashboards completely jam the system by generating lot of calculations. The issue may appear in dashboards that have been created in earlier releases and containing the Root causes preset with default settings. The issue will be fixed by the next release. The issue can be worked around by exporting the affected dashboard, modifying the dashboard file manually and importing the dashboard back. The required modification is to remove line(s) containing <pre>"preset": "RootCauses"</pre> and the comma from the preceding line.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Cases (analysis number: 5), Events (6), and EventTypes (7). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). Note that the legacy analyses removal don't affect the dashboarding functionality.<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [5, 6, 7];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2023.1, the '''.NET Desktop Runtime''' is not needed anymore for QPR ProcessAnalyzer Server, so it can be uninstalled. Also for QPR ScriptLauncher, ''.NET Desktop Runtime'' is not needed, but instead install the '''.NET Runtime''' (which is more lightweight). ''.NET Desktop Runtime'' contains the ''.NET Runtime'', so the actions are not mandatory when updating to QPR ProcessAnalyzer 2023.1.<br />
</div><br />
<br />
'''Features:'''<br />
* B-06997: Expression-based filter rules for Snowflake dashboards to allow versatile filtering and filtering from custom expressions.<br />
* B-07383: Improvements to linked settings to allow binding to variables, tags and filter rules [[Chart_Linked_Settings|(more information)]].<br />
* B-07508: Flowchart preset colors have been renewed to be more intuitive.<br />
* B-07184: Automation preset in flowchart has now options for selecting the Automation attribute and value.<br />
* B-07512: Changed datatable metadata can be refreshed from Snowflake, and all rows in the datatable can be deleted easily in Workspace [[QPR_ProcessAnalyzer_Project_Workspace#Datatables|(more information)]].<br />
* B-07440: Date when the release was made is now shown in User settings.<br />
* B-07595: WeekOfYear property for DateTime objects in expression language to get the week number of a year (between 1 and 53).<br />
* B-07623: In-memory expression language functions Random (to get random numbers) and Hash (to get hash value of string).<br />
* B-07612: Breadcrumb in Workspace has now a Home button to quickly navigate to the top level of the projects hierarchy.<br />
* B-07637: Language selector now shows the language options in local languages.<br />
* B-07228: Remove following deprecated analyses: Cases, Events, and EventTypes (see the release note above).<br />
* B-07538: Backend support: Snowflake root causes analysis can find event attribute related root causes.<br />
* B-07706: Backend support: Snowflake expression-based filter rules support for roots containing Where function.<br />
* B-07611: Removed following legacy filter rules: CaseAttributeTrend, EventAttributeTrend, EventTypeTrend, and Duration.<br />
* B-07598: Refactored client-side import for SQL scripting to use generic client-side task mechanism.<br />
* B-07716: ShortString columns are now properly detected in SQL Server queries.<br />
* B-07652: Now it's possible to pipe multiline expression strings to QPR ScriptLauncher.<br />
* B-07688: AddColumns function for Datatables to create multiple columns in one call.<br />
<br />
'''Fixed issues:'''<br />
* D-13092: Table conditional formatting didn't work when color code was fetched from other column.<br />
* D-13105: Some charts created in earlier release referring to non-existing presets names appeared as empty after software update.<br />
* D-13107: Flowcharts crashed and showed loading animation forever when setting color or flow thickness to non-numerical measure.<br />
* D-13104: In BPMN model editor, context menus to edit elements didn't appear.<br />
* D-12939: Script editor tabs Close buttons didn't work.<br />
* D-13154: "Search by case ID" didn't work in in-memory chart.<br />
* D-12933: CSV columns with only empty values were incorrectly auto-detected as integers.<br />
* D-12929: In-memory chart Root causes for case duration and Root causes for case attributes (weighted) had Custom expression missing.<br />
* D-12928: Pivot table headers were empty when there were two column levels and two values.<br />
* D-12924: Pivot table columns with Count and Distinct Count aggregations are now numeric and aligned right.<br />
* D-13033: Changing colors in chart settings Color palette caused "Item already exists" error and prevented changing colors.<br />
* D-12996: Tags referring to dashboard variables didn't work in Additional root expression.<br />
* D-12877: UI gave error in some situations: Uncaught TypeError: Cannot read properties of undefined (reading 'min').<br />
* D-13071: Prevented selecting two or more of the Y-axis, X-axis and series mappings at the same time for the same measure or dimension.<br />
* D-12895: Big data chart crashed when on-screen setting contained event type selector and there were no event type filter set.<br />
* D-13231: Tooltips for dashboard name, model selector and filter selector in header show now the content text instead of generic instruction.<br />
* D-13139: There was an error when tried to create filter for a custom expression where selected data type didn't match with the actual type of data.<br />
* D-12988: Chart presets selection in chart settings showed unnecessary tooltip.<br />
* D-12901: When set sampling over 1 million, Snowflake models gave error: parameter value out of range: size of fixed sample. Must be between 0 and 1,000,000.<br />
* D-12904: Creating expression filter having lower/greater logic with root objects sampling failed.<br />
* D-12923: Chart schema didn't accept pivotAggregation in dimensions/columns.<br />
* D-12926: Root causes columns Selected weight, Compared weight and Total weight have now correct float data type.<br />
* D-12880: In out-of-the box dashboards, chart titles and subtitles were not translated.<br />
* D-12916: Improved filter rule description text in Filter rule editor dialog for expression filter rules.<br />
* D-12889: No clear error message was given when user tried to export corrupted model from .pacm file.<br />
* D-12869: Date selector in on-screen settings had inconsistent vertical alignment.<br />
* D-12938: When creating a filter with lasso and selecting a single data point only, "equals" kind of filter rule is now created.<br />
* D-12989: "Running tasks as specific time" system report may have ended up in loop causing following error: Maximum call stack size exceeded error.<br />
* D-13010: Pivot table sometimes ended up to never-ending resizing loop when browser zoom was more than 100%.<br />
* D-12790: Expression language: DataFrame.SetColumns: Initializing and using variables defined in closure of SetColumns function parameter didn't work<br />
* D-12927: All on-screen settings were not be visible in narrow charts having several on-screen settings.<br />
* D-12937: Added maximum value limitation to several number input fields in charts.<br />
* D-12947: Message dialog didn't show line breaks correctly (e.g., in CSV file import).<br />
* D-12948: Defining column setting caused error when Measure Expression was not defined.<br />
* D-12946: Filter rule text couldn't be seen entirely from tooltip.<br />
* D-12983: When range filtering using integer values in Highcharts chart, filter is now shown as integer value.<br />
* D-12984: When range filtering in Highcharts charts and there is category axis, filter rule is now based on individual (category) values.<br />
* D-12930: When creating filters from charts using date type of X-axis with lasso, "greater than or equal" and "less than or equal" filter rules are not created.<br />
* D-12920: "Where" function in DataFrame lost column data types of the original DataFrame.<br />
* D-13048: Model notifications failed with certain measures that define variables in root expression leading to error: Variable "sampleSize" already exists in this context.<br />
* D-13116: BPMN editor had some translations missing.<br />
* D-13019: Datatable and script selectors show now datatable/script name instead of id, when opening selector having existing selections.<br />
* D-12951: Changing additional root expression in flowchart didn't refresh the flowchart.<br />
* D-13147: Filter rule boxes in header had different widths, and Add filter rule button vertical alignment was incorrect.<br />
* D-12907: Sometimes case attribute selection showed incorrect attribute name for empty model.<br />
* D-13148: Filters and Datatables system reports loaded unnecessarily twice which could be seen as blinking.<br />
* D-12844: In dataframe query, FlowOccurrences in root and GetValueFrom Cases with filter gave null reference exception<br />
* D-12915: Repeating certain query twice with aggregations in Events root generated invalid SQL<br />
* D-12728: Was huge amount logs in server during client side import (manual testing required as identification)<br />
* D-13156: Persist function failed to snowflake: Invalid unicode escape sequence '\u0027ACCE'; should be at most '\u0010FFFF'.<br />
* D-12876: Flows/FlowOccurrences in root didn't work with SqlExpressionValue filtering.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2022.8 (build 1397) (released 2023-01-11) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release fixes an issue where extracting large datasets from SAP increases memory consumption considerably and may lead to out-of-memory error. This release contains packages for both QPR ScriptLauncher and QPR ProcessAnalyzer Server. If SAP extractions are done using QPR ScriptLauncher in client side mode (ExecuteInClientSide=1), it's enough to update QPR ScriptLauncher to fix this issue.<br />
</div><br />
<br />
'''Fixed issues:'''<br />
* D-12941: Extracting data from SAP consumed unnecessary lot of memory and may have led to out-of-memory error (both when running using QPR ScriptLauncher and in server side).<br />
<br />
== QPR ProcessAnalyzer 2022.8 (build 1396) (released 2022-12-30) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Creating datatables with duplicate names in the same project is prevented, and possible existing duplicate names are automatically changed to unique names with a random suffix. If there are duplicate names, they can be renamed either before updating QPR ProcessAnalyzer (to avoid automatic renaming) or after the update (by changing suffixed names). If the renamed datatables are used by models, the linkage will break because it's based on the datatable name. Creating duplicate datatables has already been prevented in the UI, but the improved method works also in the API level.<br />
<br />
Following SQL query can be used to list datatables (and project id) having duplicate names:<br />
SELECT ITA_NAME, ITA_PROJECT_ID<br />
FROM PA_INTEGRATION_TABLE<br />
GROUP BY ITA_NAME, ITA_PROJECT_ID<br />
HAVING Count(*) > 1<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
If trying to use business calendar for a model that doesn't have the business calendar defined, there will now be an error message instead of showing the chart. Either unselect the business calendar checkbox for the measure or dimension, or define a business calendar to the model. In this situation in earlier releases the business calendar was ignored and full time calculation used.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07498: Automation and Operational Excellence presets and Root causes analysis (for Snowflake), Weighted root causes analysis and Event scattering preset (for Snowflake and in-memory), Root causes for case duration (in-memory).<br />
* B-07177: Flexible mappings, user selectable aggregations and conditional formatting for Pivot table, and flexible mappings for KPI Card.<br />
* B-07518: New function named Query to run call /api/expression/query.<br />
* B-07294: In Workspace, the left side projects hierarchy can be collapsed and expanded to make more space to project contents.<br />
* B-06814: In SQL expressions, new function DurationBetweenDates to calculate duration between timestamps precisely.<br />
* B-07519: Replaced DateDiff function with the new DurationBetweenDates function in big data chart.<br />
* B-07531: In SQL expressions, new mathematical functions Abs, Log, Mod, Power, Rand, Sign and Sqrt.<br />
* B-07297: To optimize performance, Snowflake queries are automatically cancelled if they are not needed by UI.<br />
* B-07569: To optimize performance, TakeSample function implementation is improved for Snowflake.<br />
* B-07198: Several performance improvements to DataFrame queries (used in Snowflake).<br />
* B-07464: Added Lead and Lag functions to SqlDataFrames to support getting previous and next event.<br />
* B-07470: New ExtractSap function to fetch data from SAP using expression language.<br />
* B-07536: New Pivot function to SqlDataFrames to enable root causes analysis.<br />
* B-07488: Primary keys can be set to datatables to improve calculation performance (UI will follow later).<br />
* B-07515: Added RootCauseAnalysis function to SqlDataFrames.<br />
* B-07546: RootCauseAnalysis function support for complex weighting expressions.<br />
* B-03052: Support for user-defined variables in /api/expression/query.<br />
* B-07565: Support for NumberPrecision, DatetimeTruncation and TimespanPrecision properties for Values section in in-memory query.<br />
* B-07513: For product activation file handling, replaced mutex based implementation with exclusive file lock.<br />
* B-07480: Expression language support for DataFlows for data extraction.<br />
* B-07613: Removed support for SQL Server based R scripting.<br />
* B-07567: Take datatable primary keys into use in expression builder to improve performance (part 2).<br />
* B-07588: Remove total memory information from log writing and DateDiff function for in-memory.<br />
<br />
'''Fixed issues:'''<br />
* D-12715: Snowflake calculated imprecisely some operations containing division and aggregation.<br />
* D-12761: Progress bar of the CSV import dialog didn't show any progress.<br />
* D-12799: Opening datatable contents dialog settings was slow when there were lot of rows in the datatable.<br />
* D-12089: Include conforming/nonconforming cases made BPMN editor no responding.<br />
* D-12496: Datagrid filter search keyword didn't work for rounded values, so the search was hidden for other than textual data.<br />
* D-12704: Durations as quarters was calculated incorrectly in charts.<br />
* D-12662: Fixed issue where some special literals in custom expressions didn't work.<br />
* D-12403: Setting Notifications on a model had some visual issues.<br />
* D-12859: Dependency wheel visualization crashed with nulls values in From and To mappings.<br />
* D-12660: Removed unnecessary float conversions in SQL expressions.<br />
* D-12653: In-memory datafram OrderByColumns function with mixed values failed.<br />
* D-12657: When trying to use milliseconds period in some presets, frontend frozed.<br />
* D-12706: Line breaks in data were shown in many places where it's undesired.<br />
* D-12719: Syncfusion dialog headers showed backslaces incorrectly.<br />
* D-12372: Refused to run the JavaScript URL because it violated the Content Security Policy directive.<br />
* D-12730: Logging out when filter selection is in progress, gave javascript error.<br />
* D-12705: Header object counts tooltip was sometimes messed after logout.<br />
* D-12384: Selected project was not highlighted for whole project name string.<br />
* D-12581: Prevented creating duplicate datatable names in same project in parallel execution.<br />
* D-12722: There was incorrect syntax near '<' when running SqlDataFrame expressions.<br />
* D-12736: Swedish and Finnish translation improvements for object counter tooltips.<br />
* D-12702: For BPMN Editor component "Something went wrong" error was given when switching from in-memory to Snowflake model.<br />
* D-12712: UI gave error: TypeError: Cannot read properties of undefined (reading 'id').<br />
* D-12738: Business calendar showed total business time when calendar configuration was invalid.<br />
* D-12776: Special character filter caused JavaScript SyntaxError.<br />
* D-12785: Unnecessary vertical scrollbar displayed for main header toolbar.<br />
* D-12164: There was unnecessary UnauthorizedAccess errors in logs.<br />
* D-12580: Case duration was not same when comparing Big data chart with in-memory chart for same data.<br />
* D-12768: Data grid links and variable change actions didn't work when grouping was used.<br />
* D-12735: FindRootCauses (in-memory) function filtered out cases with zero contribution.<br />
* D-12763: --#CallWebService didn't work from ScriptLauncher.<br />
* D-12789: There was timeout in SQL queries to scripting sandbox.<br />
<br />
== QPR ProcessAnalyzer 2022.7 (build 1331) (released 2022-11-15) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2022.7, to improve security expression language operations that modify data or connect to external datasources are prevented in dashboard custom expressions. The limitation is required, because when a dashboard is opened, its expressions are run with the user's permissions, and the user need to trust the expressions don't perform any unexpected operations, such as delete data. The full functionality of the expression language is available in the scripts and in the Expression Designer.<br />
<br />
The following functions and operations are prevented in dashboards: SendEmail(), CallWebService(), ImportOdbc(), ImportOdbcSecure(), Model.DeletePermanently(), Model.Restore(), Model.TriggerNotifications(), Project.DeletePermanently(), Project.Restore(), Project.CreateDatatable(), Datatable.AddColumn(), Datatable.DeletePermanently(), Datatable.Import(), Datatable.Merge(), Datatable.RemoveColumns(), Datatable.RenameColumns(), Datatable.Truncate(), RecycleBin.DeletePermanently(), and call SQL script. Calling expression scripts is allowed, but in the script all previously mentioned operations are prevented.<br />
<br />
Following SQL query can be executed in the QPR ProcessAnalyzer metadata database to reveal dashboards that potentially have prevented expressions:<br />
SELECT * FROM [PA_UI_ELEMENT] WHERE [UIE_PROPERTIES] LIKE '%SendEmail(%' OR [UIE_PROPERTIES] LIKE '%CallWebService(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbc(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbcSecure(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Restore(%' OR [UIE_PROPERTIES] LIKE '%TriggerNotifications(%' OR [UIE_PROPERTIES] LIKE '%CreateDatatable(%' OR [UIE_PROPERTIES] LIKE '%AddColumn(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Import(%' OR [UIE_PROPERTIES] LIKE '%Merge(%' OR [UIE_PROPERTIES] LIKE '%RemoveColumns(%' OR [UIE_PROPERTIES] LIKE '%RenameColumns(%'<br />
</div><br />
<br />
'''Features:'''<br />
* B-07287: Process Discovery and most important presets for Snowflake.<br />
* B-07271: "Last Row Aggregates Over-limit Rows" setting for big data chart.<br />
* B-06431: Snowflake datatables support for database views in the datasource.<br />
* B-07266: Security: "limited mode" to prevent data modifications and external calls from dashboard expressions.<br />
* B-07097: Improved flowchart root causes color scales.<br />
* B-07363: SQL LIKE function support for escape character.<br />
* B-06877: Improved variation queries performance in Snowflake, part 1.<br />
* B-07444: Improved variation queries performance in Snowflake, part 2.<br />
* B-07382: Support for empty strings and nulls in event type names in dataframe processing.<br />
* B-07273: WithRowNumberColumn, WithRankColumn, WithDenseRankColumn support for descending sorting.<br />
* B-07303: FindRootCauses function support for weighting expression.<br />
* B-07327: Unpivot function for SqlDataFrames (for root cause analysis).<br />
* B-07385: Align token lifetime with SESSION_MAXIMUM_DURATION setting.<br />
* B-07500: ColumnMappings property for IDataFrame and DataTables.<br />
* B-07499: IDataFrame.ApplyFilter function to filter events data using a JSON-based filter.<br />
* B-07469: Translation updates for release 2022.7.<br />
<br />
'''Fixed issues:'''<br />
* D-11630: Drag and drop from chart settings to main header was working incorrectly for filter and root cause rules.<br />
* D-12455: Moving a chart filter from one chart to another created a root cause analysis filter.<br />
* D-12266: Root causes analysis showed incorrect results when certain combination of filters.<br />
* D-12525: Numerical values in Excel export in data grid was formatted incorrectly.<br />
* D-12534: Restoring item from recycle bin changed project from Bin to previous project.<br />
* D-12529: Measure specific datalabel mapping did not work correctly when also mapped to Y-axis.<br />
* D-12532: Multi-selection options caused layout issue for Chart setting.<br />
* D-12541: Layout issue for Polish in multiselect list search dialog.<br />
* D-11277: Increase/decrease Icons were missing in the dimension sorting for Mac.<br />
* D-12552: Uncaught Error: Diagram.selectCollection given something that is not a Part: null.<br />
* D-12567: Tooltip incorrectly showed for label component containing only spaces.<br />
* D-12438: Operation was cancelled because it was replaced by a new operation.<br />
* D-12551: Some expressions didn't work as calculated case/event attributes.<br />
* D-11720: Chart buttons were not visible in Apple Safari and iPad.<br />
* D-12544: On-screen settings "options" parameter did not work.<br />
* D-12528: Multi-unit time unit selection appeared where it's not applicable.<br />
* D-12583: Error message should be provided for invalid settings input than just display JS errors.<br />
* D-12599: Tooltips didn't show correct measures/dimensions when "Show in tooltip" mappings are used.<br />
* D-12561: Chart settings content was incorrectly drawn outside of the chart dialog.<br />
* D-12568: Reload UI sometimes crashed chart having multiselect on-screen settings.<br />
* D-12572: Main header toolbar lost when refresh maximized PA chart.<br />
* D-12612: Drop Unused Filters After setting incorrectly allowed zero seconds.<br />
* D-12533: Error message keeped blinking in Analysis view.<br />
* D-12608: User could not select or add new case attribute when current select attribute doesn't exist.<br />
* D-12451: Prevented deleting running script.<br />
* D-12516: Windows event viewer warning: Failed to gracefully shutdown application.<br />
* D-12523: Business calendar performance - part 2.<br />
* D-12538: Column with same name could be added multiple times to datatable using expression language.<br />
* D-12582: Improved EMS mutex code to support multiple PA service in one server.<br />
* D-12624: Synchronize new (empty) data table generated failed queries in Snowflake.<br />
* D-12622: Advanced setting page reserved room for the expression editor frame that did not exist.<br />
* D-11295: In on-screen settings, some UI controls were vertically misaligned.<br />
* D-11625: The heights of the parameter option menu in the clustering tab was not well aligned.<br />
* D-12103: Small dropdown list layout issue.<br />
* D-12633: Align issue for Column related Advanced settings.<br />
* D-12505: Search dialog didn't escape % and _ characters correctly in dataframe processing.<br />
* D-12645: Tabs in expression settings dialog were partly hidden when dialog is narrow.<br />
* D-11382: Moving of flowchart was sometimes shaky.<br />
* D-12655: Filter rule tooltips in header were styled incorrectly.<br />
* D-12656: Large integer values in filter jsons were incorrectly presented as small integers.<br />
* D-12661: Some exported filters contained unnecessary "invert" property.<br />
* D-12500: Model with numeric case id's and filtering with the attribute mapped as case id: ERROR [22018] Numeric value <nowiki>''</nowiki> is not recognized.<br />
* D-12509: Filtering null values didn't work in boolean attributes in Snowflake.<br />
* D-12571: In dataframe processing in SQL Server, dividing two integers should not make rounding to integer.<br />
* D-12610: Setting for global DropUnusedFiltersAfter was missing.<br />
* D-12613: Filtering with case/event attributes with null values didn't match in Snowflake models.<br />
* D-12617: Model didn't work when DropUnusedFiltersAfter is 00:00:00.<br />
* D-12618: If model ConfigurationJson is null, Configuration property didn't work.<br />
* D-12620: Filtering didn't work when there are backslaces in attribute names in Snowflake models.<br />
* D-12643: AttributeFunctionCallExpression did not always work properly in array context.<br />
* D-12647: SqlDataFrame with SQL Server: Comparing literals to variant column values failed.<br />
* D-12648: Models that have DropUnusedModelsAfter setting caused "The sliding expiration value must be positive" error.<br />
* D-11526: It was unable to translate Unicode character \uD83D at index 176 to specified code page.<br />
* D-12637: In application startup arised FATAL Application startup exception System.UnauthorizedAccessException: Access to the path 'Global\MutexQPRPAActivation' is denied.<br />
<br />
== Old Releases ==<br />
See older releases in [[QPR ProcessAnalyzer Release Archive]]<br />
__NOTOC__<br />
<br />
[[Category: QPR ProcessAnalyzer]]</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=Web_API:_Serverinfo&diff=24467Web API: Serverinfo2024-03-04T11:17:17Z<p>Ollvihe: </p>
<hr />
<div>The '''ServerInfo''' operation returns basic information of the server, needed by the user interface. The ServerInfo operation doesn't require user to login (as the information is used by the login screen already before login).<br />
<br />
<pre><br />
Url: GET qprpa/api/serverinfo<br />
</pre><br />
<br />
Returns a JSON object containing the following properties:<br />
* '''defaultUiLanguage''' (string): Language code of the default user interface language that new user accounts get by default. The login page is translated using this default language. Language options are same as in the [[PA_Configuration_database_table#General_Settings|DefaultUiLanguage]].<br />
* '''defaultDateFormat''' (string): Default date format that new user accounts get by default. The date format does not contain the time part (e.g. hours, minutes and seconds). Defined using the .Net date format (https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings).<br />
* '''defaultFirstDayOfWeek''' (string): Default first day of the week that new user accounts get by default. '''0''' is Sunday and '''1''' is Monday. This information is used by the UI when showing e.g. calendars.<br />
* '''defaultUse12HourClock''' (string): Defines whether the 12-hour clock (instead of the 24-hour clock) is in use by default for the new user accounts when showing time information in the UI. Defined as '''true''' or '''false'''. More information about the 12-hour clock: https://en.wikipedia.org/wiki/12-hour_clock.<br />
* '''serverVersion''' (string): QPR ProcessAnalyzer build version.<br />
* '''ssoConfigured''' (boolean): Whether SSO (SAML 2.0 authentication) is in use in the environment.<br />
* '''hasValidActivation ''' (boolean): Server activation is currently valid.<br />
* '''enabledFeatures''' (string array): List of features that are configured and available to use in the server. Possible features are:<br />
** '''snowflake''': connection to Snowflake data cloud<br />
** '''sqlserver''': datatable can be stored to a separate SQL Server database<br />
** '''openai''': Open AI Chat Completions API<br />
* '''codeRevision''' (string): Revision information from the version management system.<br />
* '''databaseMajorVersion''' (number): Database major version.<br />
* '''databaseMinorVersion''' (number): Database minor version.<br />
* '''pacmFileVersion''' (number): PACM export file version.</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&diff=24464QPR ProcessAnalyzer Release Notes2024-03-01T11:18:01Z<p>Ollvihe: /* Next Release: QPR ProcessAnalyzer 2024.3 (planned release date 2024-04-02) */</p>
<hr />
<div>This page lists all new features and fixed issues for each QPR ProcessAnalyzer release.<br />
<br />
== Next Release: QPR ProcessAnalyzer 2024.3 (planned release date 2024-04-02) ==<br />
<br />
'''Features:'''<br />
* B-08231: Snowflake performance improved by changing object counts query in header into two queries, so that the filtered object count query uses eventlog caching.<br />
<br />
'''Fixed issues:'''<br />
<br />
* D-14048: Fixed issue where in-memory root causes analysis for case attributes didn't show attributes with ShortString data type.<br />
* D-14049: Added some missing translations for table column filter and BPMN editor.<br />
<br />
== Latest: Additional release for QPR ProcessAnalyzer 2024.2 (build 5509) (released 2024-02-27) ==<br />
<br />
'''Features:'''<br />
<br />
* B-06280: User management dialog shows whether users have password defined and unnecessary passwords can be removed to improve security.<br />
<br />
'''Fixed issues:'''<br />
<br />
* D-14045: Fixed issue where users with Viewer or Analyzer role couldn't create filters in Snowflake models.<br />
<br />
== QPR ProcessAnalyzer 2024.2 (build 5438) (released 2024-02-21) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue: Using Snowflake models and dashboards doesn't work with Viewer and Analyzer roles. The reason is that cache tables created to Snowflake incorrectly require the GenericWrite permission. Workaround is to give users the Designer role which will give the needed GenericWrite permission. Note that the Designer role gives many permissions to the user for the project [[Roles_and_Permissions#Roles_and_Permissions|(more information)]]. Fixed in the next release (D-14045).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
The legacy User permissions report (analysis number 11) and Filters report (analysis number 30) used in SQL scripts have been removed. Use instead the expressions language to query filters and user permissions, e.g., [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|Models.Filters]] and [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
New version of the Design diagram component has been improved with object-specific measures, and the previous common measures are not migrated into object-specific measures. Thus, the measures need to be configured again, or manually edit the chart json settings (if needed please ask instructions from QPR CustomerCare).<br />
</div><br />
<br />
'''Features:'''<br />
* B-08022: Design diagram supports now BPMN notation, elbow style flows and object-specific measures.<br />
* B-08232: Entire future eventlogs can be [[Create_Predicted_Eventlog|predicted]] based on generative AI models running in Snowflake.<br />
* B-08166: Added expression language function [[Generic_Functions_in_QPR_ProcessAnalyzer#OpenAIChatCompletion|OpenAIChatCompletion]] to answer natural language prompts based on OpenAI ChatGPT API.<br />
* B-08177: Snowflake query performance has been improved by introducing caching of filtered eventlogs using Snowflake tables.<br />
* B-08196: Conditional formatting rules can be defined for [[QPR_ProcessAnalyzer_Table#Textual_equal_rules_for_background_color|textual and boolean values]].<br />
* B-08213: Big data chart expressions event type selections to be multi-select where applicable.<br />
* B-08205: Expression language API is available for storing [[Storing_Secrets_for_Scripts|secrets]] for scripts.<br />
* B-07780: Chart [[QPR_ProcessAnalyzer_Chart#Variable_mappings|variable mappings]] has been removed - use the [[Chart_Linked_Settings|linked settings]] instead. Dashboards using variable mappings are automatically converted to use linked settings.<br />
* B-08117: Added ToSqlDataFrame function to convert in-memory dataframe into SQL dataframes.<br />
* B-08174: Only non-default parameters values are written to the operation log.<br />
* B-08200: Timestamps in System reports are shown in user workstation local time.<br />
* B-08171: Dashboard id has been added to queries, to track from which dashboard queries are originating.<br />
* B-07144: Remove legacy User permissions report (analysis number 11) and Filters report (analysis number 30) in SQL scripts (see note above).<br />
* B-08193: Added retry mechanism to QPR ScriptLauncher to recover if connection to server breaks.<br />
* B-08202: Updated copyright for year 2024.<br />
* B-08199: Frontend components have been updated.<br />
* B-08203: Backend components have been updated.<br />
* B-08209: Translations updated for release 2024.2.<br />
<br />
'''Fixed issues:'''<br />
* D-13972: Some measures/dimensions/columns in Big data chart didn't show the expressions level filtering.<br />
* D-14015: Fixed business calendar incorrect calculation when business period covered entire day.<br />
* D-14014: Fixed issue where Snowflake business calendar could not have end time as 00:00.<br />
* D-13962: System variable values were interpreted incorrectly when used in linked settings.<br />
* D-13971: HiddenInNavigation and SortOrder variables didn't work in navigation menu dashboards list.<br />
* D-13959: Removed possibility to add datatable columns with the legacy "any" data type.<br />
* D-13991: Improved drop-down selector component to handle empty strings as variable values.<br />
* D-13965: Datatable column name length was validated incorrectly which may have caused error in saving with too long column names.<br />
* D-13958: Project names showed unnecessary html escaping in the "Move to" menu.<br />
* D-13964: Model attributes and notifications dialogs gave error when trying to use dashboard tags.<br />
* D-13960: Added missing translations for list of permission list and 12-hour clock format.<br />
* D-13966: Fixed issue were root causes chart tooltip sometimes didn't disappear.<br />
* D-13969: Datatable column schema export sometimes showed empty for the key column.<br />
* D-13862: Session token was not accepted when url path capitalization is different.<br />
* D-13942: Datatable could not be dimensioned if it has column named "CaseId".<br />
* D-13980: Business calendar dialog crashed when tried to open it for a model without access.<br />
* D-13983: Notifications dialog didn't validate situation when same name was used in a measure and dimension.<br />
* D-13981: Dashboard import set incorrect model id to dashboard if there was no access to any model.<br />
* D-11276: Translations were missing for 12-hour clock dates (AM and PM) in dashboards.<br />
* D-13977: Multi-select dropdown lists showed some special characters incorrectly.<br />
* D-13945: Syncfusion toast message didn't work when text contains ${[]}.<br />
* D-13930: Pivot table throws javascript error when certain clicks.<br />
* D-13273: Duplicate datatable row count didn't shown correctly.<br />
* D-13994: There was an error in the in-memory chart with some flow related measures about duplicate variable names when same measure was defined twice.<br />
* D-13985: Models list dots menu had texts misaligned in narrow screens.<br />
* D-13995: In Workspace, wrong datatable was selected after duplication when non-default sorting was applied.<br />
* D-13997: Workspace tables column filtering search caused JavaScript errors.<br />
* D-13978: In table Excel export, the last row representing other items appeared incorrectly for in-memory chart.<br />
* D-14007: In System reports, model related selections are hidden from the Analyzed objects lists.<br />
* D-14005: In big data chart, changing to custom expression caused crash with some expressions having case/event attribute.<br />
* D-14003: When dimensioning was not used, pivot table values were incorrectly rounded in the server side.<br />
* D-14004: Removed empty filters from queries to optimize them.<br />
* D-13988: Fixed issue where data grid context menu rendered initially as too high.<br />
* D-13979: BPMN model editor element settings use now Open Sans font.<br />
* D-14013: Fixed incorrect expression "Duration between first and last occurrence" in big data chart event types.<br />
* D-13984: Fixed the error of refusing to run the JavaScript URL.<br />
* D-14031: ThrownObject property was not included to http error response when error came from the script.<br />
<br />
== QPR ProcessAnalyzer 2024.1 (build 4784) (released 2024-01-10) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue fixed in QPR ProcessAnalyzer 2024.2: In Big data chart, some measures, dimensions and columns have the filtering option missing. The issue concerns for example Duration between events, Path starting/until between specific events, and Cases where event occurs before other selections. Workaround is to set the filter in the chart json settings: the filter can be configured to another expression and copied to the correct expression.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
QPR ProcessAnalyzer Server and QPR ScriptLauncher are now using .Net 8 (previous was .Net 6). When updating to this release, install the .Net 8 Runtime ([[Updating_QPR_ProcessAnalyzer_Server|see more]]). The .Net 6 doesn't need to be uninstalled immediately because .Net 6 and .Net 8 work side-by-side, but due to security reasons, the unused .Net 6 should eventually be uninstalled.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In this release, all filters that don't contain any filter rules, are removed. These are legacy filters which have not been visible in the UI.<br />
</div><br />
<br />
'''Features:'''<br />
* B-08019: New component [[Design_Diagram|Design Diagram]] for showing user-created diagrams in dashboards where to visualize process mining metrics.<br />
* B-08087: Generic [[Dropdown_List_Selector|dropdown list selector]] works with Snowflake models allowing to add selection lists for any values.<br />
* B-08163: Linked settings support for binding to [[Chart_Linked_Settings#Binding_to_case_attribute_filters_with_attribute_name_and_attribute_values|case attribute filter values without defining case attribute name]].<br />
* B-08170: Snowflake model filters can be [[Filtering_in_QPR_ProcessAnalyzer#Filter_actions|saved as new models]] which can be used to create snapshots of part of models.<br />
* B-08093: Multiple dashboards can be exported to same file, and model can be set for imported dashboards.<br />
* B-08161: Added [[Datatable_in_Expression_Language#Modify|Modify]] function to change datatable properties and improved [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#CreateDatatable|CreateDatatable]] function for creating datatables.<br />
* B-08122: Added new system report to list dashboards.<br />
* B-08173: Removed legacy filters that didn't have any filter rules.<br />
* B-07961: In OperationLog, changed parameters to json format and added request id.<br />
* B-08069: Added DashboardId property to [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog]] in expression language.<br />
* B-08139: Added [[Datatable_in_Expression_Language#UpdateRows|UpdateRows]] function to update existing rows in datatables with similar logic than SQL update.<br />
* B-08115: Added [[Datatable_in_Expression_Language#DeleteRows|DeleteRows]] function to delete rows in datatables with similar logic than SQL delete.<br />
* B-08149: QPR ProcessAnalyzer has been updated to .Net 8.<br />
* B-08054: Changed Scripts property in generic context to return all scripts, instead of legacy system level scripts.<br />
* B-08138: Changed Synchronize function to remove all columns when no Snowflake table exists.<br />
* B-07689: For datatables, [[Datatable_in_Expression_Language#ForeignKeys|foreign keys]] to other datatables can be defined using expression language.<br />
* B-08176: Translation updates for release 2024.1.<br />
* B-08175: Workspace should show timestamps in user's local time.<br />
<br />
'''Fixed issues:'''<br />
* D-13913: Datatable properties dialog incorrectly showed linked models from other projects.<br />
* D-13916: Chart filter could not be defined for some expressions in Big data chart.<br />
* D-13933: Navigation menu selected item wasn't highlighted when used Snowflake models.<br />
* D-13906: In Conformance Analysis, deviating flows were not translated.<br />
* D-13907: Improved translation related to datatable properties dialog "Used by models" field.<br />
* D-13904: There was an unclear error message in Snowflake, as exception code 1 was returned without AttributeName and ModelName properties when non-existing attribute was in filter.<br />
* D-13911: Fixed small glitches in the opening and closing of drop-down lists.<br />
* D-13918: Datatable could be configured incorrectly to use table for other datatable.<br />
* D-13932: Duplicating datatable with custom table in datasource losed all data.<br />
* D-11002: Removed legacy in-memory prediction preset.<br />
* D-13912: Added check that array cannot be stored to dashboard Content property.<br />
* D-13936: Query designer default query didn't work with Snowflake models.<br />
* D-13938: There was an incorrect logging with some operations related to ScriptLauncher.<br />
* D-13923: Snowflake expressions didn't work with Where function in root referring to case attribute.<br />
* D-13939: ApplyFilter function gave null reference error for non-existing attribute name.<br />
* D-13931: There were issues with AllowExternalDatasources and EnableFullFunctionality settings.<br />
<br />
== QPR ProcessAnalyzer 2023.7 (build 4326) (released 2023-11-28) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Limitation for the maximum amount of data (B-07636) causes a behavior change in in-memory charts that have the Maximum rows settings empty and have the sorting defined. In certain cases, the order in which measures are evaluated changes (due to an internal performance optimization). If there are custom expressions that define variables, the variables may not be available in other measures anymore. As a resolution, either redefine the variables in those measure expressions or add those measures secondarily to the sorting.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Default query timeout of 30 minutes has been added for --#ImportOdbcQuery, --#ImportSqlQuery and --#ImportOleDbQuery commands. If a query run is taking longer than the timeout, the query is stopped. The timeout can be adjusted using the '''QueryExecutionTimeout''' parameter. Previously, there has been no timeout, so queries that take more than 30 minutes require configuring a longer timeout.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Incorrectly configured [[Chart_Linked_Settings|linked settings]] in charts (available in the ''Advanced'' tab) give now an error message, if they are referring to non-existing measures, dimensions or columns. Previously, incorrect linked settings were ignored. To fix the error message, remove the incorrect linked settings.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07511: Datatables have a [[Datatable_Properties_Dialog|dialog]] to view datatable properties, write description, set the Snowflake source table, add/modify/delete columns, and set the datatable key.<br />
* B-08150: Added setting [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|Apply chart filters first]] to determine whether chart filter rules or dashboard filter rules are applied first when chart queries are filtered.<br />
* B-08091: When filtering charts in Snowflake, case attribute filter is created instead of case id filter.<br />
* B-08091: [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|New setting]] to define whether cases or events are filtered by default.<br />
* B-08091: New preset "Looping paths" to detect whether there are repeating patterns of events.<br />
* B-08091: Duration between events calculation ignores negative durations in Snowflake.<br />
* B-08091: Chart loading animation has been renewed.<br />
* B-07636: To prevent dashboards from jamming when querying too much data, added [[QPR_ProcessAnalyzer_Chart#Available_Visualizations|limitations]] to the amount of data that charts can visualize. Note that the limitation concerns the aggregated data that is visualized, not the source event log data.<br />
* B-08017: [[Dashboard_in_Expression_Language|Dashboards API]] has been added to expression language, allowing to create, modify and delete dashboards in scripts.<br />
* B-08056: Following properties have been added to [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#User.2FGroup|user objects]] in expression language: IsLocked, LastLockedDate, LastLoginDate.<br />
* B-08053: [[Navigation_Menu#System_Reports|User rights report]] has been refactored to use [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property in the expression language. The change also simplifies the report as now it only shows the direct role assignments that are visible in the [[Manage_Users_and_Groups|User Management]].<br />
* B-08151: For Snowflake expressions support for following [[SQL_Expressions#Window_functions|windowing functions]]: sum, average, median, min, and max.<br />
* B-08050: When a model is created, the default filter is not created anymore (this is a refactoring that doesn't have any impact on user interface).<br />
* B-08123: Translation updates for 2023.7.<br />
* B-08092: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13876: In CreateSnowflakeConnection function, ProjectId parameter is optional when OdbcConnectionStringKey is not specified.<br />
* D-13898: Snowflake: Exclude case attribute filter didn't work when there was null values and was selecting at least two values.<br />
* D-13890: Fixed XES file import to work.<br />
* D-13894: Business calendar based duration calculation was incorrect in some durations that spanned to several weeks (for Snowflake and in-memory models).<br />
* D-13899: Using broken OdbcConnectionString in a datatable prevented the datatable from being deleted.<br />
* D-13883: Script run stucked after running a script with error that uses client-side ODBC import.<br />
* D-13879: SqlExpressionValue filter when excluding events didn't work with filter rule root expression only.<br />
* D-13896: Adding or removing columns to datatable didn't change the LastModifiedDate.<br />
* D-13882: User details weren't written to operation log when creating or modifying users.<br />
* D-13771: User rights system report didn't give error when changing columns.<br />
* D-13893: Some event filtering caused null pointer error when primary key had been defined.<br />
* D-13873: Fixed pivot table visual issues after component update.<br />
* D-13900: When adding, renaming or removing columns for Snowflake table fails, operation is now rolled back without any changes.<br />
* D-13866: Querying GET api/uielements was quite slow right after server start.<br />
* D-13864: Combinations of translatable and hardcoded strings didn't get translated in UI.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.6 (build 3933) (released 2023-10-24) ==<br />
<br />
'''Features:'''<br />
* B-08055: Error message for locked account has been replaced with generic error message, so that username enumeration is not possible.<br />
<br />
'''Fixed issues:'''<br />
* D-13884: Attributes dialog crashed with some older model configurations.<br />
* D-13843: In charts, selected case and event attributes switched away when attribute data type was ShortString.<br />
* D-13877: Some Snowflake expressions gave error "exceeds maximum length limit of 255 characters" when selecting lot of items.<br />
* D-13878: Snowflake expression filters for case attribute values didn't accept other than string type of case attributes.<br />
* D-13871: Some statistical calculations with percentages didn't work with Last Row Aggregates Over-limit Rows setting.<br />
* D-13875: Using some case level filters in a model without cases datatable didn't work.<br />
* D-13861: Dashboard opens are now logged to the Task log (i.e., calling GET /api/dashboards/{dashboardid}).<br />
* D-13870: Workspace projects hierarchy focused project showed light grey background making the project name not readable.<br />
* D-13867: When starting datatable refresh and going to other tab, went back to Datatables tab when query completed.<br />
* D-13853: If chart Custom Layout settings had extra series defined, chart may have crashed.<br />
* D-13869: Export as CSV button didn't work in the datatable contents dialog when dialog was still loading.<br />
* D-13872: Main progress spinner had unnecessary small scrollbar on top right.<br />
* D-13863: In the REST API method GET /api/users, password field (that has always been null) has been removed.<br />
<br />
== QPR ProcessAnalyzer 2023.6 (build 3847) (released 2023-10-17) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is removed in this release. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
'''Features:'''<br />
* B-07992: Added 10 new presets including Queue analysis, Four eyes principle, Self-looping events, and Path until selected event. There are also presets for Individual Cases Flow and Range of event type occurrences which use Gantt chart.<br />
* B-08011: Added following date related operations for Snowflake: Day of year, Day of month, Day of week, Week of year, Half-year only, Quarter only, Month only, Hours only, Minutes only, Seconds only, and Milliseconds only. These are available when calculating with date type of data.<br />
* B-08016: [[QPR_ProcessAnalyzer_Table#Table_actions|Table actions to set variables]] can also be opened to a new browser tab. Also improved user interface for table actions.<br />
* B-08018: For Snowflake expressions, added Flows aggregations FromEventType and ToEventType to get starting/ending event type, and FlowOccurrences aggregations FromEvent and ToEvent to get starting/ending event.<br />
* B-08001: Added [[Generic_Functions_in_QPR_ProcessAnalyzer#CallStoredProcedure|CallStoredProcedure]] function to call Snowflake stored procedures. This allows to start ETL transformation in Snowflake orchestrated by QPR ProcessAnalyzer script.<br />
* B-08013: Added [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property to expression language to replace the legacy UserPermissions analysis (11).<br />
* B-07976: Snowflake [[Filtering_in_QPR_ProcessAnalyzer_Queries#Expression|expression based filter rules]] support additional expression columns allowing more Big data chart expressions to be filterable.<br />
* B-08015: Big data chart doesn't anymore support calculation in SQL Server (using local datatables).<br />
* B-06270: Improved error messages and made them translatable by taking into use exception codes provided by server.<br />
* B-08021: Added possibility to store [[Diagram_in_Expression_Language|designed diagrams]] for models and expression language API for reading and modifying diagrams.<br />
* B-08037: Dropped following unused tables database: PA_IDEA, PA_IDEA_VOTE, PA_REPORT, PA_REPORT_SETTING, PA_SESSION_SERVICE, PA_VIEW_FILTER_RULE, PA_VIEW_FILTER_RULE_PARAMETER.<br />
* B-08052: Language translations have been updated to 2023.6.<br />
* B-08051: Frontend side components have been updated.<br />
* B-08034: Backend side components have been updated.<br />
<br />
'''Fixed issues:'''<br />
* D-13830: Object counts indicator in header showed incorrect counts when there was disabled filter rules in Snowflake models.<br />
* D-13833: In-memory charts didn't work with boolean type of dimensions when filtering with the false value.<br />
* D-13858: Target value measures didn't update chart when controlled using an on-screen setting.<br />
* D-13827: Calculated attributes data type was incorrectly set as Any by the Attributes dialog.<br />
* D-13849: Multiselect list search didn't allow spaces.<br />
* D-13829: Multiselect dropdown lists height jumped couple of pixels when selecting values.<br />
* D-13835: Deselecting a selected data point didn't remove chart filter rule.<br />
* D-13702: Improved Snowflake query performance in situations when there are lot of filter rules (by decreasing number of CTE's).<br />
* D-13819: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13820: Fixed incorrect manifest.json file to avoid "not found" errors when fetching web site icon.<br />
* D-13865: Break, continue, and return statements didn't work properly when called from inside a catch block.<br />
* D-13795: There was a Python error in clustering analysis with Snowflake model.<br />
* D-13823: Some tooltips in Workspace project hierarchy didn't work and caused a JavaScript error.<br />
* D-13824: BPMN editor align context menu layout looked strange.<br />
* D-13813: QPR logo button in the top left was misaligned in Firefox.<br />
* D-13797: Snowflake query may have given following error when using sampling: ambiguous column name '_EventType_NotNull_1'.<br />
* D-13774: TakeSample function with certain columns caused SQL compilation error: ambiguous column name 'Case Name'.<br />
* D-13782: Snowflake: Aggregating from variations didn't work when using sampling.<br />
* D-13836: Some tooltips had a strange two-colored background.<br />
* D-13834: Removed Model statistics column from clustering and root causes analysis.<br />
* D-13860: Removed filter button from the custom expressions in Task log analyzed objects.<br />
* D-13838: Removed Split data by filtering column from clustering analysis.<br />
* D-13832: Script and model status updates incorrectly sent next update when previous was still pending.<br />
* D-13839: Charts reset zoom button font size was too small.<br />
* D-13817: Importing data to Snowflake datatable with Append=0 doesn't now drop the underlying Snowflake table.<br />
* D-13825: Some models could not have been deleted from recycle bin.<br />
* D-13852: Recycle bin Projects and Models tab didn't show correct content when Recycle bin only contained either models or projects.<br />
* D-13841: In-memory chart Data type selection type has been corrected to string.<br />
* D-13842: Second time and Third time selections has been hidden in in-memory chart measures.<br />
* D-13850: In Chrome, there were console errors related in incorrect text field autocomplete type and text field without form.<br />
* D-13847: Improved browser side performance by removing unnecessary operations.<br />
* D-13859: Chart without dimensions showed an unnecessary Remove dimension button.<br />
* D-12598: When script is stopped in server, ScriptLauncher could still incorrectly continue to import data.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.5 (build 3334) (released 2023-09-07) ==<br />
<br />
'''Fixed issues:'''<br />
* D-13826: Measures or dimensions with case or event attribute and value selections incorrectly removed calculated attributes when dashboard was opened or chart settings were changed.<br />
* D-13821: Font size of some Highcharts tooltips was too small. Issue appeared when there were tooltips mappings in measures or dimensions.<br />
* D-13810: Simplified help links: now all Help buttons go to the QPR ProcessAnalyzer wiki main page.<br />
* D-13822: Snowflake clustering analysis showed empty strings and nulls as case attribute values in an unclear way as just nothing.<br />
<br />
== QPR ProcessAnalyzer 2023.5 (build 3304) (released 2023-09-05) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In Big Data Chart, the '''Case conformance''' measure and dimension has changed in a way that now it provides boolean values (true/false) instead of integer values (1/0). If [[Measure,_Dimension_and_Column_Settings#Other_settings|colorMappings]] are used for this measure or dimension to set specific colors to visualize conformant and nonconformant cases, the mapped values need to be changed as follows: '''1''' -> '''true''' and '''0''' -> '''false'''. Without the change, the mapped colors are not effective.<br />
<br />
Exmaple: Old configuration:<br />
<pre><br />
"colorMappings": {<br />
"1": "#36d475ff",<br />
"0": "#f5403bff"<br />
}<br />
</pre><br />
New configuration:<br />
<pre><br />
"colorMappings": {<br />
"true": "#36d475ff",<br />
"false": "#f5403bff"<br />
}<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is deprecated. Big data chart has allowed to process data both in Snowflake and SQL Server. Now the support for SQL Server is deprecated and the Big data chart will only support calculation in Snowflake. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). The OperationLog analysis is replaced by the [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog function]] and the Infcluencers analysis is replaced by the [[FindRootCauses_Function|FindRootCauses function]].<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [12, 14, 15, 16, 29];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
By default, Snowflake ODBC driver generates quite much logging to files which might unnecessarily fill up the disk space. It's recommended to set the LogLevel parameter to value 0. The path where the logs are created can be seen in Windows registry (key LogPath). More information about configuring Snowflake ODBC parameters: https://docs.snowflake.com/en/developer-guide/odbc/odbc-parameters.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07971: Machine learning based [[Clustering_Analysis|Clustering analysis]] can be run in Snowflake.<br />
* B-07989: In dashboard designer the stacking order of charts can be changed with buttons [[QPR_ProcessAnalyzer_Dashboard_Designer#Viewing_and_Editing_Dashboards|Bring to front, Send to back, Bring forward and Send backward]].<br />
* B-07977: For [[Sankey_Chart|sankey diagram]], added Start level and End level mappings to define custom start and end level for the sankey flows. Implemented also color mappings to define specific colors for specific values.<br />
* B-08010: To improve performance, charts are loaded and updated only when they are visible in the dashboard.<br />
* B-07975: Added following [[SQL_Expressions#Date_functions|date related functions]] to Snowflake: DayOfYear, DayOfWeek, WeekOfYear, Quarter.<br />
* B-07908: When [[QPR_ProcessAnalyzer_Project_Workspace#Duplicating_Model|model is duplicated]], also filters in the model are also duplicated.<br />
* B-07904: Filters and models API for expression language has been completed.<br />
* B-07991: In [[Filter_Selectors|case and event type filter selectors]], threshold whether the dropdown list or search dialog is shown can be defined using the ''Maximum Rows'' setting. Also the search dialog filters search results by other filter rules in the dashboard.<br />
* B-07999: Filters report has been changed to use the [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|expression language API for filters]].<br />
* B-07540: Added [[QPR_ProcessAnalyzer_Expressions#Throwing_objects|throw statement]] to expression language.<br />
* B-07813: UI components are updated. There are small visual improvements, such as in flowchart flows are routed a bit differently and in charts the hidden series is shown as strike-through in the legend.<br />
* B-07963: Following legacy analysis types have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29) (see more information in the note above).<br />
<br />
'''Fixed issues:'''<br />
* D-13777: Filters could not be created in charts when "Update Filter During Selection" setting was disabled.<br />
* D-13767: Automation per Event Types preset in in-memory incorrectly showed only one event type.<br />
* D-13756: Changing background color in KPI card didn't have any effect.<br />
* D-13812: "Exclude events" was incorrectly translated to "Exclure les cas" in French.<br />
* D-13815: Dashboard designer background grid was not visible in entire area in edit mode. Improved also the grid to match to snapping in move and resize.<br />
* D-13674: Business calendar dialog layout was incorrect when a model with a long name was selected to copy holidays.<br />
* D-13811: Table actions link to a new window didn't go to dashboard if there were other parameters in the link.<br />
* D-13601: Fixed issue where some presets may have given error when attribute value selection and the automatically selected attribute conflicted by the data type.<br />
* D-13753: While Snowflake model was selected, in Filters and User Rights reports the Columns list could not be opened.<br />
* D-13720: Now table column filter and sorting are preserved when resizing or zooming page.<br />
* D-13785: In tables increased number of rows to 20000 that are inspected to get available items shown in Excel-style column filter.<br />
* D-13759: Some statistical calculations had bad performance with large number of rows.<br />
* D-13787: Conformance statistics component didn't have scrollbars when text didn't fit to the visible area.<br />
* D-13788: In-memory "Nonconformance reason" selection caused error when two of them was selected in the same chart.<br />
* D-13783: When Analyzed objects was Generic analysis, column selection incorrectly caused "Analysis has not been selected" error.<br />
* D-13776: When measure name contained quotation mark, notification preview didn't work.<br />
* D-13747: Filtering with integer type of case id with case attribute value filter caused error in Snowflake.<br />
* D-13791: In Firefox, model selection in chart settings didn't show models in the first open.<br />
* D-11984: Recycle bin buttons didn't fit to the screen when screen width was small.<br />
* D-13780: Using CaseId case attribute in clustering analysis did not work with Snowflake 106 cases standard model.<br />
* D-13781: Clustering analysis produced Python error with a certain simple Snowflake model.<br />
* D-13730: Snowflake: Case attribute filtering didn't work when there are cases without row in cases table.<br />
* D-13803: There was chart configuration validation error in browser console when measures were moved into dimensions in Big data chart.<br />
* D-13758: There was performance issue with the Recent tasks system preset.<br />
* D-13793: Snowflake clustering failed when cluster count is larger than case count.<br />
* D-13763: SQL expression based filter rule with Where function to filter events didn't filter anything in Snowflake.<br />
* D-13804: Added missing Millisecond function to Snowflake.<br />
* D-13772: Expression EventLog.Cases.Events caused error "Value cannot be null".<br />
* D-13755: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13739: When switching between System reports there was error: "Uncaught Error: 2nd dimension not found. at y.getExpressionConfiguration".<br />
* D-12109: Sometimes flowcharts showed message "Error in querying event type measures. Input string was not in a correct format".<br />
* D-12473: Cost Savings by Automation preset gave sometimes error "Unable to cast object of type 'System.Double' to type 'System.String'".<br />
* D-13750: Snowflake model didn't work with the Case Duration vs. Manual Activities preset.<br />
* D-13657: There was error converting data type nvarchar to bigint.<br />
* D-13796: Some Snowflake operations didn't work with zero rows and columns.<br />
* D-12494: Now when chart size changes, the table column filters and sorting are preserved.<br />
* D-13736: In Performance benchmarking dialog, the Export result button exported wrong benchmark performance analysis result.<br />
* D-13609: Improved conformance analysis related filter names.<br />
* D-13594: Recycle bin buttons were not visible when opening recycle bin in a narrow screen.<br />
* D-13226: Tooltips in the model properties dialog are now translated.<br />
* D-12569: Table incorrectly showed ellipsis for narrow boolean type of columns showing checkboxes.<br />
* D-13391: Emptying date or datetime picker value was not registered and it didn't trigger functionality.<br />
* D-12621: Value search dialog didn't work with values containing backslashes.<br />
* D-13796: Some Snowflake operation didn't work with zero rows/columns.<br />
<br />
== QPR ProcessAnalyzer 2023.4 (build 2628) (released 2023-06-14) ==<br />
<br />
'''Features:'''<br />
* B-07767: Added [[Gantt_Chart|Gantt chart]] to visualize timeline of cases and events divided into swimlanes.<br />
* B-06383: Added [[Sankey_Chart|Sankey chart]] to visualize flow from one set of values to another.<br />
* B-07941: Implemented many more presets running in Snowflake models for compliance and operational excellence use cases. There are also presets for the path analysis and process bottlenecks identification.<br />
* B-07864: Snowflake conformance analysis shows now [[Conformance_Analysis#Top_Deviations_(in-memory)_/_Deviating_Flows_(Snowflake)|reasons for conformance deviations]], such as which event occurrences deviated from the design model.<br />
* B-07909: Snowflake conformance analysis visualizes [[Conformance_Analysis#Undesired_Events_(Snowflake)|undesired event types]] in table and flowchart.<br />
* B-07823: Flowchart Bottlenecks preset has been changed to show bottlenecks for event types. Also renewed the [[QPR_ProcessAnalyzer_Logs#Task_Log|Tasks reports]] to use expression language based interface.<br />
* B-07891: User interface has been [[Languages_and_Localization|translated into Portuguese]].<br />
* B-07873: Improved [[QPR_ProcessAnalyzer_Pivot_Table|pivot table]] visual layout to highlight totals and aggregated rows. Also the row titles are now visible in the top left.<br />
* B-07905: Added [[SQL_Expressions#Rank_functions|Rank related functions]] to Snowflake for writing more versatile custom KPI's, e.g., FirstValue, LastValue, NthValue, Lead and Lag.<br />
* B-07912: Added more SQL expression [[SQL_Expressions#Array_functions|array functions ArrayToString and ArrayOverlap]] to Snowflake.<br />
* B-06449: Added SQL expression functions ToTimestamp and TryToTimestamp for parsing timestamps from strings using provided format.<br />
* B-07959: Added new functions Base64Encode and Base64Decode to help using basic HTTP authentication when calling web services.<br />
* B-07206: SQL expressions support data [[SqlDataFrame_in_Expression_Language#WithClusterColumn|clustering]] which is an unsupervised machine learning algorithm to group data based on similarities.<br />
* B-07848: Data can be extracted from SAP using the encrypted [[Importing_Data_from_SAP#SNC_encrypted_connection|SNC connection]].<br />
* B-07903: Added expression language API to create and modify filters and models.<br />
* B-03103: [[QPR_ProcessAnalyzer_Logs#Task_Log|Task log]] (operation log) can be accessed in expression language.<br />
* B-07872: List aggregation with Distinct=true orders now items by their value.<br />
* B-07940: Removed "Count" aggregation from textual values in Big data chart (you can use the Case count, Event count, etc. selection instead).<br />
* B-07757: Backend support for datatables linking to user-definable Snowflake database, schema and table.<br />
* B-07825: Improved error message when trying to use non-existing attributes in Snowflake queries.<br />
* B-03101: To expression language, added try-catch-finally statement to handle thrown exceptions.<br />
* B-07861: Removed available and total virtual memory information from User settings dialog.<br />
* B-07902: Optimized sequences of joins in Snowflake queries to improve performance.<br />
* B-07837: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13709: If image width-to-height ratio was lower than container's ratio, image was incorrectly stretched to fit the container.<br />
* D-13660: Disabling filter rules didn't work in Snowflake models.<br />
* D-13526: Passing dataframes from SQL scripts to expression scripts didn't work.<br />
* D-13661: Snowflake conformance analysis crashed when there was no access to conformance related Snowflake UDF's.<br />
* D-13693: Resolved major Snowflake conformance analysis performance issues in the BPMN model handling.<br />
* D-13716: Snowflake root causes analysis incorrectly bypassed Snowflake cache.<br />
* D-13707: In SQL Scripting, the datatable analysis (number 18) didn't always copy the data table contents to the target table correctly.<br />
* D-13653: Big data flowchart Root causes preset showed incorrect legend.<br />
* D-13626: Flowchart froze when converting into big data flowchart and vice versa by modifying chart json settings.<br />
* D-13656: Root causes for attribute gave error "Failed to compare two elements in the array" in some situations.<br />
* D-11563: Pivot table had a minimum height of 300px, which caused bottom part of it to be out of view.<br />
* D-13704: In CSV file import, parsing now allows spaces between column separator and text quotation mark.<br />
* D-13598: Chart gave unclear error message when events datatable was not defined.<br />
* D-13655: Improved error messages for BPMN editor and conformance statistics.<br />
* D-13528: Error message for certain erroneous SQL expressions was unclear.<br />
* D-13677: "Flow occurrences with specific case attribute value" selection didn't work for in-memory chart.<br />
* D-13663: Pivot table border line was slightly broken in the header area.<br />
* D-13608: There was incorrect alignment of items in the table paging controls.<br />
* D-13703: Importing CSV file with some special characters to Snowflake failed (due to incorrect escaping in Snowflake staging files).<br />
* D-13708: Duplicating datatable using user defined table, removed data the source table.<br />
* D-13717: Dependency wheel crashed when there were zero weights and showing data labels.<br />
* D-13348: There was an unclear error message when Snowflake query had a certain incorrect expression.<br />
* D-13732: Pivot table Excel export contained headers formatted incorrectly.<br />
* D-13729: There was a JavaScript error when limited user tried to access business calendar.<br />
* D-13662: Percentile function didn't always work with timespan types.<br />
* D-13646: Using incorrectly configured model without cases datatable caused null reference error.<br />
* D-13629: When tried to use chart with a non-existing model, there is now a proper translated error message.<br />
<br />
== QPR ProcessAnalyzer 2023.3 (build 1990) (released 2023-05-03) ==<br />
<br />
'''Features:'''<br />
* B-07818: [[Conformance_Analysis|Conformance analysis]] is supported in Snowflake with following dashboard components: Big data chart, BPMN editor, Conformance statistics, and Design model selector.<br />
* B-07833: [[Root_Causes#Root_causes_in_flowchart|Root causes analysis for flowchart]] is available for Snowflake showing how the event and flow occurrences explain selected phenomena.<br />
* B-07786: Big data chart has more [[Big_Data_Chart#Measure_aggregations|measure aggregations]], such as median, percentile, standard deviation and variance. Also for textual items, unique values can be listed.<br />
* B-07795: [[QPR_ProcessAnalyzer_Table#Conditional_formatting|Conditional formatting]] supports also columns with non-numerical contents.<br />
* B-07830: [[Big_Data_Chart#Measure_aggregations|None and Any aggregations]] for Snowflake and user-friendly formatting for conformance violations.<br />
* B-06527: Error messages in [[Importing_Data_to_Datatable_from_CSV_File|CSV file import]] show also the column number to help working with CSV files with lot of columns.<br />
* B-07747: In-memory conformance checking accepts design models with multiple tasks having same name (same is followed by the Snowflake implementation).<br />
* B-07659: In-memory flowchart preset Case Conformance to visualize conformance checking violations.<br />
* B-07571: Added function IsConformant to backend to check whether cases are conformant.<br />
* B-07863: Added function ConformanceViolationsFlows to backend to return nonconformance reasons for violating cases.<br />
* B-07844: Support for "array" aggregation to return aggregated items as array.<br />
* B-07856: Support for creating and accessing arrays and objects in SQL expressions.<br />
* B-07860: Array handling functions and Tasks property for DesignModel entity.<br />
* B-07847: Added throttling for QPR ScriptLauncher client-side imports to limit memory usage.<br />
* B-07811: Snowflake query optimization to omit columns that are not used by the query.<br />
<br />
'''Fixed issues:'''<br />
* D-13632: Going from variations to event types led to very poor performance with certain models.<br />
* D-13628: Statistical calculations were incorrectly not applied in chart CSV export.<br />
* D-13575: SQL script may have given error "Operand type clash: nvarchar(max) was incompatible with sql_variant".<br />
* D-13597: UI supports now datatable column type "ShortString" (previously datatable contents preview and CSV import didn't work).<br />
* D-13536: Using business calendar sometimes gave error "System.InvalidOperationException: Collection was modified".<br />
* D-13477: Chart types without y-axis mapping caused an error when series mapping was used.<br />
* D-13453: _model variable was not available for Snowflake expression filter rules.<br />
* D-13527: Checkbox height didn't increase when long label needed to span to multiple lines.<br />
* D-13363: Snowflake query with EvaluateAfterAggregations and IsHidden failed when dimensioning by case id column.<br />
* D-13383: Snowflake query gave error "Invalid column name 'FromCase Name'".<br />
* D-13523: Request id was incorrectly shown as zeros in error messages.<br />
* D-13541: In CSV import, error message for maximum number of columns exceeded is improved (maximum is 300 column for SQL Server).<br />
* D-13583: Objects count in header didn't work for empty Snowflake model.<br />
* D-13553: Larger pacm files can now be imported, as there isn't error "Request body too large. The max request body size is 30000000 bytes".<br />
* D-13306: Stack overflow error was given when using SqlDataFrames.<br />
* D-13487: When Flows root and there was filter in Values expression, some flows were lost.<br />
* D-13540: SqlDataFrame query with 300 columns failed to error "WithExpressionColumn: No name given for the new column".<br />
* D-13429: Ordering in List aggregation couldn't find columns in dataframe query.<br />
* D-13406: Dataframe query with root FlowOccurrences and get value from cases caused error.<br />
* D-13538: There was incorrect handling of escaping characters in column names used in dimensions.<br />
* D-13633: Fixed ordering in List aggregation with null and empty values.<br />
* D-13636: Query that dimensions by numeric case attribute with AggregateOthers true, caused error.<br />
* D-13589: Creating Snowflake datatable did not connect to Snowflake.<br />
* D-13623: Value expressions without aggregation didn't work with AggregateOthers setting.<br />
* D-13554: In in-memory chart, percentile function might have return both Int64 and Double type of objects which cannot be sorted.<br />
* D-13481: Improved error message when trying to use deleted model.<br />
* D-13621: Dynamic value search dialog had incorrect font in lists.<br />
* D-13610: Some invalid BPMN files crashed BPMN editor.<br />
* D-13614: Checkbox label texts overflowed to right.<br />
* D-13520: Removed excessive parameters from the Query Designer for generic context queries.<br />
* D-12998: QPR icon was incorrectly positioned in header in Safari.<br />
* D-13480: Import to duration data type is removed from Snowflake datatables, and for local datatables duration type maximum size is checked.<br />
* D-13517: In Highcharts-based visualizationsm conditional formatting didn't work for other than the first y-axis mapping.<br />
* D-13529: In some presets containing several on-screen settings, when chart showed in error message, on-screen settings showed invalid selection.<br />
* D-13530: Opening dropdown list caused JavaScript error when the list contents should be empty after it previously contained items.<br />
* D-13486: Removed unreachable error message in CSV import.<br />
* D-13524: Fixed in-memory chart flow occurrences root measures "Event attribute (text)" and "Event attribute (number)" that caused error.<br />
<br />
== QPR ProcessAnalyzer 2023.2 (build 1478) (released 2023-03-22) ==<br />
<br />
'''Features:'''<br />
* B-07755: [[Business_Calendar|Business calendar]] for duration calculation is available for Snowflake models.<br />
* B-07719: In Snowflake dashboards, [[Big_Data_Chart#Using_measure_variables|measures can be assigned to variables]] and use the variables in other measures to create combined measures.<br />
* B-07746: Changed in-memory conformance checking to not show invalid flow violations where starting or ending event type is invalid.<br />
* B-07743: [[PA_Configuration_database_table#General_Settings|Default datasource]] can be configured for datatables created by scripts, allowing to set Snowflake as default.<br />
* B-07740: System memory indicator moved from the header to User settings Version information dialog.<br />
* B-07776: New SQL expressions functions Unicode, Char and Regexp, as a basis for future rule-based process mining.<br />
* B-07741: Backend support for aggregation operations Median, Percentile, Stdev, Stdevp, Var and Varp to Snowflake.<br />
* B-07742: Backend support for aggregation operation to list unique items in Snowflake.<br />
* B-07770: Optimized Snowflake SQL generation by combining consecutive WithColumn function calls into one select.<br />
<br />
'''Fixed issues:'''<br />
* D-13491: QPR ProcessAnalyzer server crashed now and then when sorting was in progress and the query was cancelled.<br />
* D-13380: Dimensioning integers in in-memory core calculation didn't work correctly as 0 and -1 were put to same bucket.<br />
* D-13385: In Workspace Bin, Delete Forever and Restore from Bin buttons were misaligned.<br />
* D-13332: Conformance checking didn't show in violations when there were multiple undesired events in same case.<br />
* D-13405: Images take now always all available space in image component area.<br />
* D-13417: KPI card without title was slightly misaligned vertically.<br />
* D-13438: Clicking selected event type or flow in flowchart didn't cancel the filter selection.<br />
* D-13350: Task log and Script log default filter end date is now empty by default.<br />
* D-13381: Disabled browser auto-complete from flowchart variation stepper and Workspace create/rename object dialog.<br />
* D-13347: Improved performance for in-memory business calendar calculation.<br />
* D-13335: In in-memory chart, filtering didn't work in "Flow occurrences" root "Flow occurrences with specific event attribute value" dimension.<br />
* D-13367: Percentage value wasn't displayed properly with German or Spanish language when event types were shown in object counts indicator.<br />
* D-13451: Exported filter file is now named based on selected filter name.<br />
* D-13378: In Big data chart, prevented error "Unable to aggregate from level RootCauses to level Custom".<br />
* D-13293: DataFrame query with root Flows and IncludeEvents and ExcludeEvents filter rules failed.<br />
* D-13370: Fixed issue where on-screen settings that didn't have any selectable items, showed a strange selection.<br />
* D-13392: Clustering analysis was incorrectly shown when originally in-memory chart was converted into big data chart by changing chart json settings.<br />
* D-12784: Some Snowflake queries incorrectly bypassed Snowflake caching because they used unique object names.<br />
* D-13456: Improved error messages for incorrectly configured on-screen settings.<br />
* D-13445: Conformance violations related translated terms have been fine-tuned for better translations into different languages.<br />
* D-13421: Improved error messages when trying to use model having some column mappings missing.<br />
* D-13485: Snowflake business calendar gave error when calendar contained Sunday.<br />
* D-13218: Windows event viewer incorrectly contained log entries that are not errors.<br />
* D-12634: Multiline text boxes width is set to non-changeable.<br />
* D-13034: Confirmation dialog to delete items permanently has been updated.<br />
* D-13288: In dialogs, the Create button didn't show the disabled state correctly.<br />
* D-13427: When dropdown lists didn't have any selectable items, the "N/A" text appeared and the list incorrectly took more space vertically.<br />
* D-13483: In Workspace, the new items menu was too narrow for Spanish texts.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.1 (build 1449) (released 2023-02-24) ==<br />
<br />
'''Features:'''<br />
* B-07690: System setting [[PA_Configuration_database_table#General_Settings|DatabaseId]] can be defined by administrator to get more simple table names in Snowflake.<br />
* B-07737: In flowchart Bottlenecks preset, originally used flow colors has been recovered.<br />
* B-07748: For Analyzed objects "Conformance checking findings" in charts, terminology has been revised and issue with the case count calculation fixed.<br />
* B-07663: In [[Chart_On-screen_Settings|on-screen settings]], when case/event attribute is selected, related attribute values list are reset.<br />
* B-07570: Backend support for [[Business_Calendar|business calendars]] in Snowflake.<br />
* B-07660: Backend support for conformance checking to show also the last event index and event type in NotCompleted reason.<br />
* B-07610: Memory counter related technical properties have been removed from expression language.<br />
<br />
'''Fixed issues:'''<br />
* D-13349: Opening dashboard containing Root causes preset with default settings jammed the system by generating lot of calculations (for more information, see previous release notes).<br />
* D-13277: Stacked charts with date type of data as series did incorrectly show gaps in columns/bars.<br />
* D-13270: Flowchart conditional formatting didn't work with duration multi-unit format.<br />
* D-13358: Calculation results caching works also across different user sessions.<br />
* D-13250: Dashboard with two charts connected with linked settings using variables ended up to to a never ending loop.<br />
* D-13230: SAP import did not automatically create columns to use the correct column types.<br />
* D-12857: Deeply recursive functions caused a crash without any trace.<br />
* D-12994: In Workspace, some buttons were not clickable due to breadcrumb covering them.<br />
* D-13249: In Workspace, there was incorrect error message for duplicate datatable names when there were items with only letter capitalization was different.<br />
* D-13232: In-memory chart Top variations preset is now sorted secondarily by average duration descending.<br />
* D-13300: Setting DashboardFilter variable to empty value didn't have any effect in dashboard but old value was incorrectly used.<br />
* D-12834: Limited the maximum number of dimensions to 20, to avoid too demanding queries for SQL Server.<br />
* D-12917: Changed visual indication of missing items in dropdown lists (it's no longer showing "***").<br />
* D-13111: In Root causes preset, there is now error message when trying to use weighting related columns when weighting isn't in use.<br />
* D-13124: SQLDataFrame query containing filter rule EventTypes aggregating from cases failed.<br />
* D-13207: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed.<br />
* D-13292: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed (rev.2).<br />
* D-12991: Dropdown list texts had some translations missing.<br />
<br />
== QPR ProcessAnalyzer 2023.1 (build 1433) (released 2023-02-07) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release contains a potentially severe issue, where some dashboards completely jam the system by generating lot of calculations. The issue may appear in dashboards that have been created in earlier releases and containing the Root causes preset with default settings. The issue will be fixed by the next release. The issue can be worked around by exporting the affected dashboard, modifying the dashboard file manually and importing the dashboard back. The required modification is to remove line(s) containing <pre>"preset": "RootCauses"</pre> and the comma from the preceding line.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Cases (analysis number: 5), Events (6), and EventTypes (7). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). Note that the legacy analyses removal don't affect the dashboarding functionality.<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [5, 6, 7];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2023.1, the '''.NET Desktop Runtime''' is not needed anymore for QPR ProcessAnalyzer Server, so it can be uninstalled. Also for QPR ScriptLauncher, ''.NET Desktop Runtime'' is not needed, but instead install the '''.NET Runtime''' (which is more lightweight). ''.NET Desktop Runtime'' contains the ''.NET Runtime'', so the actions are not mandatory when updating to QPR ProcessAnalyzer 2023.1.<br />
</div><br />
<br />
'''Features:'''<br />
* B-06997: Expression-based filter rules for Snowflake dashboards to allow versatile filtering and filtering from custom expressions.<br />
* B-07383: Improvements to linked settings to allow binding to variables, tags and filter rules [[Chart_Linked_Settings|(more information)]].<br />
* B-07508: Flowchart preset colors have been renewed to be more intuitive.<br />
* B-07184: Automation preset in flowchart has now options for selecting the Automation attribute and value.<br />
* B-07512: Changed datatable metadata can be refreshed from Snowflake, and all rows in the datatable can be deleted easily in Workspace [[QPR_ProcessAnalyzer_Project_Workspace#Datatables|(more information)]].<br />
* B-07440: Date when the release was made is now shown in User settings.<br />
* B-07595: WeekOfYear property for DateTime objects in expression language to get the week number of a year (between 1 and 53).<br />
* B-07623: In-memory expression language functions Random (to get random numbers) and Hash (to get hash value of string).<br />
* B-07612: Breadcrumb in Workspace has now a Home button to quickly navigate to the top level of the projects hierarchy.<br />
* B-07637: Language selector now shows the language options in local languages.<br />
* B-07228: Remove following deprecated analyses: Cases, Events, and EventTypes (see the release note above).<br />
* B-07538: Backend support: Snowflake root causes analysis can find event attribute related root causes.<br />
* B-07706: Backend support: Snowflake expression-based filter rules support for roots containing Where function.<br />
* B-07611: Removed following legacy filter rules: CaseAttributeTrend, EventAttributeTrend, EventTypeTrend, and Duration.<br />
* B-07598: Refactored client-side import for SQL scripting to use generic client-side task mechanism.<br />
* B-07716: ShortString columns are now properly detected in SQL Server queries.<br />
* B-07652: Now it's possible to pipe multiline expression strings to QPR ScriptLauncher.<br />
* B-07688: AddColumns function for Datatables to create multiple columns in one call.<br />
<br />
'''Fixed issues:'''<br />
* D-13092: Table conditional formatting didn't work when color code was fetched from other column.<br />
* D-13105: Some charts created in earlier release referring to non-existing presets names appeared as empty after software update.<br />
* D-13107: Flowcharts crashed and showed loading animation forever when setting color or flow thickness to non-numerical measure.<br />
* D-13104: In BPMN model editor, context menus to edit elements didn't appear.<br />
* D-12939: Script editor tabs Close buttons didn't work.<br />
* D-13154: "Search by case ID" didn't work in in-memory chart.<br />
* D-12933: CSV columns with only empty values were incorrectly auto-detected as integers.<br />
* D-12929: In-memory chart Root causes for case duration and Root causes for case attributes (weighted) had Custom expression missing.<br />
* D-12928: Pivot table headers were empty when there were two column levels and two values.<br />
* D-12924: Pivot table columns with Count and Distinct Count aggregations are now numeric and aligned right.<br />
* D-13033: Changing colors in chart settings Color palette caused "Item already exists" error and prevented changing colors.<br />
* D-12996: Tags referring to dashboard variables didn't work in Additional root expression.<br />
* D-12877: UI gave error in some situations: Uncaught TypeError: Cannot read properties of undefined (reading 'min').<br />
* D-13071: Prevented selecting two or more of the Y-axis, X-axis and series mappings at the same time for the same measure or dimension.<br />
* D-12895: Big data chart crashed when on-screen setting contained event type selector and there were no event type filter set.<br />
* D-13231: Tooltips for dashboard name, model selector and filter selector in header show now the content text instead of generic instruction.<br />
* D-13139: There was an error when tried to create filter for a custom expression where selected data type didn't match with the actual type of data.<br />
* D-12988: Chart presets selection in chart settings showed unnecessary tooltip.<br />
* D-12901: When set sampling over 1 million, Snowflake models gave error: parameter value out of range: size of fixed sample. Must be between 0 and 1,000,000.<br />
* D-12904: Creating expression filter having lower/greater logic with root objects sampling failed.<br />
* D-12923: Chart schema didn't accept pivotAggregation in dimensions/columns.<br />
* D-12926: Root causes columns Selected weight, Compared weight and Total weight have now correct float data type.<br />
* D-12880: In out-of-the box dashboards, chart titles and subtitles were not translated.<br />
* D-12916: Improved filter rule description text in Filter rule editor dialog for expression filter rules.<br />
* D-12889: No clear error message was given when user tried to export corrupted model from .pacm file.<br />
* D-12869: Date selector in on-screen settings had inconsistent vertical alignment.<br />
* D-12938: When creating a filter with lasso and selecting a single data point only, "equals" kind of filter rule is now created.<br />
* D-12989: "Running tasks as specific time" system report may have ended up in loop causing following error: Maximum call stack size exceeded error.<br />
* D-13010: Pivot table sometimes ended up to never-ending resizing loop when browser zoom was more than 100%.<br />
* D-12790: Expression language: DataFrame.SetColumns: Initializing and using variables defined in closure of SetColumns function parameter didn't work<br />
* D-12927: All on-screen settings were not be visible in narrow charts having several on-screen settings.<br />
* D-12937: Added maximum value limitation to several number input fields in charts.<br />
* D-12947: Message dialog didn't show line breaks correctly (e.g., in CSV file import).<br />
* D-12948: Defining column setting caused error when Measure Expression was not defined.<br />
* D-12946: Filter rule text couldn't be seen entirely from tooltip.<br />
* D-12983: When range filtering using integer values in Highcharts chart, filter is now shown as integer value.<br />
* D-12984: When range filtering in Highcharts charts and there is category axis, filter rule is now based on individual (category) values.<br />
* D-12930: When creating filters from charts using date type of X-axis with lasso, "greater than or equal" and "less than or equal" filter rules are not created.<br />
* D-12920: "Where" function in DataFrame lost column data types of the original DataFrame.<br />
* D-13048: Model notifications failed with certain measures that define variables in root expression leading to error: Variable "sampleSize" already exists in this context.<br />
* D-13116: BPMN editor had some translations missing.<br />
* D-13019: Datatable and script selectors show now datatable/script name instead of id, when opening selector having existing selections.<br />
* D-12951: Changing additional root expression in flowchart didn't refresh the flowchart.<br />
* D-13147: Filter rule boxes in header had different widths, and Add filter rule button vertical alignment was incorrect.<br />
* D-12907: Sometimes case attribute selection showed incorrect attribute name for empty model.<br />
* D-13148: Filters and Datatables system reports loaded unnecessarily twice which could be seen as blinking.<br />
* D-12844: In dataframe query, FlowOccurrences in root and GetValueFrom Cases with filter gave null reference exception<br />
* D-12915: Repeating certain query twice with aggregations in Events root generated invalid SQL<br />
* D-12728: Was huge amount logs in server during client side import (manual testing required as identification)<br />
* D-13156: Persist function failed to snowflake: Invalid unicode escape sequence '\u0027ACCE'; should be at most '\u0010FFFF'.<br />
* D-12876: Flows/FlowOccurrences in root didn't work with SqlExpressionValue filtering.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2022.8 (build 1397) (released 2023-01-11) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release fixes an issue where extracting large datasets from SAP increases memory consumption considerably and may lead to out-of-memory error. This release contains packages for both QPR ScriptLauncher and QPR ProcessAnalyzer Server. If SAP extractions are done using QPR ScriptLauncher in client side mode (ExecuteInClientSide=1), it's enough to update QPR ScriptLauncher to fix this issue.<br />
</div><br />
<br />
'''Fixed issues:'''<br />
* D-12941: Extracting data from SAP consumed unnecessary lot of memory and may have led to out-of-memory error (both when running using QPR ScriptLauncher and in server side).<br />
<br />
== QPR ProcessAnalyzer 2022.8 (build 1396) (released 2022-12-30) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Creating datatables with duplicate names in the same project is prevented, and possible existing duplicate names are automatically changed to unique names with a random suffix. If there are duplicate names, they can be renamed either before updating QPR ProcessAnalyzer (to avoid automatic renaming) or after the update (by changing suffixed names). If the renamed datatables are used by models, the linkage will break because it's based on the datatable name. Creating duplicate datatables has already been prevented in the UI, but the improved method works also in the API level.<br />
<br />
Following SQL query can be used to list datatables (and project id) having duplicate names:<br />
SELECT ITA_NAME, ITA_PROJECT_ID<br />
FROM PA_INTEGRATION_TABLE<br />
GROUP BY ITA_NAME, ITA_PROJECT_ID<br />
HAVING Count(*) > 1<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
If trying to use business calendar for a model that doesn't have the business calendar defined, there will now be an error message instead of showing the chart. Either unselect the business calendar checkbox for the measure or dimension, or define a business calendar to the model. In this situation in earlier releases the business calendar was ignored and full time calculation used.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07498: Automation and Operational Excellence presets and Root causes analysis (for Snowflake), Weighted root causes analysis and Event scattering preset (for Snowflake and in-memory), Root causes for case duration (in-memory).<br />
* B-07177: Flexible mappings, user selectable aggregations and conditional formatting for Pivot table, and flexible mappings for KPI Card.<br />
* B-07518: New function named Query to run call /api/expression/query.<br />
* B-07294: In Workspace, the left side projects hierarchy can be collapsed and expanded to make more space to project contents.<br />
* B-06814: In SQL expressions, new function DurationBetweenDates to calculate duration between timestamps precisely.<br />
* B-07519: Replaced DateDiff function with the new DurationBetweenDates function in big data chart.<br />
* B-07531: In SQL expressions, new mathematical functions Abs, Log, Mod, Power, Rand, Sign and Sqrt.<br />
* B-07297: To optimize performance, Snowflake queries are automatically cancelled if they are not needed by UI.<br />
* B-07569: To optimize performance, TakeSample function implementation is improved for Snowflake.<br />
* B-07198: Several performance improvements to DataFrame queries (used in Snowflake).<br />
* B-07464: Added Lead and Lag functions to SqlDataFrames to support getting previous and next event.<br />
* B-07470: New ExtractSap function to fetch data from SAP using expression language.<br />
* B-07536: New Pivot function to SqlDataFrames to enable root causes analysis.<br />
* B-07488: Primary keys can be set to datatables to improve calculation performance (UI will follow later).<br />
* B-07515: Added RootCauseAnalysis function to SqlDataFrames.<br />
* B-07546: RootCauseAnalysis function support for complex weighting expressions.<br />
* B-03052: Support for user-defined variables in /api/expression/query.<br />
* B-07565: Support for NumberPrecision, DatetimeTruncation and TimespanPrecision properties for Values section in in-memory query.<br />
* B-07513: For product activation file handling, replaced mutex based implementation with exclusive file lock.<br />
* B-07480: Expression language support for DataFlows for data extraction.<br />
* B-07613: Removed support for SQL Server based R scripting.<br />
* B-07567: Take datatable primary keys into use in expression builder to improve performance (part 2).<br />
* B-07588: Remove total memory information from log writing and DateDiff function for in-memory.<br />
<br />
'''Fixed issues:'''<br />
* D-12715: Snowflake calculated imprecisely some operations containing division and aggregation.<br />
* D-12761: Progress bar of the CSV import dialog didn't show any progress.<br />
* D-12799: Opening datatable contents dialog settings was slow when there were lot of rows in the datatable.<br />
* D-12089: Include conforming/nonconforming cases made BPMN editor no responding.<br />
* D-12496: Datagrid filter search keyword didn't work for rounded values, so the search was hidden for other than textual data.<br />
* D-12704: Durations as quarters was calculated incorrectly in charts.<br />
* D-12662: Fixed issue where some special literals in custom expressions didn't work.<br />
* D-12403: Setting Notifications on a model had some visual issues.<br />
* D-12859: Dependency wheel visualization crashed with nulls values in From and To mappings.<br />
* D-12660: Removed unnecessary float conversions in SQL expressions.<br />
* D-12653: In-memory datafram OrderByColumns function with mixed values failed.<br />
* D-12657: When trying to use milliseconds period in some presets, frontend frozed.<br />
* D-12706: Line breaks in data were shown in many places where it's undesired.<br />
* D-12719: Syncfusion dialog headers showed backslaces incorrectly.<br />
* D-12372: Refused to run the JavaScript URL because it violated the Content Security Policy directive.<br />
* D-12730: Logging out when filter selection is in progress, gave javascript error.<br />
* D-12705: Header object counts tooltip was sometimes messed after logout.<br />
* D-12384: Selected project was not highlighted for whole project name string.<br />
* D-12581: Prevented creating duplicate datatable names in same project in parallel execution.<br />
* D-12722: There was incorrect syntax near '<' when running SqlDataFrame expressions.<br />
* D-12736: Swedish and Finnish translation improvements for object counter tooltips.<br />
* D-12702: For BPMN Editor component "Something went wrong" error was given when switching from in-memory to Snowflake model.<br />
* D-12712: UI gave error: TypeError: Cannot read properties of undefined (reading 'id').<br />
* D-12738: Business calendar showed total business time when calendar configuration was invalid.<br />
* D-12776: Special character filter caused JavaScript SyntaxError.<br />
* D-12785: Unnecessary vertical scrollbar displayed for main header toolbar.<br />
* D-12164: There was unnecessary UnauthorizedAccess errors in logs.<br />
* D-12580: Case duration was not same when comparing Big data chart with in-memory chart for same data.<br />
* D-12768: Data grid links and variable change actions didn't work when grouping was used.<br />
* D-12735: FindRootCauses (in-memory) function filtered out cases with zero contribution.<br />
* D-12763: --#CallWebService didn't work from ScriptLauncher.<br />
* D-12789: There was timeout in SQL queries to scripting sandbox.<br />
<br />
== QPR ProcessAnalyzer 2022.7 (build 1331) (released 2022-11-15) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2022.7, to improve security expression language operations that modify data or connect to external datasources are prevented in dashboard custom expressions. The limitation is required, because when a dashboard is opened, its expressions are run with the user's permissions, and the user need to trust the expressions don't perform any unexpected operations, such as delete data. The full functionality of the expression language is available in the scripts and in the Expression Designer.<br />
<br />
The following functions and operations are prevented in dashboards: SendEmail(), CallWebService(), ImportOdbc(), ImportOdbcSecure(), Model.DeletePermanently(), Model.Restore(), Model.TriggerNotifications(), Project.DeletePermanently(), Project.Restore(), Project.CreateDatatable(), Datatable.AddColumn(), Datatable.DeletePermanently(), Datatable.Import(), Datatable.Merge(), Datatable.RemoveColumns(), Datatable.RenameColumns(), Datatable.Truncate(), RecycleBin.DeletePermanently(), and call SQL script. Calling expression scripts is allowed, but in the script all previously mentioned operations are prevented.<br />
<br />
Following SQL query can be executed in the QPR ProcessAnalyzer metadata database to reveal dashboards that potentially have prevented expressions:<br />
SELECT * FROM [PA_UI_ELEMENT] WHERE [UIE_PROPERTIES] LIKE '%SendEmail(%' OR [UIE_PROPERTIES] LIKE '%CallWebService(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbc(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbcSecure(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Restore(%' OR [UIE_PROPERTIES] LIKE '%TriggerNotifications(%' OR [UIE_PROPERTIES] LIKE '%CreateDatatable(%' OR [UIE_PROPERTIES] LIKE '%AddColumn(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Import(%' OR [UIE_PROPERTIES] LIKE '%Merge(%' OR [UIE_PROPERTIES] LIKE '%RemoveColumns(%' OR [UIE_PROPERTIES] LIKE '%RenameColumns(%'<br />
</div><br />
<br />
'''Features:'''<br />
* B-07287: Process Discovery and most important presets for Snowflake.<br />
* B-07271: "Last Row Aggregates Over-limit Rows" setting for big data chart.<br />
* B-06431: Snowflake datatables support for database views in the datasource.<br />
* B-07266: Security: "limited mode" to prevent data modifications and external calls from dashboard expressions.<br />
* B-07097: Improved flowchart root causes color scales.<br />
* B-07363: SQL LIKE function support for escape character.<br />
* B-06877: Improved variation queries performance in Snowflake, part 1.<br />
* B-07444: Improved variation queries performance in Snowflake, part 2.<br />
* B-07382: Support for empty strings and nulls in event type names in dataframe processing.<br />
* B-07273: WithRowNumberColumn, WithRankColumn, WithDenseRankColumn support for descending sorting.<br />
* B-07303: FindRootCauses function support for weighting expression.<br />
* B-07327: Unpivot function for SqlDataFrames (for root cause analysis).<br />
* B-07385: Align token lifetime with SESSION_MAXIMUM_DURATION setting.<br />
* B-07500: ColumnMappings property for IDataFrame and DataTables.<br />
* B-07499: IDataFrame.ApplyFilter function to filter events data using a JSON-based filter.<br />
* B-07469: Translation updates for release 2022.7.<br />
<br />
'''Fixed issues:'''<br />
* D-11630: Drag and drop from chart settings to main header was working incorrectly for filter and root cause rules.<br />
* D-12455: Moving a chart filter from one chart to another created a root cause analysis filter.<br />
* D-12266: Root causes analysis showed incorrect results when certain combination of filters.<br />
* D-12525: Numerical values in Excel export in data grid was formatted incorrectly.<br />
* D-12534: Restoring item from recycle bin changed project from Bin to previous project.<br />
* D-12529: Measure specific datalabel mapping did not work correctly when also mapped to Y-axis.<br />
* D-12532: Multi-selection options caused layout issue for Chart setting.<br />
* D-12541: Layout issue for Polish in multiselect list search dialog.<br />
* D-11277: Increase/decrease Icons were missing in the dimension sorting for Mac.<br />
* D-12552: Uncaught Error: Diagram.selectCollection given something that is not a Part: null.<br />
* D-12567: Tooltip incorrectly showed for label component containing only spaces.<br />
* D-12438: Operation was cancelled because it was replaced by a new operation.<br />
* D-12551: Some expressions didn't work as calculated case/event attributes.<br />
* D-11720: Chart buttons were not visible in Apple Safari and iPad.<br />
* D-12544: On-screen settings "options" parameter did not work.<br />
* D-12528: Multi-unit time unit selection appeared where it's not applicable.<br />
* D-12583: Error message should be provided for invalid settings input than just display JS errors.<br />
* D-12599: Tooltips didn't show correct measures/dimensions when "Show in tooltip" mappings are used.<br />
* D-12561: Chart settings content was incorrectly drawn outside of the chart dialog.<br />
* D-12568: Reload UI sometimes crashed chart having multiselect on-screen settings.<br />
* D-12572: Main header toolbar lost when refresh maximized PA chart.<br />
* D-12612: Drop Unused Filters After setting incorrectly allowed zero seconds.<br />
* D-12533: Error message keeped blinking in Analysis view.<br />
* D-12608: User could not select or add new case attribute when current select attribute doesn't exist.<br />
* D-12451: Prevented deleting running script.<br />
* D-12516: Windows event viewer warning: Failed to gracefully shutdown application.<br />
* D-12523: Business calendar performance - part 2.<br />
* D-12538: Column with same name could be added multiple times to datatable using expression language.<br />
* D-12582: Improved EMS mutex code to support multiple PA service in one server.<br />
* D-12624: Synchronize new (empty) data table generated failed queries in Snowflake.<br />
* D-12622: Advanced setting page reserved room for the expression editor frame that did not exist.<br />
* D-11295: In on-screen settings, some UI controls were vertically misaligned.<br />
* D-11625: The heights of the parameter option menu in the clustering tab was not well aligned.<br />
* D-12103: Small dropdown list layout issue.<br />
* D-12633: Align issue for Column related Advanced settings.<br />
* D-12505: Search dialog didn't escape % and _ characters correctly in dataframe processing.<br />
* D-12645: Tabs in expression settings dialog were partly hidden when dialog is narrow.<br />
* D-11382: Moving of flowchart was sometimes shaky.<br />
* D-12655: Filter rule tooltips in header were styled incorrectly.<br />
* D-12656: Large integer values in filter jsons were incorrectly presented as small integers.<br />
* D-12661: Some exported filters contained unnecessary "invert" property.<br />
* D-12500: Model with numeric case id's and filtering with the attribute mapped as case id: ERROR [22018] Numeric value <nowiki>''</nowiki> is not recognized.<br />
* D-12509: Filtering null values didn't work in boolean attributes in Snowflake.<br />
* D-12571: In dataframe processing in SQL Server, dividing two integers should not make rounding to integer.<br />
* D-12610: Setting for global DropUnusedFiltersAfter was missing.<br />
* D-12613: Filtering with case/event attributes with null values didn't match in Snowflake models.<br />
* D-12617: Model didn't work when DropUnusedFiltersAfter is 00:00:00.<br />
* D-12618: If model ConfigurationJson is null, Configuration property didn't work.<br />
* D-12620: Filtering didn't work when there are backslaces in attribute names in Snowflake models.<br />
* D-12643: AttributeFunctionCallExpression did not always work properly in array context.<br />
* D-12647: SqlDataFrame with SQL Server: Comparing literals to variant column values failed.<br />
* D-12648: Models that have DropUnusedModelsAfter setting caused "The sliding expiration value must be positive" error.<br />
* D-11526: It was unable to translate Unicode character \uD83D at index 176 to specified code page.<br />
* D-12637: In application startup arised FATAL Application startup exception System.UnauthorizedAccessException: Access to the path 'Global\MutexQPRPAActivation' is denied.<br />
<br />
== Old Releases ==<br />
See older releases in [[QPR ProcessAnalyzer Release Archive]]<br />
__NOTOC__<br />
<br />
[[Category: QPR ProcessAnalyzer]]</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=Actions_to_Run_Script_in_Table&diff=24463Actions to Run Script in Table2024-02-29T23:52:36Z<p>Ollvihe: /* Example action settings */</p>
<hr />
<div><br />
== Overview==<br />
Dashboard functionality can be extended by running scripts that are started from the table's context menu. For example, the scripts can call external web services or retrieve additional information for the selected rows in the table. The scripts are run synchronously, i.e., a loading animation is shown during the entire script run and user needs to wait for the script completion. Thus, the script should preferably be designed to run quickly.<br />
<br />
When the script run is completed, the return value of the script is shown to the user in a popup dialog. If the script run fails, the error response is also shown to the user. If a script throws a user-defined exception, the thrown value is shown in the popup dialog. If the script throws other than user-defined exception, the more detailed error message is shown as popup message.<br />
<br />
The script action can be configured to be available only when a single row is selected in the table or when multiple rows are selected. Depending on the intended action, the multi-row selection may or may not be suitable.<br />
<br />
Security note: Scripts are run with user's own permissions and they are able to modify data in the system, so when running a script action, the user needs to be sure what does the script contain.<br />
<br />
== Action settings ==<br />
Chart actions can be set in the chart settings by clicking ''Chart actions'' in the ''Advanced'' tab. Actions are configured in json format (see next chapter for examples). Following action settings are available:<br />
* '''type''' (mandatory): Use the value '''RunScript''' to run a script.<br />
* '''label''' (mandatory): Text visible in the context menu item.<br />
* '''icon''': Google Material icon visible left of the context menu item.<br />
* '''projectName''': Name of the project where the script is located. If this setting is not defined, the script is searched in the project where the dashboard is located.<br />
* '''scriptName''': Name of the run script.<br />
* '''scriptId''': Id of the run script. When defined, the projectName and scriptName parameters are ignored.<br />
* '''multiselect''': Whether the script run is available when multiple rows are selected (''true'') or only when one row is selected (''false''). Default is ''true''.<br />
* '''completedMessageHeader''': Header text of the popup dialog shown when the action is successfully completed.<br />
* '''errorMessageHeader''': Header text of the popup dialog shown when the action fails.<br />
* '''parameters''': Object of additional parameters for the script. The parameters are available as a dictionary in the script.<br />
<br />
The ''type'' and ''label'' are mandatory, and either the ''scriptName'' or ''scriptId'' is mandatory depending whether to define the script by name or by id.<br />
<br />
== Passed parameters ==<br />
Following parameters are passed to the script and are available as variables in the script (see examples below how to use the variables):<br />
* '''selectedData''': Dictionary of arrays containing the selected row(s) data for each column. The data is available as following keys:<br />
** Column header labels (text visible in the table header row)<br />
** Column technical names (dimension0, dimension1, ... measure0, measures2, ...).<br />
** Column indices (0, 1, 2, ...)<br />
* '''rowIndices''': Array of selected row indices (first row is zero).<br />
* '''variables''': Dictionary containing dashboard variables.<br />
* '''action''': Dictionary containing settings of the clicked action. This is where to access the action parameters.<br />
* '''query''': Dictionary containing the query made by the chart.<br />
* '''chartSettings''': Dictionary containing the chart settings.<br />
<br />
== Example action settings ==<br />
This example configures three different kind of actions:<br />
<pre><br />
[<br />
{<br />
"type": "RunScript",<br />
"label": "Show details",<br />
"icon": "smart_toy",<br />
"scriptName": "Show row details",<br />
"multiselect": false,<br />
"parameters": {<br />
"param1": "val1",<br />
"param2": 2.3<br />
}<br />
},<br />
{<br />
"type": "RunScript",<br />
"label": "Create ticket",<br />
"icon": "functions",<br />
"projectName": "My project",<br />
"scriptName": "Create ticket to external system",<br />
"completedMessageHeader": "Ticket has been created",<br />
"errorMessageHeader": "Creating ticket failed"<br />
},<br />
{<br />
"type": "RunScript",<br />
"label": "Get data",<br />
"icon": "move",<br />
"scriptId": 1<br />
}<br />
]<br />
</pre><br />
<br />
== Example scripts ==<br />
<br />
This script reads the first two columns and sums them together. If the columns don't contain numeric data, an error is thrown:<br />
<pre><br />
let firstNumber = selectedData["0"][0];<br />
try {<br />
firstNumber = ToFloat(firstNumber);<br />
} catch (error) {<br />
throw "First column doesn't contain number";<br />
}<br />
let secondNumber = selectedData["1"][0];<br />
try {<br />
secondNumber = ToFloat(secondNumber);<br />
} catch (error) {<br />
throw "Second column doesn't contain number";<br />
}<br />
return firstNumber + secondNumber;<br />
</pre><br />
<br />
This script sums all selected rows together in the first column. If the column doesn't contain numeric data, an error is thrown:<br />
<pre><br />
let columnSum;<br />
try {<br />
columnSum = Sum(selectedData["0"].ToFloat(_));<br />
} catch (error) {<br />
throw "Selected rows column contains non-numeric data.";<br />
}<br />
return columnSum;<br />
</pre><br />
<br />
This script returns selected model name (''ModelId'' variable is used).<br />
<pre><br />
let modelId = variables.ModelId;<br />
return ModelById(modelId).Name;<br />
</pre><br />
<br />
This script calculates the number of cases in the filtered data (''ModelId'' and ''Filter'' variables are used).<br />
<pre><br />
let data = Query(#{<br />
"ProcessingMethod": "dataframe",<br />
"ContextType": "model",<br />
"ModelId": variables.ModelId,<br />
"Root": "Cases",<br />
"Filter": ParseJson(variables.Filter),<br />
"Dimensions": [],<br />
"Values": [#{<br />
"Name": "caseCount",<br />
"AggregationFunction": "count"<br />
}],<br />
}).Collect();<br />
return data[0];<br />
</pre></div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&diff=24462QPR ProcessAnalyzer Release Notes2024-02-29T09:09:23Z<p>Ollvihe: /* Next Release: QPR ProcessAnalyzer 2024.3 (planned release date 2024-04-02) */</p>
<hr />
<div>This page lists all new features and fixed issues for each QPR ProcessAnalyzer release.<br />
<br />
== Next Release: QPR ProcessAnalyzer 2024.3 (planned release date 2024-04-02) ==<br />
<br />
'''Features:'''<br />
* B-08231: Snowflake performance improved by changing object counts query in header into two queries, so that the filtered object count query uses eventlog caching.<br />
<br />
'''Fixed issues:'''<br />
<br />
* D-14048: Fixed issue where in-memory root causes analysis for case attributes didn't show attributes with ShortString data type.<br />
<br />
== Latest: Additional release for QPR ProcessAnalyzer 2024.2 (build 5509) (released 2024-02-27) ==<br />
<br />
'''Features:'''<br />
<br />
* B-06280: User management dialog shows whether users have password defined and unnecessary passwords can be removed to improve security.<br />
<br />
'''Fixed issues:'''<br />
<br />
* D-14045: Fixed issue where users with Viewer or Analyzer role couldn't create filters in Snowflake models.<br />
<br />
== QPR ProcessAnalyzer 2024.2 (build 5438) (released 2024-02-21) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue: Using Snowflake models and dashboards doesn't work with Viewer and Analyzer roles. The reason is that cache tables created to Snowflake incorrectly require the GenericWrite permission. Workaround is to give users the Designer role which will give the needed GenericWrite permission. Note that the Designer role gives many permissions to the user for the project [[Roles_and_Permissions#Roles_and_Permissions|(more information)]]. Fixed in the next release (D-14045).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
The legacy User permissions report (analysis number 11) and Filters report (analysis number 30) used in SQL scripts have been removed. Use instead the expressions language to query filters and user permissions, e.g., [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|Models.Filters]] and [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
New version of the Design diagram component has been improved with object-specific measures, and the previous common measures are not migrated into object-specific measures. Thus, the measures need to be configured again, or manually edit the chart json settings (if needed please ask instructions from QPR CustomerCare).<br />
</div><br />
<br />
'''Features:'''<br />
* B-08022: Design diagram supports now BPMN notation, elbow style flows and object-specific measures.<br />
* B-08232: Entire future eventlogs can be [[Create_Predicted_Eventlog|predicted]] based on generative AI models running in Snowflake.<br />
* B-08166: Added expression language function [[Generic_Functions_in_QPR_ProcessAnalyzer#OpenAIChatCompletion|OpenAIChatCompletion]] to answer natural language prompts based on OpenAI ChatGPT API.<br />
* B-08177: Snowflake query performance has been improved by introducing caching of filtered eventlogs using Snowflake tables.<br />
* B-08196: Conditional formatting rules can be defined for [[QPR_ProcessAnalyzer_Table#Textual_equal_rules_for_background_color|textual and boolean values]].<br />
* B-08213: Big data chart expressions event type selections to be multi-select where applicable.<br />
* B-08205: Expression language API is available for storing [[Storing_Secrets_for_Scripts|secrets]] for scripts.<br />
* B-07780: Chart [[QPR_ProcessAnalyzer_Chart#Variable_mappings|variable mappings]] has been removed - use the [[Chart_Linked_Settings|linked settings]] instead. Dashboards using variable mappings are automatically converted to use linked settings.<br />
* B-08117: Added ToSqlDataFrame function to convert in-memory dataframe into SQL dataframes.<br />
* B-08174: Only non-default parameters values are written to the operation log.<br />
* B-08200: Timestamps in System reports are shown in user workstation local time.<br />
* B-08171: Dashboard id has been added to queries, to track from which dashboard queries are originating.<br />
* B-07144: Remove legacy User permissions report (analysis number 11) and Filters report (analysis number 30) in SQL scripts (see note above).<br />
* B-08193: Added retry mechanism to QPR ScriptLauncher to recover if connection to server breaks.<br />
* B-08202: Updated copyright for year 2024.<br />
* B-08199: Frontend components have been updated.<br />
* B-08203: Backend components have been updated.<br />
* B-08209: Translations updated for release 2024.2.<br />
<br />
'''Fixed issues:'''<br />
* D-13972: Some measures/dimensions/columns in Big data chart didn't show the expressions level filtering.<br />
* D-14015: Fixed business calendar incorrect calculation when business period covered entire day.<br />
* D-14014: Fixed issue where Snowflake business calendar could not have end time as 00:00.<br />
* D-13962: System variable values were interpreted incorrectly when used in linked settings.<br />
* D-13971: HiddenInNavigation and SortOrder variables didn't work in navigation menu dashboards list.<br />
* D-13959: Removed possibility to add datatable columns with the legacy "any" data type.<br />
* D-13991: Improved drop-down selector component to handle empty strings as variable values.<br />
* D-13965: Datatable column name length was validated incorrectly which may have caused error in saving with too long column names.<br />
* D-13958: Project names showed unnecessary html escaping in the "Move to" menu.<br />
* D-13964: Model attributes and notifications dialogs gave error when trying to use dashboard tags.<br />
* D-13960: Added missing translations for list of permission list and 12-hour clock format.<br />
* D-13966: Fixed issue were root causes chart tooltip sometimes didn't disappear.<br />
* D-13969: Datatable column schema export sometimes showed empty for the key column.<br />
* D-13862: Session token was not accepted when url path capitalization is different.<br />
* D-13942: Datatable could not be dimensioned if it has column named "CaseId".<br />
* D-13980: Business calendar dialog crashed when tried to open it for a model without access.<br />
* D-13983: Notifications dialog didn't validate situation when same name was used in a measure and dimension.<br />
* D-13981: Dashboard import set incorrect model id to dashboard if there was no access to any model.<br />
* D-11276: Translations were missing for 12-hour clock dates (AM and PM) in dashboards.<br />
* D-13977: Multi-select dropdown lists showed some special characters incorrectly.<br />
* D-13945: Syncfusion toast message didn't work when text contains ${[]}.<br />
* D-13930: Pivot table throws javascript error when certain clicks.<br />
* D-13273: Duplicate datatable row count didn't shown correctly.<br />
* D-13994: There was an error in the in-memory chart with some flow related measures about duplicate variable names when same measure was defined twice.<br />
* D-13985: Models list dots menu had texts misaligned in narrow screens.<br />
* D-13995: In Workspace, wrong datatable was selected after duplication when non-default sorting was applied.<br />
* D-13997: Workspace tables column filtering search caused JavaScript errors.<br />
* D-13978: In table Excel export, the last row representing other items appeared incorrectly for in-memory chart.<br />
* D-14007: In System reports, model related selections are hidden from the Analyzed objects lists.<br />
* D-14005: In big data chart, changing to custom expression caused crash with some expressions having case/event attribute.<br />
* D-14003: When dimensioning was not used, pivot table values were incorrectly rounded in the server side.<br />
* D-14004: Removed empty filters from queries to optimize them.<br />
* D-13988: Fixed issue where data grid context menu rendered initially as too high.<br />
* D-13979: BPMN model editor element settings use now Open Sans font.<br />
* D-14013: Fixed incorrect expression "Duration between first and last occurrence" in big data chart event types.<br />
* D-13984: Fixed the error of refusing to run the JavaScript URL.<br />
* D-14031: ThrownObject property was not included to http error response when error came from the script.<br />
<br />
== QPR ProcessAnalyzer 2024.1 (build 4784) (released 2024-01-10) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue fixed in QPR ProcessAnalyzer 2024.2: In Big data chart, some measures, dimensions and columns have the filtering option missing. The issue concerns for example Duration between events, Path starting/until between specific events, and Cases where event occurs before other selections. Workaround is to set the filter in the chart json settings: the filter can be configured to another expression and copied to the correct expression.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
QPR ProcessAnalyzer Server and QPR ScriptLauncher are now using .Net 8 (previous was .Net 6). When updating to this release, install the .Net 8 Runtime ([[Updating_QPR_ProcessAnalyzer_Server|see more]]). The .Net 6 doesn't need to be uninstalled immediately because .Net 6 and .Net 8 work side-by-side, but due to security reasons, the unused .Net 6 should eventually be uninstalled.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In this release, all filters that don't contain any filter rules, are removed. These are legacy filters which have not been visible in the UI.<br />
</div><br />
<br />
'''Features:'''<br />
* B-08019: New component [[Design_Diagram|Design Diagram]] for showing user-created diagrams in dashboards where to visualize process mining metrics.<br />
* B-08087: Generic [[Dropdown_List_Selector|dropdown list selector]] works with Snowflake models allowing to add selection lists for any values.<br />
* B-08163: Linked settings support for binding to [[Chart_Linked_Settings#Binding_to_case_attribute_filters_with_attribute_name_and_attribute_values|case attribute filter values without defining case attribute name]].<br />
* B-08170: Snowflake model filters can be [[Filtering_in_QPR_ProcessAnalyzer#Filter_actions|saved as new models]] which can be used to create snapshots of part of models.<br />
* B-08093: Multiple dashboards can be exported to same file, and model can be set for imported dashboards.<br />
* B-08161: Added [[Datatable_in_Expression_Language#Modify|Modify]] function to change datatable properties and improved [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#CreateDatatable|CreateDatatable]] function for creating datatables.<br />
* B-08122: Added new system report to list dashboards.<br />
* B-08173: Removed legacy filters that didn't have any filter rules.<br />
* B-07961: In OperationLog, changed parameters to json format and added request id.<br />
* B-08069: Added DashboardId property to [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog]] in expression language.<br />
* B-08139: Added [[Datatable_in_Expression_Language#UpdateRows|UpdateRows]] function to update existing rows in datatables with similar logic than SQL update.<br />
* B-08115: Added [[Datatable_in_Expression_Language#DeleteRows|DeleteRows]] function to delete rows in datatables with similar logic than SQL delete.<br />
* B-08149: QPR ProcessAnalyzer has been updated to .Net 8.<br />
* B-08054: Changed Scripts property in generic context to return all scripts, instead of legacy system level scripts.<br />
* B-08138: Changed Synchronize function to remove all columns when no Snowflake table exists.<br />
* B-07689: For datatables, [[Datatable_in_Expression_Language#ForeignKeys|foreign keys]] to other datatables can be defined using expression language.<br />
* B-08176: Translation updates for release 2024.1.<br />
* B-08175: Workspace should show timestamps in user's local time.<br />
<br />
'''Fixed issues:'''<br />
* D-13913: Datatable properties dialog incorrectly showed linked models from other projects.<br />
* D-13916: Chart filter could not be defined for some expressions in Big data chart.<br />
* D-13933: Navigation menu selected item wasn't highlighted when used Snowflake models.<br />
* D-13906: In Conformance Analysis, deviating flows were not translated.<br />
* D-13907: Improved translation related to datatable properties dialog "Used by models" field.<br />
* D-13904: There was an unclear error message in Snowflake, as exception code 1 was returned without AttributeName and ModelName properties when non-existing attribute was in filter.<br />
* D-13911: Fixed small glitches in the opening and closing of drop-down lists.<br />
* D-13918: Datatable could be configured incorrectly to use table for other datatable.<br />
* D-13932: Duplicating datatable with custom table in datasource losed all data.<br />
* D-11002: Removed legacy in-memory prediction preset.<br />
* D-13912: Added check that array cannot be stored to dashboard Content property.<br />
* D-13936: Query designer default query didn't work with Snowflake models.<br />
* D-13938: There was an incorrect logging with some operations related to ScriptLauncher.<br />
* D-13923: Snowflake expressions didn't work with Where function in root referring to case attribute.<br />
* D-13939: ApplyFilter function gave null reference error for non-existing attribute name.<br />
* D-13931: There were issues with AllowExternalDatasources and EnableFullFunctionality settings.<br />
<br />
== QPR ProcessAnalyzer 2023.7 (build 4326) (released 2023-11-28) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Limitation for the maximum amount of data (B-07636) causes a behavior change in in-memory charts that have the Maximum rows settings empty and have the sorting defined. In certain cases, the order in which measures are evaluated changes (due to an internal performance optimization). If there are custom expressions that define variables, the variables may not be available in other measures anymore. As a resolution, either redefine the variables in those measure expressions or add those measures secondarily to the sorting.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Default query timeout of 30 minutes has been added for --#ImportOdbcQuery, --#ImportSqlQuery and --#ImportOleDbQuery commands. If a query run is taking longer than the timeout, the query is stopped. The timeout can be adjusted using the '''QueryExecutionTimeout''' parameter. Previously, there has been no timeout, so queries that take more than 30 minutes require configuring a longer timeout.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Incorrectly configured [[Chart_Linked_Settings|linked settings]] in charts (available in the ''Advanced'' tab) give now an error message, if they are referring to non-existing measures, dimensions or columns. Previously, incorrect linked settings were ignored. To fix the error message, remove the incorrect linked settings.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07511: Datatables have a [[Datatable_Properties_Dialog|dialog]] to view datatable properties, write description, set the Snowflake source table, add/modify/delete columns, and set the datatable key.<br />
* B-08150: Added setting [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|Apply chart filters first]] to determine whether chart filter rules or dashboard filter rules are applied first when chart queries are filtered.<br />
* B-08091: When filtering charts in Snowflake, case attribute filter is created instead of case id filter.<br />
* B-08091: [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|New setting]] to define whether cases or events are filtered by default.<br />
* B-08091: New preset "Looping paths" to detect whether there are repeating patterns of events.<br />
* B-08091: Duration between events calculation ignores negative durations in Snowflake.<br />
* B-08091: Chart loading animation has been renewed.<br />
* B-07636: To prevent dashboards from jamming when querying too much data, added [[QPR_ProcessAnalyzer_Chart#Available_Visualizations|limitations]] to the amount of data that charts can visualize. Note that the limitation concerns the aggregated data that is visualized, not the source event log data.<br />
* B-08017: [[Dashboard_in_Expression_Language|Dashboards API]] has been added to expression language, allowing to create, modify and delete dashboards in scripts.<br />
* B-08056: Following properties have been added to [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#User.2FGroup|user objects]] in expression language: IsLocked, LastLockedDate, LastLoginDate.<br />
* B-08053: [[Navigation_Menu#System_Reports|User rights report]] has been refactored to use [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property in the expression language. The change also simplifies the report as now it only shows the direct role assignments that are visible in the [[Manage_Users_and_Groups|User Management]].<br />
* B-08151: For Snowflake expressions support for following [[SQL_Expressions#Window_functions|windowing functions]]: sum, average, median, min, and max.<br />
* B-08050: When a model is created, the default filter is not created anymore (this is a refactoring that doesn't have any impact on user interface).<br />
* B-08123: Translation updates for 2023.7.<br />
* B-08092: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13876: In CreateSnowflakeConnection function, ProjectId parameter is optional when OdbcConnectionStringKey is not specified.<br />
* D-13898: Snowflake: Exclude case attribute filter didn't work when there was null values and was selecting at least two values.<br />
* D-13890: Fixed XES file import to work.<br />
* D-13894: Business calendar based duration calculation was incorrect in some durations that spanned to several weeks (for Snowflake and in-memory models).<br />
* D-13899: Using broken OdbcConnectionString in a datatable prevented the datatable from being deleted.<br />
* D-13883: Script run stucked after running a script with error that uses client-side ODBC import.<br />
* D-13879: SqlExpressionValue filter when excluding events didn't work with filter rule root expression only.<br />
* D-13896: Adding or removing columns to datatable didn't change the LastModifiedDate.<br />
* D-13882: User details weren't written to operation log when creating or modifying users.<br />
* D-13771: User rights system report didn't give error when changing columns.<br />
* D-13893: Some event filtering caused null pointer error when primary key had been defined.<br />
* D-13873: Fixed pivot table visual issues after component update.<br />
* D-13900: When adding, renaming or removing columns for Snowflake table fails, operation is now rolled back without any changes.<br />
* D-13866: Querying GET api/uielements was quite slow right after server start.<br />
* D-13864: Combinations of translatable and hardcoded strings didn't get translated in UI.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.6 (build 3933) (released 2023-10-24) ==<br />
<br />
'''Features:'''<br />
* B-08055: Error message for locked account has been replaced with generic error message, so that username enumeration is not possible.<br />
<br />
'''Fixed issues:'''<br />
* D-13884: Attributes dialog crashed with some older model configurations.<br />
* D-13843: In charts, selected case and event attributes switched away when attribute data type was ShortString.<br />
* D-13877: Some Snowflake expressions gave error "exceeds maximum length limit of 255 characters" when selecting lot of items.<br />
* D-13878: Snowflake expression filters for case attribute values didn't accept other than string type of case attributes.<br />
* D-13871: Some statistical calculations with percentages didn't work with Last Row Aggregates Over-limit Rows setting.<br />
* D-13875: Using some case level filters in a model without cases datatable didn't work.<br />
* D-13861: Dashboard opens are now logged to the Task log (i.e., calling GET /api/dashboards/{dashboardid}).<br />
* D-13870: Workspace projects hierarchy focused project showed light grey background making the project name not readable.<br />
* D-13867: When starting datatable refresh and going to other tab, went back to Datatables tab when query completed.<br />
* D-13853: If chart Custom Layout settings had extra series defined, chart may have crashed.<br />
* D-13869: Export as CSV button didn't work in the datatable contents dialog when dialog was still loading.<br />
* D-13872: Main progress spinner had unnecessary small scrollbar on top right.<br />
* D-13863: In the REST API method GET /api/users, password field (that has always been null) has been removed.<br />
<br />
== QPR ProcessAnalyzer 2023.6 (build 3847) (released 2023-10-17) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is removed in this release. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
'''Features:'''<br />
* B-07992: Added 10 new presets including Queue analysis, Four eyes principle, Self-looping events, and Path until selected event. There are also presets for Individual Cases Flow and Range of event type occurrences which use Gantt chart.<br />
* B-08011: Added following date related operations for Snowflake: Day of year, Day of month, Day of week, Week of year, Half-year only, Quarter only, Month only, Hours only, Minutes only, Seconds only, and Milliseconds only. These are available when calculating with date type of data.<br />
* B-08016: [[QPR_ProcessAnalyzer_Table#Table_actions|Table actions to set variables]] can also be opened to a new browser tab. Also improved user interface for table actions.<br />
* B-08018: For Snowflake expressions, added Flows aggregations FromEventType and ToEventType to get starting/ending event type, and FlowOccurrences aggregations FromEvent and ToEvent to get starting/ending event.<br />
* B-08001: Added [[Generic_Functions_in_QPR_ProcessAnalyzer#CallStoredProcedure|CallStoredProcedure]] function to call Snowflake stored procedures. This allows to start ETL transformation in Snowflake orchestrated by QPR ProcessAnalyzer script.<br />
* B-08013: Added [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property to expression language to replace the legacy UserPermissions analysis (11).<br />
* B-07976: Snowflake [[Filtering_in_QPR_ProcessAnalyzer_Queries#Expression|expression based filter rules]] support additional expression columns allowing more Big data chart expressions to be filterable.<br />
* B-08015: Big data chart doesn't anymore support calculation in SQL Server (using local datatables).<br />
* B-06270: Improved error messages and made them translatable by taking into use exception codes provided by server.<br />
* B-08021: Added possibility to store [[Diagram_in_Expression_Language|designed diagrams]] for models and expression language API for reading and modifying diagrams.<br />
* B-08037: Dropped following unused tables database: PA_IDEA, PA_IDEA_VOTE, PA_REPORT, PA_REPORT_SETTING, PA_SESSION_SERVICE, PA_VIEW_FILTER_RULE, PA_VIEW_FILTER_RULE_PARAMETER.<br />
* B-08052: Language translations have been updated to 2023.6.<br />
* B-08051: Frontend side components have been updated.<br />
* B-08034: Backend side components have been updated.<br />
<br />
'''Fixed issues:'''<br />
* D-13830: Object counts indicator in header showed incorrect counts when there was disabled filter rules in Snowflake models.<br />
* D-13833: In-memory charts didn't work with boolean type of dimensions when filtering with the false value.<br />
* D-13858: Target value measures didn't update chart when controlled using an on-screen setting.<br />
* D-13827: Calculated attributes data type was incorrectly set as Any by the Attributes dialog.<br />
* D-13849: Multiselect list search didn't allow spaces.<br />
* D-13829: Multiselect dropdown lists height jumped couple of pixels when selecting values.<br />
* D-13835: Deselecting a selected data point didn't remove chart filter rule.<br />
* D-13702: Improved Snowflake query performance in situations when there are lot of filter rules (by decreasing number of CTE's).<br />
* D-13819: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13820: Fixed incorrect manifest.json file to avoid "not found" errors when fetching web site icon.<br />
* D-13865: Break, continue, and return statements didn't work properly when called from inside a catch block.<br />
* D-13795: There was a Python error in clustering analysis with Snowflake model.<br />
* D-13823: Some tooltips in Workspace project hierarchy didn't work and caused a JavaScript error.<br />
* D-13824: BPMN editor align context menu layout looked strange.<br />
* D-13813: QPR logo button in the top left was misaligned in Firefox.<br />
* D-13797: Snowflake query may have given following error when using sampling: ambiguous column name '_EventType_NotNull_1'.<br />
* D-13774: TakeSample function with certain columns caused SQL compilation error: ambiguous column name 'Case Name'.<br />
* D-13782: Snowflake: Aggregating from variations didn't work when using sampling.<br />
* D-13836: Some tooltips had a strange two-colored background.<br />
* D-13834: Removed Model statistics column from clustering and root causes analysis.<br />
* D-13860: Removed filter button from the custom expressions in Task log analyzed objects.<br />
* D-13838: Removed Split data by filtering column from clustering analysis.<br />
* D-13832: Script and model status updates incorrectly sent next update when previous was still pending.<br />
* D-13839: Charts reset zoom button font size was too small.<br />
* D-13817: Importing data to Snowflake datatable with Append=0 doesn't now drop the underlying Snowflake table.<br />
* D-13825: Some models could not have been deleted from recycle bin.<br />
* D-13852: Recycle bin Projects and Models tab didn't show correct content when Recycle bin only contained either models or projects.<br />
* D-13841: In-memory chart Data type selection type has been corrected to string.<br />
* D-13842: Second time and Third time selections has been hidden in in-memory chart measures.<br />
* D-13850: In Chrome, there were console errors related in incorrect text field autocomplete type and text field without form.<br />
* D-13847: Improved browser side performance by removing unnecessary operations.<br />
* D-13859: Chart without dimensions showed an unnecessary Remove dimension button.<br />
* D-12598: When script is stopped in server, ScriptLauncher could still incorrectly continue to import data.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.5 (build 3334) (released 2023-09-07) ==<br />
<br />
'''Fixed issues:'''<br />
* D-13826: Measures or dimensions with case or event attribute and value selections incorrectly removed calculated attributes when dashboard was opened or chart settings were changed.<br />
* D-13821: Font size of some Highcharts tooltips was too small. Issue appeared when there were tooltips mappings in measures or dimensions.<br />
* D-13810: Simplified help links: now all Help buttons go to the QPR ProcessAnalyzer wiki main page.<br />
* D-13822: Snowflake clustering analysis showed empty strings and nulls as case attribute values in an unclear way as just nothing.<br />
<br />
== QPR ProcessAnalyzer 2023.5 (build 3304) (released 2023-09-05) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In Big Data Chart, the '''Case conformance''' measure and dimension has changed in a way that now it provides boolean values (true/false) instead of integer values (1/0). If [[Measure,_Dimension_and_Column_Settings#Other_settings|colorMappings]] are used for this measure or dimension to set specific colors to visualize conformant and nonconformant cases, the mapped values need to be changed as follows: '''1''' -> '''true''' and '''0''' -> '''false'''. Without the change, the mapped colors are not effective.<br />
<br />
Exmaple: Old configuration:<br />
<pre><br />
"colorMappings": {<br />
"1": "#36d475ff",<br />
"0": "#f5403bff"<br />
}<br />
</pre><br />
New configuration:<br />
<pre><br />
"colorMappings": {<br />
"true": "#36d475ff",<br />
"false": "#f5403bff"<br />
}<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is deprecated. Big data chart has allowed to process data both in Snowflake and SQL Server. Now the support for SQL Server is deprecated and the Big data chart will only support calculation in Snowflake. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). The OperationLog analysis is replaced by the [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog function]] and the Infcluencers analysis is replaced by the [[FindRootCauses_Function|FindRootCauses function]].<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [12, 14, 15, 16, 29];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
By default, Snowflake ODBC driver generates quite much logging to files which might unnecessarily fill up the disk space. It's recommended to set the LogLevel parameter to value 0. The path where the logs are created can be seen in Windows registry (key LogPath). More information about configuring Snowflake ODBC parameters: https://docs.snowflake.com/en/developer-guide/odbc/odbc-parameters.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07971: Machine learning based [[Clustering_Analysis|Clustering analysis]] can be run in Snowflake.<br />
* B-07989: In dashboard designer the stacking order of charts can be changed with buttons [[QPR_ProcessAnalyzer_Dashboard_Designer#Viewing_and_Editing_Dashboards|Bring to front, Send to back, Bring forward and Send backward]].<br />
* B-07977: For [[Sankey_Chart|sankey diagram]], added Start level and End level mappings to define custom start and end level for the sankey flows. Implemented also color mappings to define specific colors for specific values.<br />
* B-08010: To improve performance, charts are loaded and updated only when they are visible in the dashboard.<br />
* B-07975: Added following [[SQL_Expressions#Date_functions|date related functions]] to Snowflake: DayOfYear, DayOfWeek, WeekOfYear, Quarter.<br />
* B-07908: When [[QPR_ProcessAnalyzer_Project_Workspace#Duplicating_Model|model is duplicated]], also filters in the model are also duplicated.<br />
* B-07904: Filters and models API for expression language has been completed.<br />
* B-07991: In [[Filter_Selectors|case and event type filter selectors]], threshold whether the dropdown list or search dialog is shown can be defined using the ''Maximum Rows'' setting. Also the search dialog filters search results by other filter rules in the dashboard.<br />
* B-07999: Filters report has been changed to use the [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|expression language API for filters]].<br />
* B-07540: Added [[QPR_ProcessAnalyzer_Expressions#Throwing_objects|throw statement]] to expression language.<br />
* B-07813: UI components are updated. There are small visual improvements, such as in flowchart flows are routed a bit differently and in charts the hidden series is shown as strike-through in the legend.<br />
* B-07963: Following legacy analysis types have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29) (see more information in the note above).<br />
<br />
'''Fixed issues:'''<br />
* D-13777: Filters could not be created in charts when "Update Filter During Selection" setting was disabled.<br />
* D-13767: Automation per Event Types preset in in-memory incorrectly showed only one event type.<br />
* D-13756: Changing background color in KPI card didn't have any effect.<br />
* D-13812: "Exclude events" was incorrectly translated to "Exclure les cas" in French.<br />
* D-13815: Dashboard designer background grid was not visible in entire area in edit mode. Improved also the grid to match to snapping in move and resize.<br />
* D-13674: Business calendar dialog layout was incorrect when a model with a long name was selected to copy holidays.<br />
* D-13811: Table actions link to a new window didn't go to dashboard if there were other parameters in the link.<br />
* D-13601: Fixed issue where some presets may have given error when attribute value selection and the automatically selected attribute conflicted by the data type.<br />
* D-13753: While Snowflake model was selected, in Filters and User Rights reports the Columns list could not be opened.<br />
* D-13720: Now table column filter and sorting are preserved when resizing or zooming page.<br />
* D-13785: In tables increased number of rows to 20000 that are inspected to get available items shown in Excel-style column filter.<br />
* D-13759: Some statistical calculations had bad performance with large number of rows.<br />
* D-13787: Conformance statistics component didn't have scrollbars when text didn't fit to the visible area.<br />
* D-13788: In-memory "Nonconformance reason" selection caused error when two of them was selected in the same chart.<br />
* D-13783: When Analyzed objects was Generic analysis, column selection incorrectly caused "Analysis has not been selected" error.<br />
* D-13776: When measure name contained quotation mark, notification preview didn't work.<br />
* D-13747: Filtering with integer type of case id with case attribute value filter caused error in Snowflake.<br />
* D-13791: In Firefox, model selection in chart settings didn't show models in the first open.<br />
* D-11984: Recycle bin buttons didn't fit to the screen when screen width was small.<br />
* D-13780: Using CaseId case attribute in clustering analysis did not work with Snowflake 106 cases standard model.<br />
* D-13781: Clustering analysis produced Python error with a certain simple Snowflake model.<br />
* D-13730: Snowflake: Case attribute filtering didn't work when there are cases without row in cases table.<br />
* D-13803: There was chart configuration validation error in browser console when measures were moved into dimensions in Big data chart.<br />
* D-13758: There was performance issue with the Recent tasks system preset.<br />
* D-13793: Snowflake clustering failed when cluster count is larger than case count.<br />
* D-13763: SQL expression based filter rule with Where function to filter events didn't filter anything in Snowflake.<br />
* D-13804: Added missing Millisecond function to Snowflake.<br />
* D-13772: Expression EventLog.Cases.Events caused error "Value cannot be null".<br />
* D-13755: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13739: When switching between System reports there was error: "Uncaught Error: 2nd dimension not found. at y.getExpressionConfiguration".<br />
* D-12109: Sometimes flowcharts showed message "Error in querying event type measures. Input string was not in a correct format".<br />
* D-12473: Cost Savings by Automation preset gave sometimes error "Unable to cast object of type 'System.Double' to type 'System.String'".<br />
* D-13750: Snowflake model didn't work with the Case Duration vs. Manual Activities preset.<br />
* D-13657: There was error converting data type nvarchar to bigint.<br />
* D-13796: Some Snowflake operations didn't work with zero rows and columns.<br />
* D-12494: Now when chart size changes, the table column filters and sorting are preserved.<br />
* D-13736: In Performance benchmarking dialog, the Export result button exported wrong benchmark performance analysis result.<br />
* D-13609: Improved conformance analysis related filter names.<br />
* D-13594: Recycle bin buttons were not visible when opening recycle bin in a narrow screen.<br />
* D-13226: Tooltips in the model properties dialog are now translated.<br />
* D-12569: Table incorrectly showed ellipsis for narrow boolean type of columns showing checkboxes.<br />
* D-13391: Emptying date or datetime picker value was not registered and it didn't trigger functionality.<br />
* D-12621: Value search dialog didn't work with values containing backslashes.<br />
* D-13796: Some Snowflake operation didn't work with zero rows/columns.<br />
<br />
== QPR ProcessAnalyzer 2023.4 (build 2628) (released 2023-06-14) ==<br />
<br />
'''Features:'''<br />
* B-07767: Added [[Gantt_Chart|Gantt chart]] to visualize timeline of cases and events divided into swimlanes.<br />
* B-06383: Added [[Sankey_Chart|Sankey chart]] to visualize flow from one set of values to another.<br />
* B-07941: Implemented many more presets running in Snowflake models for compliance and operational excellence use cases. There are also presets for the path analysis and process bottlenecks identification.<br />
* B-07864: Snowflake conformance analysis shows now [[Conformance_Analysis#Top_Deviations_(in-memory)_/_Deviating_Flows_(Snowflake)|reasons for conformance deviations]], such as which event occurrences deviated from the design model.<br />
* B-07909: Snowflake conformance analysis visualizes [[Conformance_Analysis#Undesired_Events_(Snowflake)|undesired event types]] in table and flowchart.<br />
* B-07823: Flowchart Bottlenecks preset has been changed to show bottlenecks for event types. Also renewed the [[QPR_ProcessAnalyzer_Logs#Task_Log|Tasks reports]] to use expression language based interface.<br />
* B-07891: User interface has been [[Languages_and_Localization|translated into Portuguese]].<br />
* B-07873: Improved [[QPR_ProcessAnalyzer_Pivot_Table|pivot table]] visual layout to highlight totals and aggregated rows. Also the row titles are now visible in the top left.<br />
* B-07905: Added [[SQL_Expressions#Rank_functions|Rank related functions]] to Snowflake for writing more versatile custom KPI's, e.g., FirstValue, LastValue, NthValue, Lead and Lag.<br />
* B-07912: Added more SQL expression [[SQL_Expressions#Array_functions|array functions ArrayToString and ArrayOverlap]] to Snowflake.<br />
* B-06449: Added SQL expression functions ToTimestamp and TryToTimestamp for parsing timestamps from strings using provided format.<br />
* B-07959: Added new functions Base64Encode and Base64Decode to help using basic HTTP authentication when calling web services.<br />
* B-07206: SQL expressions support data [[SqlDataFrame_in_Expression_Language#WithClusterColumn|clustering]] which is an unsupervised machine learning algorithm to group data based on similarities.<br />
* B-07848: Data can be extracted from SAP using the encrypted [[Importing_Data_from_SAP#SNC_encrypted_connection|SNC connection]].<br />
* B-07903: Added expression language API to create and modify filters and models.<br />
* B-03103: [[QPR_ProcessAnalyzer_Logs#Task_Log|Task log]] (operation log) can be accessed in expression language.<br />
* B-07872: List aggregation with Distinct=true orders now items by their value.<br />
* B-07940: Removed "Count" aggregation from textual values in Big data chart (you can use the Case count, Event count, etc. selection instead).<br />
* B-07757: Backend support for datatables linking to user-definable Snowflake database, schema and table.<br />
* B-07825: Improved error message when trying to use non-existing attributes in Snowflake queries.<br />
* B-03101: To expression language, added try-catch-finally statement to handle thrown exceptions.<br />
* B-07861: Removed available and total virtual memory information from User settings dialog.<br />
* B-07902: Optimized sequences of joins in Snowflake queries to improve performance.<br />
* B-07837: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13709: If image width-to-height ratio was lower than container's ratio, image was incorrectly stretched to fit the container.<br />
* D-13660: Disabling filter rules didn't work in Snowflake models.<br />
* D-13526: Passing dataframes from SQL scripts to expression scripts didn't work.<br />
* D-13661: Snowflake conformance analysis crashed when there was no access to conformance related Snowflake UDF's.<br />
* D-13693: Resolved major Snowflake conformance analysis performance issues in the BPMN model handling.<br />
* D-13716: Snowflake root causes analysis incorrectly bypassed Snowflake cache.<br />
* D-13707: In SQL Scripting, the datatable analysis (number 18) didn't always copy the data table contents to the target table correctly.<br />
* D-13653: Big data flowchart Root causes preset showed incorrect legend.<br />
* D-13626: Flowchart froze when converting into big data flowchart and vice versa by modifying chart json settings.<br />
* D-13656: Root causes for attribute gave error "Failed to compare two elements in the array" in some situations.<br />
* D-11563: Pivot table had a minimum height of 300px, which caused bottom part of it to be out of view.<br />
* D-13704: In CSV file import, parsing now allows spaces between column separator and text quotation mark.<br />
* D-13598: Chart gave unclear error message when events datatable was not defined.<br />
* D-13655: Improved error messages for BPMN editor and conformance statistics.<br />
* D-13528: Error message for certain erroneous SQL expressions was unclear.<br />
* D-13677: "Flow occurrences with specific case attribute value" selection didn't work for in-memory chart.<br />
* D-13663: Pivot table border line was slightly broken in the header area.<br />
* D-13608: There was incorrect alignment of items in the table paging controls.<br />
* D-13703: Importing CSV file with some special characters to Snowflake failed (due to incorrect escaping in Snowflake staging files).<br />
* D-13708: Duplicating datatable using user defined table, removed data the source table.<br />
* D-13717: Dependency wheel crashed when there were zero weights and showing data labels.<br />
* D-13348: There was an unclear error message when Snowflake query had a certain incorrect expression.<br />
* D-13732: Pivot table Excel export contained headers formatted incorrectly.<br />
* D-13729: There was a JavaScript error when limited user tried to access business calendar.<br />
* D-13662: Percentile function didn't always work with timespan types.<br />
* D-13646: Using incorrectly configured model without cases datatable caused null reference error.<br />
* D-13629: When tried to use chart with a non-existing model, there is now a proper translated error message.<br />
<br />
== QPR ProcessAnalyzer 2023.3 (build 1990) (released 2023-05-03) ==<br />
<br />
'''Features:'''<br />
* B-07818: [[Conformance_Analysis|Conformance analysis]] is supported in Snowflake with following dashboard components: Big data chart, BPMN editor, Conformance statistics, and Design model selector.<br />
* B-07833: [[Root_Causes#Root_causes_in_flowchart|Root causes analysis for flowchart]] is available for Snowflake showing how the event and flow occurrences explain selected phenomena.<br />
* B-07786: Big data chart has more [[Big_Data_Chart#Measure_aggregations|measure aggregations]], such as median, percentile, standard deviation and variance. Also for textual items, unique values can be listed.<br />
* B-07795: [[QPR_ProcessAnalyzer_Table#Conditional_formatting|Conditional formatting]] supports also columns with non-numerical contents.<br />
* B-07830: [[Big_Data_Chart#Measure_aggregations|None and Any aggregations]] for Snowflake and user-friendly formatting for conformance violations.<br />
* B-06527: Error messages in [[Importing_Data_to_Datatable_from_CSV_File|CSV file import]] show also the column number to help working with CSV files with lot of columns.<br />
* B-07747: In-memory conformance checking accepts design models with multiple tasks having same name (same is followed by the Snowflake implementation).<br />
* B-07659: In-memory flowchart preset Case Conformance to visualize conformance checking violations.<br />
* B-07571: Added function IsConformant to backend to check whether cases are conformant.<br />
* B-07863: Added function ConformanceViolationsFlows to backend to return nonconformance reasons for violating cases.<br />
* B-07844: Support for "array" aggregation to return aggregated items as array.<br />
* B-07856: Support for creating and accessing arrays and objects in SQL expressions.<br />
* B-07860: Array handling functions and Tasks property for DesignModel entity.<br />
* B-07847: Added throttling for QPR ScriptLauncher client-side imports to limit memory usage.<br />
* B-07811: Snowflake query optimization to omit columns that are not used by the query.<br />
<br />
'''Fixed issues:'''<br />
* D-13632: Going from variations to event types led to very poor performance with certain models.<br />
* D-13628: Statistical calculations were incorrectly not applied in chart CSV export.<br />
* D-13575: SQL script may have given error "Operand type clash: nvarchar(max) was incompatible with sql_variant".<br />
* D-13597: UI supports now datatable column type "ShortString" (previously datatable contents preview and CSV import didn't work).<br />
* D-13536: Using business calendar sometimes gave error "System.InvalidOperationException: Collection was modified".<br />
* D-13477: Chart types without y-axis mapping caused an error when series mapping was used.<br />
* D-13453: _model variable was not available for Snowflake expression filter rules.<br />
* D-13527: Checkbox height didn't increase when long label needed to span to multiple lines.<br />
* D-13363: Snowflake query with EvaluateAfterAggregations and IsHidden failed when dimensioning by case id column.<br />
* D-13383: Snowflake query gave error "Invalid column name 'FromCase Name'".<br />
* D-13523: Request id was incorrectly shown as zeros in error messages.<br />
* D-13541: In CSV import, error message for maximum number of columns exceeded is improved (maximum is 300 column for SQL Server).<br />
* D-13583: Objects count in header didn't work for empty Snowflake model.<br />
* D-13553: Larger pacm files can now be imported, as there isn't error "Request body too large. The max request body size is 30000000 bytes".<br />
* D-13306: Stack overflow error was given when using SqlDataFrames.<br />
* D-13487: When Flows root and there was filter in Values expression, some flows were lost.<br />
* D-13540: SqlDataFrame query with 300 columns failed to error "WithExpressionColumn: No name given for the new column".<br />
* D-13429: Ordering in List aggregation couldn't find columns in dataframe query.<br />
* D-13406: Dataframe query with root FlowOccurrences and get value from cases caused error.<br />
* D-13538: There was incorrect handling of escaping characters in column names used in dimensions.<br />
* D-13633: Fixed ordering in List aggregation with null and empty values.<br />
* D-13636: Query that dimensions by numeric case attribute with AggregateOthers true, caused error.<br />
* D-13589: Creating Snowflake datatable did not connect to Snowflake.<br />
* D-13623: Value expressions without aggregation didn't work with AggregateOthers setting.<br />
* D-13554: In in-memory chart, percentile function might have return both Int64 and Double type of objects which cannot be sorted.<br />
* D-13481: Improved error message when trying to use deleted model.<br />
* D-13621: Dynamic value search dialog had incorrect font in lists.<br />
* D-13610: Some invalid BPMN files crashed BPMN editor.<br />
* D-13614: Checkbox label texts overflowed to right.<br />
* D-13520: Removed excessive parameters from the Query Designer for generic context queries.<br />
* D-12998: QPR icon was incorrectly positioned in header in Safari.<br />
* D-13480: Import to duration data type is removed from Snowflake datatables, and for local datatables duration type maximum size is checked.<br />
* D-13517: In Highcharts-based visualizationsm conditional formatting didn't work for other than the first y-axis mapping.<br />
* D-13529: In some presets containing several on-screen settings, when chart showed in error message, on-screen settings showed invalid selection.<br />
* D-13530: Opening dropdown list caused JavaScript error when the list contents should be empty after it previously contained items.<br />
* D-13486: Removed unreachable error message in CSV import.<br />
* D-13524: Fixed in-memory chart flow occurrences root measures "Event attribute (text)" and "Event attribute (number)" that caused error.<br />
<br />
== QPR ProcessAnalyzer 2023.2 (build 1478) (released 2023-03-22) ==<br />
<br />
'''Features:'''<br />
* B-07755: [[Business_Calendar|Business calendar]] for duration calculation is available for Snowflake models.<br />
* B-07719: In Snowflake dashboards, [[Big_Data_Chart#Using_measure_variables|measures can be assigned to variables]] and use the variables in other measures to create combined measures.<br />
* B-07746: Changed in-memory conformance checking to not show invalid flow violations where starting or ending event type is invalid.<br />
* B-07743: [[PA_Configuration_database_table#General_Settings|Default datasource]] can be configured for datatables created by scripts, allowing to set Snowflake as default.<br />
* B-07740: System memory indicator moved from the header to User settings Version information dialog.<br />
* B-07776: New SQL expressions functions Unicode, Char and Regexp, as a basis for future rule-based process mining.<br />
* B-07741: Backend support for aggregation operations Median, Percentile, Stdev, Stdevp, Var and Varp to Snowflake.<br />
* B-07742: Backend support for aggregation operation to list unique items in Snowflake.<br />
* B-07770: Optimized Snowflake SQL generation by combining consecutive WithColumn function calls into one select.<br />
<br />
'''Fixed issues:'''<br />
* D-13491: QPR ProcessAnalyzer server crashed now and then when sorting was in progress and the query was cancelled.<br />
* D-13380: Dimensioning integers in in-memory core calculation didn't work correctly as 0 and -1 were put to same bucket.<br />
* D-13385: In Workspace Bin, Delete Forever and Restore from Bin buttons were misaligned.<br />
* D-13332: Conformance checking didn't show in violations when there were multiple undesired events in same case.<br />
* D-13405: Images take now always all available space in image component area.<br />
* D-13417: KPI card without title was slightly misaligned vertically.<br />
* D-13438: Clicking selected event type or flow in flowchart didn't cancel the filter selection.<br />
* D-13350: Task log and Script log default filter end date is now empty by default.<br />
* D-13381: Disabled browser auto-complete from flowchart variation stepper and Workspace create/rename object dialog.<br />
* D-13347: Improved performance for in-memory business calendar calculation.<br />
* D-13335: In in-memory chart, filtering didn't work in "Flow occurrences" root "Flow occurrences with specific event attribute value" dimension.<br />
* D-13367: Percentage value wasn't displayed properly with German or Spanish language when event types were shown in object counts indicator.<br />
* D-13451: Exported filter file is now named based on selected filter name.<br />
* D-13378: In Big data chart, prevented error "Unable to aggregate from level RootCauses to level Custom".<br />
* D-13293: DataFrame query with root Flows and IncludeEvents and ExcludeEvents filter rules failed.<br />
* D-13370: Fixed issue where on-screen settings that didn't have any selectable items, showed a strange selection.<br />
* D-13392: Clustering analysis was incorrectly shown when originally in-memory chart was converted into big data chart by changing chart json settings.<br />
* D-12784: Some Snowflake queries incorrectly bypassed Snowflake caching because they used unique object names.<br />
* D-13456: Improved error messages for incorrectly configured on-screen settings.<br />
* D-13445: Conformance violations related translated terms have been fine-tuned for better translations into different languages.<br />
* D-13421: Improved error messages when trying to use model having some column mappings missing.<br />
* D-13485: Snowflake business calendar gave error when calendar contained Sunday.<br />
* D-13218: Windows event viewer incorrectly contained log entries that are not errors.<br />
* D-12634: Multiline text boxes width is set to non-changeable.<br />
* D-13034: Confirmation dialog to delete items permanently has been updated.<br />
* D-13288: In dialogs, the Create button didn't show the disabled state correctly.<br />
* D-13427: When dropdown lists didn't have any selectable items, the "N/A" text appeared and the list incorrectly took more space vertically.<br />
* D-13483: In Workspace, the new items menu was too narrow for Spanish texts.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.1 (build 1449) (released 2023-02-24) ==<br />
<br />
'''Features:'''<br />
* B-07690: System setting [[PA_Configuration_database_table#General_Settings|DatabaseId]] can be defined by administrator to get more simple table names in Snowflake.<br />
* B-07737: In flowchart Bottlenecks preset, originally used flow colors has been recovered.<br />
* B-07748: For Analyzed objects "Conformance checking findings" in charts, terminology has been revised and issue with the case count calculation fixed.<br />
* B-07663: In [[Chart_On-screen_Settings|on-screen settings]], when case/event attribute is selected, related attribute values list are reset.<br />
* B-07570: Backend support for [[Business_Calendar|business calendars]] in Snowflake.<br />
* B-07660: Backend support for conformance checking to show also the last event index and event type in NotCompleted reason.<br />
* B-07610: Memory counter related technical properties have been removed from expression language.<br />
<br />
'''Fixed issues:'''<br />
* D-13349: Opening dashboard containing Root causes preset with default settings jammed the system by generating lot of calculations (for more information, see previous release notes).<br />
* D-13277: Stacked charts with date type of data as series did incorrectly show gaps in columns/bars.<br />
* D-13270: Flowchart conditional formatting didn't work with duration multi-unit format.<br />
* D-13358: Calculation results caching works also across different user sessions.<br />
* D-13250: Dashboard with two charts connected with linked settings using variables ended up to to a never ending loop.<br />
* D-13230: SAP import did not automatically create columns to use the correct column types.<br />
* D-12857: Deeply recursive functions caused a crash without any trace.<br />
* D-12994: In Workspace, some buttons were not clickable due to breadcrumb covering them.<br />
* D-13249: In Workspace, there was incorrect error message for duplicate datatable names when there were items with only letter capitalization was different.<br />
* D-13232: In-memory chart Top variations preset is now sorted secondarily by average duration descending.<br />
* D-13300: Setting DashboardFilter variable to empty value didn't have any effect in dashboard but old value was incorrectly used.<br />
* D-12834: Limited the maximum number of dimensions to 20, to avoid too demanding queries for SQL Server.<br />
* D-12917: Changed visual indication of missing items in dropdown lists (it's no longer showing "***").<br />
* D-13111: In Root causes preset, there is now error message when trying to use weighting related columns when weighting isn't in use.<br />
* D-13124: SQLDataFrame query containing filter rule EventTypes aggregating from cases failed.<br />
* D-13207: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed.<br />
* D-13292: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed (rev.2).<br />
* D-12991: Dropdown list texts had some translations missing.<br />
<br />
== QPR ProcessAnalyzer 2023.1 (build 1433) (released 2023-02-07) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release contains a potentially severe issue, where some dashboards completely jam the system by generating lot of calculations. The issue may appear in dashboards that have been created in earlier releases and containing the Root causes preset with default settings. The issue will be fixed by the next release. The issue can be worked around by exporting the affected dashboard, modifying the dashboard file manually and importing the dashboard back. The required modification is to remove line(s) containing <pre>"preset": "RootCauses"</pre> and the comma from the preceding line.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Cases (analysis number: 5), Events (6), and EventTypes (7). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). Note that the legacy analyses removal don't affect the dashboarding functionality.<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [5, 6, 7];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2023.1, the '''.NET Desktop Runtime''' is not needed anymore for QPR ProcessAnalyzer Server, so it can be uninstalled. Also for QPR ScriptLauncher, ''.NET Desktop Runtime'' is not needed, but instead install the '''.NET Runtime''' (which is more lightweight). ''.NET Desktop Runtime'' contains the ''.NET Runtime'', so the actions are not mandatory when updating to QPR ProcessAnalyzer 2023.1.<br />
</div><br />
<br />
'''Features:'''<br />
* B-06997: Expression-based filter rules for Snowflake dashboards to allow versatile filtering and filtering from custom expressions.<br />
* B-07383: Improvements to linked settings to allow binding to variables, tags and filter rules [[Chart_Linked_Settings|(more information)]].<br />
* B-07508: Flowchart preset colors have been renewed to be more intuitive.<br />
* B-07184: Automation preset in flowchart has now options for selecting the Automation attribute and value.<br />
* B-07512: Changed datatable metadata can be refreshed from Snowflake, and all rows in the datatable can be deleted easily in Workspace [[QPR_ProcessAnalyzer_Project_Workspace#Datatables|(more information)]].<br />
* B-07440: Date when the release was made is now shown in User settings.<br />
* B-07595: WeekOfYear property for DateTime objects in expression language to get the week number of a year (between 1 and 53).<br />
* B-07623: In-memory expression language functions Random (to get random numbers) and Hash (to get hash value of string).<br />
* B-07612: Breadcrumb in Workspace has now a Home button to quickly navigate to the top level of the projects hierarchy.<br />
* B-07637: Language selector now shows the language options in local languages.<br />
* B-07228: Remove following deprecated analyses: Cases, Events, and EventTypes (see the release note above).<br />
* B-07538: Backend support: Snowflake root causes analysis can find event attribute related root causes.<br />
* B-07706: Backend support: Snowflake expression-based filter rules support for roots containing Where function.<br />
* B-07611: Removed following legacy filter rules: CaseAttributeTrend, EventAttributeTrend, EventTypeTrend, and Duration.<br />
* B-07598: Refactored client-side import for SQL scripting to use generic client-side task mechanism.<br />
* B-07716: ShortString columns are now properly detected in SQL Server queries.<br />
* B-07652: Now it's possible to pipe multiline expression strings to QPR ScriptLauncher.<br />
* B-07688: AddColumns function for Datatables to create multiple columns in one call.<br />
<br />
'''Fixed issues:'''<br />
* D-13092: Table conditional formatting didn't work when color code was fetched from other column.<br />
* D-13105: Some charts created in earlier release referring to non-existing presets names appeared as empty after software update.<br />
* D-13107: Flowcharts crashed and showed loading animation forever when setting color or flow thickness to non-numerical measure.<br />
* D-13104: In BPMN model editor, context menus to edit elements didn't appear.<br />
* D-12939: Script editor tabs Close buttons didn't work.<br />
* D-13154: "Search by case ID" didn't work in in-memory chart.<br />
* D-12933: CSV columns with only empty values were incorrectly auto-detected as integers.<br />
* D-12929: In-memory chart Root causes for case duration and Root causes for case attributes (weighted) had Custom expression missing.<br />
* D-12928: Pivot table headers were empty when there were two column levels and two values.<br />
* D-12924: Pivot table columns with Count and Distinct Count aggregations are now numeric and aligned right.<br />
* D-13033: Changing colors in chart settings Color palette caused "Item already exists" error and prevented changing colors.<br />
* D-12996: Tags referring to dashboard variables didn't work in Additional root expression.<br />
* D-12877: UI gave error in some situations: Uncaught TypeError: Cannot read properties of undefined (reading 'min').<br />
* D-13071: Prevented selecting two or more of the Y-axis, X-axis and series mappings at the same time for the same measure or dimension.<br />
* D-12895: Big data chart crashed when on-screen setting contained event type selector and there were no event type filter set.<br />
* D-13231: Tooltips for dashboard name, model selector and filter selector in header show now the content text instead of generic instruction.<br />
* D-13139: There was an error when tried to create filter for a custom expression where selected data type didn't match with the actual type of data.<br />
* D-12988: Chart presets selection in chart settings showed unnecessary tooltip.<br />
* D-12901: When set sampling over 1 million, Snowflake models gave error: parameter value out of range: size of fixed sample. Must be between 0 and 1,000,000.<br />
* D-12904: Creating expression filter having lower/greater logic with root objects sampling failed.<br />
* D-12923: Chart schema didn't accept pivotAggregation in dimensions/columns.<br />
* D-12926: Root causes columns Selected weight, Compared weight and Total weight have now correct float data type.<br />
* D-12880: In out-of-the box dashboards, chart titles and subtitles were not translated.<br />
* D-12916: Improved filter rule description text in Filter rule editor dialog for expression filter rules.<br />
* D-12889: No clear error message was given when user tried to export corrupted model from .pacm file.<br />
* D-12869: Date selector in on-screen settings had inconsistent vertical alignment.<br />
* D-12938: When creating a filter with lasso and selecting a single data point only, "equals" kind of filter rule is now created.<br />
* D-12989: "Running tasks as specific time" system report may have ended up in loop causing following error: Maximum call stack size exceeded error.<br />
* D-13010: Pivot table sometimes ended up to never-ending resizing loop when browser zoom was more than 100%.<br />
* D-12790: Expression language: DataFrame.SetColumns: Initializing and using variables defined in closure of SetColumns function parameter didn't work<br />
* D-12927: All on-screen settings were not be visible in narrow charts having several on-screen settings.<br />
* D-12937: Added maximum value limitation to several number input fields in charts.<br />
* D-12947: Message dialog didn't show line breaks correctly (e.g., in CSV file import).<br />
* D-12948: Defining column setting caused error when Measure Expression was not defined.<br />
* D-12946: Filter rule text couldn't be seen entirely from tooltip.<br />
* D-12983: When range filtering using integer values in Highcharts chart, filter is now shown as integer value.<br />
* D-12984: When range filtering in Highcharts charts and there is category axis, filter rule is now based on individual (category) values.<br />
* D-12930: When creating filters from charts using date type of X-axis with lasso, "greater than or equal" and "less than or equal" filter rules are not created.<br />
* D-12920: "Where" function in DataFrame lost column data types of the original DataFrame.<br />
* D-13048: Model notifications failed with certain measures that define variables in root expression leading to error: Variable "sampleSize" already exists in this context.<br />
* D-13116: BPMN editor had some translations missing.<br />
* D-13019: Datatable and script selectors show now datatable/script name instead of id, when opening selector having existing selections.<br />
* D-12951: Changing additional root expression in flowchart didn't refresh the flowchart.<br />
* D-13147: Filter rule boxes in header had different widths, and Add filter rule button vertical alignment was incorrect.<br />
* D-12907: Sometimes case attribute selection showed incorrect attribute name for empty model.<br />
* D-13148: Filters and Datatables system reports loaded unnecessarily twice which could be seen as blinking.<br />
* D-12844: In dataframe query, FlowOccurrences in root and GetValueFrom Cases with filter gave null reference exception<br />
* D-12915: Repeating certain query twice with aggregations in Events root generated invalid SQL<br />
* D-12728: Was huge amount logs in server during client side import (manual testing required as identification)<br />
* D-13156: Persist function failed to snowflake: Invalid unicode escape sequence '\u0027ACCE'; should be at most '\u0010FFFF'.<br />
* D-12876: Flows/FlowOccurrences in root didn't work with SqlExpressionValue filtering.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2022.8 (build 1397) (released 2023-01-11) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release fixes an issue where extracting large datasets from SAP increases memory consumption considerably and may lead to out-of-memory error. This release contains packages for both QPR ScriptLauncher and QPR ProcessAnalyzer Server. If SAP extractions are done using QPR ScriptLauncher in client side mode (ExecuteInClientSide=1), it's enough to update QPR ScriptLauncher to fix this issue.<br />
</div><br />
<br />
'''Fixed issues:'''<br />
* D-12941: Extracting data from SAP consumed unnecessary lot of memory and may have led to out-of-memory error (both when running using QPR ScriptLauncher and in server side).<br />
<br />
== QPR ProcessAnalyzer 2022.8 (build 1396) (released 2022-12-30) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Creating datatables with duplicate names in the same project is prevented, and possible existing duplicate names are automatically changed to unique names with a random suffix. If there are duplicate names, they can be renamed either before updating QPR ProcessAnalyzer (to avoid automatic renaming) or after the update (by changing suffixed names). If the renamed datatables are used by models, the linkage will break because it's based on the datatable name. Creating duplicate datatables has already been prevented in the UI, but the improved method works also in the API level.<br />
<br />
Following SQL query can be used to list datatables (and project id) having duplicate names:<br />
SELECT ITA_NAME, ITA_PROJECT_ID<br />
FROM PA_INTEGRATION_TABLE<br />
GROUP BY ITA_NAME, ITA_PROJECT_ID<br />
HAVING Count(*) > 1<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
If trying to use business calendar for a model that doesn't have the business calendar defined, there will now be an error message instead of showing the chart. Either unselect the business calendar checkbox for the measure or dimension, or define a business calendar to the model. In this situation in earlier releases the business calendar was ignored and full time calculation used.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07498: Automation and Operational Excellence presets and Root causes analysis (for Snowflake), Weighted root causes analysis and Event scattering preset (for Snowflake and in-memory), Root causes for case duration (in-memory).<br />
* B-07177: Flexible mappings, user selectable aggregations and conditional formatting for Pivot table, and flexible mappings for KPI Card.<br />
* B-07518: New function named Query to run call /api/expression/query.<br />
* B-07294: In Workspace, the left side projects hierarchy can be collapsed and expanded to make more space to project contents.<br />
* B-06814: In SQL expressions, new function DurationBetweenDates to calculate duration between timestamps precisely.<br />
* B-07519: Replaced DateDiff function with the new DurationBetweenDates function in big data chart.<br />
* B-07531: In SQL expressions, new mathematical functions Abs, Log, Mod, Power, Rand, Sign and Sqrt.<br />
* B-07297: To optimize performance, Snowflake queries are automatically cancelled if they are not needed by UI.<br />
* B-07569: To optimize performance, TakeSample function implementation is improved for Snowflake.<br />
* B-07198: Several performance improvements to DataFrame queries (used in Snowflake).<br />
* B-07464: Added Lead and Lag functions to SqlDataFrames to support getting previous and next event.<br />
* B-07470: New ExtractSap function to fetch data from SAP using expression language.<br />
* B-07536: New Pivot function to SqlDataFrames to enable root causes analysis.<br />
* B-07488: Primary keys can be set to datatables to improve calculation performance (UI will follow later).<br />
* B-07515: Added RootCauseAnalysis function to SqlDataFrames.<br />
* B-07546: RootCauseAnalysis function support for complex weighting expressions.<br />
* B-03052: Support for user-defined variables in /api/expression/query.<br />
* B-07565: Support for NumberPrecision, DatetimeTruncation and TimespanPrecision properties for Values section in in-memory query.<br />
* B-07513: For product activation file handling, replaced mutex based implementation with exclusive file lock.<br />
* B-07480: Expression language support for DataFlows for data extraction.<br />
* B-07613: Removed support for SQL Server based R scripting.<br />
* B-07567: Take datatable primary keys into use in expression builder to improve performance (part 2).<br />
* B-07588: Remove total memory information from log writing and DateDiff function for in-memory.<br />
<br />
'''Fixed issues:'''<br />
* D-12715: Snowflake calculated imprecisely some operations containing division and aggregation.<br />
* D-12761: Progress bar of the CSV import dialog didn't show any progress.<br />
* D-12799: Opening datatable contents dialog settings was slow when there were lot of rows in the datatable.<br />
* D-12089: Include conforming/nonconforming cases made BPMN editor no responding.<br />
* D-12496: Datagrid filter search keyword didn't work for rounded values, so the search was hidden for other than textual data.<br />
* D-12704: Durations as quarters was calculated incorrectly in charts.<br />
* D-12662: Fixed issue where some special literals in custom expressions didn't work.<br />
* D-12403: Setting Notifications on a model had some visual issues.<br />
* D-12859: Dependency wheel visualization crashed with nulls values in From and To mappings.<br />
* D-12660: Removed unnecessary float conversions in SQL expressions.<br />
* D-12653: In-memory datafram OrderByColumns function with mixed values failed.<br />
* D-12657: When trying to use milliseconds period in some presets, frontend frozed.<br />
* D-12706: Line breaks in data were shown in many places where it's undesired.<br />
* D-12719: Syncfusion dialog headers showed backslaces incorrectly.<br />
* D-12372: Refused to run the JavaScript URL because it violated the Content Security Policy directive.<br />
* D-12730: Logging out when filter selection is in progress, gave javascript error.<br />
* D-12705: Header object counts tooltip was sometimes messed after logout.<br />
* D-12384: Selected project was not highlighted for whole project name string.<br />
* D-12581: Prevented creating duplicate datatable names in same project in parallel execution.<br />
* D-12722: There was incorrect syntax near '<' when running SqlDataFrame expressions.<br />
* D-12736: Swedish and Finnish translation improvements for object counter tooltips.<br />
* D-12702: For BPMN Editor component "Something went wrong" error was given when switching from in-memory to Snowflake model.<br />
* D-12712: UI gave error: TypeError: Cannot read properties of undefined (reading 'id').<br />
* D-12738: Business calendar showed total business time when calendar configuration was invalid.<br />
* D-12776: Special character filter caused JavaScript SyntaxError.<br />
* D-12785: Unnecessary vertical scrollbar displayed for main header toolbar.<br />
* D-12164: There was unnecessary UnauthorizedAccess errors in logs.<br />
* D-12580: Case duration was not same when comparing Big data chart with in-memory chart for same data.<br />
* D-12768: Data grid links and variable change actions didn't work when grouping was used.<br />
* D-12735: FindRootCauses (in-memory) function filtered out cases with zero contribution.<br />
* D-12763: --#CallWebService didn't work from ScriptLauncher.<br />
* D-12789: There was timeout in SQL queries to scripting sandbox.<br />
<br />
== QPR ProcessAnalyzer 2022.7 (build 1331) (released 2022-11-15) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2022.7, to improve security expression language operations that modify data or connect to external datasources are prevented in dashboard custom expressions. The limitation is required, because when a dashboard is opened, its expressions are run with the user's permissions, and the user need to trust the expressions don't perform any unexpected operations, such as delete data. The full functionality of the expression language is available in the scripts and in the Expression Designer.<br />
<br />
The following functions and operations are prevented in dashboards: SendEmail(), CallWebService(), ImportOdbc(), ImportOdbcSecure(), Model.DeletePermanently(), Model.Restore(), Model.TriggerNotifications(), Project.DeletePermanently(), Project.Restore(), Project.CreateDatatable(), Datatable.AddColumn(), Datatable.DeletePermanently(), Datatable.Import(), Datatable.Merge(), Datatable.RemoveColumns(), Datatable.RenameColumns(), Datatable.Truncate(), RecycleBin.DeletePermanently(), and call SQL script. Calling expression scripts is allowed, but in the script all previously mentioned operations are prevented.<br />
<br />
Following SQL query can be executed in the QPR ProcessAnalyzer metadata database to reveal dashboards that potentially have prevented expressions:<br />
SELECT * FROM [PA_UI_ELEMENT] WHERE [UIE_PROPERTIES] LIKE '%SendEmail(%' OR [UIE_PROPERTIES] LIKE '%CallWebService(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbc(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbcSecure(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Restore(%' OR [UIE_PROPERTIES] LIKE '%TriggerNotifications(%' OR [UIE_PROPERTIES] LIKE '%CreateDatatable(%' OR [UIE_PROPERTIES] LIKE '%AddColumn(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Import(%' OR [UIE_PROPERTIES] LIKE '%Merge(%' OR [UIE_PROPERTIES] LIKE '%RemoveColumns(%' OR [UIE_PROPERTIES] LIKE '%RenameColumns(%'<br />
</div><br />
<br />
'''Features:'''<br />
* B-07287: Process Discovery and most important presets for Snowflake.<br />
* B-07271: "Last Row Aggregates Over-limit Rows" setting for big data chart.<br />
* B-06431: Snowflake datatables support for database views in the datasource.<br />
* B-07266: Security: "limited mode" to prevent data modifications and external calls from dashboard expressions.<br />
* B-07097: Improved flowchart root causes color scales.<br />
* B-07363: SQL LIKE function support for escape character.<br />
* B-06877: Improved variation queries performance in Snowflake, part 1.<br />
* B-07444: Improved variation queries performance in Snowflake, part 2.<br />
* B-07382: Support for empty strings and nulls in event type names in dataframe processing.<br />
* B-07273: WithRowNumberColumn, WithRankColumn, WithDenseRankColumn support for descending sorting.<br />
* B-07303: FindRootCauses function support for weighting expression.<br />
* B-07327: Unpivot function for SqlDataFrames (for root cause analysis).<br />
* B-07385: Align token lifetime with SESSION_MAXIMUM_DURATION setting.<br />
* B-07500: ColumnMappings property for IDataFrame and DataTables.<br />
* B-07499: IDataFrame.ApplyFilter function to filter events data using a JSON-based filter.<br />
* B-07469: Translation updates for release 2022.7.<br />
<br />
'''Fixed issues:'''<br />
* D-11630: Drag and drop from chart settings to main header was working incorrectly for filter and root cause rules.<br />
* D-12455: Moving a chart filter from one chart to another created a root cause analysis filter.<br />
* D-12266: Root causes analysis showed incorrect results when certain combination of filters.<br />
* D-12525: Numerical values in Excel export in data grid was formatted incorrectly.<br />
* D-12534: Restoring item from recycle bin changed project from Bin to previous project.<br />
* D-12529: Measure specific datalabel mapping did not work correctly when also mapped to Y-axis.<br />
* D-12532: Multi-selection options caused layout issue for Chart setting.<br />
* D-12541: Layout issue for Polish in multiselect list search dialog.<br />
* D-11277: Increase/decrease Icons were missing in the dimension sorting for Mac.<br />
* D-12552: Uncaught Error: Diagram.selectCollection given something that is not a Part: null.<br />
* D-12567: Tooltip incorrectly showed for label component containing only spaces.<br />
* D-12438: Operation was cancelled because it was replaced by a new operation.<br />
* D-12551: Some expressions didn't work as calculated case/event attributes.<br />
* D-11720: Chart buttons were not visible in Apple Safari and iPad.<br />
* D-12544: On-screen settings "options" parameter did not work.<br />
* D-12528: Multi-unit time unit selection appeared where it's not applicable.<br />
* D-12583: Error message should be provided for invalid settings input than just display JS errors.<br />
* D-12599: Tooltips didn't show correct measures/dimensions when "Show in tooltip" mappings are used.<br />
* D-12561: Chart settings content was incorrectly drawn outside of the chart dialog.<br />
* D-12568: Reload UI sometimes crashed chart having multiselect on-screen settings.<br />
* D-12572: Main header toolbar lost when refresh maximized PA chart.<br />
* D-12612: Drop Unused Filters After setting incorrectly allowed zero seconds.<br />
* D-12533: Error message keeped blinking in Analysis view.<br />
* D-12608: User could not select or add new case attribute when current select attribute doesn't exist.<br />
* D-12451: Prevented deleting running script.<br />
* D-12516: Windows event viewer warning: Failed to gracefully shutdown application.<br />
* D-12523: Business calendar performance - part 2.<br />
* D-12538: Column with same name could be added multiple times to datatable using expression language.<br />
* D-12582: Improved EMS mutex code to support multiple PA service in one server.<br />
* D-12624: Synchronize new (empty) data table generated failed queries in Snowflake.<br />
* D-12622: Advanced setting page reserved room for the expression editor frame that did not exist.<br />
* D-11295: In on-screen settings, some UI controls were vertically misaligned.<br />
* D-11625: The heights of the parameter option menu in the clustering tab was not well aligned.<br />
* D-12103: Small dropdown list layout issue.<br />
* D-12633: Align issue for Column related Advanced settings.<br />
* D-12505: Search dialog didn't escape % and _ characters correctly in dataframe processing.<br />
* D-12645: Tabs in expression settings dialog were partly hidden when dialog is narrow.<br />
* D-11382: Moving of flowchart was sometimes shaky.<br />
* D-12655: Filter rule tooltips in header were styled incorrectly.<br />
* D-12656: Large integer values in filter jsons were incorrectly presented as small integers.<br />
* D-12661: Some exported filters contained unnecessary "invert" property.<br />
* D-12500: Model with numeric case id's and filtering with the attribute mapped as case id: ERROR [22018] Numeric value <nowiki>''</nowiki> is not recognized.<br />
* D-12509: Filtering null values didn't work in boolean attributes in Snowflake.<br />
* D-12571: In dataframe processing in SQL Server, dividing two integers should not make rounding to integer.<br />
* D-12610: Setting for global DropUnusedFiltersAfter was missing.<br />
* D-12613: Filtering with case/event attributes with null values didn't match in Snowflake models.<br />
* D-12617: Model didn't work when DropUnusedFiltersAfter is 00:00:00.<br />
* D-12618: If model ConfigurationJson is null, Configuration property didn't work.<br />
* D-12620: Filtering didn't work when there are backslaces in attribute names in Snowflake models.<br />
* D-12643: AttributeFunctionCallExpression did not always work properly in array context.<br />
* D-12647: SqlDataFrame with SQL Server: Comparing literals to variant column values failed.<br />
* D-12648: Models that have DropUnusedModelsAfter setting caused "The sliding expiration value must be positive" error.<br />
* D-11526: It was unable to translate Unicode character \uD83D at index 176 to specified code page.<br />
* D-12637: In application startup arised FATAL Application startup exception System.UnauthorizedAccessException: Access to the path 'Global\MutexQPRPAActivation' is denied.<br />
<br />
== Old Releases ==<br />
See older releases in [[QPR ProcessAnalyzer Release Archive]]<br />
__NOTOC__<br />
<br />
[[Category: QPR ProcessAnalyzer]]</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&diff=24461QPR ProcessAnalyzer Release Notes2024-02-27T19:19:05Z<p>Ollvihe: /* Next Release: QPR ProcessAnalyzer 2024.3 (planned release date 2024-04-02) */</p>
<hr />
<div>This page lists all new features and fixed issues for each QPR ProcessAnalyzer release.<br />
<br />
== Next Release: QPR ProcessAnalyzer 2024.3 (planned release date 2024-04-02) ==<br />
<br />
'''Features:'''<br />
* B-08231: Snowflake performance improved by changing object counts query in header into two queries, so that the filtered object count query uses eventlog caching.<br />
<br />
'''Fixed issues:'''<br />
<br />
== Latest: Additional release for QPR ProcessAnalyzer 2024.2 (build 5509) (released 2024-02-27) ==<br />
<br />
'''Features:'''<br />
<br />
* B-06280: User management dialog shows whether users have password defined and unnecessary passwords can be removed to improve security.<br />
<br />
'''Fixed issues:'''<br />
<br />
* D-14045: Fixed issue where users with Viewer or Analyzer role couldn't create filters in Snowflake models.<br />
<br />
== QPR ProcessAnalyzer 2024.2 (build 5438) (released 2024-02-21) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue: Using Snowflake models and dashboards doesn't work with Viewer and Analyzer roles. The reason is that cache tables created to Snowflake incorrectly require the GenericWrite permission. Workaround is to give users the Designer role which will give the needed GenericWrite permission. Note that the Designer role gives many permissions to the user for the project [[Roles_and_Permissions#Roles_and_Permissions|(more information)]]. Fixed in the next release (D-14045).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
The legacy User permissions report (analysis number 11) and Filters report (analysis number 30) used in SQL scripts have been removed. Use instead the expressions language to query filters and user permissions, e.g., [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|Models.Filters]] and [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
New version of the Design diagram component has been improved with object-specific measures, and the previous common measures are not migrated into object-specific measures. Thus, the measures need to be configured again, or manually edit the chart json settings (if needed please ask instructions from QPR CustomerCare).<br />
</div><br />
<br />
'''Features:'''<br />
* B-08022: Design diagram supports now BPMN notation, elbow style flows and object-specific measures.<br />
* B-08232: Entire future eventlogs can be [[Create_Predicted_Eventlog|predicted]] based on generative AI models running in Snowflake.<br />
* B-08166: Added expression language function [[Generic_Functions_in_QPR_ProcessAnalyzer#OpenAIChatCompletion|OpenAIChatCompletion]] to answer natural language prompts based on OpenAI ChatGPT API.<br />
* B-08177: Snowflake query performance has been improved by introducing caching of filtered eventlogs using Snowflake tables.<br />
* B-08196: Conditional formatting rules can be defined for [[QPR_ProcessAnalyzer_Table#Textual_equal_rules_for_background_color|textual and boolean values]].<br />
* B-08213: Big data chart expressions event type selections to be multi-select where applicable.<br />
* B-08205: Expression language API is available for storing [[Storing_Secrets_for_Scripts|secrets]] for scripts.<br />
* B-07780: Chart [[QPR_ProcessAnalyzer_Chart#Variable_mappings|variable mappings]] has been removed - use the [[Chart_Linked_Settings|linked settings]] instead. Dashboards using variable mappings are automatically converted to use linked settings.<br />
* B-08117: Added ToSqlDataFrame function to convert in-memory dataframe into SQL dataframes.<br />
* B-08174: Only non-default parameters values are written to the operation log.<br />
* B-08200: Timestamps in System reports are shown in user workstation local time.<br />
* B-08171: Dashboard id has been added to queries, to track from which dashboard queries are originating.<br />
* B-07144: Remove legacy User permissions report (analysis number 11) and Filters report (analysis number 30) in SQL scripts (see note above).<br />
* B-08193: Added retry mechanism to QPR ScriptLauncher to recover if connection to server breaks.<br />
* B-08202: Updated copyright for year 2024.<br />
* B-08199: Frontend components have been updated.<br />
* B-08203: Backend components have been updated.<br />
* B-08209: Translations updated for release 2024.2.<br />
<br />
'''Fixed issues:'''<br />
* D-13972: Some measures/dimensions/columns in Big data chart didn't show the expressions level filtering.<br />
* D-14015: Fixed business calendar incorrect calculation when business period covered entire day.<br />
* D-14014: Fixed issue where Snowflake business calendar could not have end time as 00:00.<br />
* D-13962: System variable values were interpreted incorrectly when used in linked settings.<br />
* D-13971: HiddenInNavigation and SortOrder variables didn't work in navigation menu dashboards list.<br />
* D-13959: Removed possibility to add datatable columns with the legacy "any" data type.<br />
* D-13991: Improved drop-down selector component to handle empty strings as variable values.<br />
* D-13965: Datatable column name length was validated incorrectly which may have caused error in saving with too long column names.<br />
* D-13958: Project names showed unnecessary html escaping in the "Move to" menu.<br />
* D-13964: Model attributes and notifications dialogs gave error when trying to use dashboard tags.<br />
* D-13960: Added missing translations for list of permission list and 12-hour clock format.<br />
* D-13966: Fixed issue were root causes chart tooltip sometimes didn't disappear.<br />
* D-13969: Datatable column schema export sometimes showed empty for the key column.<br />
* D-13862: Session token was not accepted when url path capitalization is different.<br />
* D-13942: Datatable could not be dimensioned if it has column named "CaseId".<br />
* D-13980: Business calendar dialog crashed when tried to open it for a model without access.<br />
* D-13983: Notifications dialog didn't validate situation when same name was used in a measure and dimension.<br />
* D-13981: Dashboard import set incorrect model id to dashboard if there was no access to any model.<br />
* D-11276: Translations were missing for 12-hour clock dates (AM and PM) in dashboards.<br />
* D-13977: Multi-select dropdown lists showed some special characters incorrectly.<br />
* D-13945: Syncfusion toast message didn't work when text contains ${[]}.<br />
* D-13930: Pivot table throws javascript error when certain clicks.<br />
* D-13273: Duplicate datatable row count didn't shown correctly.<br />
* D-13994: There was an error in the in-memory chart with some flow related measures about duplicate variable names when same measure was defined twice.<br />
* D-13985: Models list dots menu had texts misaligned in narrow screens.<br />
* D-13995: In Workspace, wrong datatable was selected after duplication when non-default sorting was applied.<br />
* D-13997: Workspace tables column filtering search caused JavaScript errors.<br />
* D-13978: In table Excel export, the last row representing other items appeared incorrectly for in-memory chart.<br />
* D-14007: In System reports, model related selections are hidden from the Analyzed objects lists.<br />
* D-14005: In big data chart, changing to custom expression caused crash with some expressions having case/event attribute.<br />
* D-14003: When dimensioning was not used, pivot table values were incorrectly rounded in the server side.<br />
* D-14004: Removed empty filters from queries to optimize them.<br />
* D-13988: Fixed issue where data grid context menu rendered initially as too high.<br />
* D-13979: BPMN model editor element settings use now Open Sans font.<br />
* D-14013: Fixed incorrect expression "Duration between first and last occurrence" in big data chart event types.<br />
* D-13984: Fixed the error of refusing to run the JavaScript URL.<br />
* D-14031: ThrownObject property was not included to http error response when error came from the script.<br />
<br />
== QPR ProcessAnalyzer 2024.1 (build 4784) (released 2024-01-10) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue fixed in QPR ProcessAnalyzer 2024.2: In Big data chart, some measures, dimensions and columns have the filtering option missing. The issue concerns for example Duration between events, Path starting/until between specific events, and Cases where event occurs before other selections. Workaround is to set the filter in the chart json settings: the filter can be configured to another expression and copied to the correct expression.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
QPR ProcessAnalyzer Server and QPR ScriptLauncher are now using .Net 8 (previous was .Net 6). When updating to this release, install the .Net 8 Runtime ([[Updating_QPR_ProcessAnalyzer_Server|see more]]). The .Net 6 doesn't need to be uninstalled immediately because .Net 6 and .Net 8 work side-by-side, but due to security reasons, the unused .Net 6 should eventually be uninstalled.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In this release, all filters that don't contain any filter rules, are removed. These are legacy filters which have not been visible in the UI.<br />
</div><br />
<br />
'''Features:'''<br />
* B-08019: New component [[Design_Diagram|Design Diagram]] for showing user-created diagrams in dashboards where to visualize process mining metrics.<br />
* B-08087: Generic [[Dropdown_List_Selector|dropdown list selector]] works with Snowflake models allowing to add selection lists for any values.<br />
* B-08163: Linked settings support for binding to [[Chart_Linked_Settings#Binding_to_case_attribute_filters_with_attribute_name_and_attribute_values|case attribute filter values without defining case attribute name]].<br />
* B-08170: Snowflake model filters can be [[Filtering_in_QPR_ProcessAnalyzer#Filter_actions|saved as new models]] which can be used to create snapshots of part of models.<br />
* B-08093: Multiple dashboards can be exported to same file, and model can be set for imported dashboards.<br />
* B-08161: Added [[Datatable_in_Expression_Language#Modify|Modify]] function to change datatable properties and improved [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#CreateDatatable|CreateDatatable]] function for creating datatables.<br />
* B-08122: Added new system report to list dashboards.<br />
* B-08173: Removed legacy filters that didn't have any filter rules.<br />
* B-07961: In OperationLog, changed parameters to json format and added request id.<br />
* B-08069: Added DashboardId property to [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog]] in expression language.<br />
* B-08139: Added [[Datatable_in_Expression_Language#UpdateRows|UpdateRows]] function to update existing rows in datatables with similar logic than SQL update.<br />
* B-08115: Added [[Datatable_in_Expression_Language#DeleteRows|DeleteRows]] function to delete rows in datatables with similar logic than SQL delete.<br />
* B-08149: QPR ProcessAnalyzer has been updated to .Net 8.<br />
* B-08054: Changed Scripts property in generic context to return all scripts, instead of legacy system level scripts.<br />
* B-08138: Changed Synchronize function to remove all columns when no Snowflake table exists.<br />
* B-07689: For datatables, [[Datatable_in_Expression_Language#ForeignKeys|foreign keys]] to other datatables can be defined using expression language.<br />
* B-08176: Translation updates for release 2024.1.<br />
* B-08175: Workspace should show timestamps in user's local time.<br />
<br />
'''Fixed issues:'''<br />
* D-13913: Datatable properties dialog incorrectly showed linked models from other projects.<br />
* D-13916: Chart filter could not be defined for some expressions in Big data chart.<br />
* D-13933: Navigation menu selected item wasn't highlighted when used Snowflake models.<br />
* D-13906: In Conformance Analysis, deviating flows were not translated.<br />
* D-13907: Improved translation related to datatable properties dialog "Used by models" field.<br />
* D-13904: There was an unclear error message in Snowflake, as exception code 1 was returned without AttributeName and ModelName properties when non-existing attribute was in filter.<br />
* D-13911: Fixed small glitches in the opening and closing of drop-down lists.<br />
* D-13918: Datatable could be configured incorrectly to use table for other datatable.<br />
* D-13932: Duplicating datatable with custom table in datasource losed all data.<br />
* D-11002: Removed legacy in-memory prediction preset.<br />
* D-13912: Added check that array cannot be stored to dashboard Content property.<br />
* D-13936: Query designer default query didn't work with Snowflake models.<br />
* D-13938: There was an incorrect logging with some operations related to ScriptLauncher.<br />
* D-13923: Snowflake expressions didn't work with Where function in root referring to case attribute.<br />
* D-13939: ApplyFilter function gave null reference error for non-existing attribute name.<br />
* D-13931: There were issues with AllowExternalDatasources and EnableFullFunctionality settings.<br />
<br />
== QPR ProcessAnalyzer 2023.7 (build 4326) (released 2023-11-28) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Limitation for the maximum amount of data (B-07636) causes a behavior change in in-memory charts that have the Maximum rows settings empty and have the sorting defined. In certain cases, the order in which measures are evaluated changes (due to an internal performance optimization). If there are custom expressions that define variables, the variables may not be available in other measures anymore. As a resolution, either redefine the variables in those measure expressions or add those measures secondarily to the sorting.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Default query timeout of 30 minutes has been added for --#ImportOdbcQuery, --#ImportSqlQuery and --#ImportOleDbQuery commands. If a query run is taking longer than the timeout, the query is stopped. The timeout can be adjusted using the '''QueryExecutionTimeout''' parameter. Previously, there has been no timeout, so queries that take more than 30 minutes require configuring a longer timeout.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Incorrectly configured [[Chart_Linked_Settings|linked settings]] in charts (available in the ''Advanced'' tab) give now an error message, if they are referring to non-existing measures, dimensions or columns. Previously, incorrect linked settings were ignored. To fix the error message, remove the incorrect linked settings.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07511: Datatables have a [[Datatable_Properties_Dialog|dialog]] to view datatable properties, write description, set the Snowflake source table, add/modify/delete columns, and set the datatable key.<br />
* B-08150: Added setting [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|Apply chart filters first]] to determine whether chart filter rules or dashboard filter rules are applied first when chart queries are filtered.<br />
* B-08091: When filtering charts in Snowflake, case attribute filter is created instead of case id filter.<br />
* B-08091: [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|New setting]] to define whether cases or events are filtered by default.<br />
* B-08091: New preset "Looping paths" to detect whether there are repeating patterns of events.<br />
* B-08091: Duration between events calculation ignores negative durations in Snowflake.<br />
* B-08091: Chart loading animation has been renewed.<br />
* B-07636: To prevent dashboards from jamming when querying too much data, added [[QPR_ProcessAnalyzer_Chart#Available_Visualizations|limitations]] to the amount of data that charts can visualize. Note that the limitation concerns the aggregated data that is visualized, not the source event log data.<br />
* B-08017: [[Dashboard_in_Expression_Language|Dashboards API]] has been added to expression language, allowing to create, modify and delete dashboards in scripts.<br />
* B-08056: Following properties have been added to [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#User.2FGroup|user objects]] in expression language: IsLocked, LastLockedDate, LastLoginDate.<br />
* B-08053: [[Navigation_Menu#System_Reports|User rights report]] has been refactored to use [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property in the expression language. The change also simplifies the report as now it only shows the direct role assignments that are visible in the [[Manage_Users_and_Groups|User Management]].<br />
* B-08151: For Snowflake expressions support for following [[SQL_Expressions#Window_functions|windowing functions]]: sum, average, median, min, and max.<br />
* B-08050: When a model is created, the default filter is not created anymore (this is a refactoring that doesn't have any impact on user interface).<br />
* B-08123: Translation updates for 2023.7.<br />
* B-08092: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13876: In CreateSnowflakeConnection function, ProjectId parameter is optional when OdbcConnectionStringKey is not specified.<br />
* D-13898: Snowflake: Exclude case attribute filter didn't work when there was null values and was selecting at least two values.<br />
* D-13890: Fixed XES file import to work.<br />
* D-13894: Business calendar based duration calculation was incorrect in some durations that spanned to several weeks (for Snowflake and in-memory models).<br />
* D-13899: Using broken OdbcConnectionString in a datatable prevented the datatable from being deleted.<br />
* D-13883: Script run stucked after running a script with error that uses client-side ODBC import.<br />
* D-13879: SqlExpressionValue filter when excluding events didn't work with filter rule root expression only.<br />
* D-13896: Adding or removing columns to datatable didn't change the LastModifiedDate.<br />
* D-13882: User details weren't written to operation log when creating or modifying users.<br />
* D-13771: User rights system report didn't give error when changing columns.<br />
* D-13893: Some event filtering caused null pointer error when primary key had been defined.<br />
* D-13873: Fixed pivot table visual issues after component update.<br />
* D-13900: When adding, renaming or removing columns for Snowflake table fails, operation is now rolled back without any changes.<br />
* D-13866: Querying GET api/uielements was quite slow right after server start.<br />
* D-13864: Combinations of translatable and hardcoded strings didn't get translated in UI.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.6 (build 3933) (released 2023-10-24) ==<br />
<br />
'''Features:'''<br />
* B-08055: Error message for locked account has been replaced with generic error message, so that username enumeration is not possible.<br />
<br />
'''Fixed issues:'''<br />
* D-13884: Attributes dialog crashed with some older model configurations.<br />
* D-13843: In charts, selected case and event attributes switched away when attribute data type was ShortString.<br />
* D-13877: Some Snowflake expressions gave error "exceeds maximum length limit of 255 characters" when selecting lot of items.<br />
* D-13878: Snowflake expression filters for case attribute values didn't accept other than string type of case attributes.<br />
* D-13871: Some statistical calculations with percentages didn't work with Last Row Aggregates Over-limit Rows setting.<br />
* D-13875: Using some case level filters in a model without cases datatable didn't work.<br />
* D-13861: Dashboard opens are now logged to the Task log (i.e., calling GET /api/dashboards/{dashboardid}).<br />
* D-13870: Workspace projects hierarchy focused project showed light grey background making the project name not readable.<br />
* D-13867: When starting datatable refresh and going to other tab, went back to Datatables tab when query completed.<br />
* D-13853: If chart Custom Layout settings had extra series defined, chart may have crashed.<br />
* D-13869: Export as CSV button didn't work in the datatable contents dialog when dialog was still loading.<br />
* D-13872: Main progress spinner had unnecessary small scrollbar on top right.<br />
* D-13863: In the REST API method GET /api/users, password field (that has always been null) has been removed.<br />
<br />
== QPR ProcessAnalyzer 2023.6 (build 3847) (released 2023-10-17) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is removed in this release. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
'''Features:'''<br />
* B-07992: Added 10 new presets including Queue analysis, Four eyes principle, Self-looping events, and Path until selected event. There are also presets for Individual Cases Flow and Range of event type occurrences which use Gantt chart.<br />
* B-08011: Added following date related operations for Snowflake: Day of year, Day of month, Day of week, Week of year, Half-year only, Quarter only, Month only, Hours only, Minutes only, Seconds only, and Milliseconds only. These are available when calculating with date type of data.<br />
* B-08016: [[QPR_ProcessAnalyzer_Table#Table_actions|Table actions to set variables]] can also be opened to a new browser tab. Also improved user interface for table actions.<br />
* B-08018: For Snowflake expressions, added Flows aggregations FromEventType and ToEventType to get starting/ending event type, and FlowOccurrences aggregations FromEvent and ToEvent to get starting/ending event.<br />
* B-08001: Added [[Generic_Functions_in_QPR_ProcessAnalyzer#CallStoredProcedure|CallStoredProcedure]] function to call Snowflake stored procedures. This allows to start ETL transformation in Snowflake orchestrated by QPR ProcessAnalyzer script.<br />
* B-08013: Added [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property to expression language to replace the legacy UserPermissions analysis (11).<br />
* B-07976: Snowflake [[Filtering_in_QPR_ProcessAnalyzer_Queries#Expression|expression based filter rules]] support additional expression columns allowing more Big data chart expressions to be filterable.<br />
* B-08015: Big data chart doesn't anymore support calculation in SQL Server (using local datatables).<br />
* B-06270: Improved error messages and made them translatable by taking into use exception codes provided by server.<br />
* B-08021: Added possibility to store [[Diagram_in_Expression_Language|designed diagrams]] for models and expression language API for reading and modifying diagrams.<br />
* B-08037: Dropped following unused tables database: PA_IDEA, PA_IDEA_VOTE, PA_REPORT, PA_REPORT_SETTING, PA_SESSION_SERVICE, PA_VIEW_FILTER_RULE, PA_VIEW_FILTER_RULE_PARAMETER.<br />
* B-08052: Language translations have been updated to 2023.6.<br />
* B-08051: Frontend side components have been updated.<br />
* B-08034: Backend side components have been updated.<br />
<br />
'''Fixed issues:'''<br />
* D-13830: Object counts indicator in header showed incorrect counts when there was disabled filter rules in Snowflake models.<br />
* D-13833: In-memory charts didn't work with boolean type of dimensions when filtering with the false value.<br />
* D-13858: Target value measures didn't update chart when controlled using an on-screen setting.<br />
* D-13827: Calculated attributes data type was incorrectly set as Any by the Attributes dialog.<br />
* D-13849: Multiselect list search didn't allow spaces.<br />
* D-13829: Multiselect dropdown lists height jumped couple of pixels when selecting values.<br />
* D-13835: Deselecting a selected data point didn't remove chart filter rule.<br />
* D-13702: Improved Snowflake query performance in situations when there are lot of filter rules (by decreasing number of CTE's).<br />
* D-13819: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13820: Fixed incorrect manifest.json file to avoid "not found" errors when fetching web site icon.<br />
* D-13865: Break, continue, and return statements didn't work properly when called from inside a catch block.<br />
* D-13795: There was a Python error in clustering analysis with Snowflake model.<br />
* D-13823: Some tooltips in Workspace project hierarchy didn't work and caused a JavaScript error.<br />
* D-13824: BPMN editor align context menu layout looked strange.<br />
* D-13813: QPR logo button in the top left was misaligned in Firefox.<br />
* D-13797: Snowflake query may have given following error when using sampling: ambiguous column name '_EventType_NotNull_1'.<br />
* D-13774: TakeSample function with certain columns caused SQL compilation error: ambiguous column name 'Case Name'.<br />
* D-13782: Snowflake: Aggregating from variations didn't work when using sampling.<br />
* D-13836: Some tooltips had a strange two-colored background.<br />
* D-13834: Removed Model statistics column from clustering and root causes analysis.<br />
* D-13860: Removed filter button from the custom expressions in Task log analyzed objects.<br />
* D-13838: Removed Split data by filtering column from clustering analysis.<br />
* D-13832: Script and model status updates incorrectly sent next update when previous was still pending.<br />
* D-13839: Charts reset zoom button font size was too small.<br />
* D-13817: Importing data to Snowflake datatable with Append=0 doesn't now drop the underlying Snowflake table.<br />
* D-13825: Some models could not have been deleted from recycle bin.<br />
* D-13852: Recycle bin Projects and Models tab didn't show correct content when Recycle bin only contained either models or projects.<br />
* D-13841: In-memory chart Data type selection type has been corrected to string.<br />
* D-13842: Second time and Third time selections has been hidden in in-memory chart measures.<br />
* D-13850: In Chrome, there were console errors related in incorrect text field autocomplete type and text field without form.<br />
* D-13847: Improved browser side performance by removing unnecessary operations.<br />
* D-13859: Chart without dimensions showed an unnecessary Remove dimension button.<br />
* D-12598: When script is stopped in server, ScriptLauncher could still incorrectly continue to import data.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.5 (build 3334) (released 2023-09-07) ==<br />
<br />
'''Fixed issues:'''<br />
* D-13826: Measures or dimensions with case or event attribute and value selections incorrectly removed calculated attributes when dashboard was opened or chart settings were changed.<br />
* D-13821: Font size of some Highcharts tooltips was too small. Issue appeared when there were tooltips mappings in measures or dimensions.<br />
* D-13810: Simplified help links: now all Help buttons go to the QPR ProcessAnalyzer wiki main page.<br />
* D-13822: Snowflake clustering analysis showed empty strings and nulls as case attribute values in an unclear way as just nothing.<br />
<br />
== QPR ProcessAnalyzer 2023.5 (build 3304) (released 2023-09-05) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In Big Data Chart, the '''Case conformance''' measure and dimension has changed in a way that now it provides boolean values (true/false) instead of integer values (1/0). If [[Measure,_Dimension_and_Column_Settings#Other_settings|colorMappings]] are used for this measure or dimension to set specific colors to visualize conformant and nonconformant cases, the mapped values need to be changed as follows: '''1''' -> '''true''' and '''0''' -> '''false'''. Without the change, the mapped colors are not effective.<br />
<br />
Exmaple: Old configuration:<br />
<pre><br />
"colorMappings": {<br />
"1": "#36d475ff",<br />
"0": "#f5403bff"<br />
}<br />
</pre><br />
New configuration:<br />
<pre><br />
"colorMappings": {<br />
"true": "#36d475ff",<br />
"false": "#f5403bff"<br />
}<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is deprecated. Big data chart has allowed to process data both in Snowflake and SQL Server. Now the support for SQL Server is deprecated and the Big data chart will only support calculation in Snowflake. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). The OperationLog analysis is replaced by the [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog function]] and the Infcluencers analysis is replaced by the [[FindRootCauses_Function|FindRootCauses function]].<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [12, 14, 15, 16, 29];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
By default, Snowflake ODBC driver generates quite much logging to files which might unnecessarily fill up the disk space. It's recommended to set the LogLevel parameter to value 0. The path where the logs are created can be seen in Windows registry (key LogPath). More information about configuring Snowflake ODBC parameters: https://docs.snowflake.com/en/developer-guide/odbc/odbc-parameters.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07971: Machine learning based [[Clustering_Analysis|Clustering analysis]] can be run in Snowflake.<br />
* B-07989: In dashboard designer the stacking order of charts can be changed with buttons [[QPR_ProcessAnalyzer_Dashboard_Designer#Viewing_and_Editing_Dashboards|Bring to front, Send to back, Bring forward and Send backward]].<br />
* B-07977: For [[Sankey_Chart|sankey diagram]], added Start level and End level mappings to define custom start and end level for the sankey flows. Implemented also color mappings to define specific colors for specific values.<br />
* B-08010: To improve performance, charts are loaded and updated only when they are visible in the dashboard.<br />
* B-07975: Added following [[SQL_Expressions#Date_functions|date related functions]] to Snowflake: DayOfYear, DayOfWeek, WeekOfYear, Quarter.<br />
* B-07908: When [[QPR_ProcessAnalyzer_Project_Workspace#Duplicating_Model|model is duplicated]], also filters in the model are also duplicated.<br />
* B-07904: Filters and models API for expression language has been completed.<br />
* B-07991: In [[Filter_Selectors|case and event type filter selectors]], threshold whether the dropdown list or search dialog is shown can be defined using the ''Maximum Rows'' setting. Also the search dialog filters search results by other filter rules in the dashboard.<br />
* B-07999: Filters report has been changed to use the [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|expression language API for filters]].<br />
* B-07540: Added [[QPR_ProcessAnalyzer_Expressions#Throwing_objects|throw statement]] to expression language.<br />
* B-07813: UI components are updated. There are small visual improvements, such as in flowchart flows are routed a bit differently and in charts the hidden series is shown as strike-through in the legend.<br />
* B-07963: Following legacy analysis types have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29) (see more information in the note above).<br />
<br />
'''Fixed issues:'''<br />
* D-13777: Filters could not be created in charts when "Update Filter During Selection" setting was disabled.<br />
* D-13767: Automation per Event Types preset in in-memory incorrectly showed only one event type.<br />
* D-13756: Changing background color in KPI card didn't have any effect.<br />
* D-13812: "Exclude events" was incorrectly translated to "Exclure les cas" in French.<br />
* D-13815: Dashboard designer background grid was not visible in entire area in edit mode. Improved also the grid to match to snapping in move and resize.<br />
* D-13674: Business calendar dialog layout was incorrect when a model with a long name was selected to copy holidays.<br />
* D-13811: Table actions link to a new window didn't go to dashboard if there were other parameters in the link.<br />
* D-13601: Fixed issue where some presets may have given error when attribute value selection and the automatically selected attribute conflicted by the data type.<br />
* D-13753: While Snowflake model was selected, in Filters and User Rights reports the Columns list could not be opened.<br />
* D-13720: Now table column filter and sorting are preserved when resizing or zooming page.<br />
* D-13785: In tables increased number of rows to 20000 that are inspected to get available items shown in Excel-style column filter.<br />
* D-13759: Some statistical calculations had bad performance with large number of rows.<br />
* D-13787: Conformance statistics component didn't have scrollbars when text didn't fit to the visible area.<br />
* D-13788: In-memory "Nonconformance reason" selection caused error when two of them was selected in the same chart.<br />
* D-13783: When Analyzed objects was Generic analysis, column selection incorrectly caused "Analysis has not been selected" error.<br />
* D-13776: When measure name contained quotation mark, notification preview didn't work.<br />
* D-13747: Filtering with integer type of case id with case attribute value filter caused error in Snowflake.<br />
* D-13791: In Firefox, model selection in chart settings didn't show models in the first open.<br />
* D-11984: Recycle bin buttons didn't fit to the screen when screen width was small.<br />
* D-13780: Using CaseId case attribute in clustering analysis did not work with Snowflake 106 cases standard model.<br />
* D-13781: Clustering analysis produced Python error with a certain simple Snowflake model.<br />
* D-13730: Snowflake: Case attribute filtering didn't work when there are cases without row in cases table.<br />
* D-13803: There was chart configuration validation error in browser console when measures were moved into dimensions in Big data chart.<br />
* D-13758: There was performance issue with the Recent tasks system preset.<br />
* D-13793: Snowflake clustering failed when cluster count is larger than case count.<br />
* D-13763: SQL expression based filter rule with Where function to filter events didn't filter anything in Snowflake.<br />
* D-13804: Added missing Millisecond function to Snowflake.<br />
* D-13772: Expression EventLog.Cases.Events caused error "Value cannot be null".<br />
* D-13755: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13739: When switching between System reports there was error: "Uncaught Error: 2nd dimension not found. at y.getExpressionConfiguration".<br />
* D-12109: Sometimes flowcharts showed message "Error in querying event type measures. Input string was not in a correct format".<br />
* D-12473: Cost Savings by Automation preset gave sometimes error "Unable to cast object of type 'System.Double' to type 'System.String'".<br />
* D-13750: Snowflake model didn't work with the Case Duration vs. Manual Activities preset.<br />
* D-13657: There was error converting data type nvarchar to bigint.<br />
* D-13796: Some Snowflake operations didn't work with zero rows and columns.<br />
* D-12494: Now when chart size changes, the table column filters and sorting are preserved.<br />
* D-13736: In Performance benchmarking dialog, the Export result button exported wrong benchmark performance analysis result.<br />
* D-13609: Improved conformance analysis related filter names.<br />
* D-13594: Recycle bin buttons were not visible when opening recycle bin in a narrow screen.<br />
* D-13226: Tooltips in the model properties dialog are now translated.<br />
* D-12569: Table incorrectly showed ellipsis for narrow boolean type of columns showing checkboxes.<br />
* D-13391: Emptying date or datetime picker value was not registered and it didn't trigger functionality.<br />
* D-12621: Value search dialog didn't work with values containing backslashes.<br />
* D-13796: Some Snowflake operation didn't work with zero rows/columns.<br />
<br />
== QPR ProcessAnalyzer 2023.4 (build 2628) (released 2023-06-14) ==<br />
<br />
'''Features:'''<br />
* B-07767: Added [[Gantt_Chart|Gantt chart]] to visualize timeline of cases and events divided into swimlanes.<br />
* B-06383: Added [[Sankey_Chart|Sankey chart]] to visualize flow from one set of values to another.<br />
* B-07941: Implemented many more presets running in Snowflake models for compliance and operational excellence use cases. There are also presets for the path analysis and process bottlenecks identification.<br />
* B-07864: Snowflake conformance analysis shows now [[Conformance_Analysis#Top_Deviations_(in-memory)_/_Deviating_Flows_(Snowflake)|reasons for conformance deviations]], such as which event occurrences deviated from the design model.<br />
* B-07909: Snowflake conformance analysis visualizes [[Conformance_Analysis#Undesired_Events_(Snowflake)|undesired event types]] in table and flowchart.<br />
* B-07823: Flowchart Bottlenecks preset has been changed to show bottlenecks for event types. Also renewed the [[QPR_ProcessAnalyzer_Logs#Task_Log|Tasks reports]] to use expression language based interface.<br />
* B-07891: User interface has been [[Languages_and_Localization|translated into Portuguese]].<br />
* B-07873: Improved [[QPR_ProcessAnalyzer_Pivot_Table|pivot table]] visual layout to highlight totals and aggregated rows. Also the row titles are now visible in the top left.<br />
* B-07905: Added [[SQL_Expressions#Rank_functions|Rank related functions]] to Snowflake for writing more versatile custom KPI's, e.g., FirstValue, LastValue, NthValue, Lead and Lag.<br />
* B-07912: Added more SQL expression [[SQL_Expressions#Array_functions|array functions ArrayToString and ArrayOverlap]] to Snowflake.<br />
* B-06449: Added SQL expression functions ToTimestamp and TryToTimestamp for parsing timestamps from strings using provided format.<br />
* B-07959: Added new functions Base64Encode and Base64Decode to help using basic HTTP authentication when calling web services.<br />
* B-07206: SQL expressions support data [[SqlDataFrame_in_Expression_Language#WithClusterColumn|clustering]] which is an unsupervised machine learning algorithm to group data based on similarities.<br />
* B-07848: Data can be extracted from SAP using the encrypted [[Importing_Data_from_SAP#SNC_encrypted_connection|SNC connection]].<br />
* B-07903: Added expression language API to create and modify filters and models.<br />
* B-03103: [[QPR_ProcessAnalyzer_Logs#Task_Log|Task log]] (operation log) can be accessed in expression language.<br />
* B-07872: List aggregation with Distinct=true orders now items by their value.<br />
* B-07940: Removed "Count" aggregation from textual values in Big data chart (you can use the Case count, Event count, etc. selection instead).<br />
* B-07757: Backend support for datatables linking to user-definable Snowflake database, schema and table.<br />
* B-07825: Improved error message when trying to use non-existing attributes in Snowflake queries.<br />
* B-03101: To expression language, added try-catch-finally statement to handle thrown exceptions.<br />
* B-07861: Removed available and total virtual memory information from User settings dialog.<br />
* B-07902: Optimized sequences of joins in Snowflake queries to improve performance.<br />
* B-07837: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13709: If image width-to-height ratio was lower than container's ratio, image was incorrectly stretched to fit the container.<br />
* D-13660: Disabling filter rules didn't work in Snowflake models.<br />
* D-13526: Passing dataframes from SQL scripts to expression scripts didn't work.<br />
* D-13661: Snowflake conformance analysis crashed when there was no access to conformance related Snowflake UDF's.<br />
* D-13693: Resolved major Snowflake conformance analysis performance issues in the BPMN model handling.<br />
* D-13716: Snowflake root causes analysis incorrectly bypassed Snowflake cache.<br />
* D-13707: In SQL Scripting, the datatable analysis (number 18) didn't always copy the data table contents to the target table correctly.<br />
* D-13653: Big data flowchart Root causes preset showed incorrect legend.<br />
* D-13626: Flowchart froze when converting into big data flowchart and vice versa by modifying chart json settings.<br />
* D-13656: Root causes for attribute gave error "Failed to compare two elements in the array" in some situations.<br />
* D-11563: Pivot table had a minimum height of 300px, which caused bottom part of it to be out of view.<br />
* D-13704: In CSV file import, parsing now allows spaces between column separator and text quotation mark.<br />
* D-13598: Chart gave unclear error message when events datatable was not defined.<br />
* D-13655: Improved error messages for BPMN editor and conformance statistics.<br />
* D-13528: Error message for certain erroneous SQL expressions was unclear.<br />
* D-13677: "Flow occurrences with specific case attribute value" selection didn't work for in-memory chart.<br />
* D-13663: Pivot table border line was slightly broken in the header area.<br />
* D-13608: There was incorrect alignment of items in the table paging controls.<br />
* D-13703: Importing CSV file with some special characters to Snowflake failed (due to incorrect escaping in Snowflake staging files).<br />
* D-13708: Duplicating datatable using user defined table, removed data the source table.<br />
* D-13717: Dependency wheel crashed when there were zero weights and showing data labels.<br />
* D-13348: There was an unclear error message when Snowflake query had a certain incorrect expression.<br />
* D-13732: Pivot table Excel export contained headers formatted incorrectly.<br />
* D-13729: There was a JavaScript error when limited user tried to access business calendar.<br />
* D-13662: Percentile function didn't always work with timespan types.<br />
* D-13646: Using incorrectly configured model without cases datatable caused null reference error.<br />
* D-13629: When tried to use chart with a non-existing model, there is now a proper translated error message.<br />
<br />
== QPR ProcessAnalyzer 2023.3 (build 1990) (released 2023-05-03) ==<br />
<br />
'''Features:'''<br />
* B-07818: [[Conformance_Analysis|Conformance analysis]] is supported in Snowflake with following dashboard components: Big data chart, BPMN editor, Conformance statistics, and Design model selector.<br />
* B-07833: [[Root_Causes#Root_causes_in_flowchart|Root causes analysis for flowchart]] is available for Snowflake showing how the event and flow occurrences explain selected phenomena.<br />
* B-07786: Big data chart has more [[Big_Data_Chart#Measure_aggregations|measure aggregations]], such as median, percentile, standard deviation and variance. Also for textual items, unique values can be listed.<br />
* B-07795: [[QPR_ProcessAnalyzer_Table#Conditional_formatting|Conditional formatting]] supports also columns with non-numerical contents.<br />
* B-07830: [[Big_Data_Chart#Measure_aggregations|None and Any aggregations]] for Snowflake and user-friendly formatting for conformance violations.<br />
* B-06527: Error messages in [[Importing_Data_to_Datatable_from_CSV_File|CSV file import]] show also the column number to help working with CSV files with lot of columns.<br />
* B-07747: In-memory conformance checking accepts design models with multiple tasks having same name (same is followed by the Snowflake implementation).<br />
* B-07659: In-memory flowchart preset Case Conformance to visualize conformance checking violations.<br />
* B-07571: Added function IsConformant to backend to check whether cases are conformant.<br />
* B-07863: Added function ConformanceViolationsFlows to backend to return nonconformance reasons for violating cases.<br />
* B-07844: Support for "array" aggregation to return aggregated items as array.<br />
* B-07856: Support for creating and accessing arrays and objects in SQL expressions.<br />
* B-07860: Array handling functions and Tasks property for DesignModel entity.<br />
* B-07847: Added throttling for QPR ScriptLauncher client-side imports to limit memory usage.<br />
* B-07811: Snowflake query optimization to omit columns that are not used by the query.<br />
<br />
'''Fixed issues:'''<br />
* D-13632: Going from variations to event types led to very poor performance with certain models.<br />
* D-13628: Statistical calculations were incorrectly not applied in chart CSV export.<br />
* D-13575: SQL script may have given error "Operand type clash: nvarchar(max) was incompatible with sql_variant".<br />
* D-13597: UI supports now datatable column type "ShortString" (previously datatable contents preview and CSV import didn't work).<br />
* D-13536: Using business calendar sometimes gave error "System.InvalidOperationException: Collection was modified".<br />
* D-13477: Chart types without y-axis mapping caused an error when series mapping was used.<br />
* D-13453: _model variable was not available for Snowflake expression filter rules.<br />
* D-13527: Checkbox height didn't increase when long label needed to span to multiple lines.<br />
* D-13363: Snowflake query with EvaluateAfterAggregations and IsHidden failed when dimensioning by case id column.<br />
* D-13383: Snowflake query gave error "Invalid column name 'FromCase Name'".<br />
* D-13523: Request id was incorrectly shown as zeros in error messages.<br />
* D-13541: In CSV import, error message for maximum number of columns exceeded is improved (maximum is 300 column for SQL Server).<br />
* D-13583: Objects count in header didn't work for empty Snowflake model.<br />
* D-13553: Larger pacm files can now be imported, as there isn't error "Request body too large. The max request body size is 30000000 bytes".<br />
* D-13306: Stack overflow error was given when using SqlDataFrames.<br />
* D-13487: When Flows root and there was filter in Values expression, some flows were lost.<br />
* D-13540: SqlDataFrame query with 300 columns failed to error "WithExpressionColumn: No name given for the new column".<br />
* D-13429: Ordering in List aggregation couldn't find columns in dataframe query.<br />
* D-13406: Dataframe query with root FlowOccurrences and get value from cases caused error.<br />
* D-13538: There was incorrect handling of escaping characters in column names used in dimensions.<br />
* D-13633: Fixed ordering in List aggregation with null and empty values.<br />
* D-13636: Query that dimensions by numeric case attribute with AggregateOthers true, caused error.<br />
* D-13589: Creating Snowflake datatable did not connect to Snowflake.<br />
* D-13623: Value expressions without aggregation didn't work with AggregateOthers setting.<br />
* D-13554: In in-memory chart, percentile function might have return both Int64 and Double type of objects which cannot be sorted.<br />
* D-13481: Improved error message when trying to use deleted model.<br />
* D-13621: Dynamic value search dialog had incorrect font in lists.<br />
* D-13610: Some invalid BPMN files crashed BPMN editor.<br />
* D-13614: Checkbox label texts overflowed to right.<br />
* D-13520: Removed excessive parameters from the Query Designer for generic context queries.<br />
* D-12998: QPR icon was incorrectly positioned in header in Safari.<br />
* D-13480: Import to duration data type is removed from Snowflake datatables, and for local datatables duration type maximum size is checked.<br />
* D-13517: In Highcharts-based visualizationsm conditional formatting didn't work for other than the first y-axis mapping.<br />
* D-13529: In some presets containing several on-screen settings, when chart showed in error message, on-screen settings showed invalid selection.<br />
* D-13530: Opening dropdown list caused JavaScript error when the list contents should be empty after it previously contained items.<br />
* D-13486: Removed unreachable error message in CSV import.<br />
* D-13524: Fixed in-memory chart flow occurrences root measures "Event attribute (text)" and "Event attribute (number)" that caused error.<br />
<br />
== QPR ProcessAnalyzer 2023.2 (build 1478) (released 2023-03-22) ==<br />
<br />
'''Features:'''<br />
* B-07755: [[Business_Calendar|Business calendar]] for duration calculation is available for Snowflake models.<br />
* B-07719: In Snowflake dashboards, [[Big_Data_Chart#Using_measure_variables|measures can be assigned to variables]] and use the variables in other measures to create combined measures.<br />
* B-07746: Changed in-memory conformance checking to not show invalid flow violations where starting or ending event type is invalid.<br />
* B-07743: [[PA_Configuration_database_table#General_Settings|Default datasource]] can be configured for datatables created by scripts, allowing to set Snowflake as default.<br />
* B-07740: System memory indicator moved from the header to User settings Version information dialog.<br />
* B-07776: New SQL expressions functions Unicode, Char and Regexp, as a basis for future rule-based process mining.<br />
* B-07741: Backend support for aggregation operations Median, Percentile, Stdev, Stdevp, Var and Varp to Snowflake.<br />
* B-07742: Backend support for aggregation operation to list unique items in Snowflake.<br />
* B-07770: Optimized Snowflake SQL generation by combining consecutive WithColumn function calls into one select.<br />
<br />
'''Fixed issues:'''<br />
* D-13491: QPR ProcessAnalyzer server crashed now and then when sorting was in progress and the query was cancelled.<br />
* D-13380: Dimensioning integers in in-memory core calculation didn't work correctly as 0 and -1 were put to same bucket.<br />
* D-13385: In Workspace Bin, Delete Forever and Restore from Bin buttons were misaligned.<br />
* D-13332: Conformance checking didn't show in violations when there were multiple undesired events in same case.<br />
* D-13405: Images take now always all available space in image component area.<br />
* D-13417: KPI card without title was slightly misaligned vertically.<br />
* D-13438: Clicking selected event type or flow in flowchart didn't cancel the filter selection.<br />
* D-13350: Task log and Script log default filter end date is now empty by default.<br />
* D-13381: Disabled browser auto-complete from flowchart variation stepper and Workspace create/rename object dialog.<br />
* D-13347: Improved performance for in-memory business calendar calculation.<br />
* D-13335: In in-memory chart, filtering didn't work in "Flow occurrences" root "Flow occurrences with specific event attribute value" dimension.<br />
* D-13367: Percentage value wasn't displayed properly with German or Spanish language when event types were shown in object counts indicator.<br />
* D-13451: Exported filter file is now named based on selected filter name.<br />
* D-13378: In Big data chart, prevented error "Unable to aggregate from level RootCauses to level Custom".<br />
* D-13293: DataFrame query with root Flows and IncludeEvents and ExcludeEvents filter rules failed.<br />
* D-13370: Fixed issue where on-screen settings that didn't have any selectable items, showed a strange selection.<br />
* D-13392: Clustering analysis was incorrectly shown when originally in-memory chart was converted into big data chart by changing chart json settings.<br />
* D-12784: Some Snowflake queries incorrectly bypassed Snowflake caching because they used unique object names.<br />
* D-13456: Improved error messages for incorrectly configured on-screen settings.<br />
* D-13445: Conformance violations related translated terms have been fine-tuned for better translations into different languages.<br />
* D-13421: Improved error messages when trying to use model having some column mappings missing.<br />
* D-13485: Snowflake business calendar gave error when calendar contained Sunday.<br />
* D-13218: Windows event viewer incorrectly contained log entries that are not errors.<br />
* D-12634: Multiline text boxes width is set to non-changeable.<br />
* D-13034: Confirmation dialog to delete items permanently has been updated.<br />
* D-13288: In dialogs, the Create button didn't show the disabled state correctly.<br />
* D-13427: When dropdown lists didn't have any selectable items, the "N/A" text appeared and the list incorrectly took more space vertically.<br />
* D-13483: In Workspace, the new items menu was too narrow for Spanish texts.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.1 (build 1449) (released 2023-02-24) ==<br />
<br />
'''Features:'''<br />
* B-07690: System setting [[PA_Configuration_database_table#General_Settings|DatabaseId]] can be defined by administrator to get more simple table names in Snowflake.<br />
* B-07737: In flowchart Bottlenecks preset, originally used flow colors has been recovered.<br />
* B-07748: For Analyzed objects "Conformance checking findings" in charts, terminology has been revised and issue with the case count calculation fixed.<br />
* B-07663: In [[Chart_On-screen_Settings|on-screen settings]], when case/event attribute is selected, related attribute values list are reset.<br />
* B-07570: Backend support for [[Business_Calendar|business calendars]] in Snowflake.<br />
* B-07660: Backend support for conformance checking to show also the last event index and event type in NotCompleted reason.<br />
* B-07610: Memory counter related technical properties have been removed from expression language.<br />
<br />
'''Fixed issues:'''<br />
* D-13349: Opening dashboard containing Root causes preset with default settings jammed the system by generating lot of calculations (for more information, see previous release notes).<br />
* D-13277: Stacked charts with date type of data as series did incorrectly show gaps in columns/bars.<br />
* D-13270: Flowchart conditional formatting didn't work with duration multi-unit format.<br />
* D-13358: Calculation results caching works also across different user sessions.<br />
* D-13250: Dashboard with two charts connected with linked settings using variables ended up to to a never ending loop.<br />
* D-13230: SAP import did not automatically create columns to use the correct column types.<br />
* D-12857: Deeply recursive functions caused a crash without any trace.<br />
* D-12994: In Workspace, some buttons were not clickable due to breadcrumb covering them.<br />
* D-13249: In Workspace, there was incorrect error message for duplicate datatable names when there were items with only letter capitalization was different.<br />
* D-13232: In-memory chart Top variations preset is now sorted secondarily by average duration descending.<br />
* D-13300: Setting DashboardFilter variable to empty value didn't have any effect in dashboard but old value was incorrectly used.<br />
* D-12834: Limited the maximum number of dimensions to 20, to avoid too demanding queries for SQL Server.<br />
* D-12917: Changed visual indication of missing items in dropdown lists (it's no longer showing "***").<br />
* D-13111: In Root causes preset, there is now error message when trying to use weighting related columns when weighting isn't in use.<br />
* D-13124: SQLDataFrame query containing filter rule EventTypes aggregating from cases failed.<br />
* D-13207: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed.<br />
* D-13292: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed (rev.2).<br />
* D-12991: Dropdown list texts had some translations missing.<br />
<br />
== QPR ProcessAnalyzer 2023.1 (build 1433) (released 2023-02-07) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release contains a potentially severe issue, where some dashboards completely jam the system by generating lot of calculations. The issue may appear in dashboards that have been created in earlier releases and containing the Root causes preset with default settings. The issue will be fixed by the next release. The issue can be worked around by exporting the affected dashboard, modifying the dashboard file manually and importing the dashboard back. The required modification is to remove line(s) containing <pre>"preset": "RootCauses"</pre> and the comma from the preceding line.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Cases (analysis number: 5), Events (6), and EventTypes (7). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). Note that the legacy analyses removal don't affect the dashboarding functionality.<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [5, 6, 7];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2023.1, the '''.NET Desktop Runtime''' is not needed anymore for QPR ProcessAnalyzer Server, so it can be uninstalled. Also for QPR ScriptLauncher, ''.NET Desktop Runtime'' is not needed, but instead install the '''.NET Runtime''' (which is more lightweight). ''.NET Desktop Runtime'' contains the ''.NET Runtime'', so the actions are not mandatory when updating to QPR ProcessAnalyzer 2023.1.<br />
</div><br />
<br />
'''Features:'''<br />
* B-06997: Expression-based filter rules for Snowflake dashboards to allow versatile filtering and filtering from custom expressions.<br />
* B-07383: Improvements to linked settings to allow binding to variables, tags and filter rules [[Chart_Linked_Settings|(more information)]].<br />
* B-07508: Flowchart preset colors have been renewed to be more intuitive.<br />
* B-07184: Automation preset in flowchart has now options for selecting the Automation attribute and value.<br />
* B-07512: Changed datatable metadata can be refreshed from Snowflake, and all rows in the datatable can be deleted easily in Workspace [[QPR_ProcessAnalyzer_Project_Workspace#Datatables|(more information)]].<br />
* B-07440: Date when the release was made is now shown in User settings.<br />
* B-07595: WeekOfYear property for DateTime objects in expression language to get the week number of a year (between 1 and 53).<br />
* B-07623: In-memory expression language functions Random (to get random numbers) and Hash (to get hash value of string).<br />
* B-07612: Breadcrumb in Workspace has now a Home button to quickly navigate to the top level of the projects hierarchy.<br />
* B-07637: Language selector now shows the language options in local languages.<br />
* B-07228: Remove following deprecated analyses: Cases, Events, and EventTypes (see the release note above).<br />
* B-07538: Backend support: Snowflake root causes analysis can find event attribute related root causes.<br />
* B-07706: Backend support: Snowflake expression-based filter rules support for roots containing Where function.<br />
* B-07611: Removed following legacy filter rules: CaseAttributeTrend, EventAttributeTrend, EventTypeTrend, and Duration.<br />
* B-07598: Refactored client-side import for SQL scripting to use generic client-side task mechanism.<br />
* B-07716: ShortString columns are now properly detected in SQL Server queries.<br />
* B-07652: Now it's possible to pipe multiline expression strings to QPR ScriptLauncher.<br />
* B-07688: AddColumns function for Datatables to create multiple columns in one call.<br />
<br />
'''Fixed issues:'''<br />
* D-13092: Table conditional formatting didn't work when color code was fetched from other column.<br />
* D-13105: Some charts created in earlier release referring to non-existing presets names appeared as empty after software update.<br />
* D-13107: Flowcharts crashed and showed loading animation forever when setting color or flow thickness to non-numerical measure.<br />
* D-13104: In BPMN model editor, context menus to edit elements didn't appear.<br />
* D-12939: Script editor tabs Close buttons didn't work.<br />
* D-13154: "Search by case ID" didn't work in in-memory chart.<br />
* D-12933: CSV columns with only empty values were incorrectly auto-detected as integers.<br />
* D-12929: In-memory chart Root causes for case duration and Root causes for case attributes (weighted) had Custom expression missing.<br />
* D-12928: Pivot table headers were empty when there were two column levels and two values.<br />
* D-12924: Pivot table columns with Count and Distinct Count aggregations are now numeric and aligned right.<br />
* D-13033: Changing colors in chart settings Color palette caused "Item already exists" error and prevented changing colors.<br />
* D-12996: Tags referring to dashboard variables didn't work in Additional root expression.<br />
* D-12877: UI gave error in some situations: Uncaught TypeError: Cannot read properties of undefined (reading 'min').<br />
* D-13071: Prevented selecting two or more of the Y-axis, X-axis and series mappings at the same time for the same measure or dimension.<br />
* D-12895: Big data chart crashed when on-screen setting contained event type selector and there were no event type filter set.<br />
* D-13231: Tooltips for dashboard name, model selector and filter selector in header show now the content text instead of generic instruction.<br />
* D-13139: There was an error when tried to create filter for a custom expression where selected data type didn't match with the actual type of data.<br />
* D-12988: Chart presets selection in chart settings showed unnecessary tooltip.<br />
* D-12901: When set sampling over 1 million, Snowflake models gave error: parameter value out of range: size of fixed sample. Must be between 0 and 1,000,000.<br />
* D-12904: Creating expression filter having lower/greater logic with root objects sampling failed.<br />
* D-12923: Chart schema didn't accept pivotAggregation in dimensions/columns.<br />
* D-12926: Root causes columns Selected weight, Compared weight and Total weight have now correct float data type.<br />
* D-12880: In out-of-the box dashboards, chart titles and subtitles were not translated.<br />
* D-12916: Improved filter rule description text in Filter rule editor dialog for expression filter rules.<br />
* D-12889: No clear error message was given when user tried to export corrupted model from .pacm file.<br />
* D-12869: Date selector in on-screen settings had inconsistent vertical alignment.<br />
* D-12938: When creating a filter with lasso and selecting a single data point only, "equals" kind of filter rule is now created.<br />
* D-12989: "Running tasks as specific time" system report may have ended up in loop causing following error: Maximum call stack size exceeded error.<br />
* D-13010: Pivot table sometimes ended up to never-ending resizing loop when browser zoom was more than 100%.<br />
* D-12790: Expression language: DataFrame.SetColumns: Initializing and using variables defined in closure of SetColumns function parameter didn't work<br />
* D-12927: All on-screen settings were not be visible in narrow charts having several on-screen settings.<br />
* D-12937: Added maximum value limitation to several number input fields in charts.<br />
* D-12947: Message dialog didn't show line breaks correctly (e.g., in CSV file import).<br />
* D-12948: Defining column setting caused error when Measure Expression was not defined.<br />
* D-12946: Filter rule text couldn't be seen entirely from tooltip.<br />
* D-12983: When range filtering using integer values in Highcharts chart, filter is now shown as integer value.<br />
* D-12984: When range filtering in Highcharts charts and there is category axis, filter rule is now based on individual (category) values.<br />
* D-12930: When creating filters from charts using date type of X-axis with lasso, "greater than or equal" and "less than or equal" filter rules are not created.<br />
* D-12920: "Where" function in DataFrame lost column data types of the original DataFrame.<br />
* D-13048: Model notifications failed with certain measures that define variables in root expression leading to error: Variable "sampleSize" already exists in this context.<br />
* D-13116: BPMN editor had some translations missing.<br />
* D-13019: Datatable and script selectors show now datatable/script name instead of id, when opening selector having existing selections.<br />
* D-12951: Changing additional root expression in flowchart didn't refresh the flowchart.<br />
* D-13147: Filter rule boxes in header had different widths, and Add filter rule button vertical alignment was incorrect.<br />
* D-12907: Sometimes case attribute selection showed incorrect attribute name for empty model.<br />
* D-13148: Filters and Datatables system reports loaded unnecessarily twice which could be seen as blinking.<br />
* D-12844: In dataframe query, FlowOccurrences in root and GetValueFrom Cases with filter gave null reference exception<br />
* D-12915: Repeating certain query twice with aggregations in Events root generated invalid SQL<br />
* D-12728: Was huge amount logs in server during client side import (manual testing required as identification)<br />
* D-13156: Persist function failed to snowflake: Invalid unicode escape sequence '\u0027ACCE'; should be at most '\u0010FFFF'.<br />
* D-12876: Flows/FlowOccurrences in root didn't work with SqlExpressionValue filtering.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2022.8 (build 1397) (released 2023-01-11) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release fixes an issue where extracting large datasets from SAP increases memory consumption considerably and may lead to out-of-memory error. This release contains packages for both QPR ScriptLauncher and QPR ProcessAnalyzer Server. If SAP extractions are done using QPR ScriptLauncher in client side mode (ExecuteInClientSide=1), it's enough to update QPR ScriptLauncher to fix this issue.<br />
</div><br />
<br />
'''Fixed issues:'''<br />
* D-12941: Extracting data from SAP consumed unnecessary lot of memory and may have led to out-of-memory error (both when running using QPR ScriptLauncher and in server side).<br />
<br />
== QPR ProcessAnalyzer 2022.8 (build 1396) (released 2022-12-30) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Creating datatables with duplicate names in the same project is prevented, and possible existing duplicate names are automatically changed to unique names with a random suffix. If there are duplicate names, they can be renamed either before updating QPR ProcessAnalyzer (to avoid automatic renaming) or after the update (by changing suffixed names). If the renamed datatables are used by models, the linkage will break because it's based on the datatable name. Creating duplicate datatables has already been prevented in the UI, but the improved method works also in the API level.<br />
<br />
Following SQL query can be used to list datatables (and project id) having duplicate names:<br />
SELECT ITA_NAME, ITA_PROJECT_ID<br />
FROM PA_INTEGRATION_TABLE<br />
GROUP BY ITA_NAME, ITA_PROJECT_ID<br />
HAVING Count(*) > 1<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
If trying to use business calendar for a model that doesn't have the business calendar defined, there will now be an error message instead of showing the chart. Either unselect the business calendar checkbox for the measure or dimension, or define a business calendar to the model. In this situation in earlier releases the business calendar was ignored and full time calculation used.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07498: Automation and Operational Excellence presets and Root causes analysis (for Snowflake), Weighted root causes analysis and Event scattering preset (for Snowflake and in-memory), Root causes for case duration (in-memory).<br />
* B-07177: Flexible mappings, user selectable aggregations and conditional formatting for Pivot table, and flexible mappings for KPI Card.<br />
* B-07518: New function named Query to run call /api/expression/query.<br />
* B-07294: In Workspace, the left side projects hierarchy can be collapsed and expanded to make more space to project contents.<br />
* B-06814: In SQL expressions, new function DurationBetweenDates to calculate duration between timestamps precisely.<br />
* B-07519: Replaced DateDiff function with the new DurationBetweenDates function in big data chart.<br />
* B-07531: In SQL expressions, new mathematical functions Abs, Log, Mod, Power, Rand, Sign and Sqrt.<br />
* B-07297: To optimize performance, Snowflake queries are automatically cancelled if they are not needed by UI.<br />
* B-07569: To optimize performance, TakeSample function implementation is improved for Snowflake.<br />
* B-07198: Several performance improvements to DataFrame queries (used in Snowflake).<br />
* B-07464: Added Lead and Lag functions to SqlDataFrames to support getting previous and next event.<br />
* B-07470: New ExtractSap function to fetch data from SAP using expression language.<br />
* B-07536: New Pivot function to SqlDataFrames to enable root causes analysis.<br />
* B-07488: Primary keys can be set to datatables to improve calculation performance (UI will follow later).<br />
* B-07515: Added RootCauseAnalysis function to SqlDataFrames.<br />
* B-07546: RootCauseAnalysis function support for complex weighting expressions.<br />
* B-03052: Support for user-defined variables in /api/expression/query.<br />
* B-07565: Support for NumberPrecision, DatetimeTruncation and TimespanPrecision properties for Values section in in-memory query.<br />
* B-07513: For product activation file handling, replaced mutex based implementation with exclusive file lock.<br />
* B-07480: Expression language support for DataFlows for data extraction.<br />
* B-07613: Removed support for SQL Server based R scripting.<br />
* B-07567: Take datatable primary keys into use in expression builder to improve performance (part 2).<br />
* B-07588: Remove total memory information from log writing and DateDiff function for in-memory.<br />
<br />
'''Fixed issues:'''<br />
* D-12715: Snowflake calculated imprecisely some operations containing division and aggregation.<br />
* D-12761: Progress bar of the CSV import dialog didn't show any progress.<br />
* D-12799: Opening datatable contents dialog settings was slow when there were lot of rows in the datatable.<br />
* D-12089: Include conforming/nonconforming cases made BPMN editor no responding.<br />
* D-12496: Datagrid filter search keyword didn't work for rounded values, so the search was hidden for other than textual data.<br />
* D-12704: Durations as quarters was calculated incorrectly in charts.<br />
* D-12662: Fixed issue where some special literals in custom expressions didn't work.<br />
* D-12403: Setting Notifications on a model had some visual issues.<br />
* D-12859: Dependency wheel visualization crashed with nulls values in From and To mappings.<br />
* D-12660: Removed unnecessary float conversions in SQL expressions.<br />
* D-12653: In-memory datafram OrderByColumns function with mixed values failed.<br />
* D-12657: When trying to use milliseconds period in some presets, frontend frozed.<br />
* D-12706: Line breaks in data were shown in many places where it's undesired.<br />
* D-12719: Syncfusion dialog headers showed backslaces incorrectly.<br />
* D-12372: Refused to run the JavaScript URL because it violated the Content Security Policy directive.<br />
* D-12730: Logging out when filter selection is in progress, gave javascript error.<br />
* D-12705: Header object counts tooltip was sometimes messed after logout.<br />
* D-12384: Selected project was not highlighted for whole project name string.<br />
* D-12581: Prevented creating duplicate datatable names in same project in parallel execution.<br />
* D-12722: There was incorrect syntax near '<' when running SqlDataFrame expressions.<br />
* D-12736: Swedish and Finnish translation improvements for object counter tooltips.<br />
* D-12702: For BPMN Editor component "Something went wrong" error was given when switching from in-memory to Snowflake model.<br />
* D-12712: UI gave error: TypeError: Cannot read properties of undefined (reading 'id').<br />
* D-12738: Business calendar showed total business time when calendar configuration was invalid.<br />
* D-12776: Special character filter caused JavaScript SyntaxError.<br />
* D-12785: Unnecessary vertical scrollbar displayed for main header toolbar.<br />
* D-12164: There was unnecessary UnauthorizedAccess errors in logs.<br />
* D-12580: Case duration was not same when comparing Big data chart with in-memory chart for same data.<br />
* D-12768: Data grid links and variable change actions didn't work when grouping was used.<br />
* D-12735: FindRootCauses (in-memory) function filtered out cases with zero contribution.<br />
* D-12763: --#CallWebService didn't work from ScriptLauncher.<br />
* D-12789: There was timeout in SQL queries to scripting sandbox.<br />
<br />
== QPR ProcessAnalyzer 2022.7 (build 1331) (released 2022-11-15) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2022.7, to improve security expression language operations that modify data or connect to external datasources are prevented in dashboard custom expressions. The limitation is required, because when a dashboard is opened, its expressions are run with the user's permissions, and the user need to trust the expressions don't perform any unexpected operations, such as delete data. The full functionality of the expression language is available in the scripts and in the Expression Designer.<br />
<br />
The following functions and operations are prevented in dashboards: SendEmail(), CallWebService(), ImportOdbc(), ImportOdbcSecure(), Model.DeletePermanently(), Model.Restore(), Model.TriggerNotifications(), Project.DeletePermanently(), Project.Restore(), Project.CreateDatatable(), Datatable.AddColumn(), Datatable.DeletePermanently(), Datatable.Import(), Datatable.Merge(), Datatable.RemoveColumns(), Datatable.RenameColumns(), Datatable.Truncate(), RecycleBin.DeletePermanently(), and call SQL script. Calling expression scripts is allowed, but in the script all previously mentioned operations are prevented.<br />
<br />
Following SQL query can be executed in the QPR ProcessAnalyzer metadata database to reveal dashboards that potentially have prevented expressions:<br />
SELECT * FROM [PA_UI_ELEMENT] WHERE [UIE_PROPERTIES] LIKE '%SendEmail(%' OR [UIE_PROPERTIES] LIKE '%CallWebService(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbc(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbcSecure(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Restore(%' OR [UIE_PROPERTIES] LIKE '%TriggerNotifications(%' OR [UIE_PROPERTIES] LIKE '%CreateDatatable(%' OR [UIE_PROPERTIES] LIKE '%AddColumn(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Import(%' OR [UIE_PROPERTIES] LIKE '%Merge(%' OR [UIE_PROPERTIES] LIKE '%RemoveColumns(%' OR [UIE_PROPERTIES] LIKE '%RenameColumns(%'<br />
</div><br />
<br />
'''Features:'''<br />
* B-07287: Process Discovery and most important presets for Snowflake.<br />
* B-07271: "Last Row Aggregates Over-limit Rows" setting for big data chart.<br />
* B-06431: Snowflake datatables support for database views in the datasource.<br />
* B-07266: Security: "limited mode" to prevent data modifications and external calls from dashboard expressions.<br />
* B-07097: Improved flowchart root causes color scales.<br />
* B-07363: SQL LIKE function support for escape character.<br />
* B-06877: Improved variation queries performance in Snowflake, part 1.<br />
* B-07444: Improved variation queries performance in Snowflake, part 2.<br />
* B-07382: Support for empty strings and nulls in event type names in dataframe processing.<br />
* B-07273: WithRowNumberColumn, WithRankColumn, WithDenseRankColumn support for descending sorting.<br />
* B-07303: FindRootCauses function support for weighting expression.<br />
* B-07327: Unpivot function for SqlDataFrames (for root cause analysis).<br />
* B-07385: Align token lifetime with SESSION_MAXIMUM_DURATION setting.<br />
* B-07500: ColumnMappings property for IDataFrame and DataTables.<br />
* B-07499: IDataFrame.ApplyFilter function to filter events data using a JSON-based filter.<br />
* B-07469: Translation updates for release 2022.7.<br />
<br />
'''Fixed issues:'''<br />
* D-11630: Drag and drop from chart settings to main header was working incorrectly for filter and root cause rules.<br />
* D-12455: Moving a chart filter from one chart to another created a root cause analysis filter.<br />
* D-12266: Root causes analysis showed incorrect results when certain combination of filters.<br />
* D-12525: Numerical values in Excel export in data grid was formatted incorrectly.<br />
* D-12534: Restoring item from recycle bin changed project from Bin to previous project.<br />
* D-12529: Measure specific datalabel mapping did not work correctly when also mapped to Y-axis.<br />
* D-12532: Multi-selection options caused layout issue for Chart setting.<br />
* D-12541: Layout issue for Polish in multiselect list search dialog.<br />
* D-11277: Increase/decrease Icons were missing in the dimension sorting for Mac.<br />
* D-12552: Uncaught Error: Diagram.selectCollection given something that is not a Part: null.<br />
* D-12567: Tooltip incorrectly showed for label component containing only spaces.<br />
* D-12438: Operation was cancelled because it was replaced by a new operation.<br />
* D-12551: Some expressions didn't work as calculated case/event attributes.<br />
* D-11720: Chart buttons were not visible in Apple Safari and iPad.<br />
* D-12544: On-screen settings "options" parameter did not work.<br />
* D-12528: Multi-unit time unit selection appeared where it's not applicable.<br />
* D-12583: Error message should be provided for invalid settings input than just display JS errors.<br />
* D-12599: Tooltips didn't show correct measures/dimensions when "Show in tooltip" mappings are used.<br />
* D-12561: Chart settings content was incorrectly drawn outside of the chart dialog.<br />
* D-12568: Reload UI sometimes crashed chart having multiselect on-screen settings.<br />
* D-12572: Main header toolbar lost when refresh maximized PA chart.<br />
* D-12612: Drop Unused Filters After setting incorrectly allowed zero seconds.<br />
* D-12533: Error message keeped blinking in Analysis view.<br />
* D-12608: User could not select or add new case attribute when current select attribute doesn't exist.<br />
* D-12451: Prevented deleting running script.<br />
* D-12516: Windows event viewer warning: Failed to gracefully shutdown application.<br />
* D-12523: Business calendar performance - part 2.<br />
* D-12538: Column with same name could be added multiple times to datatable using expression language.<br />
* D-12582: Improved EMS mutex code to support multiple PA service in one server.<br />
* D-12624: Synchronize new (empty) data table generated failed queries in Snowflake.<br />
* D-12622: Advanced setting page reserved room for the expression editor frame that did not exist.<br />
* D-11295: In on-screen settings, some UI controls were vertically misaligned.<br />
* D-11625: The heights of the parameter option menu in the clustering tab was not well aligned.<br />
* D-12103: Small dropdown list layout issue.<br />
* D-12633: Align issue for Column related Advanced settings.<br />
* D-12505: Search dialog didn't escape % and _ characters correctly in dataframe processing.<br />
* D-12645: Tabs in expression settings dialog were partly hidden when dialog is narrow.<br />
* D-11382: Moving of flowchart was sometimes shaky.<br />
* D-12655: Filter rule tooltips in header were styled incorrectly.<br />
* D-12656: Large integer values in filter jsons were incorrectly presented as small integers.<br />
* D-12661: Some exported filters contained unnecessary "invert" property.<br />
* D-12500: Model with numeric case id's and filtering with the attribute mapped as case id: ERROR [22018] Numeric value <nowiki>''</nowiki> is not recognized.<br />
* D-12509: Filtering null values didn't work in boolean attributes in Snowflake.<br />
* D-12571: In dataframe processing in SQL Server, dividing two integers should not make rounding to integer.<br />
* D-12610: Setting for global DropUnusedFiltersAfter was missing.<br />
* D-12613: Filtering with case/event attributes with null values didn't match in Snowflake models.<br />
* D-12617: Model didn't work when DropUnusedFiltersAfter is 00:00:00.<br />
* D-12618: If model ConfigurationJson is null, Configuration property didn't work.<br />
* D-12620: Filtering didn't work when there are backslaces in attribute names in Snowflake models.<br />
* D-12643: AttributeFunctionCallExpression did not always work properly in array context.<br />
* D-12647: SqlDataFrame with SQL Server: Comparing literals to variant column values failed.<br />
* D-12648: Models that have DropUnusedModelsAfter setting caused "The sliding expiration value must be positive" error.<br />
* D-11526: It was unable to translate Unicode character \uD83D at index 176 to specified code page.<br />
* D-12637: In application startup arised FATAL Application startup exception System.UnauthorizedAccessException: Access to the path 'Global\MutexQPRPAActivation' is denied.<br />
<br />
== Old Releases ==<br />
See older releases in [[QPR ProcessAnalyzer Release Archive]]<br />
__NOTOC__<br />
<br />
[[Category: QPR ProcessAnalyzer]]</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&diff=24460QPR ProcessAnalyzer Release Notes2024-02-27T19:16:21Z<p>Ollvihe: /* Latest: Additional release for QPR ProcessAnalyzer 2024.2 (build 5509) (released 2024-02-27) */</p>
<hr />
<div>This page lists all new features and fixed issues for each QPR ProcessAnalyzer release.<br />
<br />
== Next Release: QPR ProcessAnalyzer 2024.3 (planned release date 2024-04-02) ==<br />
<br />
'''Features:'''<br />
<br />
<br />
'''Fixed issues:'''<br />
<br />
<br />
== Latest: Additional release for QPR ProcessAnalyzer 2024.2 (build 5509) (released 2024-02-27) ==<br />
<br />
'''Features:'''<br />
<br />
* B-06280: User management dialog shows whether users have password defined and unnecessary passwords can be removed to improve security.<br />
<br />
'''Fixed issues:'''<br />
<br />
* D-14045: Fixed issue where users with Viewer or Analyzer role couldn't create filters in Snowflake models.<br />
<br />
== QPR ProcessAnalyzer 2024.2 (build 5438) (released 2024-02-21) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue: Using Snowflake models and dashboards doesn't work with Viewer and Analyzer roles. The reason is that cache tables created to Snowflake incorrectly require the GenericWrite permission. Workaround is to give users the Designer role which will give the needed GenericWrite permission. Note that the Designer role gives many permissions to the user for the project [[Roles_and_Permissions#Roles_and_Permissions|(more information)]]. Fixed in the next release (D-14045).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
The legacy User permissions report (analysis number 11) and Filters report (analysis number 30) used in SQL scripts have been removed. Use instead the expressions language to query filters and user permissions, e.g., [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|Models.Filters]] and [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
New version of the Design diagram component has been improved with object-specific measures, and the previous common measures are not migrated into object-specific measures. Thus, the measures need to be configured again, or manually edit the chart json settings (if needed please ask instructions from QPR CustomerCare).<br />
</div><br />
<br />
'''Features:'''<br />
* B-08022: Design diagram supports now BPMN notation, elbow style flows and object-specific measures.<br />
* B-08232: Entire future eventlogs can be [[Create_Predicted_Eventlog|predicted]] based on generative AI models running in Snowflake.<br />
* B-08166: Added expression language function [[Generic_Functions_in_QPR_ProcessAnalyzer#OpenAIChatCompletion|OpenAIChatCompletion]] to answer natural language prompts based on OpenAI ChatGPT API.<br />
* B-08177: Snowflake query performance has been improved by introducing caching of filtered eventlogs using Snowflake tables.<br />
* B-08196: Conditional formatting rules can be defined for [[QPR_ProcessAnalyzer_Table#Textual_equal_rules_for_background_color|textual and boolean values]].<br />
* B-08213: Big data chart expressions event type selections to be multi-select where applicable.<br />
* B-08205: Expression language API is available for storing [[Storing_Secrets_for_Scripts|secrets]] for scripts.<br />
* B-07780: Chart [[QPR_ProcessAnalyzer_Chart#Variable_mappings|variable mappings]] has been removed - use the [[Chart_Linked_Settings|linked settings]] instead. Dashboards using variable mappings are automatically converted to use linked settings.<br />
* B-08117: Added ToSqlDataFrame function to convert in-memory dataframe into SQL dataframes.<br />
* B-08174: Only non-default parameters values are written to the operation log.<br />
* B-08200: Timestamps in System reports are shown in user workstation local time.<br />
* B-08171: Dashboard id has been added to queries, to track from which dashboard queries are originating.<br />
* B-07144: Remove legacy User permissions report (analysis number 11) and Filters report (analysis number 30) in SQL scripts (see note above).<br />
* B-08193: Added retry mechanism to QPR ScriptLauncher to recover if connection to server breaks.<br />
* B-08202: Updated copyright for year 2024.<br />
* B-08199: Frontend components have been updated.<br />
* B-08203: Backend components have been updated.<br />
* B-08209: Translations updated for release 2024.2.<br />
<br />
'''Fixed issues:'''<br />
* D-13972: Some measures/dimensions/columns in Big data chart didn't show the expressions level filtering.<br />
* D-14015: Fixed business calendar incorrect calculation when business period covered entire day.<br />
* D-14014: Fixed issue where Snowflake business calendar could not have end time as 00:00.<br />
* D-13962: System variable values were interpreted incorrectly when used in linked settings.<br />
* D-13971: HiddenInNavigation and SortOrder variables didn't work in navigation menu dashboards list.<br />
* D-13959: Removed possibility to add datatable columns with the legacy "any" data type.<br />
* D-13991: Improved drop-down selector component to handle empty strings as variable values.<br />
* D-13965: Datatable column name length was validated incorrectly which may have caused error in saving with too long column names.<br />
* D-13958: Project names showed unnecessary html escaping in the "Move to" menu.<br />
* D-13964: Model attributes and notifications dialogs gave error when trying to use dashboard tags.<br />
* D-13960: Added missing translations for list of permission list and 12-hour clock format.<br />
* D-13966: Fixed issue were root causes chart tooltip sometimes didn't disappear.<br />
* D-13969: Datatable column schema export sometimes showed empty for the key column.<br />
* D-13862: Session token was not accepted when url path capitalization is different.<br />
* D-13942: Datatable could not be dimensioned if it has column named "CaseId".<br />
* D-13980: Business calendar dialog crashed when tried to open it for a model without access.<br />
* D-13983: Notifications dialog didn't validate situation when same name was used in a measure and dimension.<br />
* D-13981: Dashboard import set incorrect model id to dashboard if there was no access to any model.<br />
* D-11276: Translations were missing for 12-hour clock dates (AM and PM) in dashboards.<br />
* D-13977: Multi-select dropdown lists showed some special characters incorrectly.<br />
* D-13945: Syncfusion toast message didn't work when text contains ${[]}.<br />
* D-13930: Pivot table throws javascript error when certain clicks.<br />
* D-13273: Duplicate datatable row count didn't shown correctly.<br />
* D-13994: There was an error in the in-memory chart with some flow related measures about duplicate variable names when same measure was defined twice.<br />
* D-13985: Models list dots menu had texts misaligned in narrow screens.<br />
* D-13995: In Workspace, wrong datatable was selected after duplication when non-default sorting was applied.<br />
* D-13997: Workspace tables column filtering search caused JavaScript errors.<br />
* D-13978: In table Excel export, the last row representing other items appeared incorrectly for in-memory chart.<br />
* D-14007: In System reports, model related selections are hidden from the Analyzed objects lists.<br />
* D-14005: In big data chart, changing to custom expression caused crash with some expressions having case/event attribute.<br />
* D-14003: When dimensioning was not used, pivot table values were incorrectly rounded in the server side.<br />
* D-14004: Removed empty filters from queries to optimize them.<br />
* D-13988: Fixed issue where data grid context menu rendered initially as too high.<br />
* D-13979: BPMN model editor element settings use now Open Sans font.<br />
* D-14013: Fixed incorrect expression "Duration between first and last occurrence" in big data chart event types.<br />
* D-13984: Fixed the error of refusing to run the JavaScript URL.<br />
* D-14031: ThrownObject property was not included to http error response when error came from the script.<br />
<br />
== QPR ProcessAnalyzer 2024.1 (build 4784) (released 2024-01-10) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue fixed in QPR ProcessAnalyzer 2024.2: In Big data chart, some measures, dimensions and columns have the filtering option missing. The issue concerns for example Duration between events, Path starting/until between specific events, and Cases where event occurs before other selections. Workaround is to set the filter in the chart json settings: the filter can be configured to another expression and copied to the correct expression.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
QPR ProcessAnalyzer Server and QPR ScriptLauncher are now using .Net 8 (previous was .Net 6). When updating to this release, install the .Net 8 Runtime ([[Updating_QPR_ProcessAnalyzer_Server|see more]]). The .Net 6 doesn't need to be uninstalled immediately because .Net 6 and .Net 8 work side-by-side, but due to security reasons, the unused .Net 6 should eventually be uninstalled.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In this release, all filters that don't contain any filter rules, are removed. These are legacy filters which have not been visible in the UI.<br />
</div><br />
<br />
'''Features:'''<br />
* B-08019: New component [[Design_Diagram|Design Diagram]] for showing user-created diagrams in dashboards where to visualize process mining metrics.<br />
* B-08087: Generic [[Dropdown_List_Selector|dropdown list selector]] works with Snowflake models allowing to add selection lists for any values.<br />
* B-08163: Linked settings support for binding to [[Chart_Linked_Settings#Binding_to_case_attribute_filters_with_attribute_name_and_attribute_values|case attribute filter values without defining case attribute name]].<br />
* B-08170: Snowflake model filters can be [[Filtering_in_QPR_ProcessAnalyzer#Filter_actions|saved as new models]] which can be used to create snapshots of part of models.<br />
* B-08093: Multiple dashboards can be exported to same file, and model can be set for imported dashboards.<br />
* B-08161: Added [[Datatable_in_Expression_Language#Modify|Modify]] function to change datatable properties and improved [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#CreateDatatable|CreateDatatable]] function for creating datatables.<br />
* B-08122: Added new system report to list dashboards.<br />
* B-08173: Removed legacy filters that didn't have any filter rules.<br />
* B-07961: In OperationLog, changed parameters to json format and added request id.<br />
* B-08069: Added DashboardId property to [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog]] in expression language.<br />
* B-08139: Added [[Datatable_in_Expression_Language#UpdateRows|UpdateRows]] function to update existing rows in datatables with similar logic than SQL update.<br />
* B-08115: Added [[Datatable_in_Expression_Language#DeleteRows|DeleteRows]] function to delete rows in datatables with similar logic than SQL delete.<br />
* B-08149: QPR ProcessAnalyzer has been updated to .Net 8.<br />
* B-08054: Changed Scripts property in generic context to return all scripts, instead of legacy system level scripts.<br />
* B-08138: Changed Synchronize function to remove all columns when no Snowflake table exists.<br />
* B-07689: For datatables, [[Datatable_in_Expression_Language#ForeignKeys|foreign keys]] to other datatables can be defined using expression language.<br />
* B-08176: Translation updates for release 2024.1.<br />
* B-08175: Workspace should show timestamps in user's local time.<br />
<br />
'''Fixed issues:'''<br />
* D-13913: Datatable properties dialog incorrectly showed linked models from other projects.<br />
* D-13916: Chart filter could not be defined for some expressions in Big data chart.<br />
* D-13933: Navigation menu selected item wasn't highlighted when used Snowflake models.<br />
* D-13906: In Conformance Analysis, deviating flows were not translated.<br />
* D-13907: Improved translation related to datatable properties dialog "Used by models" field.<br />
* D-13904: There was an unclear error message in Snowflake, as exception code 1 was returned without AttributeName and ModelName properties when non-existing attribute was in filter.<br />
* D-13911: Fixed small glitches in the opening and closing of drop-down lists.<br />
* D-13918: Datatable could be configured incorrectly to use table for other datatable.<br />
* D-13932: Duplicating datatable with custom table in datasource losed all data.<br />
* D-11002: Removed legacy in-memory prediction preset.<br />
* D-13912: Added check that array cannot be stored to dashboard Content property.<br />
* D-13936: Query designer default query didn't work with Snowflake models.<br />
* D-13938: There was an incorrect logging with some operations related to ScriptLauncher.<br />
* D-13923: Snowflake expressions didn't work with Where function in root referring to case attribute.<br />
* D-13939: ApplyFilter function gave null reference error for non-existing attribute name.<br />
* D-13931: There were issues with AllowExternalDatasources and EnableFullFunctionality settings.<br />
<br />
== QPR ProcessAnalyzer 2023.7 (build 4326) (released 2023-11-28) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Limitation for the maximum amount of data (B-07636) causes a behavior change in in-memory charts that have the Maximum rows settings empty and have the sorting defined. In certain cases, the order in which measures are evaluated changes (due to an internal performance optimization). If there are custom expressions that define variables, the variables may not be available in other measures anymore. As a resolution, either redefine the variables in those measure expressions or add those measures secondarily to the sorting.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Default query timeout of 30 minutes has been added for --#ImportOdbcQuery, --#ImportSqlQuery and --#ImportOleDbQuery commands. If a query run is taking longer than the timeout, the query is stopped. The timeout can be adjusted using the '''QueryExecutionTimeout''' parameter. Previously, there has been no timeout, so queries that take more than 30 minutes require configuring a longer timeout.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Incorrectly configured [[Chart_Linked_Settings|linked settings]] in charts (available in the ''Advanced'' tab) give now an error message, if they are referring to non-existing measures, dimensions or columns. Previously, incorrect linked settings were ignored. To fix the error message, remove the incorrect linked settings.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07511: Datatables have a [[Datatable_Properties_Dialog|dialog]] to view datatable properties, write description, set the Snowflake source table, add/modify/delete columns, and set the datatable key.<br />
* B-08150: Added setting [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|Apply chart filters first]] to determine whether chart filter rules or dashboard filter rules are applied first when chart queries are filtered.<br />
* B-08091: When filtering charts in Snowflake, case attribute filter is created instead of case id filter.<br />
* B-08091: [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|New setting]] to define whether cases or events are filtered by default.<br />
* B-08091: New preset "Looping paths" to detect whether there are repeating patterns of events.<br />
* B-08091: Duration between events calculation ignores negative durations in Snowflake.<br />
* B-08091: Chart loading animation has been renewed.<br />
* B-07636: To prevent dashboards from jamming when querying too much data, added [[QPR_ProcessAnalyzer_Chart#Available_Visualizations|limitations]] to the amount of data that charts can visualize. Note that the limitation concerns the aggregated data that is visualized, not the source event log data.<br />
* B-08017: [[Dashboard_in_Expression_Language|Dashboards API]] has been added to expression language, allowing to create, modify and delete dashboards in scripts.<br />
* B-08056: Following properties have been added to [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#User.2FGroup|user objects]] in expression language: IsLocked, LastLockedDate, LastLoginDate.<br />
* B-08053: [[Navigation_Menu#System_Reports|User rights report]] has been refactored to use [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property in the expression language. The change also simplifies the report as now it only shows the direct role assignments that are visible in the [[Manage_Users_and_Groups|User Management]].<br />
* B-08151: For Snowflake expressions support for following [[SQL_Expressions#Window_functions|windowing functions]]: sum, average, median, min, and max.<br />
* B-08050: When a model is created, the default filter is not created anymore (this is a refactoring that doesn't have any impact on user interface).<br />
* B-08123: Translation updates for 2023.7.<br />
* B-08092: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13876: In CreateSnowflakeConnection function, ProjectId parameter is optional when OdbcConnectionStringKey is not specified.<br />
* D-13898: Snowflake: Exclude case attribute filter didn't work when there was null values and was selecting at least two values.<br />
* D-13890: Fixed XES file import to work.<br />
* D-13894: Business calendar based duration calculation was incorrect in some durations that spanned to several weeks (for Snowflake and in-memory models).<br />
* D-13899: Using broken OdbcConnectionString in a datatable prevented the datatable from being deleted.<br />
* D-13883: Script run stucked after running a script with error that uses client-side ODBC import.<br />
* D-13879: SqlExpressionValue filter when excluding events didn't work with filter rule root expression only.<br />
* D-13896: Adding or removing columns to datatable didn't change the LastModifiedDate.<br />
* D-13882: User details weren't written to operation log when creating or modifying users.<br />
* D-13771: User rights system report didn't give error when changing columns.<br />
* D-13893: Some event filtering caused null pointer error when primary key had been defined.<br />
* D-13873: Fixed pivot table visual issues after component update.<br />
* D-13900: When adding, renaming or removing columns for Snowflake table fails, operation is now rolled back without any changes.<br />
* D-13866: Querying GET api/uielements was quite slow right after server start.<br />
* D-13864: Combinations of translatable and hardcoded strings didn't get translated in UI.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.6 (build 3933) (released 2023-10-24) ==<br />
<br />
'''Features:'''<br />
* B-08055: Error message for locked account has been replaced with generic error message, so that username enumeration is not possible.<br />
<br />
'''Fixed issues:'''<br />
* D-13884: Attributes dialog crashed with some older model configurations.<br />
* D-13843: In charts, selected case and event attributes switched away when attribute data type was ShortString.<br />
* D-13877: Some Snowflake expressions gave error "exceeds maximum length limit of 255 characters" when selecting lot of items.<br />
* D-13878: Snowflake expression filters for case attribute values didn't accept other than string type of case attributes.<br />
* D-13871: Some statistical calculations with percentages didn't work with Last Row Aggregates Over-limit Rows setting.<br />
* D-13875: Using some case level filters in a model without cases datatable didn't work.<br />
* D-13861: Dashboard opens are now logged to the Task log (i.e., calling GET /api/dashboards/{dashboardid}).<br />
* D-13870: Workspace projects hierarchy focused project showed light grey background making the project name not readable.<br />
* D-13867: When starting datatable refresh and going to other tab, went back to Datatables tab when query completed.<br />
* D-13853: If chart Custom Layout settings had extra series defined, chart may have crashed.<br />
* D-13869: Export as CSV button didn't work in the datatable contents dialog when dialog was still loading.<br />
* D-13872: Main progress spinner had unnecessary small scrollbar on top right.<br />
* D-13863: In the REST API method GET /api/users, password field (that has always been null) has been removed.<br />
<br />
== QPR ProcessAnalyzer 2023.6 (build 3847) (released 2023-10-17) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is removed in this release. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
'''Features:'''<br />
* B-07992: Added 10 new presets including Queue analysis, Four eyes principle, Self-looping events, and Path until selected event. There are also presets for Individual Cases Flow and Range of event type occurrences which use Gantt chart.<br />
* B-08011: Added following date related operations for Snowflake: Day of year, Day of month, Day of week, Week of year, Half-year only, Quarter only, Month only, Hours only, Minutes only, Seconds only, and Milliseconds only. These are available when calculating with date type of data.<br />
* B-08016: [[QPR_ProcessAnalyzer_Table#Table_actions|Table actions to set variables]] can also be opened to a new browser tab. Also improved user interface for table actions.<br />
* B-08018: For Snowflake expressions, added Flows aggregations FromEventType and ToEventType to get starting/ending event type, and FlowOccurrences aggregations FromEvent and ToEvent to get starting/ending event.<br />
* B-08001: Added [[Generic_Functions_in_QPR_ProcessAnalyzer#CallStoredProcedure|CallStoredProcedure]] function to call Snowflake stored procedures. This allows to start ETL transformation in Snowflake orchestrated by QPR ProcessAnalyzer script.<br />
* B-08013: Added [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property to expression language to replace the legacy UserPermissions analysis (11).<br />
* B-07976: Snowflake [[Filtering_in_QPR_ProcessAnalyzer_Queries#Expression|expression based filter rules]] support additional expression columns allowing more Big data chart expressions to be filterable.<br />
* B-08015: Big data chart doesn't anymore support calculation in SQL Server (using local datatables).<br />
* B-06270: Improved error messages and made them translatable by taking into use exception codes provided by server.<br />
* B-08021: Added possibility to store [[Diagram_in_Expression_Language|designed diagrams]] for models and expression language API for reading and modifying diagrams.<br />
* B-08037: Dropped following unused tables database: PA_IDEA, PA_IDEA_VOTE, PA_REPORT, PA_REPORT_SETTING, PA_SESSION_SERVICE, PA_VIEW_FILTER_RULE, PA_VIEW_FILTER_RULE_PARAMETER.<br />
* B-08052: Language translations have been updated to 2023.6.<br />
* B-08051: Frontend side components have been updated.<br />
* B-08034: Backend side components have been updated.<br />
<br />
'''Fixed issues:'''<br />
* D-13830: Object counts indicator in header showed incorrect counts when there was disabled filter rules in Snowflake models.<br />
* D-13833: In-memory charts didn't work with boolean type of dimensions when filtering with the false value.<br />
* D-13858: Target value measures didn't update chart when controlled using an on-screen setting.<br />
* D-13827: Calculated attributes data type was incorrectly set as Any by the Attributes dialog.<br />
* D-13849: Multiselect list search didn't allow spaces.<br />
* D-13829: Multiselect dropdown lists height jumped couple of pixels when selecting values.<br />
* D-13835: Deselecting a selected data point didn't remove chart filter rule.<br />
* D-13702: Improved Snowflake query performance in situations when there are lot of filter rules (by decreasing number of CTE's).<br />
* D-13819: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13820: Fixed incorrect manifest.json file to avoid "not found" errors when fetching web site icon.<br />
* D-13865: Break, continue, and return statements didn't work properly when called from inside a catch block.<br />
* D-13795: There was a Python error in clustering analysis with Snowflake model.<br />
* D-13823: Some tooltips in Workspace project hierarchy didn't work and caused a JavaScript error.<br />
* D-13824: BPMN editor align context menu layout looked strange.<br />
* D-13813: QPR logo button in the top left was misaligned in Firefox.<br />
* D-13797: Snowflake query may have given following error when using sampling: ambiguous column name '_EventType_NotNull_1'.<br />
* D-13774: TakeSample function with certain columns caused SQL compilation error: ambiguous column name 'Case Name'.<br />
* D-13782: Snowflake: Aggregating from variations didn't work when using sampling.<br />
* D-13836: Some tooltips had a strange two-colored background.<br />
* D-13834: Removed Model statistics column from clustering and root causes analysis.<br />
* D-13860: Removed filter button from the custom expressions in Task log analyzed objects.<br />
* D-13838: Removed Split data by filtering column from clustering analysis.<br />
* D-13832: Script and model status updates incorrectly sent next update when previous was still pending.<br />
* D-13839: Charts reset zoom button font size was too small.<br />
* D-13817: Importing data to Snowflake datatable with Append=0 doesn't now drop the underlying Snowflake table.<br />
* D-13825: Some models could not have been deleted from recycle bin.<br />
* D-13852: Recycle bin Projects and Models tab didn't show correct content when Recycle bin only contained either models or projects.<br />
* D-13841: In-memory chart Data type selection type has been corrected to string.<br />
* D-13842: Second time and Third time selections has been hidden in in-memory chart measures.<br />
* D-13850: In Chrome, there were console errors related in incorrect text field autocomplete type and text field without form.<br />
* D-13847: Improved browser side performance by removing unnecessary operations.<br />
* D-13859: Chart without dimensions showed an unnecessary Remove dimension button.<br />
* D-12598: When script is stopped in server, ScriptLauncher could still incorrectly continue to import data.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.5 (build 3334) (released 2023-09-07) ==<br />
<br />
'''Fixed issues:'''<br />
* D-13826: Measures or dimensions with case or event attribute and value selections incorrectly removed calculated attributes when dashboard was opened or chart settings were changed.<br />
* D-13821: Font size of some Highcharts tooltips was too small. Issue appeared when there were tooltips mappings in measures or dimensions.<br />
* D-13810: Simplified help links: now all Help buttons go to the QPR ProcessAnalyzer wiki main page.<br />
* D-13822: Snowflake clustering analysis showed empty strings and nulls as case attribute values in an unclear way as just nothing.<br />
<br />
== QPR ProcessAnalyzer 2023.5 (build 3304) (released 2023-09-05) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In Big Data Chart, the '''Case conformance''' measure and dimension has changed in a way that now it provides boolean values (true/false) instead of integer values (1/0). If [[Measure,_Dimension_and_Column_Settings#Other_settings|colorMappings]] are used for this measure or dimension to set specific colors to visualize conformant and nonconformant cases, the mapped values need to be changed as follows: '''1''' -> '''true''' and '''0''' -> '''false'''. Without the change, the mapped colors are not effective.<br />
<br />
Exmaple: Old configuration:<br />
<pre><br />
"colorMappings": {<br />
"1": "#36d475ff",<br />
"0": "#f5403bff"<br />
}<br />
</pre><br />
New configuration:<br />
<pre><br />
"colorMappings": {<br />
"true": "#36d475ff",<br />
"false": "#f5403bff"<br />
}<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is deprecated. Big data chart has allowed to process data both in Snowflake and SQL Server. Now the support for SQL Server is deprecated and the Big data chart will only support calculation in Snowflake. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). The OperationLog analysis is replaced by the [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog function]] and the Infcluencers analysis is replaced by the [[FindRootCauses_Function|FindRootCauses function]].<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [12, 14, 15, 16, 29];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
By default, Snowflake ODBC driver generates quite much logging to files which might unnecessarily fill up the disk space. It's recommended to set the LogLevel parameter to value 0. The path where the logs are created can be seen in Windows registry (key LogPath). More information about configuring Snowflake ODBC parameters: https://docs.snowflake.com/en/developer-guide/odbc/odbc-parameters.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07971: Machine learning based [[Clustering_Analysis|Clustering analysis]] can be run in Snowflake.<br />
* B-07989: In dashboard designer the stacking order of charts can be changed with buttons [[QPR_ProcessAnalyzer_Dashboard_Designer#Viewing_and_Editing_Dashboards|Bring to front, Send to back, Bring forward and Send backward]].<br />
* B-07977: For [[Sankey_Chart|sankey diagram]], added Start level and End level mappings to define custom start and end level for the sankey flows. Implemented also color mappings to define specific colors for specific values.<br />
* B-08010: To improve performance, charts are loaded and updated only when they are visible in the dashboard.<br />
* B-07975: Added following [[SQL_Expressions#Date_functions|date related functions]] to Snowflake: DayOfYear, DayOfWeek, WeekOfYear, Quarter.<br />
* B-07908: When [[QPR_ProcessAnalyzer_Project_Workspace#Duplicating_Model|model is duplicated]], also filters in the model are also duplicated.<br />
* B-07904: Filters and models API for expression language has been completed.<br />
* B-07991: In [[Filter_Selectors|case and event type filter selectors]], threshold whether the dropdown list or search dialog is shown can be defined using the ''Maximum Rows'' setting. Also the search dialog filters search results by other filter rules in the dashboard.<br />
* B-07999: Filters report has been changed to use the [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|expression language API for filters]].<br />
* B-07540: Added [[QPR_ProcessAnalyzer_Expressions#Throwing_objects|throw statement]] to expression language.<br />
* B-07813: UI components are updated. There are small visual improvements, such as in flowchart flows are routed a bit differently and in charts the hidden series is shown as strike-through in the legend.<br />
* B-07963: Following legacy analysis types have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29) (see more information in the note above).<br />
<br />
'''Fixed issues:'''<br />
* D-13777: Filters could not be created in charts when "Update Filter During Selection" setting was disabled.<br />
* D-13767: Automation per Event Types preset in in-memory incorrectly showed only one event type.<br />
* D-13756: Changing background color in KPI card didn't have any effect.<br />
* D-13812: "Exclude events" was incorrectly translated to "Exclure les cas" in French.<br />
* D-13815: Dashboard designer background grid was not visible in entire area in edit mode. Improved also the grid to match to snapping in move and resize.<br />
* D-13674: Business calendar dialog layout was incorrect when a model with a long name was selected to copy holidays.<br />
* D-13811: Table actions link to a new window didn't go to dashboard if there were other parameters in the link.<br />
* D-13601: Fixed issue where some presets may have given error when attribute value selection and the automatically selected attribute conflicted by the data type.<br />
* D-13753: While Snowflake model was selected, in Filters and User Rights reports the Columns list could not be opened.<br />
* D-13720: Now table column filter and sorting are preserved when resizing or zooming page.<br />
* D-13785: In tables increased number of rows to 20000 that are inspected to get available items shown in Excel-style column filter.<br />
* D-13759: Some statistical calculations had bad performance with large number of rows.<br />
* D-13787: Conformance statistics component didn't have scrollbars when text didn't fit to the visible area.<br />
* D-13788: In-memory "Nonconformance reason" selection caused error when two of them was selected in the same chart.<br />
* D-13783: When Analyzed objects was Generic analysis, column selection incorrectly caused "Analysis has not been selected" error.<br />
* D-13776: When measure name contained quotation mark, notification preview didn't work.<br />
* D-13747: Filtering with integer type of case id with case attribute value filter caused error in Snowflake.<br />
* D-13791: In Firefox, model selection in chart settings didn't show models in the first open.<br />
* D-11984: Recycle bin buttons didn't fit to the screen when screen width was small.<br />
* D-13780: Using CaseId case attribute in clustering analysis did not work with Snowflake 106 cases standard model.<br />
* D-13781: Clustering analysis produced Python error with a certain simple Snowflake model.<br />
* D-13730: Snowflake: Case attribute filtering didn't work when there are cases without row in cases table.<br />
* D-13803: There was chart configuration validation error in browser console when measures were moved into dimensions in Big data chart.<br />
* D-13758: There was performance issue with the Recent tasks system preset.<br />
* D-13793: Snowflake clustering failed when cluster count is larger than case count.<br />
* D-13763: SQL expression based filter rule with Where function to filter events didn't filter anything in Snowflake.<br />
* D-13804: Added missing Millisecond function to Snowflake.<br />
* D-13772: Expression EventLog.Cases.Events caused error "Value cannot be null".<br />
* D-13755: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13739: When switching between System reports there was error: "Uncaught Error: 2nd dimension not found. at y.getExpressionConfiguration".<br />
* D-12109: Sometimes flowcharts showed message "Error in querying event type measures. Input string was not in a correct format".<br />
* D-12473: Cost Savings by Automation preset gave sometimes error "Unable to cast object of type 'System.Double' to type 'System.String'".<br />
* D-13750: Snowflake model didn't work with the Case Duration vs. Manual Activities preset.<br />
* D-13657: There was error converting data type nvarchar to bigint.<br />
* D-13796: Some Snowflake operations didn't work with zero rows and columns.<br />
* D-12494: Now when chart size changes, the table column filters and sorting are preserved.<br />
* D-13736: In Performance benchmarking dialog, the Export result button exported wrong benchmark performance analysis result.<br />
* D-13609: Improved conformance analysis related filter names.<br />
* D-13594: Recycle bin buttons were not visible when opening recycle bin in a narrow screen.<br />
* D-13226: Tooltips in the model properties dialog are now translated.<br />
* D-12569: Table incorrectly showed ellipsis for narrow boolean type of columns showing checkboxes.<br />
* D-13391: Emptying date or datetime picker value was not registered and it didn't trigger functionality.<br />
* D-12621: Value search dialog didn't work with values containing backslashes.<br />
* D-13796: Some Snowflake operation didn't work with zero rows/columns.<br />
<br />
== QPR ProcessAnalyzer 2023.4 (build 2628) (released 2023-06-14) ==<br />
<br />
'''Features:'''<br />
* B-07767: Added [[Gantt_Chart|Gantt chart]] to visualize timeline of cases and events divided into swimlanes.<br />
* B-06383: Added [[Sankey_Chart|Sankey chart]] to visualize flow from one set of values to another.<br />
* B-07941: Implemented many more presets running in Snowflake models for compliance and operational excellence use cases. There are also presets for the path analysis and process bottlenecks identification.<br />
* B-07864: Snowflake conformance analysis shows now [[Conformance_Analysis#Top_Deviations_(in-memory)_/_Deviating_Flows_(Snowflake)|reasons for conformance deviations]], such as which event occurrences deviated from the design model.<br />
* B-07909: Snowflake conformance analysis visualizes [[Conformance_Analysis#Undesired_Events_(Snowflake)|undesired event types]] in table and flowchart.<br />
* B-07823: Flowchart Bottlenecks preset has been changed to show bottlenecks for event types. Also renewed the [[QPR_ProcessAnalyzer_Logs#Task_Log|Tasks reports]] to use expression language based interface.<br />
* B-07891: User interface has been [[Languages_and_Localization|translated into Portuguese]].<br />
* B-07873: Improved [[QPR_ProcessAnalyzer_Pivot_Table|pivot table]] visual layout to highlight totals and aggregated rows. Also the row titles are now visible in the top left.<br />
* B-07905: Added [[SQL_Expressions#Rank_functions|Rank related functions]] to Snowflake for writing more versatile custom KPI's, e.g., FirstValue, LastValue, NthValue, Lead and Lag.<br />
* B-07912: Added more SQL expression [[SQL_Expressions#Array_functions|array functions ArrayToString and ArrayOverlap]] to Snowflake.<br />
* B-06449: Added SQL expression functions ToTimestamp and TryToTimestamp for parsing timestamps from strings using provided format.<br />
* B-07959: Added new functions Base64Encode and Base64Decode to help using basic HTTP authentication when calling web services.<br />
* B-07206: SQL expressions support data [[SqlDataFrame_in_Expression_Language#WithClusterColumn|clustering]] which is an unsupervised machine learning algorithm to group data based on similarities.<br />
* B-07848: Data can be extracted from SAP using the encrypted [[Importing_Data_from_SAP#SNC_encrypted_connection|SNC connection]].<br />
* B-07903: Added expression language API to create and modify filters and models.<br />
* B-03103: [[QPR_ProcessAnalyzer_Logs#Task_Log|Task log]] (operation log) can be accessed in expression language.<br />
* B-07872: List aggregation with Distinct=true orders now items by their value.<br />
* B-07940: Removed "Count" aggregation from textual values in Big data chart (you can use the Case count, Event count, etc. selection instead).<br />
* B-07757: Backend support for datatables linking to user-definable Snowflake database, schema and table.<br />
* B-07825: Improved error message when trying to use non-existing attributes in Snowflake queries.<br />
* B-03101: To expression language, added try-catch-finally statement to handle thrown exceptions.<br />
* B-07861: Removed available and total virtual memory information from User settings dialog.<br />
* B-07902: Optimized sequences of joins in Snowflake queries to improve performance.<br />
* B-07837: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13709: If image width-to-height ratio was lower than container's ratio, image was incorrectly stretched to fit the container.<br />
* D-13660: Disabling filter rules didn't work in Snowflake models.<br />
* D-13526: Passing dataframes from SQL scripts to expression scripts didn't work.<br />
* D-13661: Snowflake conformance analysis crashed when there was no access to conformance related Snowflake UDF's.<br />
* D-13693: Resolved major Snowflake conformance analysis performance issues in the BPMN model handling.<br />
* D-13716: Snowflake root causes analysis incorrectly bypassed Snowflake cache.<br />
* D-13707: In SQL Scripting, the datatable analysis (number 18) didn't always copy the data table contents to the target table correctly.<br />
* D-13653: Big data flowchart Root causes preset showed incorrect legend.<br />
* D-13626: Flowchart froze when converting into big data flowchart and vice versa by modifying chart json settings.<br />
* D-13656: Root causes for attribute gave error "Failed to compare two elements in the array" in some situations.<br />
* D-11563: Pivot table had a minimum height of 300px, which caused bottom part of it to be out of view.<br />
* D-13704: In CSV file import, parsing now allows spaces between column separator and text quotation mark.<br />
* D-13598: Chart gave unclear error message when events datatable was not defined.<br />
* D-13655: Improved error messages for BPMN editor and conformance statistics.<br />
* D-13528: Error message for certain erroneous SQL expressions was unclear.<br />
* D-13677: "Flow occurrences with specific case attribute value" selection didn't work for in-memory chart.<br />
* D-13663: Pivot table border line was slightly broken in the header area.<br />
* D-13608: There was incorrect alignment of items in the table paging controls.<br />
* D-13703: Importing CSV file with some special characters to Snowflake failed (due to incorrect escaping in Snowflake staging files).<br />
* D-13708: Duplicating datatable using user defined table, removed data the source table.<br />
* D-13717: Dependency wheel crashed when there were zero weights and showing data labels.<br />
* D-13348: There was an unclear error message when Snowflake query had a certain incorrect expression.<br />
* D-13732: Pivot table Excel export contained headers formatted incorrectly.<br />
* D-13729: There was a JavaScript error when limited user tried to access business calendar.<br />
* D-13662: Percentile function didn't always work with timespan types.<br />
* D-13646: Using incorrectly configured model without cases datatable caused null reference error.<br />
* D-13629: When tried to use chart with a non-existing model, there is now a proper translated error message.<br />
<br />
== QPR ProcessAnalyzer 2023.3 (build 1990) (released 2023-05-03) ==<br />
<br />
'''Features:'''<br />
* B-07818: [[Conformance_Analysis|Conformance analysis]] is supported in Snowflake with following dashboard components: Big data chart, BPMN editor, Conformance statistics, and Design model selector.<br />
* B-07833: [[Root_Causes#Root_causes_in_flowchart|Root causes analysis for flowchart]] is available for Snowflake showing how the event and flow occurrences explain selected phenomena.<br />
* B-07786: Big data chart has more [[Big_Data_Chart#Measure_aggregations|measure aggregations]], such as median, percentile, standard deviation and variance. Also for textual items, unique values can be listed.<br />
* B-07795: [[QPR_ProcessAnalyzer_Table#Conditional_formatting|Conditional formatting]] supports also columns with non-numerical contents.<br />
* B-07830: [[Big_Data_Chart#Measure_aggregations|None and Any aggregations]] for Snowflake and user-friendly formatting for conformance violations.<br />
* B-06527: Error messages in [[Importing_Data_to_Datatable_from_CSV_File|CSV file import]] show also the column number to help working with CSV files with lot of columns.<br />
* B-07747: In-memory conformance checking accepts design models with multiple tasks having same name (same is followed by the Snowflake implementation).<br />
* B-07659: In-memory flowchart preset Case Conformance to visualize conformance checking violations.<br />
* B-07571: Added function IsConformant to backend to check whether cases are conformant.<br />
* B-07863: Added function ConformanceViolationsFlows to backend to return nonconformance reasons for violating cases.<br />
* B-07844: Support for "array" aggregation to return aggregated items as array.<br />
* B-07856: Support for creating and accessing arrays and objects in SQL expressions.<br />
* B-07860: Array handling functions and Tasks property for DesignModel entity.<br />
* B-07847: Added throttling for QPR ScriptLauncher client-side imports to limit memory usage.<br />
* B-07811: Snowflake query optimization to omit columns that are not used by the query.<br />
<br />
'''Fixed issues:'''<br />
* D-13632: Going from variations to event types led to very poor performance with certain models.<br />
* D-13628: Statistical calculations were incorrectly not applied in chart CSV export.<br />
* D-13575: SQL script may have given error "Operand type clash: nvarchar(max) was incompatible with sql_variant".<br />
* D-13597: UI supports now datatable column type "ShortString" (previously datatable contents preview and CSV import didn't work).<br />
* D-13536: Using business calendar sometimes gave error "System.InvalidOperationException: Collection was modified".<br />
* D-13477: Chart types without y-axis mapping caused an error when series mapping was used.<br />
* D-13453: _model variable was not available for Snowflake expression filter rules.<br />
* D-13527: Checkbox height didn't increase when long label needed to span to multiple lines.<br />
* D-13363: Snowflake query with EvaluateAfterAggregations and IsHidden failed when dimensioning by case id column.<br />
* D-13383: Snowflake query gave error "Invalid column name 'FromCase Name'".<br />
* D-13523: Request id was incorrectly shown as zeros in error messages.<br />
* D-13541: In CSV import, error message for maximum number of columns exceeded is improved (maximum is 300 column for SQL Server).<br />
* D-13583: Objects count in header didn't work for empty Snowflake model.<br />
* D-13553: Larger pacm files can now be imported, as there isn't error "Request body too large. The max request body size is 30000000 bytes".<br />
* D-13306: Stack overflow error was given when using SqlDataFrames.<br />
* D-13487: When Flows root and there was filter in Values expression, some flows were lost.<br />
* D-13540: SqlDataFrame query with 300 columns failed to error "WithExpressionColumn: No name given for the new column".<br />
* D-13429: Ordering in List aggregation couldn't find columns in dataframe query.<br />
* D-13406: Dataframe query with root FlowOccurrences and get value from cases caused error.<br />
* D-13538: There was incorrect handling of escaping characters in column names used in dimensions.<br />
* D-13633: Fixed ordering in List aggregation with null and empty values.<br />
* D-13636: Query that dimensions by numeric case attribute with AggregateOthers true, caused error.<br />
* D-13589: Creating Snowflake datatable did not connect to Snowflake.<br />
* D-13623: Value expressions without aggregation didn't work with AggregateOthers setting.<br />
* D-13554: In in-memory chart, percentile function might have return both Int64 and Double type of objects which cannot be sorted.<br />
* D-13481: Improved error message when trying to use deleted model.<br />
* D-13621: Dynamic value search dialog had incorrect font in lists.<br />
* D-13610: Some invalid BPMN files crashed BPMN editor.<br />
* D-13614: Checkbox label texts overflowed to right.<br />
* D-13520: Removed excessive parameters from the Query Designer for generic context queries.<br />
* D-12998: QPR icon was incorrectly positioned in header in Safari.<br />
* D-13480: Import to duration data type is removed from Snowflake datatables, and for local datatables duration type maximum size is checked.<br />
* D-13517: In Highcharts-based visualizationsm conditional formatting didn't work for other than the first y-axis mapping.<br />
* D-13529: In some presets containing several on-screen settings, when chart showed in error message, on-screen settings showed invalid selection.<br />
* D-13530: Opening dropdown list caused JavaScript error when the list contents should be empty after it previously contained items.<br />
* D-13486: Removed unreachable error message in CSV import.<br />
* D-13524: Fixed in-memory chart flow occurrences root measures "Event attribute (text)" and "Event attribute (number)" that caused error.<br />
<br />
== QPR ProcessAnalyzer 2023.2 (build 1478) (released 2023-03-22) ==<br />
<br />
'''Features:'''<br />
* B-07755: [[Business_Calendar|Business calendar]] for duration calculation is available for Snowflake models.<br />
* B-07719: In Snowflake dashboards, [[Big_Data_Chart#Using_measure_variables|measures can be assigned to variables]] and use the variables in other measures to create combined measures.<br />
* B-07746: Changed in-memory conformance checking to not show invalid flow violations where starting or ending event type is invalid.<br />
* B-07743: [[PA_Configuration_database_table#General_Settings|Default datasource]] can be configured for datatables created by scripts, allowing to set Snowflake as default.<br />
* B-07740: System memory indicator moved from the header to User settings Version information dialog.<br />
* B-07776: New SQL expressions functions Unicode, Char and Regexp, as a basis for future rule-based process mining.<br />
* B-07741: Backend support for aggregation operations Median, Percentile, Stdev, Stdevp, Var and Varp to Snowflake.<br />
* B-07742: Backend support for aggregation operation to list unique items in Snowflake.<br />
* B-07770: Optimized Snowflake SQL generation by combining consecutive WithColumn function calls into one select.<br />
<br />
'''Fixed issues:'''<br />
* D-13491: QPR ProcessAnalyzer server crashed now and then when sorting was in progress and the query was cancelled.<br />
* D-13380: Dimensioning integers in in-memory core calculation didn't work correctly as 0 and -1 were put to same bucket.<br />
* D-13385: In Workspace Bin, Delete Forever and Restore from Bin buttons were misaligned.<br />
* D-13332: Conformance checking didn't show in violations when there were multiple undesired events in same case.<br />
* D-13405: Images take now always all available space in image component area.<br />
* D-13417: KPI card without title was slightly misaligned vertically.<br />
* D-13438: Clicking selected event type or flow in flowchart didn't cancel the filter selection.<br />
* D-13350: Task log and Script log default filter end date is now empty by default.<br />
* D-13381: Disabled browser auto-complete from flowchart variation stepper and Workspace create/rename object dialog.<br />
* D-13347: Improved performance for in-memory business calendar calculation.<br />
* D-13335: In in-memory chart, filtering didn't work in "Flow occurrences" root "Flow occurrences with specific event attribute value" dimension.<br />
* D-13367: Percentage value wasn't displayed properly with German or Spanish language when event types were shown in object counts indicator.<br />
* D-13451: Exported filter file is now named based on selected filter name.<br />
* D-13378: In Big data chart, prevented error "Unable to aggregate from level RootCauses to level Custom".<br />
* D-13293: DataFrame query with root Flows and IncludeEvents and ExcludeEvents filter rules failed.<br />
* D-13370: Fixed issue where on-screen settings that didn't have any selectable items, showed a strange selection.<br />
* D-13392: Clustering analysis was incorrectly shown when originally in-memory chart was converted into big data chart by changing chart json settings.<br />
* D-12784: Some Snowflake queries incorrectly bypassed Snowflake caching because they used unique object names.<br />
* D-13456: Improved error messages for incorrectly configured on-screen settings.<br />
* D-13445: Conformance violations related translated terms have been fine-tuned for better translations into different languages.<br />
* D-13421: Improved error messages when trying to use model having some column mappings missing.<br />
* D-13485: Snowflake business calendar gave error when calendar contained Sunday.<br />
* D-13218: Windows event viewer incorrectly contained log entries that are not errors.<br />
* D-12634: Multiline text boxes width is set to non-changeable.<br />
* D-13034: Confirmation dialog to delete items permanently has been updated.<br />
* D-13288: In dialogs, the Create button didn't show the disabled state correctly.<br />
* D-13427: When dropdown lists didn't have any selectable items, the "N/A" text appeared and the list incorrectly took more space vertically.<br />
* D-13483: In Workspace, the new items menu was too narrow for Spanish texts.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.1 (build 1449) (released 2023-02-24) ==<br />
<br />
'''Features:'''<br />
* B-07690: System setting [[PA_Configuration_database_table#General_Settings|DatabaseId]] can be defined by administrator to get more simple table names in Snowflake.<br />
* B-07737: In flowchart Bottlenecks preset, originally used flow colors has been recovered.<br />
* B-07748: For Analyzed objects "Conformance checking findings" in charts, terminology has been revised and issue with the case count calculation fixed.<br />
* B-07663: In [[Chart_On-screen_Settings|on-screen settings]], when case/event attribute is selected, related attribute values list are reset.<br />
* B-07570: Backend support for [[Business_Calendar|business calendars]] in Snowflake.<br />
* B-07660: Backend support for conformance checking to show also the last event index and event type in NotCompleted reason.<br />
* B-07610: Memory counter related technical properties have been removed from expression language.<br />
<br />
'''Fixed issues:'''<br />
* D-13349: Opening dashboard containing Root causes preset with default settings jammed the system by generating lot of calculations (for more information, see previous release notes).<br />
* D-13277: Stacked charts with date type of data as series did incorrectly show gaps in columns/bars.<br />
* D-13270: Flowchart conditional formatting didn't work with duration multi-unit format.<br />
* D-13358: Calculation results caching works also across different user sessions.<br />
* D-13250: Dashboard with two charts connected with linked settings using variables ended up to to a never ending loop.<br />
* D-13230: SAP import did not automatically create columns to use the correct column types.<br />
* D-12857: Deeply recursive functions caused a crash without any trace.<br />
* D-12994: In Workspace, some buttons were not clickable due to breadcrumb covering them.<br />
* D-13249: In Workspace, there was incorrect error message for duplicate datatable names when there were items with only letter capitalization was different.<br />
* D-13232: In-memory chart Top variations preset is now sorted secondarily by average duration descending.<br />
* D-13300: Setting DashboardFilter variable to empty value didn't have any effect in dashboard but old value was incorrectly used.<br />
* D-12834: Limited the maximum number of dimensions to 20, to avoid too demanding queries for SQL Server.<br />
* D-12917: Changed visual indication of missing items in dropdown lists (it's no longer showing "***").<br />
* D-13111: In Root causes preset, there is now error message when trying to use weighting related columns when weighting isn't in use.<br />
* D-13124: SQLDataFrame query containing filter rule EventTypes aggregating from cases failed.<br />
* D-13207: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed.<br />
* D-13292: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed (rev.2).<br />
* D-12991: Dropdown list texts had some translations missing.<br />
<br />
== QPR ProcessAnalyzer 2023.1 (build 1433) (released 2023-02-07) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release contains a potentially severe issue, where some dashboards completely jam the system by generating lot of calculations. The issue may appear in dashboards that have been created in earlier releases and containing the Root causes preset with default settings. The issue will be fixed by the next release. The issue can be worked around by exporting the affected dashboard, modifying the dashboard file manually and importing the dashboard back. The required modification is to remove line(s) containing <pre>"preset": "RootCauses"</pre> and the comma from the preceding line.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Cases (analysis number: 5), Events (6), and EventTypes (7). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). Note that the legacy analyses removal don't affect the dashboarding functionality.<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [5, 6, 7];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2023.1, the '''.NET Desktop Runtime''' is not needed anymore for QPR ProcessAnalyzer Server, so it can be uninstalled. Also for QPR ScriptLauncher, ''.NET Desktop Runtime'' is not needed, but instead install the '''.NET Runtime''' (which is more lightweight). ''.NET Desktop Runtime'' contains the ''.NET Runtime'', so the actions are not mandatory when updating to QPR ProcessAnalyzer 2023.1.<br />
</div><br />
<br />
'''Features:'''<br />
* B-06997: Expression-based filter rules for Snowflake dashboards to allow versatile filtering and filtering from custom expressions.<br />
* B-07383: Improvements to linked settings to allow binding to variables, tags and filter rules [[Chart_Linked_Settings|(more information)]].<br />
* B-07508: Flowchart preset colors have been renewed to be more intuitive.<br />
* B-07184: Automation preset in flowchart has now options for selecting the Automation attribute and value.<br />
* B-07512: Changed datatable metadata can be refreshed from Snowflake, and all rows in the datatable can be deleted easily in Workspace [[QPR_ProcessAnalyzer_Project_Workspace#Datatables|(more information)]].<br />
* B-07440: Date when the release was made is now shown in User settings.<br />
* B-07595: WeekOfYear property for DateTime objects in expression language to get the week number of a year (between 1 and 53).<br />
* B-07623: In-memory expression language functions Random (to get random numbers) and Hash (to get hash value of string).<br />
* B-07612: Breadcrumb in Workspace has now a Home button to quickly navigate to the top level of the projects hierarchy.<br />
* B-07637: Language selector now shows the language options in local languages.<br />
* B-07228: Remove following deprecated analyses: Cases, Events, and EventTypes (see the release note above).<br />
* B-07538: Backend support: Snowflake root causes analysis can find event attribute related root causes.<br />
* B-07706: Backend support: Snowflake expression-based filter rules support for roots containing Where function.<br />
* B-07611: Removed following legacy filter rules: CaseAttributeTrend, EventAttributeTrend, EventTypeTrend, and Duration.<br />
* B-07598: Refactored client-side import for SQL scripting to use generic client-side task mechanism.<br />
* B-07716: ShortString columns are now properly detected in SQL Server queries.<br />
* B-07652: Now it's possible to pipe multiline expression strings to QPR ScriptLauncher.<br />
* B-07688: AddColumns function for Datatables to create multiple columns in one call.<br />
<br />
'''Fixed issues:'''<br />
* D-13092: Table conditional formatting didn't work when color code was fetched from other column.<br />
* D-13105: Some charts created in earlier release referring to non-existing presets names appeared as empty after software update.<br />
* D-13107: Flowcharts crashed and showed loading animation forever when setting color or flow thickness to non-numerical measure.<br />
* D-13104: In BPMN model editor, context menus to edit elements didn't appear.<br />
* D-12939: Script editor tabs Close buttons didn't work.<br />
* D-13154: "Search by case ID" didn't work in in-memory chart.<br />
* D-12933: CSV columns with only empty values were incorrectly auto-detected as integers.<br />
* D-12929: In-memory chart Root causes for case duration and Root causes for case attributes (weighted) had Custom expression missing.<br />
* D-12928: Pivot table headers were empty when there were two column levels and two values.<br />
* D-12924: Pivot table columns with Count and Distinct Count aggregations are now numeric and aligned right.<br />
* D-13033: Changing colors in chart settings Color palette caused "Item already exists" error and prevented changing colors.<br />
* D-12996: Tags referring to dashboard variables didn't work in Additional root expression.<br />
* D-12877: UI gave error in some situations: Uncaught TypeError: Cannot read properties of undefined (reading 'min').<br />
* D-13071: Prevented selecting two or more of the Y-axis, X-axis and series mappings at the same time for the same measure or dimension.<br />
* D-12895: Big data chart crashed when on-screen setting contained event type selector and there were no event type filter set.<br />
* D-13231: Tooltips for dashboard name, model selector and filter selector in header show now the content text instead of generic instruction.<br />
* D-13139: There was an error when tried to create filter for a custom expression where selected data type didn't match with the actual type of data.<br />
* D-12988: Chart presets selection in chart settings showed unnecessary tooltip.<br />
* D-12901: When set sampling over 1 million, Snowflake models gave error: parameter value out of range: size of fixed sample. Must be between 0 and 1,000,000.<br />
* D-12904: Creating expression filter having lower/greater logic with root objects sampling failed.<br />
* D-12923: Chart schema didn't accept pivotAggregation in dimensions/columns.<br />
* D-12926: Root causes columns Selected weight, Compared weight and Total weight have now correct float data type.<br />
* D-12880: In out-of-the box dashboards, chart titles and subtitles were not translated.<br />
* D-12916: Improved filter rule description text in Filter rule editor dialog for expression filter rules.<br />
* D-12889: No clear error message was given when user tried to export corrupted model from .pacm file.<br />
* D-12869: Date selector in on-screen settings had inconsistent vertical alignment.<br />
* D-12938: When creating a filter with lasso and selecting a single data point only, "equals" kind of filter rule is now created.<br />
* D-12989: "Running tasks as specific time" system report may have ended up in loop causing following error: Maximum call stack size exceeded error.<br />
* D-13010: Pivot table sometimes ended up to never-ending resizing loop when browser zoom was more than 100%.<br />
* D-12790: Expression language: DataFrame.SetColumns: Initializing and using variables defined in closure of SetColumns function parameter didn't work<br />
* D-12927: All on-screen settings were not be visible in narrow charts having several on-screen settings.<br />
* D-12937: Added maximum value limitation to several number input fields in charts.<br />
* D-12947: Message dialog didn't show line breaks correctly (e.g., in CSV file import).<br />
* D-12948: Defining column setting caused error when Measure Expression was not defined.<br />
* D-12946: Filter rule text couldn't be seen entirely from tooltip.<br />
* D-12983: When range filtering using integer values in Highcharts chart, filter is now shown as integer value.<br />
* D-12984: When range filtering in Highcharts charts and there is category axis, filter rule is now based on individual (category) values.<br />
* D-12930: When creating filters from charts using date type of X-axis with lasso, "greater than or equal" and "less than or equal" filter rules are not created.<br />
* D-12920: "Where" function in DataFrame lost column data types of the original DataFrame.<br />
* D-13048: Model notifications failed with certain measures that define variables in root expression leading to error: Variable "sampleSize" already exists in this context.<br />
* D-13116: BPMN editor had some translations missing.<br />
* D-13019: Datatable and script selectors show now datatable/script name instead of id, when opening selector having existing selections.<br />
* D-12951: Changing additional root expression in flowchart didn't refresh the flowchart.<br />
* D-13147: Filter rule boxes in header had different widths, and Add filter rule button vertical alignment was incorrect.<br />
* D-12907: Sometimes case attribute selection showed incorrect attribute name for empty model.<br />
* D-13148: Filters and Datatables system reports loaded unnecessarily twice which could be seen as blinking.<br />
* D-12844: In dataframe query, FlowOccurrences in root and GetValueFrom Cases with filter gave null reference exception<br />
* D-12915: Repeating certain query twice with aggregations in Events root generated invalid SQL<br />
* D-12728: Was huge amount logs in server during client side import (manual testing required as identification)<br />
* D-13156: Persist function failed to snowflake: Invalid unicode escape sequence '\u0027ACCE'; should be at most '\u0010FFFF'.<br />
* D-12876: Flows/FlowOccurrences in root didn't work with SqlExpressionValue filtering.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2022.8 (build 1397) (released 2023-01-11) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release fixes an issue where extracting large datasets from SAP increases memory consumption considerably and may lead to out-of-memory error. This release contains packages for both QPR ScriptLauncher and QPR ProcessAnalyzer Server. If SAP extractions are done using QPR ScriptLauncher in client side mode (ExecuteInClientSide=1), it's enough to update QPR ScriptLauncher to fix this issue.<br />
</div><br />
<br />
'''Fixed issues:'''<br />
* D-12941: Extracting data from SAP consumed unnecessary lot of memory and may have led to out-of-memory error (both when running using QPR ScriptLauncher and in server side).<br />
<br />
== QPR ProcessAnalyzer 2022.8 (build 1396) (released 2022-12-30) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Creating datatables with duplicate names in the same project is prevented, and possible existing duplicate names are automatically changed to unique names with a random suffix. If there are duplicate names, they can be renamed either before updating QPR ProcessAnalyzer (to avoid automatic renaming) or after the update (by changing suffixed names). If the renamed datatables are used by models, the linkage will break because it's based on the datatable name. Creating duplicate datatables has already been prevented in the UI, but the improved method works also in the API level.<br />
<br />
Following SQL query can be used to list datatables (and project id) having duplicate names:<br />
SELECT ITA_NAME, ITA_PROJECT_ID<br />
FROM PA_INTEGRATION_TABLE<br />
GROUP BY ITA_NAME, ITA_PROJECT_ID<br />
HAVING Count(*) > 1<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
If trying to use business calendar for a model that doesn't have the business calendar defined, there will now be an error message instead of showing the chart. Either unselect the business calendar checkbox for the measure or dimension, or define a business calendar to the model. In this situation in earlier releases the business calendar was ignored and full time calculation used.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07498: Automation and Operational Excellence presets and Root causes analysis (for Snowflake), Weighted root causes analysis and Event scattering preset (for Snowflake and in-memory), Root causes for case duration (in-memory).<br />
* B-07177: Flexible mappings, user selectable aggregations and conditional formatting for Pivot table, and flexible mappings for KPI Card.<br />
* B-07518: New function named Query to run call /api/expression/query.<br />
* B-07294: In Workspace, the left side projects hierarchy can be collapsed and expanded to make more space to project contents.<br />
* B-06814: In SQL expressions, new function DurationBetweenDates to calculate duration between timestamps precisely.<br />
* B-07519: Replaced DateDiff function with the new DurationBetweenDates function in big data chart.<br />
* B-07531: In SQL expressions, new mathematical functions Abs, Log, Mod, Power, Rand, Sign and Sqrt.<br />
* B-07297: To optimize performance, Snowflake queries are automatically cancelled if they are not needed by UI.<br />
* B-07569: To optimize performance, TakeSample function implementation is improved for Snowflake.<br />
* B-07198: Several performance improvements to DataFrame queries (used in Snowflake).<br />
* B-07464: Added Lead and Lag functions to SqlDataFrames to support getting previous and next event.<br />
* B-07470: New ExtractSap function to fetch data from SAP using expression language.<br />
* B-07536: New Pivot function to SqlDataFrames to enable root causes analysis.<br />
* B-07488: Primary keys can be set to datatables to improve calculation performance (UI will follow later).<br />
* B-07515: Added RootCauseAnalysis function to SqlDataFrames.<br />
* B-07546: RootCauseAnalysis function support for complex weighting expressions.<br />
* B-03052: Support for user-defined variables in /api/expression/query.<br />
* B-07565: Support for NumberPrecision, DatetimeTruncation and TimespanPrecision properties for Values section in in-memory query.<br />
* B-07513: For product activation file handling, replaced mutex based implementation with exclusive file lock.<br />
* B-07480: Expression language support for DataFlows for data extraction.<br />
* B-07613: Removed support for SQL Server based R scripting.<br />
* B-07567: Take datatable primary keys into use in expression builder to improve performance (part 2).<br />
* B-07588: Remove total memory information from log writing and DateDiff function for in-memory.<br />
<br />
'''Fixed issues:'''<br />
* D-12715: Snowflake calculated imprecisely some operations containing division and aggregation.<br />
* D-12761: Progress bar of the CSV import dialog didn't show any progress.<br />
* D-12799: Opening datatable contents dialog settings was slow when there were lot of rows in the datatable.<br />
* D-12089: Include conforming/nonconforming cases made BPMN editor no responding.<br />
* D-12496: Datagrid filter search keyword didn't work for rounded values, so the search was hidden for other than textual data.<br />
* D-12704: Durations as quarters was calculated incorrectly in charts.<br />
* D-12662: Fixed issue where some special literals in custom expressions didn't work.<br />
* D-12403: Setting Notifications on a model had some visual issues.<br />
* D-12859: Dependency wheel visualization crashed with nulls values in From and To mappings.<br />
* D-12660: Removed unnecessary float conversions in SQL expressions.<br />
* D-12653: In-memory datafram OrderByColumns function with mixed values failed.<br />
* D-12657: When trying to use milliseconds period in some presets, frontend frozed.<br />
* D-12706: Line breaks in data were shown in many places where it's undesired.<br />
* D-12719: Syncfusion dialog headers showed backslaces incorrectly.<br />
* D-12372: Refused to run the JavaScript URL because it violated the Content Security Policy directive.<br />
* D-12730: Logging out when filter selection is in progress, gave javascript error.<br />
* D-12705: Header object counts tooltip was sometimes messed after logout.<br />
* D-12384: Selected project was not highlighted for whole project name string.<br />
* D-12581: Prevented creating duplicate datatable names in same project in parallel execution.<br />
* D-12722: There was incorrect syntax near '<' when running SqlDataFrame expressions.<br />
* D-12736: Swedish and Finnish translation improvements for object counter tooltips.<br />
* D-12702: For BPMN Editor component "Something went wrong" error was given when switching from in-memory to Snowflake model.<br />
* D-12712: UI gave error: TypeError: Cannot read properties of undefined (reading 'id').<br />
* D-12738: Business calendar showed total business time when calendar configuration was invalid.<br />
* D-12776: Special character filter caused JavaScript SyntaxError.<br />
* D-12785: Unnecessary vertical scrollbar displayed for main header toolbar.<br />
* D-12164: There was unnecessary UnauthorizedAccess errors in logs.<br />
* D-12580: Case duration was not same when comparing Big data chart with in-memory chart for same data.<br />
* D-12768: Data grid links and variable change actions didn't work when grouping was used.<br />
* D-12735: FindRootCauses (in-memory) function filtered out cases with zero contribution.<br />
* D-12763: --#CallWebService didn't work from ScriptLauncher.<br />
* D-12789: There was timeout in SQL queries to scripting sandbox.<br />
<br />
== QPR ProcessAnalyzer 2022.7 (build 1331) (released 2022-11-15) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2022.7, to improve security expression language operations that modify data or connect to external datasources are prevented in dashboard custom expressions. The limitation is required, because when a dashboard is opened, its expressions are run with the user's permissions, and the user need to trust the expressions don't perform any unexpected operations, such as delete data. The full functionality of the expression language is available in the scripts and in the Expression Designer.<br />
<br />
The following functions and operations are prevented in dashboards: SendEmail(), CallWebService(), ImportOdbc(), ImportOdbcSecure(), Model.DeletePermanently(), Model.Restore(), Model.TriggerNotifications(), Project.DeletePermanently(), Project.Restore(), Project.CreateDatatable(), Datatable.AddColumn(), Datatable.DeletePermanently(), Datatable.Import(), Datatable.Merge(), Datatable.RemoveColumns(), Datatable.RenameColumns(), Datatable.Truncate(), RecycleBin.DeletePermanently(), and call SQL script. Calling expression scripts is allowed, but in the script all previously mentioned operations are prevented.<br />
<br />
Following SQL query can be executed in the QPR ProcessAnalyzer metadata database to reveal dashboards that potentially have prevented expressions:<br />
SELECT * FROM [PA_UI_ELEMENT] WHERE [UIE_PROPERTIES] LIKE '%SendEmail(%' OR [UIE_PROPERTIES] LIKE '%CallWebService(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbc(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbcSecure(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Restore(%' OR [UIE_PROPERTIES] LIKE '%TriggerNotifications(%' OR [UIE_PROPERTIES] LIKE '%CreateDatatable(%' OR [UIE_PROPERTIES] LIKE '%AddColumn(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Import(%' OR [UIE_PROPERTIES] LIKE '%Merge(%' OR [UIE_PROPERTIES] LIKE '%RemoveColumns(%' OR [UIE_PROPERTIES] LIKE '%RenameColumns(%'<br />
</div><br />
<br />
'''Features:'''<br />
* B-07287: Process Discovery and most important presets for Snowflake.<br />
* B-07271: "Last Row Aggregates Over-limit Rows" setting for big data chart.<br />
* B-06431: Snowflake datatables support for database views in the datasource.<br />
* B-07266: Security: "limited mode" to prevent data modifications and external calls from dashboard expressions.<br />
* B-07097: Improved flowchart root causes color scales.<br />
* B-07363: SQL LIKE function support for escape character.<br />
* B-06877: Improved variation queries performance in Snowflake, part 1.<br />
* B-07444: Improved variation queries performance in Snowflake, part 2.<br />
* B-07382: Support for empty strings and nulls in event type names in dataframe processing.<br />
* B-07273: WithRowNumberColumn, WithRankColumn, WithDenseRankColumn support for descending sorting.<br />
* B-07303: FindRootCauses function support for weighting expression.<br />
* B-07327: Unpivot function for SqlDataFrames (for root cause analysis).<br />
* B-07385: Align token lifetime with SESSION_MAXIMUM_DURATION setting.<br />
* B-07500: ColumnMappings property for IDataFrame and DataTables.<br />
* B-07499: IDataFrame.ApplyFilter function to filter events data using a JSON-based filter.<br />
* B-07469: Translation updates for release 2022.7.<br />
<br />
'''Fixed issues:'''<br />
* D-11630: Drag and drop from chart settings to main header was working incorrectly for filter and root cause rules.<br />
* D-12455: Moving a chart filter from one chart to another created a root cause analysis filter.<br />
* D-12266: Root causes analysis showed incorrect results when certain combination of filters.<br />
* D-12525: Numerical values in Excel export in data grid was formatted incorrectly.<br />
* D-12534: Restoring item from recycle bin changed project from Bin to previous project.<br />
* D-12529: Measure specific datalabel mapping did not work correctly when also mapped to Y-axis.<br />
* D-12532: Multi-selection options caused layout issue for Chart setting.<br />
* D-12541: Layout issue for Polish in multiselect list search dialog.<br />
* D-11277: Increase/decrease Icons were missing in the dimension sorting for Mac.<br />
* D-12552: Uncaught Error: Diagram.selectCollection given something that is not a Part: null.<br />
* D-12567: Tooltip incorrectly showed for label component containing only spaces.<br />
* D-12438: Operation was cancelled because it was replaced by a new operation.<br />
* D-12551: Some expressions didn't work as calculated case/event attributes.<br />
* D-11720: Chart buttons were not visible in Apple Safari and iPad.<br />
* D-12544: On-screen settings "options" parameter did not work.<br />
* D-12528: Multi-unit time unit selection appeared where it's not applicable.<br />
* D-12583: Error message should be provided for invalid settings input than just display JS errors.<br />
* D-12599: Tooltips didn't show correct measures/dimensions when "Show in tooltip" mappings are used.<br />
* D-12561: Chart settings content was incorrectly drawn outside of the chart dialog.<br />
* D-12568: Reload UI sometimes crashed chart having multiselect on-screen settings.<br />
* D-12572: Main header toolbar lost when refresh maximized PA chart.<br />
* D-12612: Drop Unused Filters After setting incorrectly allowed zero seconds.<br />
* D-12533: Error message keeped blinking in Analysis view.<br />
* D-12608: User could not select or add new case attribute when current select attribute doesn't exist.<br />
* D-12451: Prevented deleting running script.<br />
* D-12516: Windows event viewer warning: Failed to gracefully shutdown application.<br />
* D-12523: Business calendar performance - part 2.<br />
* D-12538: Column with same name could be added multiple times to datatable using expression language.<br />
* D-12582: Improved EMS mutex code to support multiple PA service in one server.<br />
* D-12624: Synchronize new (empty) data table generated failed queries in Snowflake.<br />
* D-12622: Advanced setting page reserved room for the expression editor frame that did not exist.<br />
* D-11295: In on-screen settings, some UI controls were vertically misaligned.<br />
* D-11625: The heights of the parameter option menu in the clustering tab was not well aligned.<br />
* D-12103: Small dropdown list layout issue.<br />
* D-12633: Align issue for Column related Advanced settings.<br />
* D-12505: Search dialog didn't escape % and _ characters correctly in dataframe processing.<br />
* D-12645: Tabs in expression settings dialog were partly hidden when dialog is narrow.<br />
* D-11382: Moving of flowchart was sometimes shaky.<br />
* D-12655: Filter rule tooltips in header were styled incorrectly.<br />
* D-12656: Large integer values in filter jsons were incorrectly presented as small integers.<br />
* D-12661: Some exported filters contained unnecessary "invert" property.<br />
* D-12500: Model with numeric case id's and filtering with the attribute mapped as case id: ERROR [22018] Numeric value <nowiki>''</nowiki> is not recognized.<br />
* D-12509: Filtering null values didn't work in boolean attributes in Snowflake.<br />
* D-12571: In dataframe processing in SQL Server, dividing two integers should not make rounding to integer.<br />
* D-12610: Setting for global DropUnusedFiltersAfter was missing.<br />
* D-12613: Filtering with case/event attributes with null values didn't match in Snowflake models.<br />
* D-12617: Model didn't work when DropUnusedFiltersAfter is 00:00:00.<br />
* D-12618: If model ConfigurationJson is null, Configuration property didn't work.<br />
* D-12620: Filtering didn't work when there are backslaces in attribute names in Snowflake models.<br />
* D-12643: AttributeFunctionCallExpression did not always work properly in array context.<br />
* D-12647: SqlDataFrame with SQL Server: Comparing literals to variant column values failed.<br />
* D-12648: Models that have DropUnusedModelsAfter setting caused "The sliding expiration value must be positive" error.<br />
* D-11526: It was unable to translate Unicode character \uD83D at index 176 to specified code page.<br />
* D-12637: In application startup arised FATAL Application startup exception System.UnauthorizedAccessException: Access to the path 'Global\MutexQPRPAActivation' is denied.<br />
<br />
== Old Releases ==<br />
See older releases in [[QPR ProcessAnalyzer Release Archive]]<br />
__NOTOC__<br />
<br />
[[Category: QPR ProcessAnalyzer]]</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&diff=24459QPR ProcessAnalyzer Release Notes2024-02-27T19:14:35Z<p>Ollvihe: /* Latest additional release for QPR ProcessAnalyzer 2024.2 (build 5509) (released 2024-02-27) */</p>
<hr />
<div>This page lists all new features and fixed issues for each QPR ProcessAnalyzer release.<br />
<br />
== Next Release: QPR ProcessAnalyzer 2024.3 (planned release date 2024-04-02) ==<br />
<br />
'''Features:'''<br />
<br />
<br />
'''Fixed issues:'''<br />
<br />
<br />
== Latest: Additional release for QPR ProcessAnalyzer 2024.2 (build 5509) (released 2024-02-27) ==<br />
<br />
'''Features:'''<br />
<br />
* B-06280: User management dialog shows which users have a password defined and (unnecessary) passwords can be removed to improve security.<br />
<br />
'''Fixed issues:'''<br />
<br />
* D-14045: Fixed an issue where users that didn't have at least designer role, couldn't create filters in Snowflake models.<br />
<br />
== QPR ProcessAnalyzer 2024.2 (build 5438) (released 2024-02-21) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue: Using Snowflake models and dashboards doesn't work with Viewer and Analyzer roles. The reason is that cache tables created to Snowflake incorrectly require the GenericWrite permission. Workaround is to give users the Designer role which will give the needed GenericWrite permission. Note that the Designer role gives many permissions to the user for the project [[Roles_and_Permissions#Roles_and_Permissions|(more information)]]. Fixed in the next release (D-14045).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
The legacy User permissions report (analysis number 11) and Filters report (analysis number 30) used in SQL scripts have been removed. Use instead the expressions language to query filters and user permissions, e.g., [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|Models.Filters]] and [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
New version of the Design diagram component has been improved with object-specific measures, and the previous common measures are not migrated into object-specific measures. Thus, the measures need to be configured again, or manually edit the chart json settings (if needed please ask instructions from QPR CustomerCare).<br />
</div><br />
<br />
'''Features:'''<br />
* B-08022: Design diagram supports now BPMN notation, elbow style flows and object-specific measures.<br />
* B-08232: Entire future eventlogs can be [[Create_Predicted_Eventlog|predicted]] based on generative AI models running in Snowflake.<br />
* B-08166: Added expression language function [[Generic_Functions_in_QPR_ProcessAnalyzer#OpenAIChatCompletion|OpenAIChatCompletion]] to answer natural language prompts based on OpenAI ChatGPT API.<br />
* B-08177: Snowflake query performance has been improved by introducing caching of filtered eventlogs using Snowflake tables.<br />
* B-08196: Conditional formatting rules can be defined for [[QPR_ProcessAnalyzer_Table#Textual_equal_rules_for_background_color|textual and boolean values]].<br />
* B-08213: Big data chart expressions event type selections to be multi-select where applicable.<br />
* B-08205: Expression language API is available for storing [[Storing_Secrets_for_Scripts|secrets]] for scripts.<br />
* B-07780: Chart [[QPR_ProcessAnalyzer_Chart#Variable_mappings|variable mappings]] has been removed - use the [[Chart_Linked_Settings|linked settings]] instead. Dashboards using variable mappings are automatically converted to use linked settings.<br />
* B-08117: Added ToSqlDataFrame function to convert in-memory dataframe into SQL dataframes.<br />
* B-08174: Only non-default parameters values are written to the operation log.<br />
* B-08200: Timestamps in System reports are shown in user workstation local time.<br />
* B-08171: Dashboard id has been added to queries, to track from which dashboard queries are originating.<br />
* B-07144: Remove legacy User permissions report (analysis number 11) and Filters report (analysis number 30) in SQL scripts (see note above).<br />
* B-08193: Added retry mechanism to QPR ScriptLauncher to recover if connection to server breaks.<br />
* B-08202: Updated copyright for year 2024.<br />
* B-08199: Frontend components have been updated.<br />
* B-08203: Backend components have been updated.<br />
* B-08209: Translations updated for release 2024.2.<br />
<br />
'''Fixed issues:'''<br />
* D-13972: Some measures/dimensions/columns in Big data chart didn't show the expressions level filtering.<br />
* D-14015: Fixed business calendar incorrect calculation when business period covered entire day.<br />
* D-14014: Fixed issue where Snowflake business calendar could not have end time as 00:00.<br />
* D-13962: System variable values were interpreted incorrectly when used in linked settings.<br />
* D-13971: HiddenInNavigation and SortOrder variables didn't work in navigation menu dashboards list.<br />
* D-13959: Removed possibility to add datatable columns with the legacy "any" data type.<br />
* D-13991: Improved drop-down selector component to handle empty strings as variable values.<br />
* D-13965: Datatable column name length was validated incorrectly which may have caused error in saving with too long column names.<br />
* D-13958: Project names showed unnecessary html escaping in the "Move to" menu.<br />
* D-13964: Model attributes and notifications dialogs gave error when trying to use dashboard tags.<br />
* D-13960: Added missing translations for list of permission list and 12-hour clock format.<br />
* D-13966: Fixed issue were root causes chart tooltip sometimes didn't disappear.<br />
* D-13969: Datatable column schema export sometimes showed empty for the key column.<br />
* D-13862: Session token was not accepted when url path capitalization is different.<br />
* D-13942: Datatable could not be dimensioned if it has column named "CaseId".<br />
* D-13980: Business calendar dialog crashed when tried to open it for a model without access.<br />
* D-13983: Notifications dialog didn't validate situation when same name was used in a measure and dimension.<br />
* D-13981: Dashboard import set incorrect model id to dashboard if there was no access to any model.<br />
* D-11276: Translations were missing for 12-hour clock dates (AM and PM) in dashboards.<br />
* D-13977: Multi-select dropdown lists showed some special characters incorrectly.<br />
* D-13945: Syncfusion toast message didn't work when text contains ${[]}.<br />
* D-13930: Pivot table throws javascript error when certain clicks.<br />
* D-13273: Duplicate datatable row count didn't shown correctly.<br />
* D-13994: There was an error in the in-memory chart with some flow related measures about duplicate variable names when same measure was defined twice.<br />
* D-13985: Models list dots menu had texts misaligned in narrow screens.<br />
* D-13995: In Workspace, wrong datatable was selected after duplication when non-default sorting was applied.<br />
* D-13997: Workspace tables column filtering search caused JavaScript errors.<br />
* D-13978: In table Excel export, the last row representing other items appeared incorrectly for in-memory chart.<br />
* D-14007: In System reports, model related selections are hidden from the Analyzed objects lists.<br />
* D-14005: In big data chart, changing to custom expression caused crash with some expressions having case/event attribute.<br />
* D-14003: When dimensioning was not used, pivot table values were incorrectly rounded in the server side.<br />
* D-14004: Removed empty filters from queries to optimize them.<br />
* D-13988: Fixed issue where data grid context menu rendered initially as too high.<br />
* D-13979: BPMN model editor element settings use now Open Sans font.<br />
* D-14013: Fixed incorrect expression "Duration between first and last occurrence" in big data chart event types.<br />
* D-13984: Fixed the error of refusing to run the JavaScript URL.<br />
* D-14031: ThrownObject property was not included to http error response when error came from the script.<br />
<br />
== QPR ProcessAnalyzer 2024.1 (build 4784) (released 2024-01-10) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue fixed in QPR ProcessAnalyzer 2024.2: In Big data chart, some measures, dimensions and columns have the filtering option missing. The issue concerns for example Duration between events, Path starting/until between specific events, and Cases where event occurs before other selections. Workaround is to set the filter in the chart json settings: the filter can be configured to another expression and copied to the correct expression.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
QPR ProcessAnalyzer Server and QPR ScriptLauncher are now using .Net 8 (previous was .Net 6). When updating to this release, install the .Net 8 Runtime ([[Updating_QPR_ProcessAnalyzer_Server|see more]]). The .Net 6 doesn't need to be uninstalled immediately because .Net 6 and .Net 8 work side-by-side, but due to security reasons, the unused .Net 6 should eventually be uninstalled.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In this release, all filters that don't contain any filter rules, are removed. These are legacy filters which have not been visible in the UI.<br />
</div><br />
<br />
'''Features:'''<br />
* B-08019: New component [[Design_Diagram|Design Diagram]] for showing user-created diagrams in dashboards where to visualize process mining metrics.<br />
* B-08087: Generic [[Dropdown_List_Selector|dropdown list selector]] works with Snowflake models allowing to add selection lists for any values.<br />
* B-08163: Linked settings support for binding to [[Chart_Linked_Settings#Binding_to_case_attribute_filters_with_attribute_name_and_attribute_values|case attribute filter values without defining case attribute name]].<br />
* B-08170: Snowflake model filters can be [[Filtering_in_QPR_ProcessAnalyzer#Filter_actions|saved as new models]] which can be used to create snapshots of part of models.<br />
* B-08093: Multiple dashboards can be exported to same file, and model can be set for imported dashboards.<br />
* B-08161: Added [[Datatable_in_Expression_Language#Modify|Modify]] function to change datatable properties and improved [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#CreateDatatable|CreateDatatable]] function for creating datatables.<br />
* B-08122: Added new system report to list dashboards.<br />
* B-08173: Removed legacy filters that didn't have any filter rules.<br />
* B-07961: In OperationLog, changed parameters to json format and added request id.<br />
* B-08069: Added DashboardId property to [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog]] in expression language.<br />
* B-08139: Added [[Datatable_in_Expression_Language#UpdateRows|UpdateRows]] function to update existing rows in datatables with similar logic than SQL update.<br />
* B-08115: Added [[Datatable_in_Expression_Language#DeleteRows|DeleteRows]] function to delete rows in datatables with similar logic than SQL delete.<br />
* B-08149: QPR ProcessAnalyzer has been updated to .Net 8.<br />
* B-08054: Changed Scripts property in generic context to return all scripts, instead of legacy system level scripts.<br />
* B-08138: Changed Synchronize function to remove all columns when no Snowflake table exists.<br />
* B-07689: For datatables, [[Datatable_in_Expression_Language#ForeignKeys|foreign keys]] to other datatables can be defined using expression language.<br />
* B-08176: Translation updates for release 2024.1.<br />
* B-08175: Workspace should show timestamps in user's local time.<br />
<br />
'''Fixed issues:'''<br />
* D-13913: Datatable properties dialog incorrectly showed linked models from other projects.<br />
* D-13916: Chart filter could not be defined for some expressions in Big data chart.<br />
* D-13933: Navigation menu selected item wasn't highlighted when used Snowflake models.<br />
* D-13906: In Conformance Analysis, deviating flows were not translated.<br />
* D-13907: Improved translation related to datatable properties dialog "Used by models" field.<br />
* D-13904: There was an unclear error message in Snowflake, as exception code 1 was returned without AttributeName and ModelName properties when non-existing attribute was in filter.<br />
* D-13911: Fixed small glitches in the opening and closing of drop-down lists.<br />
* D-13918: Datatable could be configured incorrectly to use table for other datatable.<br />
* D-13932: Duplicating datatable with custom table in datasource losed all data.<br />
* D-11002: Removed legacy in-memory prediction preset.<br />
* D-13912: Added check that array cannot be stored to dashboard Content property.<br />
* D-13936: Query designer default query didn't work with Snowflake models.<br />
* D-13938: There was an incorrect logging with some operations related to ScriptLauncher.<br />
* D-13923: Snowflake expressions didn't work with Where function in root referring to case attribute.<br />
* D-13939: ApplyFilter function gave null reference error for non-existing attribute name.<br />
* D-13931: There were issues with AllowExternalDatasources and EnableFullFunctionality settings.<br />
<br />
== QPR ProcessAnalyzer 2023.7 (build 4326) (released 2023-11-28) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Limitation for the maximum amount of data (B-07636) causes a behavior change in in-memory charts that have the Maximum rows settings empty and have the sorting defined. In certain cases, the order in which measures are evaluated changes (due to an internal performance optimization). If there are custom expressions that define variables, the variables may not be available in other measures anymore. As a resolution, either redefine the variables in those measure expressions or add those measures secondarily to the sorting.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Default query timeout of 30 minutes has been added for --#ImportOdbcQuery, --#ImportSqlQuery and --#ImportOleDbQuery commands. If a query run is taking longer than the timeout, the query is stopped. The timeout can be adjusted using the '''QueryExecutionTimeout''' parameter. Previously, there has been no timeout, so queries that take more than 30 minutes require configuring a longer timeout.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Incorrectly configured [[Chart_Linked_Settings|linked settings]] in charts (available in the ''Advanced'' tab) give now an error message, if they are referring to non-existing measures, dimensions or columns. Previously, incorrect linked settings were ignored. To fix the error message, remove the incorrect linked settings.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07511: Datatables have a [[Datatable_Properties_Dialog|dialog]] to view datatable properties, write description, set the Snowflake source table, add/modify/delete columns, and set the datatable key.<br />
* B-08150: Added setting [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|Apply chart filters first]] to determine whether chart filter rules or dashboard filter rules are applied first when chart queries are filtered.<br />
* B-08091: When filtering charts in Snowflake, case attribute filter is created instead of case id filter.<br />
* B-08091: [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|New setting]] to define whether cases or events are filtered by default.<br />
* B-08091: New preset "Looping paths" to detect whether there are repeating patterns of events.<br />
* B-08091: Duration between events calculation ignores negative durations in Snowflake.<br />
* B-08091: Chart loading animation has been renewed.<br />
* B-07636: To prevent dashboards from jamming when querying too much data, added [[QPR_ProcessAnalyzer_Chart#Available_Visualizations|limitations]] to the amount of data that charts can visualize. Note that the limitation concerns the aggregated data that is visualized, not the source event log data.<br />
* B-08017: [[Dashboard_in_Expression_Language|Dashboards API]] has been added to expression language, allowing to create, modify and delete dashboards in scripts.<br />
* B-08056: Following properties have been added to [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#User.2FGroup|user objects]] in expression language: IsLocked, LastLockedDate, LastLoginDate.<br />
* B-08053: [[Navigation_Menu#System_Reports|User rights report]] has been refactored to use [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property in the expression language. The change also simplifies the report as now it only shows the direct role assignments that are visible in the [[Manage_Users_and_Groups|User Management]].<br />
* B-08151: For Snowflake expressions support for following [[SQL_Expressions#Window_functions|windowing functions]]: sum, average, median, min, and max.<br />
* B-08050: When a model is created, the default filter is not created anymore (this is a refactoring that doesn't have any impact on user interface).<br />
* B-08123: Translation updates for 2023.7.<br />
* B-08092: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13876: In CreateSnowflakeConnection function, ProjectId parameter is optional when OdbcConnectionStringKey is not specified.<br />
* D-13898: Snowflake: Exclude case attribute filter didn't work when there was null values and was selecting at least two values.<br />
* D-13890: Fixed XES file import to work.<br />
* D-13894: Business calendar based duration calculation was incorrect in some durations that spanned to several weeks (for Snowflake and in-memory models).<br />
* D-13899: Using broken OdbcConnectionString in a datatable prevented the datatable from being deleted.<br />
* D-13883: Script run stucked after running a script with error that uses client-side ODBC import.<br />
* D-13879: SqlExpressionValue filter when excluding events didn't work with filter rule root expression only.<br />
* D-13896: Adding or removing columns to datatable didn't change the LastModifiedDate.<br />
* D-13882: User details weren't written to operation log when creating or modifying users.<br />
* D-13771: User rights system report didn't give error when changing columns.<br />
* D-13893: Some event filtering caused null pointer error when primary key had been defined.<br />
* D-13873: Fixed pivot table visual issues after component update.<br />
* D-13900: When adding, renaming or removing columns for Snowflake table fails, operation is now rolled back without any changes.<br />
* D-13866: Querying GET api/uielements was quite slow right after server start.<br />
* D-13864: Combinations of translatable and hardcoded strings didn't get translated in UI.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.6 (build 3933) (released 2023-10-24) ==<br />
<br />
'''Features:'''<br />
* B-08055: Error message for locked account has been replaced with generic error message, so that username enumeration is not possible.<br />
<br />
'''Fixed issues:'''<br />
* D-13884: Attributes dialog crashed with some older model configurations.<br />
* D-13843: In charts, selected case and event attributes switched away when attribute data type was ShortString.<br />
* D-13877: Some Snowflake expressions gave error "exceeds maximum length limit of 255 characters" when selecting lot of items.<br />
* D-13878: Snowflake expression filters for case attribute values didn't accept other than string type of case attributes.<br />
* D-13871: Some statistical calculations with percentages didn't work with Last Row Aggregates Over-limit Rows setting.<br />
* D-13875: Using some case level filters in a model without cases datatable didn't work.<br />
* D-13861: Dashboard opens are now logged to the Task log (i.e., calling GET /api/dashboards/{dashboardid}).<br />
* D-13870: Workspace projects hierarchy focused project showed light grey background making the project name not readable.<br />
* D-13867: When starting datatable refresh and going to other tab, went back to Datatables tab when query completed.<br />
* D-13853: If chart Custom Layout settings had extra series defined, chart may have crashed.<br />
* D-13869: Export as CSV button didn't work in the datatable contents dialog when dialog was still loading.<br />
* D-13872: Main progress spinner had unnecessary small scrollbar on top right.<br />
* D-13863: In the REST API method GET /api/users, password field (that has always been null) has been removed.<br />
<br />
== QPR ProcessAnalyzer 2023.6 (build 3847) (released 2023-10-17) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is removed in this release. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
'''Features:'''<br />
* B-07992: Added 10 new presets including Queue analysis, Four eyes principle, Self-looping events, and Path until selected event. There are also presets for Individual Cases Flow and Range of event type occurrences which use Gantt chart.<br />
* B-08011: Added following date related operations for Snowflake: Day of year, Day of month, Day of week, Week of year, Half-year only, Quarter only, Month only, Hours only, Minutes only, Seconds only, and Milliseconds only. These are available when calculating with date type of data.<br />
* B-08016: [[QPR_ProcessAnalyzer_Table#Table_actions|Table actions to set variables]] can also be opened to a new browser tab. Also improved user interface for table actions.<br />
* B-08018: For Snowflake expressions, added Flows aggregations FromEventType and ToEventType to get starting/ending event type, and FlowOccurrences aggregations FromEvent and ToEvent to get starting/ending event.<br />
* B-08001: Added [[Generic_Functions_in_QPR_ProcessAnalyzer#CallStoredProcedure|CallStoredProcedure]] function to call Snowflake stored procedures. This allows to start ETL transformation in Snowflake orchestrated by QPR ProcessAnalyzer script.<br />
* B-08013: Added [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property to expression language to replace the legacy UserPermissions analysis (11).<br />
* B-07976: Snowflake [[Filtering_in_QPR_ProcessAnalyzer_Queries#Expression|expression based filter rules]] support additional expression columns allowing more Big data chart expressions to be filterable.<br />
* B-08015: Big data chart doesn't anymore support calculation in SQL Server (using local datatables).<br />
* B-06270: Improved error messages and made them translatable by taking into use exception codes provided by server.<br />
* B-08021: Added possibility to store [[Diagram_in_Expression_Language|designed diagrams]] for models and expression language API for reading and modifying diagrams.<br />
* B-08037: Dropped following unused tables database: PA_IDEA, PA_IDEA_VOTE, PA_REPORT, PA_REPORT_SETTING, PA_SESSION_SERVICE, PA_VIEW_FILTER_RULE, PA_VIEW_FILTER_RULE_PARAMETER.<br />
* B-08052: Language translations have been updated to 2023.6.<br />
* B-08051: Frontend side components have been updated.<br />
* B-08034: Backend side components have been updated.<br />
<br />
'''Fixed issues:'''<br />
* D-13830: Object counts indicator in header showed incorrect counts when there was disabled filter rules in Snowflake models.<br />
* D-13833: In-memory charts didn't work with boolean type of dimensions when filtering with the false value.<br />
* D-13858: Target value measures didn't update chart when controlled using an on-screen setting.<br />
* D-13827: Calculated attributes data type was incorrectly set as Any by the Attributes dialog.<br />
* D-13849: Multiselect list search didn't allow spaces.<br />
* D-13829: Multiselect dropdown lists height jumped couple of pixels when selecting values.<br />
* D-13835: Deselecting a selected data point didn't remove chart filter rule.<br />
* D-13702: Improved Snowflake query performance in situations when there are lot of filter rules (by decreasing number of CTE's).<br />
* D-13819: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13820: Fixed incorrect manifest.json file to avoid "not found" errors when fetching web site icon.<br />
* D-13865: Break, continue, and return statements didn't work properly when called from inside a catch block.<br />
* D-13795: There was a Python error in clustering analysis with Snowflake model.<br />
* D-13823: Some tooltips in Workspace project hierarchy didn't work and caused a JavaScript error.<br />
* D-13824: BPMN editor align context menu layout looked strange.<br />
* D-13813: QPR logo button in the top left was misaligned in Firefox.<br />
* D-13797: Snowflake query may have given following error when using sampling: ambiguous column name '_EventType_NotNull_1'.<br />
* D-13774: TakeSample function with certain columns caused SQL compilation error: ambiguous column name 'Case Name'.<br />
* D-13782: Snowflake: Aggregating from variations didn't work when using sampling.<br />
* D-13836: Some tooltips had a strange two-colored background.<br />
* D-13834: Removed Model statistics column from clustering and root causes analysis.<br />
* D-13860: Removed filter button from the custom expressions in Task log analyzed objects.<br />
* D-13838: Removed Split data by filtering column from clustering analysis.<br />
* D-13832: Script and model status updates incorrectly sent next update when previous was still pending.<br />
* D-13839: Charts reset zoom button font size was too small.<br />
* D-13817: Importing data to Snowflake datatable with Append=0 doesn't now drop the underlying Snowflake table.<br />
* D-13825: Some models could not have been deleted from recycle bin.<br />
* D-13852: Recycle bin Projects and Models tab didn't show correct content when Recycle bin only contained either models or projects.<br />
* D-13841: In-memory chart Data type selection type has been corrected to string.<br />
* D-13842: Second time and Third time selections has been hidden in in-memory chart measures.<br />
* D-13850: In Chrome, there were console errors related in incorrect text field autocomplete type and text field without form.<br />
* D-13847: Improved browser side performance by removing unnecessary operations.<br />
* D-13859: Chart without dimensions showed an unnecessary Remove dimension button.<br />
* D-12598: When script is stopped in server, ScriptLauncher could still incorrectly continue to import data.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.5 (build 3334) (released 2023-09-07) ==<br />
<br />
'''Fixed issues:'''<br />
* D-13826: Measures or dimensions with case or event attribute and value selections incorrectly removed calculated attributes when dashboard was opened or chart settings were changed.<br />
* D-13821: Font size of some Highcharts tooltips was too small. Issue appeared when there were tooltips mappings in measures or dimensions.<br />
* D-13810: Simplified help links: now all Help buttons go to the QPR ProcessAnalyzer wiki main page.<br />
* D-13822: Snowflake clustering analysis showed empty strings and nulls as case attribute values in an unclear way as just nothing.<br />
<br />
== QPR ProcessAnalyzer 2023.5 (build 3304) (released 2023-09-05) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In Big Data Chart, the '''Case conformance''' measure and dimension has changed in a way that now it provides boolean values (true/false) instead of integer values (1/0). If [[Measure,_Dimension_and_Column_Settings#Other_settings|colorMappings]] are used for this measure or dimension to set specific colors to visualize conformant and nonconformant cases, the mapped values need to be changed as follows: '''1''' -> '''true''' and '''0''' -> '''false'''. Without the change, the mapped colors are not effective.<br />
<br />
Exmaple: Old configuration:<br />
<pre><br />
"colorMappings": {<br />
"1": "#36d475ff",<br />
"0": "#f5403bff"<br />
}<br />
</pre><br />
New configuration:<br />
<pre><br />
"colorMappings": {<br />
"true": "#36d475ff",<br />
"false": "#f5403bff"<br />
}<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is deprecated. Big data chart has allowed to process data both in Snowflake and SQL Server. Now the support for SQL Server is deprecated and the Big data chart will only support calculation in Snowflake. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). The OperationLog analysis is replaced by the [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog function]] and the Infcluencers analysis is replaced by the [[FindRootCauses_Function|FindRootCauses function]].<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [12, 14, 15, 16, 29];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
By default, Snowflake ODBC driver generates quite much logging to files which might unnecessarily fill up the disk space. It's recommended to set the LogLevel parameter to value 0. The path where the logs are created can be seen in Windows registry (key LogPath). More information about configuring Snowflake ODBC parameters: https://docs.snowflake.com/en/developer-guide/odbc/odbc-parameters.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07971: Machine learning based [[Clustering_Analysis|Clustering analysis]] can be run in Snowflake.<br />
* B-07989: In dashboard designer the stacking order of charts can be changed with buttons [[QPR_ProcessAnalyzer_Dashboard_Designer#Viewing_and_Editing_Dashboards|Bring to front, Send to back, Bring forward and Send backward]].<br />
* B-07977: For [[Sankey_Chart|sankey diagram]], added Start level and End level mappings to define custom start and end level for the sankey flows. Implemented also color mappings to define specific colors for specific values.<br />
* B-08010: To improve performance, charts are loaded and updated only when they are visible in the dashboard.<br />
* B-07975: Added following [[SQL_Expressions#Date_functions|date related functions]] to Snowflake: DayOfYear, DayOfWeek, WeekOfYear, Quarter.<br />
* B-07908: When [[QPR_ProcessAnalyzer_Project_Workspace#Duplicating_Model|model is duplicated]], also filters in the model are also duplicated.<br />
* B-07904: Filters and models API for expression language has been completed.<br />
* B-07991: In [[Filter_Selectors|case and event type filter selectors]], threshold whether the dropdown list or search dialog is shown can be defined using the ''Maximum Rows'' setting. Also the search dialog filters search results by other filter rules in the dashboard.<br />
* B-07999: Filters report has been changed to use the [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|expression language API for filters]].<br />
* B-07540: Added [[QPR_ProcessAnalyzer_Expressions#Throwing_objects|throw statement]] to expression language.<br />
* B-07813: UI components are updated. There are small visual improvements, such as in flowchart flows are routed a bit differently and in charts the hidden series is shown as strike-through in the legend.<br />
* B-07963: Following legacy analysis types have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29) (see more information in the note above).<br />
<br />
'''Fixed issues:'''<br />
* D-13777: Filters could not be created in charts when "Update Filter During Selection" setting was disabled.<br />
* D-13767: Automation per Event Types preset in in-memory incorrectly showed only one event type.<br />
* D-13756: Changing background color in KPI card didn't have any effect.<br />
* D-13812: "Exclude events" was incorrectly translated to "Exclure les cas" in French.<br />
* D-13815: Dashboard designer background grid was not visible in entire area in edit mode. Improved also the grid to match to snapping in move and resize.<br />
* D-13674: Business calendar dialog layout was incorrect when a model with a long name was selected to copy holidays.<br />
* D-13811: Table actions link to a new window didn't go to dashboard if there were other parameters in the link.<br />
* D-13601: Fixed issue where some presets may have given error when attribute value selection and the automatically selected attribute conflicted by the data type.<br />
* D-13753: While Snowflake model was selected, in Filters and User Rights reports the Columns list could not be opened.<br />
* D-13720: Now table column filter and sorting are preserved when resizing or zooming page.<br />
* D-13785: In tables increased number of rows to 20000 that are inspected to get available items shown in Excel-style column filter.<br />
* D-13759: Some statistical calculations had bad performance with large number of rows.<br />
* D-13787: Conformance statistics component didn't have scrollbars when text didn't fit to the visible area.<br />
* D-13788: In-memory "Nonconformance reason" selection caused error when two of them was selected in the same chart.<br />
* D-13783: When Analyzed objects was Generic analysis, column selection incorrectly caused "Analysis has not been selected" error.<br />
* D-13776: When measure name contained quotation mark, notification preview didn't work.<br />
* D-13747: Filtering with integer type of case id with case attribute value filter caused error in Snowflake.<br />
* D-13791: In Firefox, model selection in chart settings didn't show models in the first open.<br />
* D-11984: Recycle bin buttons didn't fit to the screen when screen width was small.<br />
* D-13780: Using CaseId case attribute in clustering analysis did not work with Snowflake 106 cases standard model.<br />
* D-13781: Clustering analysis produced Python error with a certain simple Snowflake model.<br />
* D-13730: Snowflake: Case attribute filtering didn't work when there are cases without row in cases table.<br />
* D-13803: There was chart configuration validation error in browser console when measures were moved into dimensions in Big data chart.<br />
* D-13758: There was performance issue with the Recent tasks system preset.<br />
* D-13793: Snowflake clustering failed when cluster count is larger than case count.<br />
* D-13763: SQL expression based filter rule with Where function to filter events didn't filter anything in Snowflake.<br />
* D-13804: Added missing Millisecond function to Snowflake.<br />
* D-13772: Expression EventLog.Cases.Events caused error "Value cannot be null".<br />
* D-13755: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13739: When switching between System reports there was error: "Uncaught Error: 2nd dimension not found. at y.getExpressionConfiguration".<br />
* D-12109: Sometimes flowcharts showed message "Error in querying event type measures. Input string was not in a correct format".<br />
* D-12473: Cost Savings by Automation preset gave sometimes error "Unable to cast object of type 'System.Double' to type 'System.String'".<br />
* D-13750: Snowflake model didn't work with the Case Duration vs. Manual Activities preset.<br />
* D-13657: There was error converting data type nvarchar to bigint.<br />
* D-13796: Some Snowflake operations didn't work with zero rows and columns.<br />
* D-12494: Now when chart size changes, the table column filters and sorting are preserved.<br />
* D-13736: In Performance benchmarking dialog, the Export result button exported wrong benchmark performance analysis result.<br />
* D-13609: Improved conformance analysis related filter names.<br />
* D-13594: Recycle bin buttons were not visible when opening recycle bin in a narrow screen.<br />
* D-13226: Tooltips in the model properties dialog are now translated.<br />
* D-12569: Table incorrectly showed ellipsis for narrow boolean type of columns showing checkboxes.<br />
* D-13391: Emptying date or datetime picker value was not registered and it didn't trigger functionality.<br />
* D-12621: Value search dialog didn't work with values containing backslashes.<br />
* D-13796: Some Snowflake operation didn't work with zero rows/columns.<br />
<br />
== QPR ProcessAnalyzer 2023.4 (build 2628) (released 2023-06-14) ==<br />
<br />
'''Features:'''<br />
* B-07767: Added [[Gantt_Chart|Gantt chart]] to visualize timeline of cases and events divided into swimlanes.<br />
* B-06383: Added [[Sankey_Chart|Sankey chart]] to visualize flow from one set of values to another.<br />
* B-07941: Implemented many more presets running in Snowflake models for compliance and operational excellence use cases. There are also presets for the path analysis and process bottlenecks identification.<br />
* B-07864: Snowflake conformance analysis shows now [[Conformance_Analysis#Top_Deviations_(in-memory)_/_Deviating_Flows_(Snowflake)|reasons for conformance deviations]], such as which event occurrences deviated from the design model.<br />
* B-07909: Snowflake conformance analysis visualizes [[Conformance_Analysis#Undesired_Events_(Snowflake)|undesired event types]] in table and flowchart.<br />
* B-07823: Flowchart Bottlenecks preset has been changed to show bottlenecks for event types. Also renewed the [[QPR_ProcessAnalyzer_Logs#Task_Log|Tasks reports]] to use expression language based interface.<br />
* B-07891: User interface has been [[Languages_and_Localization|translated into Portuguese]].<br />
* B-07873: Improved [[QPR_ProcessAnalyzer_Pivot_Table|pivot table]] visual layout to highlight totals and aggregated rows. Also the row titles are now visible in the top left.<br />
* B-07905: Added [[SQL_Expressions#Rank_functions|Rank related functions]] to Snowflake for writing more versatile custom KPI's, e.g., FirstValue, LastValue, NthValue, Lead and Lag.<br />
* B-07912: Added more SQL expression [[SQL_Expressions#Array_functions|array functions ArrayToString and ArrayOverlap]] to Snowflake.<br />
* B-06449: Added SQL expression functions ToTimestamp and TryToTimestamp for parsing timestamps from strings using provided format.<br />
* B-07959: Added new functions Base64Encode and Base64Decode to help using basic HTTP authentication when calling web services.<br />
* B-07206: SQL expressions support data [[SqlDataFrame_in_Expression_Language#WithClusterColumn|clustering]] which is an unsupervised machine learning algorithm to group data based on similarities.<br />
* B-07848: Data can be extracted from SAP using the encrypted [[Importing_Data_from_SAP#SNC_encrypted_connection|SNC connection]].<br />
* B-07903: Added expression language API to create and modify filters and models.<br />
* B-03103: [[QPR_ProcessAnalyzer_Logs#Task_Log|Task log]] (operation log) can be accessed in expression language.<br />
* B-07872: List aggregation with Distinct=true orders now items by their value.<br />
* B-07940: Removed "Count" aggregation from textual values in Big data chart (you can use the Case count, Event count, etc. selection instead).<br />
* B-07757: Backend support for datatables linking to user-definable Snowflake database, schema and table.<br />
* B-07825: Improved error message when trying to use non-existing attributes in Snowflake queries.<br />
* B-03101: To expression language, added try-catch-finally statement to handle thrown exceptions.<br />
* B-07861: Removed available and total virtual memory information from User settings dialog.<br />
* B-07902: Optimized sequences of joins in Snowflake queries to improve performance.<br />
* B-07837: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13709: If image width-to-height ratio was lower than container's ratio, image was incorrectly stretched to fit the container.<br />
* D-13660: Disabling filter rules didn't work in Snowflake models.<br />
* D-13526: Passing dataframes from SQL scripts to expression scripts didn't work.<br />
* D-13661: Snowflake conformance analysis crashed when there was no access to conformance related Snowflake UDF's.<br />
* D-13693: Resolved major Snowflake conformance analysis performance issues in the BPMN model handling.<br />
* D-13716: Snowflake root causes analysis incorrectly bypassed Snowflake cache.<br />
* D-13707: In SQL Scripting, the datatable analysis (number 18) didn't always copy the data table contents to the target table correctly.<br />
* D-13653: Big data flowchart Root causes preset showed incorrect legend.<br />
* D-13626: Flowchart froze when converting into big data flowchart and vice versa by modifying chart json settings.<br />
* D-13656: Root causes for attribute gave error "Failed to compare two elements in the array" in some situations.<br />
* D-11563: Pivot table had a minimum height of 300px, which caused bottom part of it to be out of view.<br />
* D-13704: In CSV file import, parsing now allows spaces between column separator and text quotation mark.<br />
* D-13598: Chart gave unclear error message when events datatable was not defined.<br />
* D-13655: Improved error messages for BPMN editor and conformance statistics.<br />
* D-13528: Error message for certain erroneous SQL expressions was unclear.<br />
* D-13677: "Flow occurrences with specific case attribute value" selection didn't work for in-memory chart.<br />
* D-13663: Pivot table border line was slightly broken in the header area.<br />
* D-13608: There was incorrect alignment of items in the table paging controls.<br />
* D-13703: Importing CSV file with some special characters to Snowflake failed (due to incorrect escaping in Snowflake staging files).<br />
* D-13708: Duplicating datatable using user defined table, removed data the source table.<br />
* D-13717: Dependency wheel crashed when there were zero weights and showing data labels.<br />
* D-13348: There was an unclear error message when Snowflake query had a certain incorrect expression.<br />
* D-13732: Pivot table Excel export contained headers formatted incorrectly.<br />
* D-13729: There was a JavaScript error when limited user tried to access business calendar.<br />
* D-13662: Percentile function didn't always work with timespan types.<br />
* D-13646: Using incorrectly configured model without cases datatable caused null reference error.<br />
* D-13629: When tried to use chart with a non-existing model, there is now a proper translated error message.<br />
<br />
== QPR ProcessAnalyzer 2023.3 (build 1990) (released 2023-05-03) ==<br />
<br />
'''Features:'''<br />
* B-07818: [[Conformance_Analysis|Conformance analysis]] is supported in Snowflake with following dashboard components: Big data chart, BPMN editor, Conformance statistics, and Design model selector.<br />
* B-07833: [[Root_Causes#Root_causes_in_flowchart|Root causes analysis for flowchart]] is available for Snowflake showing how the event and flow occurrences explain selected phenomena.<br />
* B-07786: Big data chart has more [[Big_Data_Chart#Measure_aggregations|measure aggregations]], such as median, percentile, standard deviation and variance. Also for textual items, unique values can be listed.<br />
* B-07795: [[QPR_ProcessAnalyzer_Table#Conditional_formatting|Conditional formatting]] supports also columns with non-numerical contents.<br />
* B-07830: [[Big_Data_Chart#Measure_aggregations|None and Any aggregations]] for Snowflake and user-friendly formatting for conformance violations.<br />
* B-06527: Error messages in [[Importing_Data_to_Datatable_from_CSV_File|CSV file import]] show also the column number to help working with CSV files with lot of columns.<br />
* B-07747: In-memory conformance checking accepts design models with multiple tasks having same name (same is followed by the Snowflake implementation).<br />
* B-07659: In-memory flowchart preset Case Conformance to visualize conformance checking violations.<br />
* B-07571: Added function IsConformant to backend to check whether cases are conformant.<br />
* B-07863: Added function ConformanceViolationsFlows to backend to return nonconformance reasons for violating cases.<br />
* B-07844: Support for "array" aggregation to return aggregated items as array.<br />
* B-07856: Support for creating and accessing arrays and objects in SQL expressions.<br />
* B-07860: Array handling functions and Tasks property for DesignModel entity.<br />
* B-07847: Added throttling for QPR ScriptLauncher client-side imports to limit memory usage.<br />
* B-07811: Snowflake query optimization to omit columns that are not used by the query.<br />
<br />
'''Fixed issues:'''<br />
* D-13632: Going from variations to event types led to very poor performance with certain models.<br />
* D-13628: Statistical calculations were incorrectly not applied in chart CSV export.<br />
* D-13575: SQL script may have given error "Operand type clash: nvarchar(max) was incompatible with sql_variant".<br />
* D-13597: UI supports now datatable column type "ShortString" (previously datatable contents preview and CSV import didn't work).<br />
* D-13536: Using business calendar sometimes gave error "System.InvalidOperationException: Collection was modified".<br />
* D-13477: Chart types without y-axis mapping caused an error when series mapping was used.<br />
* D-13453: _model variable was not available for Snowflake expression filter rules.<br />
* D-13527: Checkbox height didn't increase when long label needed to span to multiple lines.<br />
* D-13363: Snowflake query with EvaluateAfterAggregations and IsHidden failed when dimensioning by case id column.<br />
* D-13383: Snowflake query gave error "Invalid column name 'FromCase Name'".<br />
* D-13523: Request id was incorrectly shown as zeros in error messages.<br />
* D-13541: In CSV import, error message for maximum number of columns exceeded is improved (maximum is 300 column for SQL Server).<br />
* D-13583: Objects count in header didn't work for empty Snowflake model.<br />
* D-13553: Larger pacm files can now be imported, as there isn't error "Request body too large. The max request body size is 30000000 bytes".<br />
* D-13306: Stack overflow error was given when using SqlDataFrames.<br />
* D-13487: When Flows root and there was filter in Values expression, some flows were lost.<br />
* D-13540: SqlDataFrame query with 300 columns failed to error "WithExpressionColumn: No name given for the new column".<br />
* D-13429: Ordering in List aggregation couldn't find columns in dataframe query.<br />
* D-13406: Dataframe query with root FlowOccurrences and get value from cases caused error.<br />
* D-13538: There was incorrect handling of escaping characters in column names used in dimensions.<br />
* D-13633: Fixed ordering in List aggregation with null and empty values.<br />
* D-13636: Query that dimensions by numeric case attribute with AggregateOthers true, caused error.<br />
* D-13589: Creating Snowflake datatable did not connect to Snowflake.<br />
* D-13623: Value expressions without aggregation didn't work with AggregateOthers setting.<br />
* D-13554: In in-memory chart, percentile function might have return both Int64 and Double type of objects which cannot be sorted.<br />
* D-13481: Improved error message when trying to use deleted model.<br />
* D-13621: Dynamic value search dialog had incorrect font in lists.<br />
* D-13610: Some invalid BPMN files crashed BPMN editor.<br />
* D-13614: Checkbox label texts overflowed to right.<br />
* D-13520: Removed excessive parameters from the Query Designer for generic context queries.<br />
* D-12998: QPR icon was incorrectly positioned in header in Safari.<br />
* D-13480: Import to duration data type is removed from Snowflake datatables, and for local datatables duration type maximum size is checked.<br />
* D-13517: In Highcharts-based visualizationsm conditional formatting didn't work for other than the first y-axis mapping.<br />
* D-13529: In some presets containing several on-screen settings, when chart showed in error message, on-screen settings showed invalid selection.<br />
* D-13530: Opening dropdown list caused JavaScript error when the list contents should be empty after it previously contained items.<br />
* D-13486: Removed unreachable error message in CSV import.<br />
* D-13524: Fixed in-memory chart flow occurrences root measures "Event attribute (text)" and "Event attribute (number)" that caused error.<br />
<br />
== QPR ProcessAnalyzer 2023.2 (build 1478) (released 2023-03-22) ==<br />
<br />
'''Features:'''<br />
* B-07755: [[Business_Calendar|Business calendar]] for duration calculation is available for Snowflake models.<br />
* B-07719: In Snowflake dashboards, [[Big_Data_Chart#Using_measure_variables|measures can be assigned to variables]] and use the variables in other measures to create combined measures.<br />
* B-07746: Changed in-memory conformance checking to not show invalid flow violations where starting or ending event type is invalid.<br />
* B-07743: [[PA_Configuration_database_table#General_Settings|Default datasource]] can be configured for datatables created by scripts, allowing to set Snowflake as default.<br />
* B-07740: System memory indicator moved from the header to User settings Version information dialog.<br />
* B-07776: New SQL expressions functions Unicode, Char and Regexp, as a basis for future rule-based process mining.<br />
* B-07741: Backend support for aggregation operations Median, Percentile, Stdev, Stdevp, Var and Varp to Snowflake.<br />
* B-07742: Backend support for aggregation operation to list unique items in Snowflake.<br />
* B-07770: Optimized Snowflake SQL generation by combining consecutive WithColumn function calls into one select.<br />
<br />
'''Fixed issues:'''<br />
* D-13491: QPR ProcessAnalyzer server crashed now and then when sorting was in progress and the query was cancelled.<br />
* D-13380: Dimensioning integers in in-memory core calculation didn't work correctly as 0 and -1 were put to same bucket.<br />
* D-13385: In Workspace Bin, Delete Forever and Restore from Bin buttons were misaligned.<br />
* D-13332: Conformance checking didn't show in violations when there were multiple undesired events in same case.<br />
* D-13405: Images take now always all available space in image component area.<br />
* D-13417: KPI card without title was slightly misaligned vertically.<br />
* D-13438: Clicking selected event type or flow in flowchart didn't cancel the filter selection.<br />
* D-13350: Task log and Script log default filter end date is now empty by default.<br />
* D-13381: Disabled browser auto-complete from flowchart variation stepper and Workspace create/rename object dialog.<br />
* D-13347: Improved performance for in-memory business calendar calculation.<br />
* D-13335: In in-memory chart, filtering didn't work in "Flow occurrences" root "Flow occurrences with specific event attribute value" dimension.<br />
* D-13367: Percentage value wasn't displayed properly with German or Spanish language when event types were shown in object counts indicator.<br />
* D-13451: Exported filter file is now named based on selected filter name.<br />
* D-13378: In Big data chart, prevented error "Unable to aggregate from level RootCauses to level Custom".<br />
* D-13293: DataFrame query with root Flows and IncludeEvents and ExcludeEvents filter rules failed.<br />
* D-13370: Fixed issue where on-screen settings that didn't have any selectable items, showed a strange selection.<br />
* D-13392: Clustering analysis was incorrectly shown when originally in-memory chart was converted into big data chart by changing chart json settings.<br />
* D-12784: Some Snowflake queries incorrectly bypassed Snowflake caching because they used unique object names.<br />
* D-13456: Improved error messages for incorrectly configured on-screen settings.<br />
* D-13445: Conformance violations related translated terms have been fine-tuned for better translations into different languages.<br />
* D-13421: Improved error messages when trying to use model having some column mappings missing.<br />
* D-13485: Snowflake business calendar gave error when calendar contained Sunday.<br />
* D-13218: Windows event viewer incorrectly contained log entries that are not errors.<br />
* D-12634: Multiline text boxes width is set to non-changeable.<br />
* D-13034: Confirmation dialog to delete items permanently has been updated.<br />
* D-13288: In dialogs, the Create button didn't show the disabled state correctly.<br />
* D-13427: When dropdown lists didn't have any selectable items, the "N/A" text appeared and the list incorrectly took more space vertically.<br />
* D-13483: In Workspace, the new items menu was too narrow for Spanish texts.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.1 (build 1449) (released 2023-02-24) ==<br />
<br />
'''Features:'''<br />
* B-07690: System setting [[PA_Configuration_database_table#General_Settings|DatabaseId]] can be defined by administrator to get more simple table names in Snowflake.<br />
* B-07737: In flowchart Bottlenecks preset, originally used flow colors has been recovered.<br />
* B-07748: For Analyzed objects "Conformance checking findings" in charts, terminology has been revised and issue with the case count calculation fixed.<br />
* B-07663: In [[Chart_On-screen_Settings|on-screen settings]], when case/event attribute is selected, related attribute values list are reset.<br />
* B-07570: Backend support for [[Business_Calendar|business calendars]] in Snowflake.<br />
* B-07660: Backend support for conformance checking to show also the last event index and event type in NotCompleted reason.<br />
* B-07610: Memory counter related technical properties have been removed from expression language.<br />
<br />
'''Fixed issues:'''<br />
* D-13349: Opening dashboard containing Root causes preset with default settings jammed the system by generating lot of calculations (for more information, see previous release notes).<br />
* D-13277: Stacked charts with date type of data as series did incorrectly show gaps in columns/bars.<br />
* D-13270: Flowchart conditional formatting didn't work with duration multi-unit format.<br />
* D-13358: Calculation results caching works also across different user sessions.<br />
* D-13250: Dashboard with two charts connected with linked settings using variables ended up to to a never ending loop.<br />
* D-13230: SAP import did not automatically create columns to use the correct column types.<br />
* D-12857: Deeply recursive functions caused a crash without any trace.<br />
* D-12994: In Workspace, some buttons were not clickable due to breadcrumb covering them.<br />
* D-13249: In Workspace, there was incorrect error message for duplicate datatable names when there were items with only letter capitalization was different.<br />
* D-13232: In-memory chart Top variations preset is now sorted secondarily by average duration descending.<br />
* D-13300: Setting DashboardFilter variable to empty value didn't have any effect in dashboard but old value was incorrectly used.<br />
* D-12834: Limited the maximum number of dimensions to 20, to avoid too demanding queries for SQL Server.<br />
* D-12917: Changed visual indication of missing items in dropdown lists (it's no longer showing "***").<br />
* D-13111: In Root causes preset, there is now error message when trying to use weighting related columns when weighting isn't in use.<br />
* D-13124: SQLDataFrame query containing filter rule EventTypes aggregating from cases failed.<br />
* D-13207: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed.<br />
* D-13292: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed (rev.2).<br />
* D-12991: Dropdown list texts had some translations missing.<br />
<br />
== QPR ProcessAnalyzer 2023.1 (build 1433) (released 2023-02-07) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release contains a potentially severe issue, where some dashboards completely jam the system by generating lot of calculations. The issue may appear in dashboards that have been created in earlier releases and containing the Root causes preset with default settings. The issue will be fixed by the next release. The issue can be worked around by exporting the affected dashboard, modifying the dashboard file manually and importing the dashboard back. The required modification is to remove line(s) containing <pre>"preset": "RootCauses"</pre> and the comma from the preceding line.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Cases (analysis number: 5), Events (6), and EventTypes (7). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). Note that the legacy analyses removal don't affect the dashboarding functionality.<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [5, 6, 7];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2023.1, the '''.NET Desktop Runtime''' is not needed anymore for QPR ProcessAnalyzer Server, so it can be uninstalled. Also for QPR ScriptLauncher, ''.NET Desktop Runtime'' is not needed, but instead install the '''.NET Runtime''' (which is more lightweight). ''.NET Desktop Runtime'' contains the ''.NET Runtime'', so the actions are not mandatory when updating to QPR ProcessAnalyzer 2023.1.<br />
</div><br />
<br />
'''Features:'''<br />
* B-06997: Expression-based filter rules for Snowflake dashboards to allow versatile filtering and filtering from custom expressions.<br />
* B-07383: Improvements to linked settings to allow binding to variables, tags and filter rules [[Chart_Linked_Settings|(more information)]].<br />
* B-07508: Flowchart preset colors have been renewed to be more intuitive.<br />
* B-07184: Automation preset in flowchart has now options for selecting the Automation attribute and value.<br />
* B-07512: Changed datatable metadata can be refreshed from Snowflake, and all rows in the datatable can be deleted easily in Workspace [[QPR_ProcessAnalyzer_Project_Workspace#Datatables|(more information)]].<br />
* B-07440: Date when the release was made is now shown in User settings.<br />
* B-07595: WeekOfYear property for DateTime objects in expression language to get the week number of a year (between 1 and 53).<br />
* B-07623: In-memory expression language functions Random (to get random numbers) and Hash (to get hash value of string).<br />
* B-07612: Breadcrumb in Workspace has now a Home button to quickly navigate to the top level of the projects hierarchy.<br />
* B-07637: Language selector now shows the language options in local languages.<br />
* B-07228: Remove following deprecated analyses: Cases, Events, and EventTypes (see the release note above).<br />
* B-07538: Backend support: Snowflake root causes analysis can find event attribute related root causes.<br />
* B-07706: Backend support: Snowflake expression-based filter rules support for roots containing Where function.<br />
* B-07611: Removed following legacy filter rules: CaseAttributeTrend, EventAttributeTrend, EventTypeTrend, and Duration.<br />
* B-07598: Refactored client-side import for SQL scripting to use generic client-side task mechanism.<br />
* B-07716: ShortString columns are now properly detected in SQL Server queries.<br />
* B-07652: Now it's possible to pipe multiline expression strings to QPR ScriptLauncher.<br />
* B-07688: AddColumns function for Datatables to create multiple columns in one call.<br />
<br />
'''Fixed issues:'''<br />
* D-13092: Table conditional formatting didn't work when color code was fetched from other column.<br />
* D-13105: Some charts created in earlier release referring to non-existing presets names appeared as empty after software update.<br />
* D-13107: Flowcharts crashed and showed loading animation forever when setting color or flow thickness to non-numerical measure.<br />
* D-13104: In BPMN model editor, context menus to edit elements didn't appear.<br />
* D-12939: Script editor tabs Close buttons didn't work.<br />
* D-13154: "Search by case ID" didn't work in in-memory chart.<br />
* D-12933: CSV columns with only empty values were incorrectly auto-detected as integers.<br />
* D-12929: In-memory chart Root causes for case duration and Root causes for case attributes (weighted) had Custom expression missing.<br />
* D-12928: Pivot table headers were empty when there were two column levels and two values.<br />
* D-12924: Pivot table columns with Count and Distinct Count aggregations are now numeric and aligned right.<br />
* D-13033: Changing colors in chart settings Color palette caused "Item already exists" error and prevented changing colors.<br />
* D-12996: Tags referring to dashboard variables didn't work in Additional root expression.<br />
* D-12877: UI gave error in some situations: Uncaught TypeError: Cannot read properties of undefined (reading 'min').<br />
* D-13071: Prevented selecting two or more of the Y-axis, X-axis and series mappings at the same time for the same measure or dimension.<br />
* D-12895: Big data chart crashed when on-screen setting contained event type selector and there were no event type filter set.<br />
* D-13231: Tooltips for dashboard name, model selector and filter selector in header show now the content text instead of generic instruction.<br />
* D-13139: There was an error when tried to create filter for a custom expression where selected data type didn't match with the actual type of data.<br />
* D-12988: Chart presets selection in chart settings showed unnecessary tooltip.<br />
* D-12901: When set sampling over 1 million, Snowflake models gave error: parameter value out of range: size of fixed sample. Must be between 0 and 1,000,000.<br />
* D-12904: Creating expression filter having lower/greater logic with root objects sampling failed.<br />
* D-12923: Chart schema didn't accept pivotAggregation in dimensions/columns.<br />
* D-12926: Root causes columns Selected weight, Compared weight and Total weight have now correct float data type.<br />
* D-12880: In out-of-the box dashboards, chart titles and subtitles were not translated.<br />
* D-12916: Improved filter rule description text in Filter rule editor dialog for expression filter rules.<br />
* D-12889: No clear error message was given when user tried to export corrupted model from .pacm file.<br />
* D-12869: Date selector in on-screen settings had inconsistent vertical alignment.<br />
* D-12938: When creating a filter with lasso and selecting a single data point only, "equals" kind of filter rule is now created.<br />
* D-12989: "Running tasks as specific time" system report may have ended up in loop causing following error: Maximum call stack size exceeded error.<br />
* D-13010: Pivot table sometimes ended up to never-ending resizing loop when browser zoom was more than 100%.<br />
* D-12790: Expression language: DataFrame.SetColumns: Initializing and using variables defined in closure of SetColumns function parameter didn't work<br />
* D-12927: All on-screen settings were not be visible in narrow charts having several on-screen settings.<br />
* D-12937: Added maximum value limitation to several number input fields in charts.<br />
* D-12947: Message dialog didn't show line breaks correctly (e.g., in CSV file import).<br />
* D-12948: Defining column setting caused error when Measure Expression was not defined.<br />
* D-12946: Filter rule text couldn't be seen entirely from tooltip.<br />
* D-12983: When range filtering using integer values in Highcharts chart, filter is now shown as integer value.<br />
* D-12984: When range filtering in Highcharts charts and there is category axis, filter rule is now based on individual (category) values.<br />
* D-12930: When creating filters from charts using date type of X-axis with lasso, "greater than or equal" and "less than or equal" filter rules are not created.<br />
* D-12920: "Where" function in DataFrame lost column data types of the original DataFrame.<br />
* D-13048: Model notifications failed with certain measures that define variables in root expression leading to error: Variable "sampleSize" already exists in this context.<br />
* D-13116: BPMN editor had some translations missing.<br />
* D-13019: Datatable and script selectors show now datatable/script name instead of id, when opening selector having existing selections.<br />
* D-12951: Changing additional root expression in flowchart didn't refresh the flowchart.<br />
* D-13147: Filter rule boxes in header had different widths, and Add filter rule button vertical alignment was incorrect.<br />
* D-12907: Sometimes case attribute selection showed incorrect attribute name for empty model.<br />
* D-13148: Filters and Datatables system reports loaded unnecessarily twice which could be seen as blinking.<br />
* D-12844: In dataframe query, FlowOccurrences in root and GetValueFrom Cases with filter gave null reference exception<br />
* D-12915: Repeating certain query twice with aggregations in Events root generated invalid SQL<br />
* D-12728: Was huge amount logs in server during client side import (manual testing required as identification)<br />
* D-13156: Persist function failed to snowflake: Invalid unicode escape sequence '\u0027ACCE'; should be at most '\u0010FFFF'.<br />
* D-12876: Flows/FlowOccurrences in root didn't work with SqlExpressionValue filtering.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2022.8 (build 1397) (released 2023-01-11) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release fixes an issue where extracting large datasets from SAP increases memory consumption considerably and may lead to out-of-memory error. This release contains packages for both QPR ScriptLauncher and QPR ProcessAnalyzer Server. If SAP extractions are done using QPR ScriptLauncher in client side mode (ExecuteInClientSide=1), it's enough to update QPR ScriptLauncher to fix this issue.<br />
</div><br />
<br />
'''Fixed issues:'''<br />
* D-12941: Extracting data from SAP consumed unnecessary lot of memory and may have led to out-of-memory error (both when running using QPR ScriptLauncher and in server side).<br />
<br />
== QPR ProcessAnalyzer 2022.8 (build 1396) (released 2022-12-30) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Creating datatables with duplicate names in the same project is prevented, and possible existing duplicate names are automatically changed to unique names with a random suffix. If there are duplicate names, they can be renamed either before updating QPR ProcessAnalyzer (to avoid automatic renaming) or after the update (by changing suffixed names). If the renamed datatables are used by models, the linkage will break because it's based on the datatable name. Creating duplicate datatables has already been prevented in the UI, but the improved method works also in the API level.<br />
<br />
Following SQL query can be used to list datatables (and project id) having duplicate names:<br />
SELECT ITA_NAME, ITA_PROJECT_ID<br />
FROM PA_INTEGRATION_TABLE<br />
GROUP BY ITA_NAME, ITA_PROJECT_ID<br />
HAVING Count(*) > 1<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
If trying to use business calendar for a model that doesn't have the business calendar defined, there will now be an error message instead of showing the chart. Either unselect the business calendar checkbox for the measure or dimension, or define a business calendar to the model. In this situation in earlier releases the business calendar was ignored and full time calculation used.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07498: Automation and Operational Excellence presets and Root causes analysis (for Snowflake), Weighted root causes analysis and Event scattering preset (for Snowflake and in-memory), Root causes for case duration (in-memory).<br />
* B-07177: Flexible mappings, user selectable aggregations and conditional formatting for Pivot table, and flexible mappings for KPI Card.<br />
* B-07518: New function named Query to run call /api/expression/query.<br />
* B-07294: In Workspace, the left side projects hierarchy can be collapsed and expanded to make more space to project contents.<br />
* B-06814: In SQL expressions, new function DurationBetweenDates to calculate duration between timestamps precisely.<br />
* B-07519: Replaced DateDiff function with the new DurationBetweenDates function in big data chart.<br />
* B-07531: In SQL expressions, new mathematical functions Abs, Log, Mod, Power, Rand, Sign and Sqrt.<br />
* B-07297: To optimize performance, Snowflake queries are automatically cancelled if they are not needed by UI.<br />
* B-07569: To optimize performance, TakeSample function implementation is improved for Snowflake.<br />
* B-07198: Several performance improvements to DataFrame queries (used in Snowflake).<br />
* B-07464: Added Lead and Lag functions to SqlDataFrames to support getting previous and next event.<br />
* B-07470: New ExtractSap function to fetch data from SAP using expression language.<br />
* B-07536: New Pivot function to SqlDataFrames to enable root causes analysis.<br />
* B-07488: Primary keys can be set to datatables to improve calculation performance (UI will follow later).<br />
* B-07515: Added RootCauseAnalysis function to SqlDataFrames.<br />
* B-07546: RootCauseAnalysis function support for complex weighting expressions.<br />
* B-03052: Support for user-defined variables in /api/expression/query.<br />
* B-07565: Support for NumberPrecision, DatetimeTruncation and TimespanPrecision properties for Values section in in-memory query.<br />
* B-07513: For product activation file handling, replaced mutex based implementation with exclusive file lock.<br />
* B-07480: Expression language support for DataFlows for data extraction.<br />
* B-07613: Removed support for SQL Server based R scripting.<br />
* B-07567: Take datatable primary keys into use in expression builder to improve performance (part 2).<br />
* B-07588: Remove total memory information from log writing and DateDiff function for in-memory.<br />
<br />
'''Fixed issues:'''<br />
* D-12715: Snowflake calculated imprecisely some operations containing division and aggregation.<br />
* D-12761: Progress bar of the CSV import dialog didn't show any progress.<br />
* D-12799: Opening datatable contents dialog settings was slow when there were lot of rows in the datatable.<br />
* D-12089: Include conforming/nonconforming cases made BPMN editor no responding.<br />
* D-12496: Datagrid filter search keyword didn't work for rounded values, so the search was hidden for other than textual data.<br />
* D-12704: Durations as quarters was calculated incorrectly in charts.<br />
* D-12662: Fixed issue where some special literals in custom expressions didn't work.<br />
* D-12403: Setting Notifications on a model had some visual issues.<br />
* D-12859: Dependency wheel visualization crashed with nulls values in From and To mappings.<br />
* D-12660: Removed unnecessary float conversions in SQL expressions.<br />
* D-12653: In-memory datafram OrderByColumns function with mixed values failed.<br />
* D-12657: When trying to use milliseconds period in some presets, frontend frozed.<br />
* D-12706: Line breaks in data were shown in many places where it's undesired.<br />
* D-12719: Syncfusion dialog headers showed backslaces incorrectly.<br />
* D-12372: Refused to run the JavaScript URL because it violated the Content Security Policy directive.<br />
* D-12730: Logging out when filter selection is in progress, gave javascript error.<br />
* D-12705: Header object counts tooltip was sometimes messed after logout.<br />
* D-12384: Selected project was not highlighted for whole project name string.<br />
* D-12581: Prevented creating duplicate datatable names in same project in parallel execution.<br />
* D-12722: There was incorrect syntax near '<' when running SqlDataFrame expressions.<br />
* D-12736: Swedish and Finnish translation improvements for object counter tooltips.<br />
* D-12702: For BPMN Editor component "Something went wrong" error was given when switching from in-memory to Snowflake model.<br />
* D-12712: UI gave error: TypeError: Cannot read properties of undefined (reading 'id').<br />
* D-12738: Business calendar showed total business time when calendar configuration was invalid.<br />
* D-12776: Special character filter caused JavaScript SyntaxError.<br />
* D-12785: Unnecessary vertical scrollbar displayed for main header toolbar.<br />
* D-12164: There was unnecessary UnauthorizedAccess errors in logs.<br />
* D-12580: Case duration was not same when comparing Big data chart with in-memory chart for same data.<br />
* D-12768: Data grid links and variable change actions didn't work when grouping was used.<br />
* D-12735: FindRootCauses (in-memory) function filtered out cases with zero contribution.<br />
* D-12763: --#CallWebService didn't work from ScriptLauncher.<br />
* D-12789: There was timeout in SQL queries to scripting sandbox.<br />
<br />
== QPR ProcessAnalyzer 2022.7 (build 1331) (released 2022-11-15) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2022.7, to improve security expression language operations that modify data or connect to external datasources are prevented in dashboard custom expressions. The limitation is required, because when a dashboard is opened, its expressions are run with the user's permissions, and the user need to trust the expressions don't perform any unexpected operations, such as delete data. The full functionality of the expression language is available in the scripts and in the Expression Designer.<br />
<br />
The following functions and operations are prevented in dashboards: SendEmail(), CallWebService(), ImportOdbc(), ImportOdbcSecure(), Model.DeletePermanently(), Model.Restore(), Model.TriggerNotifications(), Project.DeletePermanently(), Project.Restore(), Project.CreateDatatable(), Datatable.AddColumn(), Datatable.DeletePermanently(), Datatable.Import(), Datatable.Merge(), Datatable.RemoveColumns(), Datatable.RenameColumns(), Datatable.Truncate(), RecycleBin.DeletePermanently(), and call SQL script. Calling expression scripts is allowed, but in the script all previously mentioned operations are prevented.<br />
<br />
Following SQL query can be executed in the QPR ProcessAnalyzer metadata database to reveal dashboards that potentially have prevented expressions:<br />
SELECT * FROM [PA_UI_ELEMENT] WHERE [UIE_PROPERTIES] LIKE '%SendEmail(%' OR [UIE_PROPERTIES] LIKE '%CallWebService(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbc(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbcSecure(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Restore(%' OR [UIE_PROPERTIES] LIKE '%TriggerNotifications(%' OR [UIE_PROPERTIES] LIKE '%CreateDatatable(%' OR [UIE_PROPERTIES] LIKE '%AddColumn(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Import(%' OR [UIE_PROPERTIES] LIKE '%Merge(%' OR [UIE_PROPERTIES] LIKE '%RemoveColumns(%' OR [UIE_PROPERTIES] LIKE '%RenameColumns(%'<br />
</div><br />
<br />
'''Features:'''<br />
* B-07287: Process Discovery and most important presets for Snowflake.<br />
* B-07271: "Last Row Aggregates Over-limit Rows" setting for big data chart.<br />
* B-06431: Snowflake datatables support for database views in the datasource.<br />
* B-07266: Security: "limited mode" to prevent data modifications and external calls from dashboard expressions.<br />
* B-07097: Improved flowchart root causes color scales.<br />
* B-07363: SQL LIKE function support for escape character.<br />
* B-06877: Improved variation queries performance in Snowflake, part 1.<br />
* B-07444: Improved variation queries performance in Snowflake, part 2.<br />
* B-07382: Support for empty strings and nulls in event type names in dataframe processing.<br />
* B-07273: WithRowNumberColumn, WithRankColumn, WithDenseRankColumn support for descending sorting.<br />
* B-07303: FindRootCauses function support for weighting expression.<br />
* B-07327: Unpivot function for SqlDataFrames (for root cause analysis).<br />
* B-07385: Align token lifetime with SESSION_MAXIMUM_DURATION setting.<br />
* B-07500: ColumnMappings property for IDataFrame and DataTables.<br />
* B-07499: IDataFrame.ApplyFilter function to filter events data using a JSON-based filter.<br />
* B-07469: Translation updates for release 2022.7.<br />
<br />
'''Fixed issues:'''<br />
* D-11630: Drag and drop from chart settings to main header was working incorrectly for filter and root cause rules.<br />
* D-12455: Moving a chart filter from one chart to another created a root cause analysis filter.<br />
* D-12266: Root causes analysis showed incorrect results when certain combination of filters.<br />
* D-12525: Numerical values in Excel export in data grid was formatted incorrectly.<br />
* D-12534: Restoring item from recycle bin changed project from Bin to previous project.<br />
* D-12529: Measure specific datalabel mapping did not work correctly when also mapped to Y-axis.<br />
* D-12532: Multi-selection options caused layout issue for Chart setting.<br />
* D-12541: Layout issue for Polish in multiselect list search dialog.<br />
* D-11277: Increase/decrease Icons were missing in the dimension sorting for Mac.<br />
* D-12552: Uncaught Error: Diagram.selectCollection given something that is not a Part: null.<br />
* D-12567: Tooltip incorrectly showed for label component containing only spaces.<br />
* D-12438: Operation was cancelled because it was replaced by a new operation.<br />
* D-12551: Some expressions didn't work as calculated case/event attributes.<br />
* D-11720: Chart buttons were not visible in Apple Safari and iPad.<br />
* D-12544: On-screen settings "options" parameter did not work.<br />
* D-12528: Multi-unit time unit selection appeared where it's not applicable.<br />
* D-12583: Error message should be provided for invalid settings input than just display JS errors.<br />
* D-12599: Tooltips didn't show correct measures/dimensions when "Show in tooltip" mappings are used.<br />
* D-12561: Chart settings content was incorrectly drawn outside of the chart dialog.<br />
* D-12568: Reload UI sometimes crashed chart having multiselect on-screen settings.<br />
* D-12572: Main header toolbar lost when refresh maximized PA chart.<br />
* D-12612: Drop Unused Filters After setting incorrectly allowed zero seconds.<br />
* D-12533: Error message keeped blinking in Analysis view.<br />
* D-12608: User could not select or add new case attribute when current select attribute doesn't exist.<br />
* D-12451: Prevented deleting running script.<br />
* D-12516: Windows event viewer warning: Failed to gracefully shutdown application.<br />
* D-12523: Business calendar performance - part 2.<br />
* D-12538: Column with same name could be added multiple times to datatable using expression language.<br />
* D-12582: Improved EMS mutex code to support multiple PA service in one server.<br />
* D-12624: Synchronize new (empty) data table generated failed queries in Snowflake.<br />
* D-12622: Advanced setting page reserved room for the expression editor frame that did not exist.<br />
* D-11295: In on-screen settings, some UI controls were vertically misaligned.<br />
* D-11625: The heights of the parameter option menu in the clustering tab was not well aligned.<br />
* D-12103: Small dropdown list layout issue.<br />
* D-12633: Align issue for Column related Advanced settings.<br />
* D-12505: Search dialog didn't escape % and _ characters correctly in dataframe processing.<br />
* D-12645: Tabs in expression settings dialog were partly hidden when dialog is narrow.<br />
* D-11382: Moving of flowchart was sometimes shaky.<br />
* D-12655: Filter rule tooltips in header were styled incorrectly.<br />
* D-12656: Large integer values in filter jsons were incorrectly presented as small integers.<br />
* D-12661: Some exported filters contained unnecessary "invert" property.<br />
* D-12500: Model with numeric case id's and filtering with the attribute mapped as case id: ERROR [22018] Numeric value <nowiki>''</nowiki> is not recognized.<br />
* D-12509: Filtering null values didn't work in boolean attributes in Snowflake.<br />
* D-12571: In dataframe processing in SQL Server, dividing two integers should not make rounding to integer.<br />
* D-12610: Setting for global DropUnusedFiltersAfter was missing.<br />
* D-12613: Filtering with case/event attributes with null values didn't match in Snowflake models.<br />
* D-12617: Model didn't work when DropUnusedFiltersAfter is 00:00:00.<br />
* D-12618: If model ConfigurationJson is null, Configuration property didn't work.<br />
* D-12620: Filtering didn't work when there are backslaces in attribute names in Snowflake models.<br />
* D-12643: AttributeFunctionCallExpression did not always work properly in array context.<br />
* D-12647: SqlDataFrame with SQL Server: Comparing literals to variant column values failed.<br />
* D-12648: Models that have DropUnusedModelsAfter setting caused "The sliding expiration value must be positive" error.<br />
* D-11526: It was unable to translate Unicode character \uD83D at index 176 to specified code page.<br />
* D-12637: In application startup arised FATAL Application startup exception System.UnauthorizedAccessException: Access to the path 'Global\MutexQPRPAActivation' is denied.<br />
<br />
== Old Releases ==<br />
See older releases in [[QPR ProcessAnalyzer Release Archive]]<br />
__NOTOC__<br />
<br />
[[Category: QPR ProcessAnalyzer]]</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&diff=24454QPR ProcessAnalyzer Release Notes2024-02-27T15:48:43Z<p>Ollvihe: /* Next Additional Release: QPR ProcessAnalyzer 2024.2 (planned date 2024-02-27) */</p>
<hr />
<div>This page lists all new features and fixed issues for each QPR ProcessAnalyzer release.<br />
<br />
== Next Additional Release: QPR ProcessAnalyzer 2024.2 (planned date 2024-02-27) ==<br />
<br />
'''Features:'''<br />
<br />
* B-06280: User management dialog shows which users have a password defined and (unnecessary) passwords can be removed to improve security.<br />
<br />
'''Fixed issues:'''<br />
<br />
* D-14045: Fixed an issue where users that didn't have at least designer role, couldn't create filters in Snowflake models.<br />
<br />
== Latest Release: QPR ProcessAnalyzer 2024.2 (build 5438) (released 2024-02-21) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue: Using Snowflake models and dashboards doesn't work with Viewer and Analyzer roles. The reason is that cache tables created to Snowflake incorrectly require the GenericWrite permission. Workaround is to give users the Designer role which will give the needed GenericWrite permission. Note that the Designer role gives many permissions to the user for the project [[Roles_and_Permissions#Roles_and_Permissions|(more information)]]. Fixed in the next release (D-14045).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
The legacy User permissions report (analysis number 11) and Filters report (analysis number 30) used in SQL scripts have been removed. Use instead the expressions language to query filters and user permissions, e.g., [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|Models.Filters]] and [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
New version of the Design diagram component has been improved with object-specific measures, and the previous common measures are not migrated into object-specific measures. Thus, the measures need to be configured again, or manually edit the chart json settings (if needed please ask instructions from QPR CustomerCare).<br />
</div><br />
<br />
'''Features:'''<br />
* B-08022: Design diagram supports now BPMN notation, elbow style flows and object-specific measures.<br />
* B-08232: Entire future eventlogs can be [[Create_Predicted_Eventlog|predicted]] based on generative AI models running in Snowflake.<br />
* B-08166: Added expression language function [[Generic_Functions_in_QPR_ProcessAnalyzer#OpenAIChatCompletion|OpenAIChatCompletion]] to answer natural language prompts based on OpenAI ChatGPT API.<br />
* B-08177: Snowflake query performance has been improved by introducing caching of filtered eventlogs using Snowflake tables.<br />
* B-08196: Conditional formatting rules can be defined for [[QPR_ProcessAnalyzer_Table#Textual_equal_rules_for_background_color|textual and boolean values]].<br />
* B-08213: Big data chart expressions event type selections to be multi-select where applicable.<br />
* B-08205: Expression language API is available for storing [[Storing_Secrets_for_Scripts|secrets]] for scripts.<br />
* B-07780: Chart [[QPR_ProcessAnalyzer_Chart#Variable_mappings|variable mappings]] has been removed - use the [[Chart_Linked_Settings|linked settings]] instead. Dashboards using variable mappings are automatically converted to use linked settings.<br />
* B-08117: Added ToSqlDataFrame function to convert in-memory dataframe into SQL dataframes.<br />
* B-08174: Only non-default parameters values are written to the operation log.<br />
* B-08200: Timestamps in System reports are shown in user workstation local time.<br />
* B-08171: Dashboard id has been added to queries, to track from which dashboard queries are originating.<br />
* B-07144: Remove legacy User permissions report (analysis number 11) and Filters report (analysis number 30) in SQL scripts (see note above).<br />
* B-08193: Added retry mechanism to QPR ScriptLauncher to recover if connection to server breaks.<br />
* B-08202: Updated copyright for year 2024.<br />
* B-08199: Frontend components have been updated.<br />
* B-08203: Backend components have been updated.<br />
* B-08209: Translations updated for release 2024.2.<br />
<br />
'''Fixed issues:'''<br />
* D-13972: Some measures/dimensions/columns in Big data chart didn't show the expressions level filtering.<br />
* D-14015: Fixed business calendar incorrect calculation when business period covered entire day.<br />
* D-14014: Fixed issue where Snowflake business calendar could not have end time as 00:00.<br />
* D-13962: System variable values were interpreted incorrectly when used in linked settings.<br />
* D-13971: HiddenInNavigation and SortOrder variables didn't work in navigation menu dashboards list.<br />
* D-13959: Removed possibility to add datatable columns with the legacy "any" data type.<br />
* D-13991: Improved drop-down selector component to handle empty strings as variable values.<br />
* D-13965: Datatable column name length was validated incorrectly which may have caused error in saving with too long column names.<br />
* D-13958: Project names showed unnecessary html escaping in the "Move to" menu.<br />
* D-13964: Model attributes and notifications dialogs gave error when trying to use dashboard tags.<br />
* D-13960: Added missing translations for list of permission list and 12-hour clock format.<br />
* D-13966: Fixed issue were root causes chart tooltip sometimes didn't disappear.<br />
* D-13969: Datatable column schema export sometimes showed empty for the key column.<br />
* D-13862: Session token was not accepted when url path capitalization is different.<br />
* D-13942: Datatable could not be dimensioned if it has column named "CaseId".<br />
* D-13980: Business calendar dialog crashed when tried to open it for a model without access.<br />
* D-13983: Notifications dialog didn't validate situation when same name was used in a measure and dimension.<br />
* D-13981: Dashboard import set incorrect model id to dashboard if there was no access to any model.<br />
* D-11276: Translations were missing for 12-hour clock dates (AM and PM) in dashboards.<br />
* D-13977: Multi-select dropdown lists showed some special characters incorrectly.<br />
* D-13945: Syncfusion toast message didn't work when text contains ${[]}.<br />
* D-13930: Pivot table throws javascript error when certain clicks.<br />
* D-13273: Duplicate datatable row count didn't shown correctly.<br />
* D-13994: There was an error in the in-memory chart with some flow related measures about duplicate variable names when same measure was defined twice.<br />
* D-13985: Models list dots menu had texts misaligned in narrow screens.<br />
* D-13995: In Workspace, wrong datatable was selected after duplication when non-default sorting was applied.<br />
* D-13997: Workspace tables column filtering search caused JavaScript errors.<br />
* D-13978: In table Excel export, the last row representing other items appeared incorrectly for in-memory chart.<br />
* D-14007: In System reports, model related selections are hidden from the Analyzed objects lists.<br />
* D-14005: In big data chart, changing to custom expression caused crash with some expressions having case/event attribute.<br />
* D-14003: When dimensioning was not used, pivot table values were incorrectly rounded in the server side.<br />
* D-14004: Removed empty filters from queries to optimize them.<br />
* D-13988: Fixed issue where data grid context menu rendered initially as too high.<br />
* D-13979: BPMN model editor element settings use now Open Sans font.<br />
* D-14013: Fixed incorrect expression "Duration between first and last occurrence" in big data chart event types.<br />
* D-13984: Fixed the error of refusing to run the JavaScript URL.<br />
* D-14031: ThrownObject property was not included to http error response when error came from the script.<br />
<br />
== QPR ProcessAnalyzer 2024.1 (build 4784) (released 2024-01-10) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue fixed in QPR ProcessAnalyzer 2024.2: In Big data chart, some measures, dimensions and columns have the filtering option missing. The issue concerns for example Duration between events, Path starting/until between specific events, and Cases where event occurs before other selections. Workaround is to set the filter in the chart json settings: the filter can be configured to another expression and copied to the correct expression.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
QPR ProcessAnalyzer Server and QPR ScriptLauncher are now using .Net 8 (previous was .Net 6). When updating to this release, install the .Net 8 Runtime ([[Updating_QPR_ProcessAnalyzer_Server|see more]]). The .Net 6 doesn't need to be uninstalled immediately because .Net 6 and .Net 8 work side-by-side, but due to security reasons, the unused .Net 6 should eventually be uninstalled.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In this release, all filters that don't contain any filter rules, are removed. These are legacy filters which have not been visible in the UI.<br />
</div><br />
<br />
'''Features:'''<br />
* B-08019: New component [[Design_Diagram|Design Diagram]] for showing user-created diagrams in dashboards where to visualize process mining metrics.<br />
* B-08087: Generic [[Dropdown_List_Selector|dropdown list selector]] works with Snowflake models allowing to add selection lists for any values.<br />
* B-08163: Linked settings support for binding to [[Chart_Linked_Settings#Binding_to_case_attribute_filters_with_attribute_name_and_attribute_values|case attribute filter values without defining case attribute name]].<br />
* B-08170: Snowflake model filters can be [[Filtering_in_QPR_ProcessAnalyzer#Filter_actions|saved as new models]] which can be used to create snapshots of part of models.<br />
* B-08093: Multiple dashboards can be exported to same file, and model can be set for imported dashboards.<br />
* B-08161: Added [[Datatable_in_Expression_Language#Modify|Modify]] function to change datatable properties and improved [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#CreateDatatable|CreateDatatable]] function for creating datatables.<br />
* B-08122: Added new system report to list dashboards.<br />
* B-08173: Removed legacy filters that didn't have any filter rules.<br />
* B-07961: In OperationLog, changed parameters to json format and added request id.<br />
* B-08069: Added DashboardId property to [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog]] in expression language.<br />
* B-08139: Added [[Datatable_in_Expression_Language#UpdateRows|UpdateRows]] function to update existing rows in datatables with similar logic than SQL update.<br />
* B-08115: Added [[Datatable_in_Expression_Language#DeleteRows|DeleteRows]] function to delete rows in datatables with similar logic than SQL delete.<br />
* B-08149: QPR ProcessAnalyzer has been updated to .Net 8.<br />
* B-08054: Changed Scripts property in generic context to return all scripts, instead of legacy system level scripts.<br />
* B-08138: Changed Synchronize function to remove all columns when no Snowflake table exists.<br />
* B-07689: For datatables, [[Datatable_in_Expression_Language#ForeignKeys|foreign keys]] to other datatables can be defined using expression language.<br />
* B-08176: Translation updates for release 2024.1.<br />
* B-08175: Workspace should show timestamps in user's local time.<br />
<br />
'''Fixed issues:'''<br />
* D-13913: Datatable properties dialog incorrectly showed linked models from other projects.<br />
* D-13916: Chart filter could not be defined for some expressions in Big data chart.<br />
* D-13933: Navigation menu selected item wasn't highlighted when used Snowflake models.<br />
* D-13906: In Conformance Analysis, deviating flows were not translated.<br />
* D-13907: Improved translation related to datatable properties dialog "Used by models" field.<br />
* D-13904: There was an unclear error message in Snowflake, as exception code 1 was returned without AttributeName and ModelName properties when non-existing attribute was in filter.<br />
* D-13911: Fixed small glitches in the opening and closing of drop-down lists.<br />
* D-13918: Datatable could be configured incorrectly to use table for other datatable.<br />
* D-13932: Duplicating datatable with custom table in datasource losed all data.<br />
* D-11002: Removed legacy in-memory prediction preset.<br />
* D-13912: Added check that array cannot be stored to dashboard Content property.<br />
* D-13936: Query designer default query didn't work with Snowflake models.<br />
* D-13938: There was an incorrect logging with some operations related to ScriptLauncher.<br />
* D-13923: Snowflake expressions didn't work with Where function in root referring to case attribute.<br />
* D-13939: ApplyFilter function gave null reference error for non-existing attribute name.<br />
* D-13931: There were issues with AllowExternalDatasources and EnableFullFunctionality settings.<br />
<br />
== QPR ProcessAnalyzer 2023.7 (build 4326) (released 2023-11-28) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Limitation for the maximum amount of data (B-07636) causes a behavior change in in-memory charts that have the Maximum rows settings empty and have the sorting defined. In certain cases, the order in which measures are evaluated changes (due to an internal performance optimization). If there are custom expressions that define variables, the variables may not be available in other measures anymore. As a resolution, either redefine the variables in those measure expressions or add those measures secondarily to the sorting.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Default query timeout of 30 minutes has been added for --#ImportOdbcQuery, --#ImportSqlQuery and --#ImportOleDbQuery commands. If a query run is taking longer than the timeout, the query is stopped. The timeout can be adjusted using the '''QueryExecutionTimeout''' parameter. Previously, there has been no timeout, so queries that take more than 30 minutes require configuring a longer timeout.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Incorrectly configured [[Chart_Linked_Settings|linked settings]] in charts (available in the ''Advanced'' tab) give now an error message, if they are referring to non-existing measures, dimensions or columns. Previously, incorrect linked settings were ignored. To fix the error message, remove the incorrect linked settings.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07511: Datatables have a [[Datatable_Properties_Dialog|dialog]] to view datatable properties, write description, set the Snowflake source table, add/modify/delete columns, and set the datatable key.<br />
* B-08150: Added setting [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|Apply chart filters first]] to determine whether chart filter rules or dashboard filter rules are applied first when chart queries are filtered.<br />
* B-08091: When filtering charts in Snowflake, case attribute filter is created instead of case id filter.<br />
* B-08091: [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|New setting]] to define whether cases or events are filtered by default.<br />
* B-08091: New preset "Looping paths" to detect whether there are repeating patterns of events.<br />
* B-08091: Duration between events calculation ignores negative durations in Snowflake.<br />
* B-08091: Chart loading animation has been renewed.<br />
* B-07636: To prevent dashboards from jamming when querying too much data, added [[QPR_ProcessAnalyzer_Chart#Available_Visualizations|limitations]] to the amount of data that charts can visualize. Note that the limitation concerns the aggregated data that is visualized, not the source event log data.<br />
* B-08017: [[Dashboard_in_Expression_Language|Dashboards API]] has been added to expression language, allowing to create, modify and delete dashboards in scripts.<br />
* B-08056: Following properties have been added to [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#User.2FGroup|user objects]] in expression language: IsLocked, LastLockedDate, LastLoginDate.<br />
* B-08053: [[Navigation_Menu#System_Reports|User rights report]] has been refactored to use [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property in the expression language. The change also simplifies the report as now it only shows the direct role assignments that are visible in the [[Manage_Users_and_Groups|User Management]].<br />
* B-08151: For Snowflake expressions support for following [[SQL_Expressions#Window_functions|windowing functions]]: sum, average, median, min, and max.<br />
* B-08050: When a model is created, the default filter is not created anymore (this is a refactoring that doesn't have any impact on user interface).<br />
* B-08123: Translation updates for 2023.7.<br />
* B-08092: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13876: In CreateSnowflakeConnection function, ProjectId parameter is optional when OdbcConnectionStringKey is not specified.<br />
* D-13898: Snowflake: Exclude case attribute filter didn't work when there was null values and was selecting at least two values.<br />
* D-13890: Fixed XES file import to work.<br />
* D-13894: Business calendar based duration calculation was incorrect in some durations that spanned to several weeks (for Snowflake and in-memory models).<br />
* D-13899: Using broken OdbcConnectionString in a datatable prevented the datatable from being deleted.<br />
* D-13883: Script run stucked after running a script with error that uses client-side ODBC import.<br />
* D-13879: SqlExpressionValue filter when excluding events didn't work with filter rule root expression only.<br />
* D-13896: Adding or removing columns to datatable didn't change the LastModifiedDate.<br />
* D-13882: User details weren't written to operation log when creating or modifying users.<br />
* D-13771: User rights system report didn't give error when changing columns.<br />
* D-13893: Some event filtering caused null pointer error when primary key had been defined.<br />
* D-13873: Fixed pivot table visual issues after component update.<br />
* D-13900: When adding, renaming or removing columns for Snowflake table fails, operation is now rolled back without any changes.<br />
* D-13866: Querying GET api/uielements was quite slow right after server start.<br />
* D-13864: Combinations of translatable and hardcoded strings didn't get translated in UI.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.6 (build 3933) (released 2023-10-24) ==<br />
<br />
'''Features:'''<br />
* B-08055: Error message for locked account has been replaced with generic error message, so that username enumeration is not possible.<br />
<br />
'''Fixed issues:'''<br />
* D-13884: Attributes dialog crashed with some older model configurations.<br />
* D-13843: In charts, selected case and event attributes switched away when attribute data type was ShortString.<br />
* D-13877: Some Snowflake expressions gave error "exceeds maximum length limit of 255 characters" when selecting lot of items.<br />
* D-13878: Snowflake expression filters for case attribute values didn't accept other than string type of case attributes.<br />
* D-13871: Some statistical calculations with percentages didn't work with Last Row Aggregates Over-limit Rows setting.<br />
* D-13875: Using some case level filters in a model without cases datatable didn't work.<br />
* D-13861: Dashboard opens are now logged to the Task log (i.e., calling GET /api/dashboards/{dashboardid}).<br />
* D-13870: Workspace projects hierarchy focused project showed light grey background making the project name not readable.<br />
* D-13867: When starting datatable refresh and going to other tab, went back to Datatables tab when query completed.<br />
* D-13853: If chart Custom Layout settings had extra series defined, chart may have crashed.<br />
* D-13869: Export as CSV button didn't work in the datatable contents dialog when dialog was still loading.<br />
* D-13872: Main progress spinner had unnecessary small scrollbar on top right.<br />
* D-13863: In the REST API method GET /api/users, password field (that has always been null) has been removed.<br />
<br />
== QPR ProcessAnalyzer 2023.6 (build 3847) (released 2023-10-17) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is removed in this release. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
'''Features:'''<br />
* B-07992: Added 10 new presets including Queue analysis, Four eyes principle, Self-looping events, and Path until selected event. There are also presets for Individual Cases Flow and Range of event type occurrences which use Gantt chart.<br />
* B-08011: Added following date related operations for Snowflake: Day of year, Day of month, Day of week, Week of year, Half-year only, Quarter only, Month only, Hours only, Minutes only, Seconds only, and Milliseconds only. These are available when calculating with date type of data.<br />
* B-08016: [[QPR_ProcessAnalyzer_Table#Table_actions|Table actions to set variables]] can also be opened to a new browser tab. Also improved user interface for table actions.<br />
* B-08018: For Snowflake expressions, added Flows aggregations FromEventType and ToEventType to get starting/ending event type, and FlowOccurrences aggregations FromEvent and ToEvent to get starting/ending event.<br />
* B-08001: Added [[Generic_Functions_in_QPR_ProcessAnalyzer#CallStoredProcedure|CallStoredProcedure]] function to call Snowflake stored procedures. This allows to start ETL transformation in Snowflake orchestrated by QPR ProcessAnalyzer script.<br />
* B-08013: Added [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property to expression language to replace the legacy UserPermissions analysis (11).<br />
* B-07976: Snowflake [[Filtering_in_QPR_ProcessAnalyzer_Queries#Expression|expression based filter rules]] support additional expression columns allowing more Big data chart expressions to be filterable.<br />
* B-08015: Big data chart doesn't anymore support calculation in SQL Server (using local datatables).<br />
* B-06270: Improved error messages and made them translatable by taking into use exception codes provided by server.<br />
* B-08021: Added possibility to store [[Diagram_in_Expression_Language|designed diagrams]] for models and expression language API for reading and modifying diagrams.<br />
* B-08037: Dropped following unused tables database: PA_IDEA, PA_IDEA_VOTE, PA_REPORT, PA_REPORT_SETTING, PA_SESSION_SERVICE, PA_VIEW_FILTER_RULE, PA_VIEW_FILTER_RULE_PARAMETER.<br />
* B-08052: Language translations have been updated to 2023.6.<br />
* B-08051: Frontend side components have been updated.<br />
* B-08034: Backend side components have been updated.<br />
<br />
'''Fixed issues:'''<br />
* D-13830: Object counts indicator in header showed incorrect counts when there was disabled filter rules in Snowflake models.<br />
* D-13833: In-memory charts didn't work with boolean type of dimensions when filtering with the false value.<br />
* D-13858: Target value measures didn't update chart when controlled using an on-screen setting.<br />
* D-13827: Calculated attributes data type was incorrectly set as Any by the Attributes dialog.<br />
* D-13849: Multiselect list search didn't allow spaces.<br />
* D-13829: Multiselect dropdown lists height jumped couple of pixels when selecting values.<br />
* D-13835: Deselecting a selected data point didn't remove chart filter rule.<br />
* D-13702: Improved Snowflake query performance in situations when there are lot of filter rules (by decreasing number of CTE's).<br />
* D-13819: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13820: Fixed incorrect manifest.json file to avoid "not found" errors when fetching web site icon.<br />
* D-13865: Break, continue, and return statements didn't work properly when called from inside a catch block.<br />
* D-13795: There was a Python error in clustering analysis with Snowflake model.<br />
* D-13823: Some tooltips in Workspace project hierarchy didn't work and caused a JavaScript error.<br />
* D-13824: BPMN editor align context menu layout looked strange.<br />
* D-13813: QPR logo button in the top left was misaligned in Firefox.<br />
* D-13797: Snowflake query may have given following error when using sampling: ambiguous column name '_EventType_NotNull_1'.<br />
* D-13774: TakeSample function with certain columns caused SQL compilation error: ambiguous column name 'Case Name'.<br />
* D-13782: Snowflake: Aggregating from variations didn't work when using sampling.<br />
* D-13836: Some tooltips had a strange two-colored background.<br />
* D-13834: Removed Model statistics column from clustering and root causes analysis.<br />
* D-13860: Removed filter button from the custom expressions in Task log analyzed objects.<br />
* D-13838: Removed Split data by filtering column from clustering analysis.<br />
* D-13832: Script and model status updates incorrectly sent next update when previous was still pending.<br />
* D-13839: Charts reset zoom button font size was too small.<br />
* D-13817: Importing data to Snowflake datatable with Append=0 doesn't now drop the underlying Snowflake table.<br />
* D-13825: Some models could not have been deleted from recycle bin.<br />
* D-13852: Recycle bin Projects and Models tab didn't show correct content when Recycle bin only contained either models or projects.<br />
* D-13841: In-memory chart Data type selection type has been corrected to string.<br />
* D-13842: Second time and Third time selections has been hidden in in-memory chart measures.<br />
* D-13850: In Chrome, there were console errors related in incorrect text field autocomplete type and text field without form.<br />
* D-13847: Improved browser side performance by removing unnecessary operations.<br />
* D-13859: Chart without dimensions showed an unnecessary Remove dimension button.<br />
* D-12598: When script is stopped in server, ScriptLauncher could still incorrectly continue to import data.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.5 (build 3334) (released 2023-09-07) ==<br />
<br />
'''Fixed issues:'''<br />
* D-13826: Measures or dimensions with case or event attribute and value selections incorrectly removed calculated attributes when dashboard was opened or chart settings were changed.<br />
* D-13821: Font size of some Highcharts tooltips was too small. Issue appeared when there were tooltips mappings in measures or dimensions.<br />
* D-13810: Simplified help links: now all Help buttons go to the QPR ProcessAnalyzer wiki main page.<br />
* D-13822: Snowflake clustering analysis showed empty strings and nulls as case attribute values in an unclear way as just nothing.<br />
<br />
== QPR ProcessAnalyzer 2023.5 (build 3304) (released 2023-09-05) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In Big Data Chart, the '''Case conformance''' measure and dimension has changed in a way that now it provides boolean values (true/false) instead of integer values (1/0). If [[Measure,_Dimension_and_Column_Settings#Other_settings|colorMappings]] are used for this measure or dimension to set specific colors to visualize conformant and nonconformant cases, the mapped values need to be changed as follows: '''1''' -> '''true''' and '''0''' -> '''false'''. Without the change, the mapped colors are not effective.<br />
<br />
Exmaple: Old configuration:<br />
<pre><br />
"colorMappings": {<br />
"1": "#36d475ff",<br />
"0": "#f5403bff"<br />
}<br />
</pre><br />
New configuration:<br />
<pre><br />
"colorMappings": {<br />
"true": "#36d475ff",<br />
"false": "#f5403bff"<br />
}<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is deprecated. Big data chart has allowed to process data both in Snowflake and SQL Server. Now the support for SQL Server is deprecated and the Big data chart will only support calculation in Snowflake. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). The OperationLog analysis is replaced by the [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog function]] and the Infcluencers analysis is replaced by the [[FindRootCauses_Function|FindRootCauses function]].<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [12, 14, 15, 16, 29];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
By default, Snowflake ODBC driver generates quite much logging to files which might unnecessarily fill up the disk space. It's recommended to set the LogLevel parameter to value 0. The path where the logs are created can be seen in Windows registry (key LogPath). More information about configuring Snowflake ODBC parameters: https://docs.snowflake.com/en/developer-guide/odbc/odbc-parameters.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07971: Machine learning based [[Clustering_Analysis|Clustering analysis]] can be run in Snowflake.<br />
* B-07989: In dashboard designer the stacking order of charts can be changed with buttons [[QPR_ProcessAnalyzer_Dashboard_Designer#Viewing_and_Editing_Dashboards|Bring to front, Send to back, Bring forward and Send backward]].<br />
* B-07977: For [[Sankey_Chart|sankey diagram]], added Start level and End level mappings to define custom start and end level for the sankey flows. Implemented also color mappings to define specific colors for specific values.<br />
* B-08010: To improve performance, charts are loaded and updated only when they are visible in the dashboard.<br />
* B-07975: Added following [[SQL_Expressions#Date_functions|date related functions]] to Snowflake: DayOfYear, DayOfWeek, WeekOfYear, Quarter.<br />
* B-07908: When [[QPR_ProcessAnalyzer_Project_Workspace#Duplicating_Model|model is duplicated]], also filters in the model are also duplicated.<br />
* B-07904: Filters and models API for expression language has been completed.<br />
* B-07991: In [[Filter_Selectors|case and event type filter selectors]], threshold whether the dropdown list or search dialog is shown can be defined using the ''Maximum Rows'' setting. Also the search dialog filters search results by other filter rules in the dashboard.<br />
* B-07999: Filters report has been changed to use the [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|expression language API for filters]].<br />
* B-07540: Added [[QPR_ProcessAnalyzer_Expressions#Throwing_objects|throw statement]] to expression language.<br />
* B-07813: UI components are updated. There are small visual improvements, such as in flowchart flows are routed a bit differently and in charts the hidden series is shown as strike-through in the legend.<br />
* B-07963: Following legacy analysis types have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29) (see more information in the note above).<br />
<br />
'''Fixed issues:'''<br />
* D-13777: Filters could not be created in charts when "Update Filter During Selection" setting was disabled.<br />
* D-13767: Automation per Event Types preset in in-memory incorrectly showed only one event type.<br />
* D-13756: Changing background color in KPI card didn't have any effect.<br />
* D-13812: "Exclude events" was incorrectly translated to "Exclure les cas" in French.<br />
* D-13815: Dashboard designer background grid was not visible in entire area in edit mode. Improved also the grid to match to snapping in move and resize.<br />
* D-13674: Business calendar dialog layout was incorrect when a model with a long name was selected to copy holidays.<br />
* D-13811: Table actions link to a new window didn't go to dashboard if there were other parameters in the link.<br />
* D-13601: Fixed issue where some presets may have given error when attribute value selection and the automatically selected attribute conflicted by the data type.<br />
* D-13753: While Snowflake model was selected, in Filters and User Rights reports the Columns list could not be opened.<br />
* D-13720: Now table column filter and sorting are preserved when resizing or zooming page.<br />
* D-13785: In tables increased number of rows to 20000 that are inspected to get available items shown in Excel-style column filter.<br />
* D-13759: Some statistical calculations had bad performance with large number of rows.<br />
* D-13787: Conformance statistics component didn't have scrollbars when text didn't fit to the visible area.<br />
* D-13788: In-memory "Nonconformance reason" selection caused error when two of them was selected in the same chart.<br />
* D-13783: When Analyzed objects was Generic analysis, column selection incorrectly caused "Analysis has not been selected" error.<br />
* D-13776: When measure name contained quotation mark, notification preview didn't work.<br />
* D-13747: Filtering with integer type of case id with case attribute value filter caused error in Snowflake.<br />
* D-13791: In Firefox, model selection in chart settings didn't show models in the first open.<br />
* D-11984: Recycle bin buttons didn't fit to the screen when screen width was small.<br />
* D-13780: Using CaseId case attribute in clustering analysis did not work with Snowflake 106 cases standard model.<br />
* D-13781: Clustering analysis produced Python error with a certain simple Snowflake model.<br />
* D-13730: Snowflake: Case attribute filtering didn't work when there are cases without row in cases table.<br />
* D-13803: There was chart configuration validation error in browser console when measures were moved into dimensions in Big data chart.<br />
* D-13758: There was performance issue with the Recent tasks system preset.<br />
* D-13793: Snowflake clustering failed when cluster count is larger than case count.<br />
* D-13763: SQL expression based filter rule with Where function to filter events didn't filter anything in Snowflake.<br />
* D-13804: Added missing Millisecond function to Snowflake.<br />
* D-13772: Expression EventLog.Cases.Events caused error "Value cannot be null".<br />
* D-13755: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13739: When switching between System reports there was error: "Uncaught Error: 2nd dimension not found. at y.getExpressionConfiguration".<br />
* D-12109: Sometimes flowcharts showed message "Error in querying event type measures. Input string was not in a correct format".<br />
* D-12473: Cost Savings by Automation preset gave sometimes error "Unable to cast object of type 'System.Double' to type 'System.String'".<br />
* D-13750: Snowflake model didn't work with the Case Duration vs. Manual Activities preset.<br />
* D-13657: There was error converting data type nvarchar to bigint.<br />
* D-13796: Some Snowflake operations didn't work with zero rows and columns.<br />
* D-12494: Now when chart size changes, the table column filters and sorting are preserved.<br />
* D-13736: In Performance benchmarking dialog, the Export result button exported wrong benchmark performance analysis result.<br />
* D-13609: Improved conformance analysis related filter names.<br />
* D-13594: Recycle bin buttons were not visible when opening recycle bin in a narrow screen.<br />
* D-13226: Tooltips in the model properties dialog are now translated.<br />
* D-12569: Table incorrectly showed ellipsis for narrow boolean type of columns showing checkboxes.<br />
* D-13391: Emptying date or datetime picker value was not registered and it didn't trigger functionality.<br />
* D-12621: Value search dialog didn't work with values containing backslashes.<br />
* D-13796: Some Snowflake operation didn't work with zero rows/columns.<br />
<br />
== QPR ProcessAnalyzer 2023.4 (build 2628) (released 2023-06-14) ==<br />
<br />
'''Features:'''<br />
* B-07767: Added [[Gantt_Chart|Gantt chart]] to visualize timeline of cases and events divided into swimlanes.<br />
* B-06383: Added [[Sankey_Chart|Sankey chart]] to visualize flow from one set of values to another.<br />
* B-07941: Implemented many more presets running in Snowflake models for compliance and operational excellence use cases. There are also presets for the path analysis and process bottlenecks identification.<br />
* B-07864: Snowflake conformance analysis shows now [[Conformance_Analysis#Top_Deviations_(in-memory)_/_Deviating_Flows_(Snowflake)|reasons for conformance deviations]], such as which event occurrences deviated from the design model.<br />
* B-07909: Snowflake conformance analysis visualizes [[Conformance_Analysis#Undesired_Events_(Snowflake)|undesired event types]] in table and flowchart.<br />
* B-07823: Flowchart Bottlenecks preset has been changed to show bottlenecks for event types. Also renewed the [[QPR_ProcessAnalyzer_Logs#Task_Log|Tasks reports]] to use expression language based interface.<br />
* B-07891: User interface has been [[Languages_and_Localization|translated into Portuguese]].<br />
* B-07873: Improved [[QPR_ProcessAnalyzer_Pivot_Table|pivot table]] visual layout to highlight totals and aggregated rows. Also the row titles are now visible in the top left.<br />
* B-07905: Added [[SQL_Expressions#Rank_functions|Rank related functions]] to Snowflake for writing more versatile custom KPI's, e.g., FirstValue, LastValue, NthValue, Lead and Lag.<br />
* B-07912: Added more SQL expression [[SQL_Expressions#Array_functions|array functions ArrayToString and ArrayOverlap]] to Snowflake.<br />
* B-06449: Added SQL expression functions ToTimestamp and TryToTimestamp for parsing timestamps from strings using provided format.<br />
* B-07959: Added new functions Base64Encode and Base64Decode to help using basic HTTP authentication when calling web services.<br />
* B-07206: SQL expressions support data [[SqlDataFrame_in_Expression_Language#WithClusterColumn|clustering]] which is an unsupervised machine learning algorithm to group data based on similarities.<br />
* B-07848: Data can be extracted from SAP using the encrypted [[Importing_Data_from_SAP#SNC_encrypted_connection|SNC connection]].<br />
* B-07903: Added expression language API to create and modify filters and models.<br />
* B-03103: [[QPR_ProcessAnalyzer_Logs#Task_Log|Task log]] (operation log) can be accessed in expression language.<br />
* B-07872: List aggregation with Distinct=true orders now items by their value.<br />
* B-07940: Removed "Count" aggregation from textual values in Big data chart (you can use the Case count, Event count, etc. selection instead).<br />
* B-07757: Backend support for datatables linking to user-definable Snowflake database, schema and table.<br />
* B-07825: Improved error message when trying to use non-existing attributes in Snowflake queries.<br />
* B-03101: To expression language, added try-catch-finally statement to handle thrown exceptions.<br />
* B-07861: Removed available and total virtual memory information from User settings dialog.<br />
* B-07902: Optimized sequences of joins in Snowflake queries to improve performance.<br />
* B-07837: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13709: If image width-to-height ratio was lower than container's ratio, image was incorrectly stretched to fit the container.<br />
* D-13660: Disabling filter rules didn't work in Snowflake models.<br />
* D-13526: Passing dataframes from SQL scripts to expression scripts didn't work.<br />
* D-13661: Snowflake conformance analysis crashed when there was no access to conformance related Snowflake UDF's.<br />
* D-13693: Resolved major Snowflake conformance analysis performance issues in the BPMN model handling.<br />
* D-13716: Snowflake root causes analysis incorrectly bypassed Snowflake cache.<br />
* D-13707: In SQL Scripting, the datatable analysis (number 18) didn't always copy the data table contents to the target table correctly.<br />
* D-13653: Big data flowchart Root causes preset showed incorrect legend.<br />
* D-13626: Flowchart froze when converting into big data flowchart and vice versa by modifying chart json settings.<br />
* D-13656: Root causes for attribute gave error "Failed to compare two elements in the array" in some situations.<br />
* D-11563: Pivot table had a minimum height of 300px, which caused bottom part of it to be out of view.<br />
* D-13704: In CSV file import, parsing now allows spaces between column separator and text quotation mark.<br />
* D-13598: Chart gave unclear error message when events datatable was not defined.<br />
* D-13655: Improved error messages for BPMN editor and conformance statistics.<br />
* D-13528: Error message for certain erroneous SQL expressions was unclear.<br />
* D-13677: "Flow occurrences with specific case attribute value" selection didn't work for in-memory chart.<br />
* D-13663: Pivot table border line was slightly broken in the header area.<br />
* D-13608: There was incorrect alignment of items in the table paging controls.<br />
* D-13703: Importing CSV file with some special characters to Snowflake failed (due to incorrect escaping in Snowflake staging files).<br />
* D-13708: Duplicating datatable using user defined table, removed data the source table.<br />
* D-13717: Dependency wheel crashed when there were zero weights and showing data labels.<br />
* D-13348: There was an unclear error message when Snowflake query had a certain incorrect expression.<br />
* D-13732: Pivot table Excel export contained headers formatted incorrectly.<br />
* D-13729: There was a JavaScript error when limited user tried to access business calendar.<br />
* D-13662: Percentile function didn't always work with timespan types.<br />
* D-13646: Using incorrectly configured model without cases datatable caused null reference error.<br />
* D-13629: When tried to use chart with a non-existing model, there is now a proper translated error message.<br />
<br />
== QPR ProcessAnalyzer 2023.3 (build 1990) (released 2023-05-03) ==<br />
<br />
'''Features:'''<br />
* B-07818: [[Conformance_Analysis|Conformance analysis]] is supported in Snowflake with following dashboard components: Big data chart, BPMN editor, Conformance statistics, and Design model selector.<br />
* B-07833: [[Root_Causes#Root_causes_in_flowchart|Root causes analysis for flowchart]] is available for Snowflake showing how the event and flow occurrences explain selected phenomena.<br />
* B-07786: Big data chart has more [[Big_Data_Chart#Measure_aggregations|measure aggregations]], such as median, percentile, standard deviation and variance. Also for textual items, unique values can be listed.<br />
* B-07795: [[QPR_ProcessAnalyzer_Table#Conditional_formatting|Conditional formatting]] supports also columns with non-numerical contents.<br />
* B-07830: [[Big_Data_Chart#Measure_aggregations|None and Any aggregations]] for Snowflake and user-friendly formatting for conformance violations.<br />
* B-06527: Error messages in [[Importing_Data_to_Datatable_from_CSV_File|CSV file import]] show also the column number to help working with CSV files with lot of columns.<br />
* B-07747: In-memory conformance checking accepts design models with multiple tasks having same name (same is followed by the Snowflake implementation).<br />
* B-07659: In-memory flowchart preset Case Conformance to visualize conformance checking violations.<br />
* B-07571: Added function IsConformant to backend to check whether cases are conformant.<br />
* B-07863: Added function ConformanceViolationsFlows to backend to return nonconformance reasons for violating cases.<br />
* B-07844: Support for "array" aggregation to return aggregated items as array.<br />
* B-07856: Support for creating and accessing arrays and objects in SQL expressions.<br />
* B-07860: Array handling functions and Tasks property for DesignModel entity.<br />
* B-07847: Added throttling for QPR ScriptLauncher client-side imports to limit memory usage.<br />
* B-07811: Snowflake query optimization to omit columns that are not used by the query.<br />
<br />
'''Fixed issues:'''<br />
* D-13632: Going from variations to event types led to very poor performance with certain models.<br />
* D-13628: Statistical calculations were incorrectly not applied in chart CSV export.<br />
* D-13575: SQL script may have given error "Operand type clash: nvarchar(max) was incompatible with sql_variant".<br />
* D-13597: UI supports now datatable column type "ShortString" (previously datatable contents preview and CSV import didn't work).<br />
* D-13536: Using business calendar sometimes gave error "System.InvalidOperationException: Collection was modified".<br />
* D-13477: Chart types without y-axis mapping caused an error when series mapping was used.<br />
* D-13453: _model variable was not available for Snowflake expression filter rules.<br />
* D-13527: Checkbox height didn't increase when long label needed to span to multiple lines.<br />
* D-13363: Snowflake query with EvaluateAfterAggregations and IsHidden failed when dimensioning by case id column.<br />
* D-13383: Snowflake query gave error "Invalid column name 'FromCase Name'".<br />
* D-13523: Request id was incorrectly shown as zeros in error messages.<br />
* D-13541: In CSV import, error message for maximum number of columns exceeded is improved (maximum is 300 column for SQL Server).<br />
* D-13583: Objects count in header didn't work for empty Snowflake model.<br />
* D-13553: Larger pacm files can now be imported, as there isn't error "Request body too large. The max request body size is 30000000 bytes".<br />
* D-13306: Stack overflow error was given when using SqlDataFrames.<br />
* D-13487: When Flows root and there was filter in Values expression, some flows were lost.<br />
* D-13540: SqlDataFrame query with 300 columns failed to error "WithExpressionColumn: No name given for the new column".<br />
* D-13429: Ordering in List aggregation couldn't find columns in dataframe query.<br />
* D-13406: Dataframe query with root FlowOccurrences and get value from cases caused error.<br />
* D-13538: There was incorrect handling of escaping characters in column names used in dimensions.<br />
* D-13633: Fixed ordering in List aggregation with null and empty values.<br />
* D-13636: Query that dimensions by numeric case attribute with AggregateOthers true, caused error.<br />
* D-13589: Creating Snowflake datatable did not connect to Snowflake.<br />
* D-13623: Value expressions without aggregation didn't work with AggregateOthers setting.<br />
* D-13554: In in-memory chart, percentile function might have return both Int64 and Double type of objects which cannot be sorted.<br />
* D-13481: Improved error message when trying to use deleted model.<br />
* D-13621: Dynamic value search dialog had incorrect font in lists.<br />
* D-13610: Some invalid BPMN files crashed BPMN editor.<br />
* D-13614: Checkbox label texts overflowed to right.<br />
* D-13520: Removed excessive parameters from the Query Designer for generic context queries.<br />
* D-12998: QPR icon was incorrectly positioned in header in Safari.<br />
* D-13480: Import to duration data type is removed from Snowflake datatables, and for local datatables duration type maximum size is checked.<br />
* D-13517: In Highcharts-based visualizationsm conditional formatting didn't work for other than the first y-axis mapping.<br />
* D-13529: In some presets containing several on-screen settings, when chart showed in error message, on-screen settings showed invalid selection.<br />
* D-13530: Opening dropdown list caused JavaScript error when the list contents should be empty after it previously contained items.<br />
* D-13486: Removed unreachable error message in CSV import.<br />
* D-13524: Fixed in-memory chart flow occurrences root measures "Event attribute (text)" and "Event attribute (number)" that caused error.<br />
<br />
== QPR ProcessAnalyzer 2023.2 (build 1478) (released 2023-03-22) ==<br />
<br />
'''Features:'''<br />
* B-07755: [[Business_Calendar|Business calendar]] for duration calculation is available for Snowflake models.<br />
* B-07719: In Snowflake dashboards, [[Big_Data_Chart#Using_measure_variables|measures can be assigned to variables]] and use the variables in other measures to create combined measures.<br />
* B-07746: Changed in-memory conformance checking to not show invalid flow violations where starting or ending event type is invalid.<br />
* B-07743: [[PA_Configuration_database_table#General_Settings|Default datasource]] can be configured for datatables created by scripts, allowing to set Snowflake as default.<br />
* B-07740: System memory indicator moved from the header to User settings Version information dialog.<br />
* B-07776: New SQL expressions functions Unicode, Char and Regexp, as a basis for future rule-based process mining.<br />
* B-07741: Backend support for aggregation operations Median, Percentile, Stdev, Stdevp, Var and Varp to Snowflake.<br />
* B-07742: Backend support for aggregation operation to list unique items in Snowflake.<br />
* B-07770: Optimized Snowflake SQL generation by combining consecutive WithColumn function calls into one select.<br />
<br />
'''Fixed issues:'''<br />
* D-13491: QPR ProcessAnalyzer server crashed now and then when sorting was in progress and the query was cancelled.<br />
* D-13380: Dimensioning integers in in-memory core calculation didn't work correctly as 0 and -1 were put to same bucket.<br />
* D-13385: In Workspace Bin, Delete Forever and Restore from Bin buttons were misaligned.<br />
* D-13332: Conformance checking didn't show in violations when there were multiple undesired events in same case.<br />
* D-13405: Images take now always all available space in image component area.<br />
* D-13417: KPI card without title was slightly misaligned vertically.<br />
* D-13438: Clicking selected event type or flow in flowchart didn't cancel the filter selection.<br />
* D-13350: Task log and Script log default filter end date is now empty by default.<br />
* D-13381: Disabled browser auto-complete from flowchart variation stepper and Workspace create/rename object dialog.<br />
* D-13347: Improved performance for in-memory business calendar calculation.<br />
* D-13335: In in-memory chart, filtering didn't work in "Flow occurrences" root "Flow occurrences with specific event attribute value" dimension.<br />
* D-13367: Percentage value wasn't displayed properly with German or Spanish language when event types were shown in object counts indicator.<br />
* D-13451: Exported filter file is now named based on selected filter name.<br />
* D-13378: In Big data chart, prevented error "Unable to aggregate from level RootCauses to level Custom".<br />
* D-13293: DataFrame query with root Flows and IncludeEvents and ExcludeEvents filter rules failed.<br />
* D-13370: Fixed issue where on-screen settings that didn't have any selectable items, showed a strange selection.<br />
* D-13392: Clustering analysis was incorrectly shown when originally in-memory chart was converted into big data chart by changing chart json settings.<br />
* D-12784: Some Snowflake queries incorrectly bypassed Snowflake caching because they used unique object names.<br />
* D-13456: Improved error messages for incorrectly configured on-screen settings.<br />
* D-13445: Conformance violations related translated terms have been fine-tuned for better translations into different languages.<br />
* D-13421: Improved error messages when trying to use model having some column mappings missing.<br />
* D-13485: Snowflake business calendar gave error when calendar contained Sunday.<br />
* D-13218: Windows event viewer incorrectly contained log entries that are not errors.<br />
* D-12634: Multiline text boxes width is set to non-changeable.<br />
* D-13034: Confirmation dialog to delete items permanently has been updated.<br />
* D-13288: In dialogs, the Create button didn't show the disabled state correctly.<br />
* D-13427: When dropdown lists didn't have any selectable items, the "N/A" text appeared and the list incorrectly took more space vertically.<br />
* D-13483: In Workspace, the new items menu was too narrow for Spanish texts.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.1 (build 1449) (released 2023-02-24) ==<br />
<br />
'''Features:'''<br />
* B-07690: System setting [[PA_Configuration_database_table#General_Settings|DatabaseId]] can be defined by administrator to get more simple table names in Snowflake.<br />
* B-07737: In flowchart Bottlenecks preset, originally used flow colors has been recovered.<br />
* B-07748: For Analyzed objects "Conformance checking findings" in charts, terminology has been revised and issue with the case count calculation fixed.<br />
* B-07663: In [[Chart_On-screen_Settings|on-screen settings]], when case/event attribute is selected, related attribute values list are reset.<br />
* B-07570: Backend support for [[Business_Calendar|business calendars]] in Snowflake.<br />
* B-07660: Backend support for conformance checking to show also the last event index and event type in NotCompleted reason.<br />
* B-07610: Memory counter related technical properties have been removed from expression language.<br />
<br />
'''Fixed issues:'''<br />
* D-13349: Opening dashboard containing Root causes preset with default settings jammed the system by generating lot of calculations (for more information, see previous release notes).<br />
* D-13277: Stacked charts with date type of data as series did incorrectly show gaps in columns/bars.<br />
* D-13270: Flowchart conditional formatting didn't work with duration multi-unit format.<br />
* D-13358: Calculation results caching works also across different user sessions.<br />
* D-13250: Dashboard with two charts connected with linked settings using variables ended up to to a never ending loop.<br />
* D-13230: SAP import did not automatically create columns to use the correct column types.<br />
* D-12857: Deeply recursive functions caused a crash without any trace.<br />
* D-12994: In Workspace, some buttons were not clickable due to breadcrumb covering them.<br />
* D-13249: In Workspace, there was incorrect error message for duplicate datatable names when there were items with only letter capitalization was different.<br />
* D-13232: In-memory chart Top variations preset is now sorted secondarily by average duration descending.<br />
* D-13300: Setting DashboardFilter variable to empty value didn't have any effect in dashboard but old value was incorrectly used.<br />
* D-12834: Limited the maximum number of dimensions to 20, to avoid too demanding queries for SQL Server.<br />
* D-12917: Changed visual indication of missing items in dropdown lists (it's no longer showing "***").<br />
* D-13111: In Root causes preset, there is now error message when trying to use weighting related columns when weighting isn't in use.<br />
* D-13124: SQLDataFrame query containing filter rule EventTypes aggregating from cases failed.<br />
* D-13207: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed.<br />
* D-13292: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed (rev.2).<br />
* D-12991: Dropdown list texts had some translations missing.<br />
<br />
== QPR ProcessAnalyzer 2023.1 (build 1433) (released 2023-02-07) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release contains a potentially severe issue, where some dashboards completely jam the system by generating lot of calculations. The issue may appear in dashboards that have been created in earlier releases and containing the Root causes preset with default settings. The issue will be fixed by the next release. The issue can be worked around by exporting the affected dashboard, modifying the dashboard file manually and importing the dashboard back. The required modification is to remove line(s) containing <pre>"preset": "RootCauses"</pre> and the comma from the preceding line.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Cases (analysis number: 5), Events (6), and EventTypes (7). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). Note that the legacy analyses removal don't affect the dashboarding functionality.<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [5, 6, 7];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2023.1, the '''.NET Desktop Runtime''' is not needed anymore for QPR ProcessAnalyzer Server, so it can be uninstalled. Also for QPR ScriptLauncher, ''.NET Desktop Runtime'' is not needed, but instead install the '''.NET Runtime''' (which is more lightweight). ''.NET Desktop Runtime'' contains the ''.NET Runtime'', so the actions are not mandatory when updating to QPR ProcessAnalyzer 2023.1.<br />
</div><br />
<br />
'''Features:'''<br />
* B-06997: Expression-based filter rules for Snowflake dashboards to allow versatile filtering and filtering from custom expressions.<br />
* B-07383: Improvements to linked settings to allow binding to variables, tags and filter rules [[Chart_Linked_Settings|(more information)]].<br />
* B-07508: Flowchart preset colors have been renewed to be more intuitive.<br />
* B-07184: Automation preset in flowchart has now options for selecting the Automation attribute and value.<br />
* B-07512: Changed datatable metadata can be refreshed from Snowflake, and all rows in the datatable can be deleted easily in Workspace [[QPR_ProcessAnalyzer_Project_Workspace#Datatables|(more information)]].<br />
* B-07440: Date when the release was made is now shown in User settings.<br />
* B-07595: WeekOfYear property for DateTime objects in expression language to get the week number of a year (between 1 and 53).<br />
* B-07623: In-memory expression language functions Random (to get random numbers) and Hash (to get hash value of string).<br />
* B-07612: Breadcrumb in Workspace has now a Home button to quickly navigate to the top level of the projects hierarchy.<br />
* B-07637: Language selector now shows the language options in local languages.<br />
* B-07228: Remove following deprecated analyses: Cases, Events, and EventTypes (see the release note above).<br />
* B-07538: Backend support: Snowflake root causes analysis can find event attribute related root causes.<br />
* B-07706: Backend support: Snowflake expression-based filter rules support for roots containing Where function.<br />
* B-07611: Removed following legacy filter rules: CaseAttributeTrend, EventAttributeTrend, EventTypeTrend, and Duration.<br />
* B-07598: Refactored client-side import for SQL scripting to use generic client-side task mechanism.<br />
* B-07716: ShortString columns are now properly detected in SQL Server queries.<br />
* B-07652: Now it's possible to pipe multiline expression strings to QPR ScriptLauncher.<br />
* B-07688: AddColumns function for Datatables to create multiple columns in one call.<br />
<br />
'''Fixed issues:'''<br />
* D-13092: Table conditional formatting didn't work when color code was fetched from other column.<br />
* D-13105: Some charts created in earlier release referring to non-existing presets names appeared as empty after software update.<br />
* D-13107: Flowcharts crashed and showed loading animation forever when setting color or flow thickness to non-numerical measure.<br />
* D-13104: In BPMN model editor, context menus to edit elements didn't appear.<br />
* D-12939: Script editor tabs Close buttons didn't work.<br />
* D-13154: "Search by case ID" didn't work in in-memory chart.<br />
* D-12933: CSV columns with only empty values were incorrectly auto-detected as integers.<br />
* D-12929: In-memory chart Root causes for case duration and Root causes for case attributes (weighted) had Custom expression missing.<br />
* D-12928: Pivot table headers were empty when there were two column levels and two values.<br />
* D-12924: Pivot table columns with Count and Distinct Count aggregations are now numeric and aligned right.<br />
* D-13033: Changing colors in chart settings Color palette caused "Item already exists" error and prevented changing colors.<br />
* D-12996: Tags referring to dashboard variables didn't work in Additional root expression.<br />
* D-12877: UI gave error in some situations: Uncaught TypeError: Cannot read properties of undefined (reading 'min').<br />
* D-13071: Prevented selecting two or more of the Y-axis, X-axis and series mappings at the same time for the same measure or dimension.<br />
* D-12895: Big data chart crashed when on-screen setting contained event type selector and there were no event type filter set.<br />
* D-13231: Tooltips for dashboard name, model selector and filter selector in header show now the content text instead of generic instruction.<br />
* D-13139: There was an error when tried to create filter for a custom expression where selected data type didn't match with the actual type of data.<br />
* D-12988: Chart presets selection in chart settings showed unnecessary tooltip.<br />
* D-12901: When set sampling over 1 million, Snowflake models gave error: parameter value out of range: size of fixed sample. Must be between 0 and 1,000,000.<br />
* D-12904: Creating expression filter having lower/greater logic with root objects sampling failed.<br />
* D-12923: Chart schema didn't accept pivotAggregation in dimensions/columns.<br />
* D-12926: Root causes columns Selected weight, Compared weight and Total weight have now correct float data type.<br />
* D-12880: In out-of-the box dashboards, chart titles and subtitles were not translated.<br />
* D-12916: Improved filter rule description text in Filter rule editor dialog for expression filter rules.<br />
* D-12889: No clear error message was given when user tried to export corrupted model from .pacm file.<br />
* D-12869: Date selector in on-screen settings had inconsistent vertical alignment.<br />
* D-12938: When creating a filter with lasso and selecting a single data point only, "equals" kind of filter rule is now created.<br />
* D-12989: "Running tasks as specific time" system report may have ended up in loop causing following error: Maximum call stack size exceeded error.<br />
* D-13010: Pivot table sometimes ended up to never-ending resizing loop when browser zoom was more than 100%.<br />
* D-12790: Expression language: DataFrame.SetColumns: Initializing and using variables defined in closure of SetColumns function parameter didn't work<br />
* D-12927: All on-screen settings were not be visible in narrow charts having several on-screen settings.<br />
* D-12937: Added maximum value limitation to several number input fields in charts.<br />
* D-12947: Message dialog didn't show line breaks correctly (e.g., in CSV file import).<br />
* D-12948: Defining column setting caused error when Measure Expression was not defined.<br />
* D-12946: Filter rule text couldn't be seen entirely from tooltip.<br />
* D-12983: When range filtering using integer values in Highcharts chart, filter is now shown as integer value.<br />
* D-12984: When range filtering in Highcharts charts and there is category axis, filter rule is now based on individual (category) values.<br />
* D-12930: When creating filters from charts using date type of X-axis with lasso, "greater than or equal" and "less than or equal" filter rules are not created.<br />
* D-12920: "Where" function in DataFrame lost column data types of the original DataFrame.<br />
* D-13048: Model notifications failed with certain measures that define variables in root expression leading to error: Variable "sampleSize" already exists in this context.<br />
* D-13116: BPMN editor had some translations missing.<br />
* D-13019: Datatable and script selectors show now datatable/script name instead of id, when opening selector having existing selections.<br />
* D-12951: Changing additional root expression in flowchart didn't refresh the flowchart.<br />
* D-13147: Filter rule boxes in header had different widths, and Add filter rule button vertical alignment was incorrect.<br />
* D-12907: Sometimes case attribute selection showed incorrect attribute name for empty model.<br />
* D-13148: Filters and Datatables system reports loaded unnecessarily twice which could be seen as blinking.<br />
* D-12844: In dataframe query, FlowOccurrences in root and GetValueFrom Cases with filter gave null reference exception<br />
* D-12915: Repeating certain query twice with aggregations in Events root generated invalid SQL<br />
* D-12728: Was huge amount logs in server during client side import (manual testing required as identification)<br />
* D-13156: Persist function failed to snowflake: Invalid unicode escape sequence '\u0027ACCE'; should be at most '\u0010FFFF'.<br />
* D-12876: Flows/FlowOccurrences in root didn't work with SqlExpressionValue filtering.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2022.8 (build 1397) (released 2023-01-11) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release fixes an issue where extracting large datasets from SAP increases memory consumption considerably and may lead to out-of-memory error. This release contains packages for both QPR ScriptLauncher and QPR ProcessAnalyzer Server. If SAP extractions are done using QPR ScriptLauncher in client side mode (ExecuteInClientSide=1), it's enough to update QPR ScriptLauncher to fix this issue.<br />
</div><br />
<br />
'''Fixed issues:'''<br />
* D-12941: Extracting data from SAP consumed unnecessary lot of memory and may have led to out-of-memory error (both when running using QPR ScriptLauncher and in server side).<br />
<br />
== QPR ProcessAnalyzer 2022.8 (build 1396) (released 2022-12-30) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Creating datatables with duplicate names in the same project is prevented, and possible existing duplicate names are automatically changed to unique names with a random suffix. If there are duplicate names, they can be renamed either before updating QPR ProcessAnalyzer (to avoid automatic renaming) or after the update (by changing suffixed names). If the renamed datatables are used by models, the linkage will break because it's based on the datatable name. Creating duplicate datatables has already been prevented in the UI, but the improved method works also in the API level.<br />
<br />
Following SQL query can be used to list datatables (and project id) having duplicate names:<br />
SELECT ITA_NAME, ITA_PROJECT_ID<br />
FROM PA_INTEGRATION_TABLE<br />
GROUP BY ITA_NAME, ITA_PROJECT_ID<br />
HAVING Count(*) > 1<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
If trying to use business calendar for a model that doesn't have the business calendar defined, there will now be an error message instead of showing the chart. Either unselect the business calendar checkbox for the measure or dimension, or define a business calendar to the model. In this situation in earlier releases the business calendar was ignored and full time calculation used.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07498: Automation and Operational Excellence presets and Root causes analysis (for Snowflake), Weighted root causes analysis and Event scattering preset (for Snowflake and in-memory), Root causes for case duration (in-memory).<br />
* B-07177: Flexible mappings, user selectable aggregations and conditional formatting for Pivot table, and flexible mappings for KPI Card.<br />
* B-07518: New function named Query to run call /api/expression/query.<br />
* B-07294: In Workspace, the left side projects hierarchy can be collapsed and expanded to make more space to project contents.<br />
* B-06814: In SQL expressions, new function DurationBetweenDates to calculate duration between timestamps precisely.<br />
* B-07519: Replaced DateDiff function with the new DurationBetweenDates function in big data chart.<br />
* B-07531: In SQL expressions, new mathematical functions Abs, Log, Mod, Power, Rand, Sign and Sqrt.<br />
* B-07297: To optimize performance, Snowflake queries are automatically cancelled if they are not needed by UI.<br />
* B-07569: To optimize performance, TakeSample function implementation is improved for Snowflake.<br />
* B-07198: Several performance improvements to DataFrame queries (used in Snowflake).<br />
* B-07464: Added Lead and Lag functions to SqlDataFrames to support getting previous and next event.<br />
* B-07470: New ExtractSap function to fetch data from SAP using expression language.<br />
* B-07536: New Pivot function to SqlDataFrames to enable root causes analysis.<br />
* B-07488: Primary keys can be set to datatables to improve calculation performance (UI will follow later).<br />
* B-07515: Added RootCauseAnalysis function to SqlDataFrames.<br />
* B-07546: RootCauseAnalysis function support for complex weighting expressions.<br />
* B-03052: Support for user-defined variables in /api/expression/query.<br />
* B-07565: Support for NumberPrecision, DatetimeTruncation and TimespanPrecision properties for Values section in in-memory query.<br />
* B-07513: For product activation file handling, replaced mutex based implementation with exclusive file lock.<br />
* B-07480: Expression language support for DataFlows for data extraction.<br />
* B-07613: Removed support for SQL Server based R scripting.<br />
* B-07567: Take datatable primary keys into use in expression builder to improve performance (part 2).<br />
* B-07588: Remove total memory information from log writing and DateDiff function for in-memory.<br />
<br />
'''Fixed issues:'''<br />
* D-12715: Snowflake calculated imprecisely some operations containing division and aggregation.<br />
* D-12761: Progress bar of the CSV import dialog didn't show any progress.<br />
* D-12799: Opening datatable contents dialog settings was slow when there were lot of rows in the datatable.<br />
* D-12089: Include conforming/nonconforming cases made BPMN editor no responding.<br />
* D-12496: Datagrid filter search keyword didn't work for rounded values, so the search was hidden for other than textual data.<br />
* D-12704: Durations as quarters was calculated incorrectly in charts.<br />
* D-12662: Fixed issue where some special literals in custom expressions didn't work.<br />
* D-12403: Setting Notifications on a model had some visual issues.<br />
* D-12859: Dependency wheel visualization crashed with nulls values in From and To mappings.<br />
* D-12660: Removed unnecessary float conversions in SQL expressions.<br />
* D-12653: In-memory datafram OrderByColumns function with mixed values failed.<br />
* D-12657: When trying to use milliseconds period in some presets, frontend frozed.<br />
* D-12706: Line breaks in data were shown in many places where it's undesired.<br />
* D-12719: Syncfusion dialog headers showed backslaces incorrectly.<br />
* D-12372: Refused to run the JavaScript URL because it violated the Content Security Policy directive.<br />
* D-12730: Logging out when filter selection is in progress, gave javascript error.<br />
* D-12705: Header object counts tooltip was sometimes messed after logout.<br />
* D-12384: Selected project was not highlighted for whole project name string.<br />
* D-12581: Prevented creating duplicate datatable names in same project in parallel execution.<br />
* D-12722: There was incorrect syntax near '<' when running SqlDataFrame expressions.<br />
* D-12736: Swedish and Finnish translation improvements for object counter tooltips.<br />
* D-12702: For BPMN Editor component "Something went wrong" error was given when switching from in-memory to Snowflake model.<br />
* D-12712: UI gave error: TypeError: Cannot read properties of undefined (reading 'id').<br />
* D-12738: Business calendar showed total business time when calendar configuration was invalid.<br />
* D-12776: Special character filter caused JavaScript SyntaxError.<br />
* D-12785: Unnecessary vertical scrollbar displayed for main header toolbar.<br />
* D-12164: There was unnecessary UnauthorizedAccess errors in logs.<br />
* D-12580: Case duration was not same when comparing Big data chart with in-memory chart for same data.<br />
* D-12768: Data grid links and variable change actions didn't work when grouping was used.<br />
* D-12735: FindRootCauses (in-memory) function filtered out cases with zero contribution.<br />
* D-12763: --#CallWebService didn't work from ScriptLauncher.<br />
* D-12789: There was timeout in SQL queries to scripting sandbox.<br />
<br />
== QPR ProcessAnalyzer 2022.7 (build 1331) (released 2022-11-15) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2022.7, to improve security expression language operations that modify data or connect to external datasources are prevented in dashboard custom expressions. The limitation is required, because when a dashboard is opened, its expressions are run with the user's permissions, and the user need to trust the expressions don't perform any unexpected operations, such as delete data. The full functionality of the expression language is available in the scripts and in the Expression Designer.<br />
<br />
The following functions and operations are prevented in dashboards: SendEmail(), CallWebService(), ImportOdbc(), ImportOdbcSecure(), Model.DeletePermanently(), Model.Restore(), Model.TriggerNotifications(), Project.DeletePermanently(), Project.Restore(), Project.CreateDatatable(), Datatable.AddColumn(), Datatable.DeletePermanently(), Datatable.Import(), Datatable.Merge(), Datatable.RemoveColumns(), Datatable.RenameColumns(), Datatable.Truncate(), RecycleBin.DeletePermanently(), and call SQL script. Calling expression scripts is allowed, but in the script all previously mentioned operations are prevented.<br />
<br />
Following SQL query can be executed in the QPR ProcessAnalyzer metadata database to reveal dashboards that potentially have prevented expressions:<br />
SELECT * FROM [PA_UI_ELEMENT] WHERE [UIE_PROPERTIES] LIKE '%SendEmail(%' OR [UIE_PROPERTIES] LIKE '%CallWebService(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbc(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbcSecure(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Restore(%' OR [UIE_PROPERTIES] LIKE '%TriggerNotifications(%' OR [UIE_PROPERTIES] LIKE '%CreateDatatable(%' OR [UIE_PROPERTIES] LIKE '%AddColumn(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Import(%' OR [UIE_PROPERTIES] LIKE '%Merge(%' OR [UIE_PROPERTIES] LIKE '%RemoveColumns(%' OR [UIE_PROPERTIES] LIKE '%RenameColumns(%'<br />
</div><br />
<br />
'''Features:'''<br />
* B-07287: Process Discovery and most important presets for Snowflake.<br />
* B-07271: "Last Row Aggregates Over-limit Rows" setting for big data chart.<br />
* B-06431: Snowflake datatables support for database views in the datasource.<br />
* B-07266: Security: "limited mode" to prevent data modifications and external calls from dashboard expressions.<br />
* B-07097: Improved flowchart root causes color scales.<br />
* B-07363: SQL LIKE function support for escape character.<br />
* B-06877: Improved variation queries performance in Snowflake, part 1.<br />
* B-07444: Improved variation queries performance in Snowflake, part 2.<br />
* B-07382: Support for empty strings and nulls in event type names in dataframe processing.<br />
* B-07273: WithRowNumberColumn, WithRankColumn, WithDenseRankColumn support for descending sorting.<br />
* B-07303: FindRootCauses function support for weighting expression.<br />
* B-07327: Unpivot function for SqlDataFrames (for root cause analysis).<br />
* B-07385: Align token lifetime with SESSION_MAXIMUM_DURATION setting.<br />
* B-07500: ColumnMappings property for IDataFrame and DataTables.<br />
* B-07499: IDataFrame.ApplyFilter function to filter events data using a JSON-based filter.<br />
* B-07469: Translation updates for release 2022.7.<br />
<br />
'''Fixed issues:'''<br />
* D-11630: Drag and drop from chart settings to main header was working incorrectly for filter and root cause rules.<br />
* D-12455: Moving a chart filter from one chart to another created a root cause analysis filter.<br />
* D-12266: Root causes analysis showed incorrect results when certain combination of filters.<br />
* D-12525: Numerical values in Excel export in data grid was formatted incorrectly.<br />
* D-12534: Restoring item from recycle bin changed project from Bin to previous project.<br />
* D-12529: Measure specific datalabel mapping did not work correctly when also mapped to Y-axis.<br />
* D-12532: Multi-selection options caused layout issue for Chart setting.<br />
* D-12541: Layout issue for Polish in multiselect list search dialog.<br />
* D-11277: Increase/decrease Icons were missing in the dimension sorting for Mac.<br />
* D-12552: Uncaught Error: Diagram.selectCollection given something that is not a Part: null.<br />
* D-12567: Tooltip incorrectly showed for label component containing only spaces.<br />
* D-12438: Operation was cancelled because it was replaced by a new operation.<br />
* D-12551: Some expressions didn't work as calculated case/event attributes.<br />
* D-11720: Chart buttons were not visible in Apple Safari and iPad.<br />
* D-12544: On-screen settings "options" parameter did not work.<br />
* D-12528: Multi-unit time unit selection appeared where it's not applicable.<br />
* D-12583: Error message should be provided for invalid settings input than just display JS errors.<br />
* D-12599: Tooltips didn't show correct measures/dimensions when "Show in tooltip" mappings are used.<br />
* D-12561: Chart settings content was incorrectly drawn outside of the chart dialog.<br />
* D-12568: Reload UI sometimes crashed chart having multiselect on-screen settings.<br />
* D-12572: Main header toolbar lost when refresh maximized PA chart.<br />
* D-12612: Drop Unused Filters After setting incorrectly allowed zero seconds.<br />
* D-12533: Error message keeped blinking in Analysis view.<br />
* D-12608: User could not select or add new case attribute when current select attribute doesn't exist.<br />
* D-12451: Prevented deleting running script.<br />
* D-12516: Windows event viewer warning: Failed to gracefully shutdown application.<br />
* D-12523: Business calendar performance - part 2.<br />
* D-12538: Column with same name could be added multiple times to datatable using expression language.<br />
* D-12582: Improved EMS mutex code to support multiple PA service in one server.<br />
* D-12624: Synchronize new (empty) data table generated failed queries in Snowflake.<br />
* D-12622: Advanced setting page reserved room for the expression editor frame that did not exist.<br />
* D-11295: In on-screen settings, some UI controls were vertically misaligned.<br />
* D-11625: The heights of the parameter option menu in the clustering tab was not well aligned.<br />
* D-12103: Small dropdown list layout issue.<br />
* D-12633: Align issue for Column related Advanced settings.<br />
* D-12505: Search dialog didn't escape % and _ characters correctly in dataframe processing.<br />
* D-12645: Tabs in expression settings dialog were partly hidden when dialog is narrow.<br />
* D-11382: Moving of flowchart was sometimes shaky.<br />
* D-12655: Filter rule tooltips in header were styled incorrectly.<br />
* D-12656: Large integer values in filter jsons were incorrectly presented as small integers.<br />
* D-12661: Some exported filters contained unnecessary "invert" property.<br />
* D-12500: Model with numeric case id's and filtering with the attribute mapped as case id: ERROR [22018] Numeric value <nowiki>''</nowiki> is not recognized.<br />
* D-12509: Filtering null values didn't work in boolean attributes in Snowflake.<br />
* D-12571: In dataframe processing in SQL Server, dividing two integers should not make rounding to integer.<br />
* D-12610: Setting for global DropUnusedFiltersAfter was missing.<br />
* D-12613: Filtering with case/event attributes with null values didn't match in Snowflake models.<br />
* D-12617: Model didn't work when DropUnusedFiltersAfter is 00:00:00.<br />
* D-12618: If model ConfigurationJson is null, Configuration property didn't work.<br />
* D-12620: Filtering didn't work when there are backslaces in attribute names in Snowflake models.<br />
* D-12643: AttributeFunctionCallExpression did not always work properly in array context.<br />
* D-12647: SqlDataFrame with SQL Server: Comparing literals to variant column values failed.<br />
* D-12648: Models that have DropUnusedModelsAfter setting caused "The sliding expiration value must be positive" error.<br />
* D-11526: It was unable to translate Unicode character \uD83D at index 176 to specified code page.<br />
* D-12637: In application startup arised FATAL Application startup exception System.UnauthorizedAccessException: Access to the path 'Global\MutexQPRPAActivation' is denied.<br />
<br />
== Old Releases ==<br />
See older releases in [[QPR ProcessAnalyzer Release Archive]]<br />
__NOTOC__<br />
<br />
[[Category: QPR ProcessAnalyzer]]</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&diff=24453QPR ProcessAnalyzer Release Notes2024-02-27T15:47:43Z<p>Ollvihe: /* Latest Release: QPR ProcessAnalyzer 2024.2 (build 5438) (released 2024-02-21) */</p>
<hr />
<div>This page lists all new features and fixed issues for each QPR ProcessAnalyzer release.<br />
<br />
== Next Additional Release: QPR ProcessAnalyzer 2024.2 (planned date 2024-02-27) ==<br />
<br />
'''Features:'''<br />
<br />
* B-06280: The admin is able to remove any user's password.<br />
<br />
'''Fixed issues:'''<br />
<br />
* D-14045: Fixed an issue where users that didn't have at least designer role, couldn't create filters in Snowflake models.<br />
<br />
== Latest Release: QPR ProcessAnalyzer 2024.2 (build 5438) (released 2024-02-21) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue: Using Snowflake models and dashboards doesn't work with Viewer and Analyzer roles. The reason is that cache tables created to Snowflake incorrectly require the GenericWrite permission. Workaround is to give users the Designer role which will give the needed GenericWrite permission. Note that the Designer role gives many permissions to the user for the project [[Roles_and_Permissions#Roles_and_Permissions|(more information)]]. Fixed in the next release (D-14045).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
The legacy User permissions report (analysis number 11) and Filters report (analysis number 30) used in SQL scripts have been removed. Use instead the expressions language to query filters and user permissions, e.g., [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|Models.Filters]] and [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
New version of the Design diagram component has been improved with object-specific measures, and the previous common measures are not migrated into object-specific measures. Thus, the measures need to be configured again, or manually edit the chart json settings (if needed please ask instructions from QPR CustomerCare).<br />
</div><br />
<br />
'''Features:'''<br />
* B-08022: Design diagram supports now BPMN notation, elbow style flows and object-specific measures.<br />
* B-08232: Entire future eventlogs can be [[Create_Predicted_Eventlog|predicted]] based on generative AI models running in Snowflake.<br />
* B-08166: Added expression language function [[Generic_Functions_in_QPR_ProcessAnalyzer#OpenAIChatCompletion|OpenAIChatCompletion]] to answer natural language prompts based on OpenAI ChatGPT API.<br />
* B-08177: Snowflake query performance has been improved by introducing caching of filtered eventlogs using Snowflake tables.<br />
* B-08196: Conditional formatting rules can be defined for [[QPR_ProcessAnalyzer_Table#Textual_equal_rules_for_background_color|textual and boolean values]].<br />
* B-08213: Big data chart expressions event type selections to be multi-select where applicable.<br />
* B-08205: Expression language API is available for storing [[Storing_Secrets_for_Scripts|secrets]] for scripts.<br />
* B-07780: Chart [[QPR_ProcessAnalyzer_Chart#Variable_mappings|variable mappings]] has been removed - use the [[Chart_Linked_Settings|linked settings]] instead. Dashboards using variable mappings are automatically converted to use linked settings.<br />
* B-08117: Added ToSqlDataFrame function to convert in-memory dataframe into SQL dataframes.<br />
* B-08174: Only non-default parameters values are written to the operation log.<br />
* B-08200: Timestamps in System reports are shown in user workstation local time.<br />
* B-08171: Dashboard id has been added to queries, to track from which dashboard queries are originating.<br />
* B-07144: Remove legacy User permissions report (analysis number 11) and Filters report (analysis number 30) in SQL scripts (see note above).<br />
* B-08193: Added retry mechanism to QPR ScriptLauncher to recover if connection to server breaks.<br />
* B-08202: Updated copyright for year 2024.<br />
* B-08199: Frontend components have been updated.<br />
* B-08203: Backend components have been updated.<br />
* B-08209: Translations updated for release 2024.2.<br />
<br />
'''Fixed issues:'''<br />
* D-13972: Some measures/dimensions/columns in Big data chart didn't show the expressions level filtering.<br />
* D-14015: Fixed business calendar incorrect calculation when business period covered entire day.<br />
* D-14014: Fixed issue where Snowflake business calendar could not have end time as 00:00.<br />
* D-13962: System variable values were interpreted incorrectly when used in linked settings.<br />
* D-13971: HiddenInNavigation and SortOrder variables didn't work in navigation menu dashboards list.<br />
* D-13959: Removed possibility to add datatable columns with the legacy "any" data type.<br />
* D-13991: Improved drop-down selector component to handle empty strings as variable values.<br />
* D-13965: Datatable column name length was validated incorrectly which may have caused error in saving with too long column names.<br />
* D-13958: Project names showed unnecessary html escaping in the "Move to" menu.<br />
* D-13964: Model attributes and notifications dialogs gave error when trying to use dashboard tags.<br />
* D-13960: Added missing translations for list of permission list and 12-hour clock format.<br />
* D-13966: Fixed issue were root causes chart tooltip sometimes didn't disappear.<br />
* D-13969: Datatable column schema export sometimes showed empty for the key column.<br />
* D-13862: Session token was not accepted when url path capitalization is different.<br />
* D-13942: Datatable could not be dimensioned if it has column named "CaseId".<br />
* D-13980: Business calendar dialog crashed when tried to open it for a model without access.<br />
* D-13983: Notifications dialog didn't validate situation when same name was used in a measure and dimension.<br />
* D-13981: Dashboard import set incorrect model id to dashboard if there was no access to any model.<br />
* D-11276: Translations were missing for 12-hour clock dates (AM and PM) in dashboards.<br />
* D-13977: Multi-select dropdown lists showed some special characters incorrectly.<br />
* D-13945: Syncfusion toast message didn't work when text contains ${[]}.<br />
* D-13930: Pivot table throws javascript error when certain clicks.<br />
* D-13273: Duplicate datatable row count didn't shown correctly.<br />
* D-13994: There was an error in the in-memory chart with some flow related measures about duplicate variable names when same measure was defined twice.<br />
* D-13985: Models list dots menu had texts misaligned in narrow screens.<br />
* D-13995: In Workspace, wrong datatable was selected after duplication when non-default sorting was applied.<br />
* D-13997: Workspace tables column filtering search caused JavaScript errors.<br />
* D-13978: In table Excel export, the last row representing other items appeared incorrectly for in-memory chart.<br />
* D-14007: In System reports, model related selections are hidden from the Analyzed objects lists.<br />
* D-14005: In big data chart, changing to custom expression caused crash with some expressions having case/event attribute.<br />
* D-14003: When dimensioning was not used, pivot table values were incorrectly rounded in the server side.<br />
* D-14004: Removed empty filters from queries to optimize them.<br />
* D-13988: Fixed issue where data grid context menu rendered initially as too high.<br />
* D-13979: BPMN model editor element settings use now Open Sans font.<br />
* D-14013: Fixed incorrect expression "Duration between first and last occurrence" in big data chart event types.<br />
* D-13984: Fixed the error of refusing to run the JavaScript URL.<br />
* D-14031: ThrownObject property was not included to http error response when error came from the script.<br />
<br />
== QPR ProcessAnalyzer 2024.1 (build 4784) (released 2024-01-10) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue fixed in QPR ProcessAnalyzer 2024.2: In Big data chart, some measures, dimensions and columns have the filtering option missing. The issue concerns for example Duration between events, Path starting/until between specific events, and Cases where event occurs before other selections. Workaround is to set the filter in the chart json settings: the filter can be configured to another expression and copied to the correct expression.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
QPR ProcessAnalyzer Server and QPR ScriptLauncher are now using .Net 8 (previous was .Net 6). When updating to this release, install the .Net 8 Runtime ([[Updating_QPR_ProcessAnalyzer_Server|see more]]). The .Net 6 doesn't need to be uninstalled immediately because .Net 6 and .Net 8 work side-by-side, but due to security reasons, the unused .Net 6 should eventually be uninstalled.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In this release, all filters that don't contain any filter rules, are removed. These are legacy filters which have not been visible in the UI.<br />
</div><br />
<br />
'''Features:'''<br />
* B-08019: New component [[Design_Diagram|Design Diagram]] for showing user-created diagrams in dashboards where to visualize process mining metrics.<br />
* B-08087: Generic [[Dropdown_List_Selector|dropdown list selector]] works with Snowflake models allowing to add selection lists for any values.<br />
* B-08163: Linked settings support for binding to [[Chart_Linked_Settings#Binding_to_case_attribute_filters_with_attribute_name_and_attribute_values|case attribute filter values without defining case attribute name]].<br />
* B-08170: Snowflake model filters can be [[Filtering_in_QPR_ProcessAnalyzer#Filter_actions|saved as new models]] which can be used to create snapshots of part of models.<br />
* B-08093: Multiple dashboards can be exported to same file, and model can be set for imported dashboards.<br />
* B-08161: Added [[Datatable_in_Expression_Language#Modify|Modify]] function to change datatable properties and improved [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#CreateDatatable|CreateDatatable]] function for creating datatables.<br />
* B-08122: Added new system report to list dashboards.<br />
* B-08173: Removed legacy filters that didn't have any filter rules.<br />
* B-07961: In OperationLog, changed parameters to json format and added request id.<br />
* B-08069: Added DashboardId property to [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog]] in expression language.<br />
* B-08139: Added [[Datatable_in_Expression_Language#UpdateRows|UpdateRows]] function to update existing rows in datatables with similar logic than SQL update.<br />
* B-08115: Added [[Datatable_in_Expression_Language#DeleteRows|DeleteRows]] function to delete rows in datatables with similar logic than SQL delete.<br />
* B-08149: QPR ProcessAnalyzer has been updated to .Net 8.<br />
* B-08054: Changed Scripts property in generic context to return all scripts, instead of legacy system level scripts.<br />
* B-08138: Changed Synchronize function to remove all columns when no Snowflake table exists.<br />
* B-07689: For datatables, [[Datatable_in_Expression_Language#ForeignKeys|foreign keys]] to other datatables can be defined using expression language.<br />
* B-08176: Translation updates for release 2024.1.<br />
* B-08175: Workspace should show timestamps in user's local time.<br />
<br />
'''Fixed issues:'''<br />
* D-13913: Datatable properties dialog incorrectly showed linked models from other projects.<br />
* D-13916: Chart filter could not be defined for some expressions in Big data chart.<br />
* D-13933: Navigation menu selected item wasn't highlighted when used Snowflake models.<br />
* D-13906: In Conformance Analysis, deviating flows were not translated.<br />
* D-13907: Improved translation related to datatable properties dialog "Used by models" field.<br />
* D-13904: There was an unclear error message in Snowflake, as exception code 1 was returned without AttributeName and ModelName properties when non-existing attribute was in filter.<br />
* D-13911: Fixed small glitches in the opening and closing of drop-down lists.<br />
* D-13918: Datatable could be configured incorrectly to use table for other datatable.<br />
* D-13932: Duplicating datatable with custom table in datasource losed all data.<br />
* D-11002: Removed legacy in-memory prediction preset.<br />
* D-13912: Added check that array cannot be stored to dashboard Content property.<br />
* D-13936: Query designer default query didn't work with Snowflake models.<br />
* D-13938: There was an incorrect logging with some operations related to ScriptLauncher.<br />
* D-13923: Snowflake expressions didn't work with Where function in root referring to case attribute.<br />
* D-13939: ApplyFilter function gave null reference error for non-existing attribute name.<br />
* D-13931: There were issues with AllowExternalDatasources and EnableFullFunctionality settings.<br />
<br />
== QPR ProcessAnalyzer 2023.7 (build 4326) (released 2023-11-28) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Limitation for the maximum amount of data (B-07636) causes a behavior change in in-memory charts that have the Maximum rows settings empty and have the sorting defined. In certain cases, the order in which measures are evaluated changes (due to an internal performance optimization). If there are custom expressions that define variables, the variables may not be available in other measures anymore. As a resolution, either redefine the variables in those measure expressions or add those measures secondarily to the sorting.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Default query timeout of 30 minutes has been added for --#ImportOdbcQuery, --#ImportSqlQuery and --#ImportOleDbQuery commands. If a query run is taking longer than the timeout, the query is stopped. The timeout can be adjusted using the '''QueryExecutionTimeout''' parameter. Previously, there has been no timeout, so queries that take more than 30 minutes require configuring a longer timeout.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Incorrectly configured [[Chart_Linked_Settings|linked settings]] in charts (available in the ''Advanced'' tab) give now an error message, if they are referring to non-existing measures, dimensions or columns. Previously, incorrect linked settings were ignored. To fix the error message, remove the incorrect linked settings.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07511: Datatables have a [[Datatable_Properties_Dialog|dialog]] to view datatable properties, write description, set the Snowflake source table, add/modify/delete columns, and set the datatable key.<br />
* B-08150: Added setting [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|Apply chart filters first]] to determine whether chart filter rules or dashboard filter rules are applied first when chart queries are filtered.<br />
* B-08091: When filtering charts in Snowflake, case attribute filter is created instead of case id filter.<br />
* B-08091: [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|New setting]] to define whether cases or events are filtered by default.<br />
* B-08091: New preset "Looping paths" to detect whether there are repeating patterns of events.<br />
* B-08091: Duration between events calculation ignores negative durations in Snowflake.<br />
* B-08091: Chart loading animation has been renewed.<br />
* B-07636: To prevent dashboards from jamming when querying too much data, added [[QPR_ProcessAnalyzer_Chart#Available_Visualizations|limitations]] to the amount of data that charts can visualize. Note that the limitation concerns the aggregated data that is visualized, not the source event log data.<br />
* B-08017: [[Dashboard_in_Expression_Language|Dashboards API]] has been added to expression language, allowing to create, modify and delete dashboards in scripts.<br />
* B-08056: Following properties have been added to [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#User.2FGroup|user objects]] in expression language: IsLocked, LastLockedDate, LastLoginDate.<br />
* B-08053: [[Navigation_Menu#System_Reports|User rights report]] has been refactored to use [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property in the expression language. The change also simplifies the report as now it only shows the direct role assignments that are visible in the [[Manage_Users_and_Groups|User Management]].<br />
* B-08151: For Snowflake expressions support for following [[SQL_Expressions#Window_functions|windowing functions]]: sum, average, median, min, and max.<br />
* B-08050: When a model is created, the default filter is not created anymore (this is a refactoring that doesn't have any impact on user interface).<br />
* B-08123: Translation updates for 2023.7.<br />
* B-08092: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13876: In CreateSnowflakeConnection function, ProjectId parameter is optional when OdbcConnectionStringKey is not specified.<br />
* D-13898: Snowflake: Exclude case attribute filter didn't work when there was null values and was selecting at least two values.<br />
* D-13890: Fixed XES file import to work.<br />
* D-13894: Business calendar based duration calculation was incorrect in some durations that spanned to several weeks (for Snowflake and in-memory models).<br />
* D-13899: Using broken OdbcConnectionString in a datatable prevented the datatable from being deleted.<br />
* D-13883: Script run stucked after running a script with error that uses client-side ODBC import.<br />
* D-13879: SqlExpressionValue filter when excluding events didn't work with filter rule root expression only.<br />
* D-13896: Adding or removing columns to datatable didn't change the LastModifiedDate.<br />
* D-13882: User details weren't written to operation log when creating or modifying users.<br />
* D-13771: User rights system report didn't give error when changing columns.<br />
* D-13893: Some event filtering caused null pointer error when primary key had been defined.<br />
* D-13873: Fixed pivot table visual issues after component update.<br />
* D-13900: When adding, renaming or removing columns for Snowflake table fails, operation is now rolled back without any changes.<br />
* D-13866: Querying GET api/uielements was quite slow right after server start.<br />
* D-13864: Combinations of translatable and hardcoded strings didn't get translated in UI.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.6 (build 3933) (released 2023-10-24) ==<br />
<br />
'''Features:'''<br />
* B-08055: Error message for locked account has been replaced with generic error message, so that username enumeration is not possible.<br />
<br />
'''Fixed issues:'''<br />
* D-13884: Attributes dialog crashed with some older model configurations.<br />
* D-13843: In charts, selected case and event attributes switched away when attribute data type was ShortString.<br />
* D-13877: Some Snowflake expressions gave error "exceeds maximum length limit of 255 characters" when selecting lot of items.<br />
* D-13878: Snowflake expression filters for case attribute values didn't accept other than string type of case attributes.<br />
* D-13871: Some statistical calculations with percentages didn't work with Last Row Aggregates Over-limit Rows setting.<br />
* D-13875: Using some case level filters in a model without cases datatable didn't work.<br />
* D-13861: Dashboard opens are now logged to the Task log (i.e., calling GET /api/dashboards/{dashboardid}).<br />
* D-13870: Workspace projects hierarchy focused project showed light grey background making the project name not readable.<br />
* D-13867: When starting datatable refresh and going to other tab, went back to Datatables tab when query completed.<br />
* D-13853: If chart Custom Layout settings had extra series defined, chart may have crashed.<br />
* D-13869: Export as CSV button didn't work in the datatable contents dialog when dialog was still loading.<br />
* D-13872: Main progress spinner had unnecessary small scrollbar on top right.<br />
* D-13863: In the REST API method GET /api/users, password field (that has always been null) has been removed.<br />
<br />
== QPR ProcessAnalyzer 2023.6 (build 3847) (released 2023-10-17) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is removed in this release. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
'''Features:'''<br />
* B-07992: Added 10 new presets including Queue analysis, Four eyes principle, Self-looping events, and Path until selected event. There are also presets for Individual Cases Flow and Range of event type occurrences which use Gantt chart.<br />
* B-08011: Added following date related operations for Snowflake: Day of year, Day of month, Day of week, Week of year, Half-year only, Quarter only, Month only, Hours only, Minutes only, Seconds only, and Milliseconds only. These are available when calculating with date type of data.<br />
* B-08016: [[QPR_ProcessAnalyzer_Table#Table_actions|Table actions to set variables]] can also be opened to a new browser tab. Also improved user interface for table actions.<br />
* B-08018: For Snowflake expressions, added Flows aggregations FromEventType and ToEventType to get starting/ending event type, and FlowOccurrences aggregations FromEvent and ToEvent to get starting/ending event.<br />
* B-08001: Added [[Generic_Functions_in_QPR_ProcessAnalyzer#CallStoredProcedure|CallStoredProcedure]] function to call Snowflake stored procedures. This allows to start ETL transformation in Snowflake orchestrated by QPR ProcessAnalyzer script.<br />
* B-08013: Added [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property to expression language to replace the legacy UserPermissions analysis (11).<br />
* B-07976: Snowflake [[Filtering_in_QPR_ProcessAnalyzer_Queries#Expression|expression based filter rules]] support additional expression columns allowing more Big data chart expressions to be filterable.<br />
* B-08015: Big data chart doesn't anymore support calculation in SQL Server (using local datatables).<br />
* B-06270: Improved error messages and made them translatable by taking into use exception codes provided by server.<br />
* B-08021: Added possibility to store [[Diagram_in_Expression_Language|designed diagrams]] for models and expression language API for reading and modifying diagrams.<br />
* B-08037: Dropped following unused tables database: PA_IDEA, PA_IDEA_VOTE, PA_REPORT, PA_REPORT_SETTING, PA_SESSION_SERVICE, PA_VIEW_FILTER_RULE, PA_VIEW_FILTER_RULE_PARAMETER.<br />
* B-08052: Language translations have been updated to 2023.6.<br />
* B-08051: Frontend side components have been updated.<br />
* B-08034: Backend side components have been updated.<br />
<br />
'''Fixed issues:'''<br />
* D-13830: Object counts indicator in header showed incorrect counts when there was disabled filter rules in Snowflake models.<br />
* D-13833: In-memory charts didn't work with boolean type of dimensions when filtering with the false value.<br />
* D-13858: Target value measures didn't update chart when controlled using an on-screen setting.<br />
* D-13827: Calculated attributes data type was incorrectly set as Any by the Attributes dialog.<br />
* D-13849: Multiselect list search didn't allow spaces.<br />
* D-13829: Multiselect dropdown lists height jumped couple of pixels when selecting values.<br />
* D-13835: Deselecting a selected data point didn't remove chart filter rule.<br />
* D-13702: Improved Snowflake query performance in situations when there are lot of filter rules (by decreasing number of CTE's).<br />
* D-13819: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13820: Fixed incorrect manifest.json file to avoid "not found" errors when fetching web site icon.<br />
* D-13865: Break, continue, and return statements didn't work properly when called from inside a catch block.<br />
* D-13795: There was a Python error in clustering analysis with Snowflake model.<br />
* D-13823: Some tooltips in Workspace project hierarchy didn't work and caused a JavaScript error.<br />
* D-13824: BPMN editor align context menu layout looked strange.<br />
* D-13813: QPR logo button in the top left was misaligned in Firefox.<br />
* D-13797: Snowflake query may have given following error when using sampling: ambiguous column name '_EventType_NotNull_1'.<br />
* D-13774: TakeSample function with certain columns caused SQL compilation error: ambiguous column name 'Case Name'.<br />
* D-13782: Snowflake: Aggregating from variations didn't work when using sampling.<br />
* D-13836: Some tooltips had a strange two-colored background.<br />
* D-13834: Removed Model statistics column from clustering and root causes analysis.<br />
* D-13860: Removed filter button from the custom expressions in Task log analyzed objects.<br />
* D-13838: Removed Split data by filtering column from clustering analysis.<br />
* D-13832: Script and model status updates incorrectly sent next update when previous was still pending.<br />
* D-13839: Charts reset zoom button font size was too small.<br />
* D-13817: Importing data to Snowflake datatable with Append=0 doesn't now drop the underlying Snowflake table.<br />
* D-13825: Some models could not have been deleted from recycle bin.<br />
* D-13852: Recycle bin Projects and Models tab didn't show correct content when Recycle bin only contained either models or projects.<br />
* D-13841: In-memory chart Data type selection type has been corrected to string.<br />
* D-13842: Second time and Third time selections has been hidden in in-memory chart measures.<br />
* D-13850: In Chrome, there were console errors related in incorrect text field autocomplete type and text field without form.<br />
* D-13847: Improved browser side performance by removing unnecessary operations.<br />
* D-13859: Chart without dimensions showed an unnecessary Remove dimension button.<br />
* D-12598: When script is stopped in server, ScriptLauncher could still incorrectly continue to import data.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.5 (build 3334) (released 2023-09-07) ==<br />
<br />
'''Fixed issues:'''<br />
* D-13826: Measures or dimensions with case or event attribute and value selections incorrectly removed calculated attributes when dashboard was opened or chart settings were changed.<br />
* D-13821: Font size of some Highcharts tooltips was too small. Issue appeared when there were tooltips mappings in measures or dimensions.<br />
* D-13810: Simplified help links: now all Help buttons go to the QPR ProcessAnalyzer wiki main page.<br />
* D-13822: Snowflake clustering analysis showed empty strings and nulls as case attribute values in an unclear way as just nothing.<br />
<br />
== QPR ProcessAnalyzer 2023.5 (build 3304) (released 2023-09-05) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In Big Data Chart, the '''Case conformance''' measure and dimension has changed in a way that now it provides boolean values (true/false) instead of integer values (1/0). If [[Measure,_Dimension_and_Column_Settings#Other_settings|colorMappings]] are used for this measure or dimension to set specific colors to visualize conformant and nonconformant cases, the mapped values need to be changed as follows: '''1''' -> '''true''' and '''0''' -> '''false'''. Without the change, the mapped colors are not effective.<br />
<br />
Exmaple: Old configuration:<br />
<pre><br />
"colorMappings": {<br />
"1": "#36d475ff",<br />
"0": "#f5403bff"<br />
}<br />
</pre><br />
New configuration:<br />
<pre><br />
"colorMappings": {<br />
"true": "#36d475ff",<br />
"false": "#f5403bff"<br />
}<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is deprecated. Big data chart has allowed to process data both in Snowflake and SQL Server. Now the support for SQL Server is deprecated and the Big data chart will only support calculation in Snowflake. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). The OperationLog analysis is replaced by the [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog function]] and the Infcluencers analysis is replaced by the [[FindRootCauses_Function|FindRootCauses function]].<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [12, 14, 15, 16, 29];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
By default, Snowflake ODBC driver generates quite much logging to files which might unnecessarily fill up the disk space. It's recommended to set the LogLevel parameter to value 0. The path where the logs are created can be seen in Windows registry (key LogPath). More information about configuring Snowflake ODBC parameters: https://docs.snowflake.com/en/developer-guide/odbc/odbc-parameters.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07971: Machine learning based [[Clustering_Analysis|Clustering analysis]] can be run in Snowflake.<br />
* B-07989: In dashboard designer the stacking order of charts can be changed with buttons [[QPR_ProcessAnalyzer_Dashboard_Designer#Viewing_and_Editing_Dashboards|Bring to front, Send to back, Bring forward and Send backward]].<br />
* B-07977: For [[Sankey_Chart|sankey diagram]], added Start level and End level mappings to define custom start and end level for the sankey flows. Implemented also color mappings to define specific colors for specific values.<br />
* B-08010: To improve performance, charts are loaded and updated only when they are visible in the dashboard.<br />
* B-07975: Added following [[SQL_Expressions#Date_functions|date related functions]] to Snowflake: DayOfYear, DayOfWeek, WeekOfYear, Quarter.<br />
* B-07908: When [[QPR_ProcessAnalyzer_Project_Workspace#Duplicating_Model|model is duplicated]], also filters in the model are also duplicated.<br />
* B-07904: Filters and models API for expression language has been completed.<br />
* B-07991: In [[Filter_Selectors|case and event type filter selectors]], threshold whether the dropdown list or search dialog is shown can be defined using the ''Maximum Rows'' setting. Also the search dialog filters search results by other filter rules in the dashboard.<br />
* B-07999: Filters report has been changed to use the [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|expression language API for filters]].<br />
* B-07540: Added [[QPR_ProcessAnalyzer_Expressions#Throwing_objects|throw statement]] to expression language.<br />
* B-07813: UI components are updated. There are small visual improvements, such as in flowchart flows are routed a bit differently and in charts the hidden series is shown as strike-through in the legend.<br />
* B-07963: Following legacy analysis types have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29) (see more information in the note above).<br />
<br />
'''Fixed issues:'''<br />
* D-13777: Filters could not be created in charts when "Update Filter During Selection" setting was disabled.<br />
* D-13767: Automation per Event Types preset in in-memory incorrectly showed only one event type.<br />
* D-13756: Changing background color in KPI card didn't have any effect.<br />
* D-13812: "Exclude events" was incorrectly translated to "Exclure les cas" in French.<br />
* D-13815: Dashboard designer background grid was not visible in entire area in edit mode. Improved also the grid to match to snapping in move and resize.<br />
* D-13674: Business calendar dialog layout was incorrect when a model with a long name was selected to copy holidays.<br />
* D-13811: Table actions link to a new window didn't go to dashboard if there were other parameters in the link.<br />
* D-13601: Fixed issue where some presets may have given error when attribute value selection and the automatically selected attribute conflicted by the data type.<br />
* D-13753: While Snowflake model was selected, in Filters and User Rights reports the Columns list could not be opened.<br />
* D-13720: Now table column filter and sorting are preserved when resizing or zooming page.<br />
* D-13785: In tables increased number of rows to 20000 that are inspected to get available items shown in Excel-style column filter.<br />
* D-13759: Some statistical calculations had bad performance with large number of rows.<br />
* D-13787: Conformance statistics component didn't have scrollbars when text didn't fit to the visible area.<br />
* D-13788: In-memory "Nonconformance reason" selection caused error when two of them was selected in the same chart.<br />
* D-13783: When Analyzed objects was Generic analysis, column selection incorrectly caused "Analysis has not been selected" error.<br />
* D-13776: When measure name contained quotation mark, notification preview didn't work.<br />
* D-13747: Filtering with integer type of case id with case attribute value filter caused error in Snowflake.<br />
* D-13791: In Firefox, model selection in chart settings didn't show models in the first open.<br />
* D-11984: Recycle bin buttons didn't fit to the screen when screen width was small.<br />
* D-13780: Using CaseId case attribute in clustering analysis did not work with Snowflake 106 cases standard model.<br />
* D-13781: Clustering analysis produced Python error with a certain simple Snowflake model.<br />
* D-13730: Snowflake: Case attribute filtering didn't work when there are cases without row in cases table.<br />
* D-13803: There was chart configuration validation error in browser console when measures were moved into dimensions in Big data chart.<br />
* D-13758: There was performance issue with the Recent tasks system preset.<br />
* D-13793: Snowflake clustering failed when cluster count is larger than case count.<br />
* D-13763: SQL expression based filter rule with Where function to filter events didn't filter anything in Snowflake.<br />
* D-13804: Added missing Millisecond function to Snowflake.<br />
* D-13772: Expression EventLog.Cases.Events caused error "Value cannot be null".<br />
* D-13755: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13739: When switching between System reports there was error: "Uncaught Error: 2nd dimension not found. at y.getExpressionConfiguration".<br />
* D-12109: Sometimes flowcharts showed message "Error in querying event type measures. Input string was not in a correct format".<br />
* D-12473: Cost Savings by Automation preset gave sometimes error "Unable to cast object of type 'System.Double' to type 'System.String'".<br />
* D-13750: Snowflake model didn't work with the Case Duration vs. Manual Activities preset.<br />
* D-13657: There was error converting data type nvarchar to bigint.<br />
* D-13796: Some Snowflake operations didn't work with zero rows and columns.<br />
* D-12494: Now when chart size changes, the table column filters and sorting are preserved.<br />
* D-13736: In Performance benchmarking dialog, the Export result button exported wrong benchmark performance analysis result.<br />
* D-13609: Improved conformance analysis related filter names.<br />
* D-13594: Recycle bin buttons were not visible when opening recycle bin in a narrow screen.<br />
* D-13226: Tooltips in the model properties dialog are now translated.<br />
* D-12569: Table incorrectly showed ellipsis for narrow boolean type of columns showing checkboxes.<br />
* D-13391: Emptying date or datetime picker value was not registered and it didn't trigger functionality.<br />
* D-12621: Value search dialog didn't work with values containing backslashes.<br />
* D-13796: Some Snowflake operation didn't work with zero rows/columns.<br />
<br />
== QPR ProcessAnalyzer 2023.4 (build 2628) (released 2023-06-14) ==<br />
<br />
'''Features:'''<br />
* B-07767: Added [[Gantt_Chart|Gantt chart]] to visualize timeline of cases and events divided into swimlanes.<br />
* B-06383: Added [[Sankey_Chart|Sankey chart]] to visualize flow from one set of values to another.<br />
* B-07941: Implemented many more presets running in Snowflake models for compliance and operational excellence use cases. There are also presets for the path analysis and process bottlenecks identification.<br />
* B-07864: Snowflake conformance analysis shows now [[Conformance_Analysis#Top_Deviations_(in-memory)_/_Deviating_Flows_(Snowflake)|reasons for conformance deviations]], such as which event occurrences deviated from the design model.<br />
* B-07909: Snowflake conformance analysis visualizes [[Conformance_Analysis#Undesired_Events_(Snowflake)|undesired event types]] in table and flowchart.<br />
* B-07823: Flowchart Bottlenecks preset has been changed to show bottlenecks for event types. Also renewed the [[QPR_ProcessAnalyzer_Logs#Task_Log|Tasks reports]] to use expression language based interface.<br />
* B-07891: User interface has been [[Languages_and_Localization|translated into Portuguese]].<br />
* B-07873: Improved [[QPR_ProcessAnalyzer_Pivot_Table|pivot table]] visual layout to highlight totals and aggregated rows. Also the row titles are now visible in the top left.<br />
* B-07905: Added [[SQL_Expressions#Rank_functions|Rank related functions]] to Snowflake for writing more versatile custom KPI's, e.g., FirstValue, LastValue, NthValue, Lead and Lag.<br />
* B-07912: Added more SQL expression [[SQL_Expressions#Array_functions|array functions ArrayToString and ArrayOverlap]] to Snowflake.<br />
* B-06449: Added SQL expression functions ToTimestamp and TryToTimestamp for parsing timestamps from strings using provided format.<br />
* B-07959: Added new functions Base64Encode and Base64Decode to help using basic HTTP authentication when calling web services.<br />
* B-07206: SQL expressions support data [[SqlDataFrame_in_Expression_Language#WithClusterColumn|clustering]] which is an unsupervised machine learning algorithm to group data based on similarities.<br />
* B-07848: Data can be extracted from SAP using the encrypted [[Importing_Data_from_SAP#SNC_encrypted_connection|SNC connection]].<br />
* B-07903: Added expression language API to create and modify filters and models.<br />
* B-03103: [[QPR_ProcessAnalyzer_Logs#Task_Log|Task log]] (operation log) can be accessed in expression language.<br />
* B-07872: List aggregation with Distinct=true orders now items by their value.<br />
* B-07940: Removed "Count" aggregation from textual values in Big data chart (you can use the Case count, Event count, etc. selection instead).<br />
* B-07757: Backend support for datatables linking to user-definable Snowflake database, schema and table.<br />
* B-07825: Improved error message when trying to use non-existing attributes in Snowflake queries.<br />
* B-03101: To expression language, added try-catch-finally statement to handle thrown exceptions.<br />
* B-07861: Removed available and total virtual memory information from User settings dialog.<br />
* B-07902: Optimized sequences of joins in Snowflake queries to improve performance.<br />
* B-07837: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13709: If image width-to-height ratio was lower than container's ratio, image was incorrectly stretched to fit the container.<br />
* D-13660: Disabling filter rules didn't work in Snowflake models.<br />
* D-13526: Passing dataframes from SQL scripts to expression scripts didn't work.<br />
* D-13661: Snowflake conformance analysis crashed when there was no access to conformance related Snowflake UDF's.<br />
* D-13693: Resolved major Snowflake conformance analysis performance issues in the BPMN model handling.<br />
* D-13716: Snowflake root causes analysis incorrectly bypassed Snowflake cache.<br />
* D-13707: In SQL Scripting, the datatable analysis (number 18) didn't always copy the data table contents to the target table correctly.<br />
* D-13653: Big data flowchart Root causes preset showed incorrect legend.<br />
* D-13626: Flowchart froze when converting into big data flowchart and vice versa by modifying chart json settings.<br />
* D-13656: Root causes for attribute gave error "Failed to compare two elements in the array" in some situations.<br />
* D-11563: Pivot table had a minimum height of 300px, which caused bottom part of it to be out of view.<br />
* D-13704: In CSV file import, parsing now allows spaces between column separator and text quotation mark.<br />
* D-13598: Chart gave unclear error message when events datatable was not defined.<br />
* D-13655: Improved error messages for BPMN editor and conformance statistics.<br />
* D-13528: Error message for certain erroneous SQL expressions was unclear.<br />
* D-13677: "Flow occurrences with specific case attribute value" selection didn't work for in-memory chart.<br />
* D-13663: Pivot table border line was slightly broken in the header area.<br />
* D-13608: There was incorrect alignment of items in the table paging controls.<br />
* D-13703: Importing CSV file with some special characters to Snowflake failed (due to incorrect escaping in Snowflake staging files).<br />
* D-13708: Duplicating datatable using user defined table, removed data the source table.<br />
* D-13717: Dependency wheel crashed when there were zero weights and showing data labels.<br />
* D-13348: There was an unclear error message when Snowflake query had a certain incorrect expression.<br />
* D-13732: Pivot table Excel export contained headers formatted incorrectly.<br />
* D-13729: There was a JavaScript error when limited user tried to access business calendar.<br />
* D-13662: Percentile function didn't always work with timespan types.<br />
* D-13646: Using incorrectly configured model without cases datatable caused null reference error.<br />
* D-13629: When tried to use chart with a non-existing model, there is now a proper translated error message.<br />
<br />
== QPR ProcessAnalyzer 2023.3 (build 1990) (released 2023-05-03) ==<br />
<br />
'''Features:'''<br />
* B-07818: [[Conformance_Analysis|Conformance analysis]] is supported in Snowflake with following dashboard components: Big data chart, BPMN editor, Conformance statistics, and Design model selector.<br />
* B-07833: [[Root_Causes#Root_causes_in_flowchart|Root causes analysis for flowchart]] is available for Snowflake showing how the event and flow occurrences explain selected phenomena.<br />
* B-07786: Big data chart has more [[Big_Data_Chart#Measure_aggregations|measure aggregations]], such as median, percentile, standard deviation and variance. Also for textual items, unique values can be listed.<br />
* B-07795: [[QPR_ProcessAnalyzer_Table#Conditional_formatting|Conditional formatting]] supports also columns with non-numerical contents.<br />
* B-07830: [[Big_Data_Chart#Measure_aggregations|None and Any aggregations]] for Snowflake and user-friendly formatting for conformance violations.<br />
* B-06527: Error messages in [[Importing_Data_to_Datatable_from_CSV_File|CSV file import]] show also the column number to help working with CSV files with lot of columns.<br />
* B-07747: In-memory conformance checking accepts design models with multiple tasks having same name (same is followed by the Snowflake implementation).<br />
* B-07659: In-memory flowchart preset Case Conformance to visualize conformance checking violations.<br />
* B-07571: Added function IsConformant to backend to check whether cases are conformant.<br />
* B-07863: Added function ConformanceViolationsFlows to backend to return nonconformance reasons for violating cases.<br />
* B-07844: Support for "array" aggregation to return aggregated items as array.<br />
* B-07856: Support for creating and accessing arrays and objects in SQL expressions.<br />
* B-07860: Array handling functions and Tasks property for DesignModel entity.<br />
* B-07847: Added throttling for QPR ScriptLauncher client-side imports to limit memory usage.<br />
* B-07811: Snowflake query optimization to omit columns that are not used by the query.<br />
<br />
'''Fixed issues:'''<br />
* D-13632: Going from variations to event types led to very poor performance with certain models.<br />
* D-13628: Statistical calculations were incorrectly not applied in chart CSV export.<br />
* D-13575: SQL script may have given error "Operand type clash: nvarchar(max) was incompatible with sql_variant".<br />
* D-13597: UI supports now datatable column type "ShortString" (previously datatable contents preview and CSV import didn't work).<br />
* D-13536: Using business calendar sometimes gave error "System.InvalidOperationException: Collection was modified".<br />
* D-13477: Chart types without y-axis mapping caused an error when series mapping was used.<br />
* D-13453: _model variable was not available for Snowflake expression filter rules.<br />
* D-13527: Checkbox height didn't increase when long label needed to span to multiple lines.<br />
* D-13363: Snowflake query with EvaluateAfterAggregations and IsHidden failed when dimensioning by case id column.<br />
* D-13383: Snowflake query gave error "Invalid column name 'FromCase Name'".<br />
* D-13523: Request id was incorrectly shown as zeros in error messages.<br />
* D-13541: In CSV import, error message for maximum number of columns exceeded is improved (maximum is 300 column for SQL Server).<br />
* D-13583: Objects count in header didn't work for empty Snowflake model.<br />
* D-13553: Larger pacm files can now be imported, as there isn't error "Request body too large. The max request body size is 30000000 bytes".<br />
* D-13306: Stack overflow error was given when using SqlDataFrames.<br />
* D-13487: When Flows root and there was filter in Values expression, some flows were lost.<br />
* D-13540: SqlDataFrame query with 300 columns failed to error "WithExpressionColumn: No name given for the new column".<br />
* D-13429: Ordering in List aggregation couldn't find columns in dataframe query.<br />
* D-13406: Dataframe query with root FlowOccurrences and get value from cases caused error.<br />
* D-13538: There was incorrect handling of escaping characters in column names used in dimensions.<br />
* D-13633: Fixed ordering in List aggregation with null and empty values.<br />
* D-13636: Query that dimensions by numeric case attribute with AggregateOthers true, caused error.<br />
* D-13589: Creating Snowflake datatable did not connect to Snowflake.<br />
* D-13623: Value expressions without aggregation didn't work with AggregateOthers setting.<br />
* D-13554: In in-memory chart, percentile function might have return both Int64 and Double type of objects which cannot be sorted.<br />
* D-13481: Improved error message when trying to use deleted model.<br />
* D-13621: Dynamic value search dialog had incorrect font in lists.<br />
* D-13610: Some invalid BPMN files crashed BPMN editor.<br />
* D-13614: Checkbox label texts overflowed to right.<br />
* D-13520: Removed excessive parameters from the Query Designer for generic context queries.<br />
* D-12998: QPR icon was incorrectly positioned in header in Safari.<br />
* D-13480: Import to duration data type is removed from Snowflake datatables, and for local datatables duration type maximum size is checked.<br />
* D-13517: In Highcharts-based visualizationsm conditional formatting didn't work for other than the first y-axis mapping.<br />
* D-13529: In some presets containing several on-screen settings, when chart showed in error message, on-screen settings showed invalid selection.<br />
* D-13530: Opening dropdown list caused JavaScript error when the list contents should be empty after it previously contained items.<br />
* D-13486: Removed unreachable error message in CSV import.<br />
* D-13524: Fixed in-memory chart flow occurrences root measures "Event attribute (text)" and "Event attribute (number)" that caused error.<br />
<br />
== QPR ProcessAnalyzer 2023.2 (build 1478) (released 2023-03-22) ==<br />
<br />
'''Features:'''<br />
* B-07755: [[Business_Calendar|Business calendar]] for duration calculation is available for Snowflake models.<br />
* B-07719: In Snowflake dashboards, [[Big_Data_Chart#Using_measure_variables|measures can be assigned to variables]] and use the variables in other measures to create combined measures.<br />
* B-07746: Changed in-memory conformance checking to not show invalid flow violations where starting or ending event type is invalid.<br />
* B-07743: [[PA_Configuration_database_table#General_Settings|Default datasource]] can be configured for datatables created by scripts, allowing to set Snowflake as default.<br />
* B-07740: System memory indicator moved from the header to User settings Version information dialog.<br />
* B-07776: New SQL expressions functions Unicode, Char and Regexp, as a basis for future rule-based process mining.<br />
* B-07741: Backend support for aggregation operations Median, Percentile, Stdev, Stdevp, Var and Varp to Snowflake.<br />
* B-07742: Backend support for aggregation operation to list unique items in Snowflake.<br />
* B-07770: Optimized Snowflake SQL generation by combining consecutive WithColumn function calls into one select.<br />
<br />
'''Fixed issues:'''<br />
* D-13491: QPR ProcessAnalyzer server crashed now and then when sorting was in progress and the query was cancelled.<br />
* D-13380: Dimensioning integers in in-memory core calculation didn't work correctly as 0 and -1 were put to same bucket.<br />
* D-13385: In Workspace Bin, Delete Forever and Restore from Bin buttons were misaligned.<br />
* D-13332: Conformance checking didn't show in violations when there were multiple undesired events in same case.<br />
* D-13405: Images take now always all available space in image component area.<br />
* D-13417: KPI card without title was slightly misaligned vertically.<br />
* D-13438: Clicking selected event type or flow in flowchart didn't cancel the filter selection.<br />
* D-13350: Task log and Script log default filter end date is now empty by default.<br />
* D-13381: Disabled browser auto-complete from flowchart variation stepper and Workspace create/rename object dialog.<br />
* D-13347: Improved performance for in-memory business calendar calculation.<br />
* D-13335: In in-memory chart, filtering didn't work in "Flow occurrences" root "Flow occurrences with specific event attribute value" dimension.<br />
* D-13367: Percentage value wasn't displayed properly with German or Spanish language when event types were shown in object counts indicator.<br />
* D-13451: Exported filter file is now named based on selected filter name.<br />
* D-13378: In Big data chart, prevented error "Unable to aggregate from level RootCauses to level Custom".<br />
* D-13293: DataFrame query with root Flows and IncludeEvents and ExcludeEvents filter rules failed.<br />
* D-13370: Fixed issue where on-screen settings that didn't have any selectable items, showed a strange selection.<br />
* D-13392: Clustering analysis was incorrectly shown when originally in-memory chart was converted into big data chart by changing chart json settings.<br />
* D-12784: Some Snowflake queries incorrectly bypassed Snowflake caching because they used unique object names.<br />
* D-13456: Improved error messages for incorrectly configured on-screen settings.<br />
* D-13445: Conformance violations related translated terms have been fine-tuned for better translations into different languages.<br />
* D-13421: Improved error messages when trying to use model having some column mappings missing.<br />
* D-13485: Snowflake business calendar gave error when calendar contained Sunday.<br />
* D-13218: Windows event viewer incorrectly contained log entries that are not errors.<br />
* D-12634: Multiline text boxes width is set to non-changeable.<br />
* D-13034: Confirmation dialog to delete items permanently has been updated.<br />
* D-13288: In dialogs, the Create button didn't show the disabled state correctly.<br />
* D-13427: When dropdown lists didn't have any selectable items, the "N/A" text appeared and the list incorrectly took more space vertically.<br />
* D-13483: In Workspace, the new items menu was too narrow for Spanish texts.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.1 (build 1449) (released 2023-02-24) ==<br />
<br />
'''Features:'''<br />
* B-07690: System setting [[PA_Configuration_database_table#General_Settings|DatabaseId]] can be defined by administrator to get more simple table names in Snowflake.<br />
* B-07737: In flowchart Bottlenecks preset, originally used flow colors has been recovered.<br />
* B-07748: For Analyzed objects "Conformance checking findings" in charts, terminology has been revised and issue with the case count calculation fixed.<br />
* B-07663: In [[Chart_On-screen_Settings|on-screen settings]], when case/event attribute is selected, related attribute values list are reset.<br />
* B-07570: Backend support for [[Business_Calendar|business calendars]] in Snowflake.<br />
* B-07660: Backend support for conformance checking to show also the last event index and event type in NotCompleted reason.<br />
* B-07610: Memory counter related technical properties have been removed from expression language.<br />
<br />
'''Fixed issues:'''<br />
* D-13349: Opening dashboard containing Root causes preset with default settings jammed the system by generating lot of calculations (for more information, see previous release notes).<br />
* D-13277: Stacked charts with date type of data as series did incorrectly show gaps in columns/bars.<br />
* D-13270: Flowchart conditional formatting didn't work with duration multi-unit format.<br />
* D-13358: Calculation results caching works also across different user sessions.<br />
* D-13250: Dashboard with two charts connected with linked settings using variables ended up to to a never ending loop.<br />
* D-13230: SAP import did not automatically create columns to use the correct column types.<br />
* D-12857: Deeply recursive functions caused a crash without any trace.<br />
* D-12994: In Workspace, some buttons were not clickable due to breadcrumb covering them.<br />
* D-13249: In Workspace, there was incorrect error message for duplicate datatable names when there were items with only letter capitalization was different.<br />
* D-13232: In-memory chart Top variations preset is now sorted secondarily by average duration descending.<br />
* D-13300: Setting DashboardFilter variable to empty value didn't have any effect in dashboard but old value was incorrectly used.<br />
* D-12834: Limited the maximum number of dimensions to 20, to avoid too demanding queries for SQL Server.<br />
* D-12917: Changed visual indication of missing items in dropdown lists (it's no longer showing "***").<br />
* D-13111: In Root causes preset, there is now error message when trying to use weighting related columns when weighting isn't in use.<br />
* D-13124: SQLDataFrame query containing filter rule EventTypes aggregating from cases failed.<br />
* D-13207: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed.<br />
* D-13292: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed (rev.2).<br />
* D-12991: Dropdown list texts had some translations missing.<br />
<br />
== QPR ProcessAnalyzer 2023.1 (build 1433) (released 2023-02-07) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release contains a potentially severe issue, where some dashboards completely jam the system by generating lot of calculations. The issue may appear in dashboards that have been created in earlier releases and containing the Root causes preset with default settings. The issue will be fixed by the next release. The issue can be worked around by exporting the affected dashboard, modifying the dashboard file manually and importing the dashboard back. The required modification is to remove line(s) containing <pre>"preset": "RootCauses"</pre> and the comma from the preceding line.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Cases (analysis number: 5), Events (6), and EventTypes (7). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). Note that the legacy analyses removal don't affect the dashboarding functionality.<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [5, 6, 7];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2023.1, the '''.NET Desktop Runtime''' is not needed anymore for QPR ProcessAnalyzer Server, so it can be uninstalled. Also for QPR ScriptLauncher, ''.NET Desktop Runtime'' is not needed, but instead install the '''.NET Runtime''' (which is more lightweight). ''.NET Desktop Runtime'' contains the ''.NET Runtime'', so the actions are not mandatory when updating to QPR ProcessAnalyzer 2023.1.<br />
</div><br />
<br />
'''Features:'''<br />
* B-06997: Expression-based filter rules for Snowflake dashboards to allow versatile filtering and filtering from custom expressions.<br />
* B-07383: Improvements to linked settings to allow binding to variables, tags and filter rules [[Chart_Linked_Settings|(more information)]].<br />
* B-07508: Flowchart preset colors have been renewed to be more intuitive.<br />
* B-07184: Automation preset in flowchart has now options for selecting the Automation attribute and value.<br />
* B-07512: Changed datatable metadata can be refreshed from Snowflake, and all rows in the datatable can be deleted easily in Workspace [[QPR_ProcessAnalyzer_Project_Workspace#Datatables|(more information)]].<br />
* B-07440: Date when the release was made is now shown in User settings.<br />
* B-07595: WeekOfYear property for DateTime objects in expression language to get the week number of a year (between 1 and 53).<br />
* B-07623: In-memory expression language functions Random (to get random numbers) and Hash (to get hash value of string).<br />
* B-07612: Breadcrumb in Workspace has now a Home button to quickly navigate to the top level of the projects hierarchy.<br />
* B-07637: Language selector now shows the language options in local languages.<br />
* B-07228: Remove following deprecated analyses: Cases, Events, and EventTypes (see the release note above).<br />
* B-07538: Backend support: Snowflake root causes analysis can find event attribute related root causes.<br />
* B-07706: Backend support: Snowflake expression-based filter rules support for roots containing Where function.<br />
* B-07611: Removed following legacy filter rules: CaseAttributeTrend, EventAttributeTrend, EventTypeTrend, and Duration.<br />
* B-07598: Refactored client-side import for SQL scripting to use generic client-side task mechanism.<br />
* B-07716: ShortString columns are now properly detected in SQL Server queries.<br />
* B-07652: Now it's possible to pipe multiline expression strings to QPR ScriptLauncher.<br />
* B-07688: AddColumns function for Datatables to create multiple columns in one call.<br />
<br />
'''Fixed issues:'''<br />
* D-13092: Table conditional formatting didn't work when color code was fetched from other column.<br />
* D-13105: Some charts created in earlier release referring to non-existing presets names appeared as empty after software update.<br />
* D-13107: Flowcharts crashed and showed loading animation forever when setting color or flow thickness to non-numerical measure.<br />
* D-13104: In BPMN model editor, context menus to edit elements didn't appear.<br />
* D-12939: Script editor tabs Close buttons didn't work.<br />
* D-13154: "Search by case ID" didn't work in in-memory chart.<br />
* D-12933: CSV columns with only empty values were incorrectly auto-detected as integers.<br />
* D-12929: In-memory chart Root causes for case duration and Root causes for case attributes (weighted) had Custom expression missing.<br />
* D-12928: Pivot table headers were empty when there were two column levels and two values.<br />
* D-12924: Pivot table columns with Count and Distinct Count aggregations are now numeric and aligned right.<br />
* D-13033: Changing colors in chart settings Color palette caused "Item already exists" error and prevented changing colors.<br />
* D-12996: Tags referring to dashboard variables didn't work in Additional root expression.<br />
* D-12877: UI gave error in some situations: Uncaught TypeError: Cannot read properties of undefined (reading 'min').<br />
* D-13071: Prevented selecting two or more of the Y-axis, X-axis and series mappings at the same time for the same measure or dimension.<br />
* D-12895: Big data chart crashed when on-screen setting contained event type selector and there were no event type filter set.<br />
* D-13231: Tooltips for dashboard name, model selector and filter selector in header show now the content text instead of generic instruction.<br />
* D-13139: There was an error when tried to create filter for a custom expression where selected data type didn't match with the actual type of data.<br />
* D-12988: Chart presets selection in chart settings showed unnecessary tooltip.<br />
* D-12901: When set sampling over 1 million, Snowflake models gave error: parameter value out of range: size of fixed sample. Must be between 0 and 1,000,000.<br />
* D-12904: Creating expression filter having lower/greater logic with root objects sampling failed.<br />
* D-12923: Chart schema didn't accept pivotAggregation in dimensions/columns.<br />
* D-12926: Root causes columns Selected weight, Compared weight and Total weight have now correct float data type.<br />
* D-12880: In out-of-the box dashboards, chart titles and subtitles were not translated.<br />
* D-12916: Improved filter rule description text in Filter rule editor dialog for expression filter rules.<br />
* D-12889: No clear error message was given when user tried to export corrupted model from .pacm file.<br />
* D-12869: Date selector in on-screen settings had inconsistent vertical alignment.<br />
* D-12938: When creating a filter with lasso and selecting a single data point only, "equals" kind of filter rule is now created.<br />
* D-12989: "Running tasks as specific time" system report may have ended up in loop causing following error: Maximum call stack size exceeded error.<br />
* D-13010: Pivot table sometimes ended up to never-ending resizing loop when browser zoom was more than 100%.<br />
* D-12790: Expression language: DataFrame.SetColumns: Initializing and using variables defined in closure of SetColumns function parameter didn't work<br />
* D-12927: All on-screen settings were not be visible in narrow charts having several on-screen settings.<br />
* D-12937: Added maximum value limitation to several number input fields in charts.<br />
* D-12947: Message dialog didn't show line breaks correctly (e.g., in CSV file import).<br />
* D-12948: Defining column setting caused error when Measure Expression was not defined.<br />
* D-12946: Filter rule text couldn't be seen entirely from tooltip.<br />
* D-12983: When range filtering using integer values in Highcharts chart, filter is now shown as integer value.<br />
* D-12984: When range filtering in Highcharts charts and there is category axis, filter rule is now based on individual (category) values.<br />
* D-12930: When creating filters from charts using date type of X-axis with lasso, "greater than or equal" and "less than or equal" filter rules are not created.<br />
* D-12920: "Where" function in DataFrame lost column data types of the original DataFrame.<br />
* D-13048: Model notifications failed with certain measures that define variables in root expression leading to error: Variable "sampleSize" already exists in this context.<br />
* D-13116: BPMN editor had some translations missing.<br />
* D-13019: Datatable and script selectors show now datatable/script name instead of id, when opening selector having existing selections.<br />
* D-12951: Changing additional root expression in flowchart didn't refresh the flowchart.<br />
* D-13147: Filter rule boxes in header had different widths, and Add filter rule button vertical alignment was incorrect.<br />
* D-12907: Sometimes case attribute selection showed incorrect attribute name for empty model.<br />
* D-13148: Filters and Datatables system reports loaded unnecessarily twice which could be seen as blinking.<br />
* D-12844: In dataframe query, FlowOccurrences in root and GetValueFrom Cases with filter gave null reference exception<br />
* D-12915: Repeating certain query twice with aggregations in Events root generated invalid SQL<br />
* D-12728: Was huge amount logs in server during client side import (manual testing required as identification)<br />
* D-13156: Persist function failed to snowflake: Invalid unicode escape sequence '\u0027ACCE'; should be at most '\u0010FFFF'.<br />
* D-12876: Flows/FlowOccurrences in root didn't work with SqlExpressionValue filtering.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2022.8 (build 1397) (released 2023-01-11) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release fixes an issue where extracting large datasets from SAP increases memory consumption considerably and may lead to out-of-memory error. This release contains packages for both QPR ScriptLauncher and QPR ProcessAnalyzer Server. If SAP extractions are done using QPR ScriptLauncher in client side mode (ExecuteInClientSide=1), it's enough to update QPR ScriptLauncher to fix this issue.<br />
</div><br />
<br />
'''Fixed issues:'''<br />
* D-12941: Extracting data from SAP consumed unnecessary lot of memory and may have led to out-of-memory error (both when running using QPR ScriptLauncher and in server side).<br />
<br />
== QPR ProcessAnalyzer 2022.8 (build 1396) (released 2022-12-30) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Creating datatables with duplicate names in the same project is prevented, and possible existing duplicate names are automatically changed to unique names with a random suffix. If there are duplicate names, they can be renamed either before updating QPR ProcessAnalyzer (to avoid automatic renaming) or after the update (by changing suffixed names). If the renamed datatables are used by models, the linkage will break because it's based on the datatable name. Creating duplicate datatables has already been prevented in the UI, but the improved method works also in the API level.<br />
<br />
Following SQL query can be used to list datatables (and project id) having duplicate names:<br />
SELECT ITA_NAME, ITA_PROJECT_ID<br />
FROM PA_INTEGRATION_TABLE<br />
GROUP BY ITA_NAME, ITA_PROJECT_ID<br />
HAVING Count(*) > 1<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
If trying to use business calendar for a model that doesn't have the business calendar defined, there will now be an error message instead of showing the chart. Either unselect the business calendar checkbox for the measure or dimension, or define a business calendar to the model. In this situation in earlier releases the business calendar was ignored and full time calculation used.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07498: Automation and Operational Excellence presets and Root causes analysis (for Snowflake), Weighted root causes analysis and Event scattering preset (for Snowflake and in-memory), Root causes for case duration (in-memory).<br />
* B-07177: Flexible mappings, user selectable aggregations and conditional formatting for Pivot table, and flexible mappings for KPI Card.<br />
* B-07518: New function named Query to run call /api/expression/query.<br />
* B-07294: In Workspace, the left side projects hierarchy can be collapsed and expanded to make more space to project contents.<br />
* B-06814: In SQL expressions, new function DurationBetweenDates to calculate duration between timestamps precisely.<br />
* B-07519: Replaced DateDiff function with the new DurationBetweenDates function in big data chart.<br />
* B-07531: In SQL expressions, new mathematical functions Abs, Log, Mod, Power, Rand, Sign and Sqrt.<br />
* B-07297: To optimize performance, Snowflake queries are automatically cancelled if they are not needed by UI.<br />
* B-07569: To optimize performance, TakeSample function implementation is improved for Snowflake.<br />
* B-07198: Several performance improvements to DataFrame queries (used in Snowflake).<br />
* B-07464: Added Lead and Lag functions to SqlDataFrames to support getting previous and next event.<br />
* B-07470: New ExtractSap function to fetch data from SAP using expression language.<br />
* B-07536: New Pivot function to SqlDataFrames to enable root causes analysis.<br />
* B-07488: Primary keys can be set to datatables to improve calculation performance (UI will follow later).<br />
* B-07515: Added RootCauseAnalysis function to SqlDataFrames.<br />
* B-07546: RootCauseAnalysis function support for complex weighting expressions.<br />
* B-03052: Support for user-defined variables in /api/expression/query.<br />
* B-07565: Support for NumberPrecision, DatetimeTruncation and TimespanPrecision properties for Values section in in-memory query.<br />
* B-07513: For product activation file handling, replaced mutex based implementation with exclusive file lock.<br />
* B-07480: Expression language support for DataFlows for data extraction.<br />
* B-07613: Removed support for SQL Server based R scripting.<br />
* B-07567: Take datatable primary keys into use in expression builder to improve performance (part 2).<br />
* B-07588: Remove total memory information from log writing and DateDiff function for in-memory.<br />
<br />
'''Fixed issues:'''<br />
* D-12715: Snowflake calculated imprecisely some operations containing division and aggregation.<br />
* D-12761: Progress bar of the CSV import dialog didn't show any progress.<br />
* D-12799: Opening datatable contents dialog settings was slow when there were lot of rows in the datatable.<br />
* D-12089: Include conforming/nonconforming cases made BPMN editor no responding.<br />
* D-12496: Datagrid filter search keyword didn't work for rounded values, so the search was hidden for other than textual data.<br />
* D-12704: Durations as quarters was calculated incorrectly in charts.<br />
* D-12662: Fixed issue where some special literals in custom expressions didn't work.<br />
* D-12403: Setting Notifications on a model had some visual issues.<br />
* D-12859: Dependency wheel visualization crashed with nulls values in From and To mappings.<br />
* D-12660: Removed unnecessary float conversions in SQL expressions.<br />
* D-12653: In-memory datafram OrderByColumns function with mixed values failed.<br />
* D-12657: When trying to use milliseconds period in some presets, frontend frozed.<br />
* D-12706: Line breaks in data were shown in many places where it's undesired.<br />
* D-12719: Syncfusion dialog headers showed backslaces incorrectly.<br />
* D-12372: Refused to run the JavaScript URL because it violated the Content Security Policy directive.<br />
* D-12730: Logging out when filter selection is in progress, gave javascript error.<br />
* D-12705: Header object counts tooltip was sometimes messed after logout.<br />
* D-12384: Selected project was not highlighted for whole project name string.<br />
* D-12581: Prevented creating duplicate datatable names in same project in parallel execution.<br />
* D-12722: There was incorrect syntax near '<' when running SqlDataFrame expressions.<br />
* D-12736: Swedish and Finnish translation improvements for object counter tooltips.<br />
* D-12702: For BPMN Editor component "Something went wrong" error was given when switching from in-memory to Snowflake model.<br />
* D-12712: UI gave error: TypeError: Cannot read properties of undefined (reading 'id').<br />
* D-12738: Business calendar showed total business time when calendar configuration was invalid.<br />
* D-12776: Special character filter caused JavaScript SyntaxError.<br />
* D-12785: Unnecessary vertical scrollbar displayed for main header toolbar.<br />
* D-12164: There was unnecessary UnauthorizedAccess errors in logs.<br />
* D-12580: Case duration was not same when comparing Big data chart with in-memory chart for same data.<br />
* D-12768: Data grid links and variable change actions didn't work when grouping was used.<br />
* D-12735: FindRootCauses (in-memory) function filtered out cases with zero contribution.<br />
* D-12763: --#CallWebService didn't work from ScriptLauncher.<br />
* D-12789: There was timeout in SQL queries to scripting sandbox.<br />
<br />
== QPR ProcessAnalyzer 2022.7 (build 1331) (released 2022-11-15) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2022.7, to improve security expression language operations that modify data or connect to external datasources are prevented in dashboard custom expressions. The limitation is required, because when a dashboard is opened, its expressions are run with the user's permissions, and the user need to trust the expressions don't perform any unexpected operations, such as delete data. The full functionality of the expression language is available in the scripts and in the Expression Designer.<br />
<br />
The following functions and operations are prevented in dashboards: SendEmail(), CallWebService(), ImportOdbc(), ImportOdbcSecure(), Model.DeletePermanently(), Model.Restore(), Model.TriggerNotifications(), Project.DeletePermanently(), Project.Restore(), Project.CreateDatatable(), Datatable.AddColumn(), Datatable.DeletePermanently(), Datatable.Import(), Datatable.Merge(), Datatable.RemoveColumns(), Datatable.RenameColumns(), Datatable.Truncate(), RecycleBin.DeletePermanently(), and call SQL script. Calling expression scripts is allowed, but in the script all previously mentioned operations are prevented.<br />
<br />
Following SQL query can be executed in the QPR ProcessAnalyzer metadata database to reveal dashboards that potentially have prevented expressions:<br />
SELECT * FROM [PA_UI_ELEMENT] WHERE [UIE_PROPERTIES] LIKE '%SendEmail(%' OR [UIE_PROPERTIES] LIKE '%CallWebService(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbc(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbcSecure(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Restore(%' OR [UIE_PROPERTIES] LIKE '%TriggerNotifications(%' OR [UIE_PROPERTIES] LIKE '%CreateDatatable(%' OR [UIE_PROPERTIES] LIKE '%AddColumn(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Import(%' OR [UIE_PROPERTIES] LIKE '%Merge(%' OR [UIE_PROPERTIES] LIKE '%RemoveColumns(%' OR [UIE_PROPERTIES] LIKE '%RenameColumns(%'<br />
</div><br />
<br />
'''Features:'''<br />
* B-07287: Process Discovery and most important presets for Snowflake.<br />
* B-07271: "Last Row Aggregates Over-limit Rows" setting for big data chart.<br />
* B-06431: Snowflake datatables support for database views in the datasource.<br />
* B-07266: Security: "limited mode" to prevent data modifications and external calls from dashboard expressions.<br />
* B-07097: Improved flowchart root causes color scales.<br />
* B-07363: SQL LIKE function support for escape character.<br />
* B-06877: Improved variation queries performance in Snowflake, part 1.<br />
* B-07444: Improved variation queries performance in Snowflake, part 2.<br />
* B-07382: Support for empty strings and nulls in event type names in dataframe processing.<br />
* B-07273: WithRowNumberColumn, WithRankColumn, WithDenseRankColumn support for descending sorting.<br />
* B-07303: FindRootCauses function support for weighting expression.<br />
* B-07327: Unpivot function for SqlDataFrames (for root cause analysis).<br />
* B-07385: Align token lifetime with SESSION_MAXIMUM_DURATION setting.<br />
* B-07500: ColumnMappings property for IDataFrame and DataTables.<br />
* B-07499: IDataFrame.ApplyFilter function to filter events data using a JSON-based filter.<br />
* B-07469: Translation updates for release 2022.7.<br />
<br />
'''Fixed issues:'''<br />
* D-11630: Drag and drop from chart settings to main header was working incorrectly for filter and root cause rules.<br />
* D-12455: Moving a chart filter from one chart to another created a root cause analysis filter.<br />
* D-12266: Root causes analysis showed incorrect results when certain combination of filters.<br />
* D-12525: Numerical values in Excel export in data grid was formatted incorrectly.<br />
* D-12534: Restoring item from recycle bin changed project from Bin to previous project.<br />
* D-12529: Measure specific datalabel mapping did not work correctly when also mapped to Y-axis.<br />
* D-12532: Multi-selection options caused layout issue for Chart setting.<br />
* D-12541: Layout issue for Polish in multiselect list search dialog.<br />
* D-11277: Increase/decrease Icons were missing in the dimension sorting for Mac.<br />
* D-12552: Uncaught Error: Diagram.selectCollection given something that is not a Part: null.<br />
* D-12567: Tooltip incorrectly showed for label component containing only spaces.<br />
* D-12438: Operation was cancelled because it was replaced by a new operation.<br />
* D-12551: Some expressions didn't work as calculated case/event attributes.<br />
* D-11720: Chart buttons were not visible in Apple Safari and iPad.<br />
* D-12544: On-screen settings "options" parameter did not work.<br />
* D-12528: Multi-unit time unit selection appeared where it's not applicable.<br />
* D-12583: Error message should be provided for invalid settings input than just display JS errors.<br />
* D-12599: Tooltips didn't show correct measures/dimensions when "Show in tooltip" mappings are used.<br />
* D-12561: Chart settings content was incorrectly drawn outside of the chart dialog.<br />
* D-12568: Reload UI sometimes crashed chart having multiselect on-screen settings.<br />
* D-12572: Main header toolbar lost when refresh maximized PA chart.<br />
* D-12612: Drop Unused Filters After setting incorrectly allowed zero seconds.<br />
* D-12533: Error message keeped blinking in Analysis view.<br />
* D-12608: User could not select or add new case attribute when current select attribute doesn't exist.<br />
* D-12451: Prevented deleting running script.<br />
* D-12516: Windows event viewer warning: Failed to gracefully shutdown application.<br />
* D-12523: Business calendar performance - part 2.<br />
* D-12538: Column with same name could be added multiple times to datatable using expression language.<br />
* D-12582: Improved EMS mutex code to support multiple PA service in one server.<br />
* D-12624: Synchronize new (empty) data table generated failed queries in Snowflake.<br />
* D-12622: Advanced setting page reserved room for the expression editor frame that did not exist.<br />
* D-11295: In on-screen settings, some UI controls were vertically misaligned.<br />
* D-11625: The heights of the parameter option menu in the clustering tab was not well aligned.<br />
* D-12103: Small dropdown list layout issue.<br />
* D-12633: Align issue for Column related Advanced settings.<br />
* D-12505: Search dialog didn't escape % and _ characters correctly in dataframe processing.<br />
* D-12645: Tabs in expression settings dialog were partly hidden when dialog is narrow.<br />
* D-11382: Moving of flowchart was sometimes shaky.<br />
* D-12655: Filter rule tooltips in header were styled incorrectly.<br />
* D-12656: Large integer values in filter jsons were incorrectly presented as small integers.<br />
* D-12661: Some exported filters contained unnecessary "invert" property.<br />
* D-12500: Model with numeric case id's and filtering with the attribute mapped as case id: ERROR [22018] Numeric value <nowiki>''</nowiki> is not recognized.<br />
* D-12509: Filtering null values didn't work in boolean attributes in Snowflake.<br />
* D-12571: In dataframe processing in SQL Server, dividing two integers should not make rounding to integer.<br />
* D-12610: Setting for global DropUnusedFiltersAfter was missing.<br />
* D-12613: Filtering with case/event attributes with null values didn't match in Snowflake models.<br />
* D-12617: Model didn't work when DropUnusedFiltersAfter is 00:00:00.<br />
* D-12618: If model ConfigurationJson is null, Configuration property didn't work.<br />
* D-12620: Filtering didn't work when there are backslaces in attribute names in Snowflake models.<br />
* D-12643: AttributeFunctionCallExpression did not always work properly in array context.<br />
* D-12647: SqlDataFrame with SQL Server: Comparing literals to variant column values failed.<br />
* D-12648: Models that have DropUnusedModelsAfter setting caused "The sliding expiration value must be positive" error.<br />
* D-11526: It was unable to translate Unicode character \uD83D at index 176 to specified code page.<br />
* D-12637: In application startup arised FATAL Application startup exception System.UnauthorizedAccessException: Access to the path 'Global\MutexQPRPAActivation' is denied.<br />
<br />
== Old Releases ==<br />
See older releases in [[QPR ProcessAnalyzer Release Archive]]<br />
__NOTOC__<br />
<br />
[[Category: QPR ProcessAnalyzer]]</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&diff=24452QPR ProcessAnalyzer Release Notes2024-02-27T15:47:10Z<p>Ollvihe: /* Next Additional Release: QPR ProcessAnalyzer 2024.2 (planned date 2024-02-27) */</p>
<hr />
<div>This page lists all new features and fixed issues for each QPR ProcessAnalyzer release.<br />
<br />
== Next Additional Release: QPR ProcessAnalyzer 2024.2 (planned date 2024-02-27) ==<br />
<br />
'''Features:'''<br />
<br />
* B-06280: The admin is able to remove any user's password.<br />
<br />
'''Fixed issues:'''<br />
<br />
* D-14045: Fixed an issue where users that didn't have at least designer role, couldn't create filters in Snowflake models.<br />
<br />
== Latest Release: QPR ProcessAnalyzer 2024.2 (build 5438) (released 2024-02-21) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue: Using Snowflake models and dashboards doesn't work with Viewer and Analyzer roles. The reason is that cache tables created to Snowflake incorrectly require the GenericWrite permission. Workaround is to give users the Designer role which will give the needed GenericWrite permission. Note that the Designer role gives many permissions to the user for the project [[Roles_and_Permissions#Roles_and_Permissions|(more information)]].<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
The legacy User permissions report (analysis number 11) and Filters report (analysis number 30) used in SQL scripts have been removed. Use instead the expressions language to query filters and user permissions, e.g., [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|Models.Filters]] and [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
New version of the Design diagram component has been improved with object-specific measures, and the previous common measures are not migrated into object-specific measures. Thus, the measures need to be configured again, or manually edit the chart json settings (if needed please ask instructions from QPR CustomerCare).<br />
</div><br />
<br />
'''Features:'''<br />
* B-08022: Design diagram supports now BPMN notation, elbow style flows and object-specific measures.<br />
* B-08232: Entire future eventlogs can be [[Create_Predicted_Eventlog|predicted]] based on generative AI models running in Snowflake.<br />
* B-08166: Added expression language function [[Generic_Functions_in_QPR_ProcessAnalyzer#OpenAIChatCompletion|OpenAIChatCompletion]] to answer natural language prompts based on OpenAI ChatGPT API.<br />
* B-08177: Snowflake query performance has been improved by introducing caching of filtered eventlogs using Snowflake tables.<br />
* B-08196: Conditional formatting rules can be defined for [[QPR_ProcessAnalyzer_Table#Textual_equal_rules_for_background_color|textual and boolean values]].<br />
* B-08213: Big data chart expressions event type selections to be multi-select where applicable.<br />
* B-08205: Expression language API is available for storing [[Storing_Secrets_for_Scripts|secrets]] for scripts.<br />
* B-07780: Chart [[QPR_ProcessAnalyzer_Chart#Variable_mappings|variable mappings]] has been removed - use the [[Chart_Linked_Settings|linked settings]] instead. Dashboards using variable mappings are automatically converted to use linked settings.<br />
* B-08117: Added ToSqlDataFrame function to convert in-memory dataframe into SQL dataframes.<br />
* B-08174: Only non-default parameters values are written to the operation log.<br />
* B-08200: Timestamps in System reports are shown in user workstation local time.<br />
* B-08171: Dashboard id has been added to queries, to track from which dashboard queries are originating.<br />
* B-07144: Remove legacy User permissions report (analysis number 11) and Filters report (analysis number 30) in SQL scripts (see note above).<br />
* B-08193: Added retry mechanism to QPR ScriptLauncher to recover if connection to server breaks.<br />
* B-08202: Updated copyright for year 2024.<br />
* B-08199: Frontend components have been updated.<br />
* B-08203: Backend components have been updated.<br />
* B-08209: Translations updated for release 2024.2.<br />
<br />
'''Fixed issues:'''<br />
* D-13972: Some measures/dimensions/columns in Big data chart didn't show the expressions level filtering.<br />
* D-14015: Fixed business calendar incorrect calculation when business period covered entire day.<br />
* D-14014: Fixed issue where Snowflake business calendar could not have end time as 00:00.<br />
* D-13962: System variable values were interpreted incorrectly when used in linked settings.<br />
* D-13971: HiddenInNavigation and SortOrder variables didn't work in navigation menu dashboards list.<br />
* D-13959: Removed possibility to add datatable columns with the legacy "any" data type.<br />
* D-13991: Improved drop-down selector component to handle empty strings as variable values.<br />
* D-13965: Datatable column name length was validated incorrectly which may have caused error in saving with too long column names.<br />
* D-13958: Project names showed unnecessary html escaping in the "Move to" menu.<br />
* D-13964: Model attributes and notifications dialogs gave error when trying to use dashboard tags.<br />
* D-13960: Added missing translations for list of permission list and 12-hour clock format.<br />
* D-13966: Fixed issue were root causes chart tooltip sometimes didn't disappear.<br />
* D-13969: Datatable column schema export sometimes showed empty for the key column.<br />
* D-13862: Session token was not accepted when url path capitalization is different.<br />
* D-13942: Datatable could not be dimensioned if it has column named "CaseId".<br />
* D-13980: Business calendar dialog crashed when tried to open it for a model without access.<br />
* D-13983: Notifications dialog didn't validate situation when same name was used in a measure and dimension.<br />
* D-13981: Dashboard import set incorrect model id to dashboard if there was no access to any model.<br />
* D-11276: Translations were missing for 12-hour clock dates (AM and PM) in dashboards.<br />
* D-13977: Multi-select dropdown lists showed some special characters incorrectly.<br />
* D-13945: Syncfusion toast message didn't work when text contains ${[]}.<br />
* D-13930: Pivot table throws javascript error when certain clicks.<br />
* D-13273: Duplicate datatable row count didn't shown correctly.<br />
* D-13994: There was an error in the in-memory chart with some flow related measures about duplicate variable names when same measure was defined twice.<br />
* D-13985: Models list dots menu had texts misaligned in narrow screens.<br />
* D-13995: In Workspace, wrong datatable was selected after duplication when non-default sorting was applied.<br />
* D-13997: Workspace tables column filtering search caused JavaScript errors.<br />
* D-13978: In table Excel export, the last row representing other items appeared incorrectly for in-memory chart.<br />
* D-14007: In System reports, model related selections are hidden from the Analyzed objects lists.<br />
* D-14005: In big data chart, changing to custom expression caused crash with some expressions having case/event attribute.<br />
* D-14003: When dimensioning was not used, pivot table values were incorrectly rounded in the server side.<br />
* D-14004: Removed empty filters from queries to optimize them.<br />
* D-13988: Fixed issue where data grid context menu rendered initially as too high.<br />
* D-13979: BPMN model editor element settings use now Open Sans font.<br />
* D-14013: Fixed incorrect expression "Duration between first and last occurrence" in big data chart event types.<br />
* D-13984: Fixed the error of refusing to run the JavaScript URL.<br />
* D-14031: ThrownObject property was not included to http error response when error came from the script.<br />
<br />
== QPR ProcessAnalyzer 2024.1 (build 4784) (released 2024-01-10) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue fixed in QPR ProcessAnalyzer 2024.2: In Big data chart, some measures, dimensions and columns have the filtering option missing. The issue concerns for example Duration between events, Path starting/until between specific events, and Cases where event occurs before other selections. Workaround is to set the filter in the chart json settings: the filter can be configured to another expression and copied to the correct expression.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
QPR ProcessAnalyzer Server and QPR ScriptLauncher are now using .Net 8 (previous was .Net 6). When updating to this release, install the .Net 8 Runtime ([[Updating_QPR_ProcessAnalyzer_Server|see more]]). The .Net 6 doesn't need to be uninstalled immediately because .Net 6 and .Net 8 work side-by-side, but due to security reasons, the unused .Net 6 should eventually be uninstalled.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In this release, all filters that don't contain any filter rules, are removed. These are legacy filters which have not been visible in the UI.<br />
</div><br />
<br />
'''Features:'''<br />
* B-08019: New component [[Design_Diagram|Design Diagram]] for showing user-created diagrams in dashboards where to visualize process mining metrics.<br />
* B-08087: Generic [[Dropdown_List_Selector|dropdown list selector]] works with Snowflake models allowing to add selection lists for any values.<br />
* B-08163: Linked settings support for binding to [[Chart_Linked_Settings#Binding_to_case_attribute_filters_with_attribute_name_and_attribute_values|case attribute filter values without defining case attribute name]].<br />
* B-08170: Snowflake model filters can be [[Filtering_in_QPR_ProcessAnalyzer#Filter_actions|saved as new models]] which can be used to create snapshots of part of models.<br />
* B-08093: Multiple dashboards can be exported to same file, and model can be set for imported dashboards.<br />
* B-08161: Added [[Datatable_in_Expression_Language#Modify|Modify]] function to change datatable properties and improved [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#CreateDatatable|CreateDatatable]] function for creating datatables.<br />
* B-08122: Added new system report to list dashboards.<br />
* B-08173: Removed legacy filters that didn't have any filter rules.<br />
* B-07961: In OperationLog, changed parameters to json format and added request id.<br />
* B-08069: Added DashboardId property to [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog]] in expression language.<br />
* B-08139: Added [[Datatable_in_Expression_Language#UpdateRows|UpdateRows]] function to update existing rows in datatables with similar logic than SQL update.<br />
* B-08115: Added [[Datatable_in_Expression_Language#DeleteRows|DeleteRows]] function to delete rows in datatables with similar logic than SQL delete.<br />
* B-08149: QPR ProcessAnalyzer has been updated to .Net 8.<br />
* B-08054: Changed Scripts property in generic context to return all scripts, instead of legacy system level scripts.<br />
* B-08138: Changed Synchronize function to remove all columns when no Snowflake table exists.<br />
* B-07689: For datatables, [[Datatable_in_Expression_Language#ForeignKeys|foreign keys]] to other datatables can be defined using expression language.<br />
* B-08176: Translation updates for release 2024.1.<br />
* B-08175: Workspace should show timestamps in user's local time.<br />
<br />
'''Fixed issues:'''<br />
* D-13913: Datatable properties dialog incorrectly showed linked models from other projects.<br />
* D-13916: Chart filter could not be defined for some expressions in Big data chart.<br />
* D-13933: Navigation menu selected item wasn't highlighted when used Snowflake models.<br />
* D-13906: In Conformance Analysis, deviating flows were not translated.<br />
* D-13907: Improved translation related to datatable properties dialog "Used by models" field.<br />
* D-13904: There was an unclear error message in Snowflake, as exception code 1 was returned without AttributeName and ModelName properties when non-existing attribute was in filter.<br />
* D-13911: Fixed small glitches in the opening and closing of drop-down lists.<br />
* D-13918: Datatable could be configured incorrectly to use table for other datatable.<br />
* D-13932: Duplicating datatable with custom table in datasource losed all data.<br />
* D-11002: Removed legacy in-memory prediction preset.<br />
* D-13912: Added check that array cannot be stored to dashboard Content property.<br />
* D-13936: Query designer default query didn't work with Snowflake models.<br />
* D-13938: There was an incorrect logging with some operations related to ScriptLauncher.<br />
* D-13923: Snowflake expressions didn't work with Where function in root referring to case attribute.<br />
* D-13939: ApplyFilter function gave null reference error for non-existing attribute name.<br />
* D-13931: There were issues with AllowExternalDatasources and EnableFullFunctionality settings.<br />
<br />
== QPR ProcessAnalyzer 2023.7 (build 4326) (released 2023-11-28) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Limitation for the maximum amount of data (B-07636) causes a behavior change in in-memory charts that have the Maximum rows settings empty and have the sorting defined. In certain cases, the order in which measures are evaluated changes (due to an internal performance optimization). If there are custom expressions that define variables, the variables may not be available in other measures anymore. As a resolution, either redefine the variables in those measure expressions or add those measures secondarily to the sorting.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Default query timeout of 30 minutes has been added for --#ImportOdbcQuery, --#ImportSqlQuery and --#ImportOleDbQuery commands. If a query run is taking longer than the timeout, the query is stopped. The timeout can be adjusted using the '''QueryExecutionTimeout''' parameter. Previously, there has been no timeout, so queries that take more than 30 minutes require configuring a longer timeout.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Incorrectly configured [[Chart_Linked_Settings|linked settings]] in charts (available in the ''Advanced'' tab) give now an error message, if they are referring to non-existing measures, dimensions or columns. Previously, incorrect linked settings were ignored. To fix the error message, remove the incorrect linked settings.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07511: Datatables have a [[Datatable_Properties_Dialog|dialog]] to view datatable properties, write description, set the Snowflake source table, add/modify/delete columns, and set the datatable key.<br />
* B-08150: Added setting [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|Apply chart filters first]] to determine whether chart filter rules or dashboard filter rules are applied first when chart queries are filtered.<br />
* B-08091: When filtering charts in Snowflake, case attribute filter is created instead of case id filter.<br />
* B-08091: [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|New setting]] to define whether cases or events are filtered by default.<br />
* B-08091: New preset "Looping paths" to detect whether there are repeating patterns of events.<br />
* B-08091: Duration between events calculation ignores negative durations in Snowflake.<br />
* B-08091: Chart loading animation has been renewed.<br />
* B-07636: To prevent dashboards from jamming when querying too much data, added [[QPR_ProcessAnalyzer_Chart#Available_Visualizations|limitations]] to the amount of data that charts can visualize. Note that the limitation concerns the aggregated data that is visualized, not the source event log data.<br />
* B-08017: [[Dashboard_in_Expression_Language|Dashboards API]] has been added to expression language, allowing to create, modify and delete dashboards in scripts.<br />
* B-08056: Following properties have been added to [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#User.2FGroup|user objects]] in expression language: IsLocked, LastLockedDate, LastLoginDate.<br />
* B-08053: [[Navigation_Menu#System_Reports|User rights report]] has been refactored to use [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property in the expression language. The change also simplifies the report as now it only shows the direct role assignments that are visible in the [[Manage_Users_and_Groups|User Management]].<br />
* B-08151: For Snowflake expressions support for following [[SQL_Expressions#Window_functions|windowing functions]]: sum, average, median, min, and max.<br />
* B-08050: When a model is created, the default filter is not created anymore (this is a refactoring that doesn't have any impact on user interface).<br />
* B-08123: Translation updates for 2023.7.<br />
* B-08092: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13876: In CreateSnowflakeConnection function, ProjectId parameter is optional when OdbcConnectionStringKey is not specified.<br />
* D-13898: Snowflake: Exclude case attribute filter didn't work when there was null values and was selecting at least two values.<br />
* D-13890: Fixed XES file import to work.<br />
* D-13894: Business calendar based duration calculation was incorrect in some durations that spanned to several weeks (for Snowflake and in-memory models).<br />
* D-13899: Using broken OdbcConnectionString in a datatable prevented the datatable from being deleted.<br />
* D-13883: Script run stucked after running a script with error that uses client-side ODBC import.<br />
* D-13879: SqlExpressionValue filter when excluding events didn't work with filter rule root expression only.<br />
* D-13896: Adding or removing columns to datatable didn't change the LastModifiedDate.<br />
* D-13882: User details weren't written to operation log when creating or modifying users.<br />
* D-13771: User rights system report didn't give error when changing columns.<br />
* D-13893: Some event filtering caused null pointer error when primary key had been defined.<br />
* D-13873: Fixed pivot table visual issues after component update.<br />
* D-13900: When adding, renaming or removing columns for Snowflake table fails, operation is now rolled back without any changes.<br />
* D-13866: Querying GET api/uielements was quite slow right after server start.<br />
* D-13864: Combinations of translatable and hardcoded strings didn't get translated in UI.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.6 (build 3933) (released 2023-10-24) ==<br />
<br />
'''Features:'''<br />
* B-08055: Error message for locked account has been replaced with generic error message, so that username enumeration is not possible.<br />
<br />
'''Fixed issues:'''<br />
* D-13884: Attributes dialog crashed with some older model configurations.<br />
* D-13843: In charts, selected case and event attributes switched away when attribute data type was ShortString.<br />
* D-13877: Some Snowflake expressions gave error "exceeds maximum length limit of 255 characters" when selecting lot of items.<br />
* D-13878: Snowflake expression filters for case attribute values didn't accept other than string type of case attributes.<br />
* D-13871: Some statistical calculations with percentages didn't work with Last Row Aggregates Over-limit Rows setting.<br />
* D-13875: Using some case level filters in a model without cases datatable didn't work.<br />
* D-13861: Dashboard opens are now logged to the Task log (i.e., calling GET /api/dashboards/{dashboardid}).<br />
* D-13870: Workspace projects hierarchy focused project showed light grey background making the project name not readable.<br />
* D-13867: When starting datatable refresh and going to other tab, went back to Datatables tab when query completed.<br />
* D-13853: If chart Custom Layout settings had extra series defined, chart may have crashed.<br />
* D-13869: Export as CSV button didn't work in the datatable contents dialog when dialog was still loading.<br />
* D-13872: Main progress spinner had unnecessary small scrollbar on top right.<br />
* D-13863: In the REST API method GET /api/users, password field (that has always been null) has been removed.<br />
<br />
== QPR ProcessAnalyzer 2023.6 (build 3847) (released 2023-10-17) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is removed in this release. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
'''Features:'''<br />
* B-07992: Added 10 new presets including Queue analysis, Four eyes principle, Self-looping events, and Path until selected event. There are also presets for Individual Cases Flow and Range of event type occurrences which use Gantt chart.<br />
* B-08011: Added following date related operations for Snowflake: Day of year, Day of month, Day of week, Week of year, Half-year only, Quarter only, Month only, Hours only, Minutes only, Seconds only, and Milliseconds only. These are available when calculating with date type of data.<br />
* B-08016: [[QPR_ProcessAnalyzer_Table#Table_actions|Table actions to set variables]] can also be opened to a new browser tab. Also improved user interface for table actions.<br />
* B-08018: For Snowflake expressions, added Flows aggregations FromEventType and ToEventType to get starting/ending event type, and FlowOccurrences aggregations FromEvent and ToEvent to get starting/ending event.<br />
* B-08001: Added [[Generic_Functions_in_QPR_ProcessAnalyzer#CallStoredProcedure|CallStoredProcedure]] function to call Snowflake stored procedures. This allows to start ETL transformation in Snowflake orchestrated by QPR ProcessAnalyzer script.<br />
* B-08013: Added [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property to expression language to replace the legacy UserPermissions analysis (11).<br />
* B-07976: Snowflake [[Filtering_in_QPR_ProcessAnalyzer_Queries#Expression|expression based filter rules]] support additional expression columns allowing more Big data chart expressions to be filterable.<br />
* B-08015: Big data chart doesn't anymore support calculation in SQL Server (using local datatables).<br />
* B-06270: Improved error messages and made them translatable by taking into use exception codes provided by server.<br />
* B-08021: Added possibility to store [[Diagram_in_Expression_Language|designed diagrams]] for models and expression language API for reading and modifying diagrams.<br />
* B-08037: Dropped following unused tables database: PA_IDEA, PA_IDEA_VOTE, PA_REPORT, PA_REPORT_SETTING, PA_SESSION_SERVICE, PA_VIEW_FILTER_RULE, PA_VIEW_FILTER_RULE_PARAMETER.<br />
* B-08052: Language translations have been updated to 2023.6.<br />
* B-08051: Frontend side components have been updated.<br />
* B-08034: Backend side components have been updated.<br />
<br />
'''Fixed issues:'''<br />
* D-13830: Object counts indicator in header showed incorrect counts when there was disabled filter rules in Snowflake models.<br />
* D-13833: In-memory charts didn't work with boolean type of dimensions when filtering with the false value.<br />
* D-13858: Target value measures didn't update chart when controlled using an on-screen setting.<br />
* D-13827: Calculated attributes data type was incorrectly set as Any by the Attributes dialog.<br />
* D-13849: Multiselect list search didn't allow spaces.<br />
* D-13829: Multiselect dropdown lists height jumped couple of pixels when selecting values.<br />
* D-13835: Deselecting a selected data point didn't remove chart filter rule.<br />
* D-13702: Improved Snowflake query performance in situations when there are lot of filter rules (by decreasing number of CTE's).<br />
* D-13819: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13820: Fixed incorrect manifest.json file to avoid "not found" errors when fetching web site icon.<br />
* D-13865: Break, continue, and return statements didn't work properly when called from inside a catch block.<br />
* D-13795: There was a Python error in clustering analysis with Snowflake model.<br />
* D-13823: Some tooltips in Workspace project hierarchy didn't work and caused a JavaScript error.<br />
* D-13824: BPMN editor align context menu layout looked strange.<br />
* D-13813: QPR logo button in the top left was misaligned in Firefox.<br />
* D-13797: Snowflake query may have given following error when using sampling: ambiguous column name '_EventType_NotNull_1'.<br />
* D-13774: TakeSample function with certain columns caused SQL compilation error: ambiguous column name 'Case Name'.<br />
* D-13782: Snowflake: Aggregating from variations didn't work when using sampling.<br />
* D-13836: Some tooltips had a strange two-colored background.<br />
* D-13834: Removed Model statistics column from clustering and root causes analysis.<br />
* D-13860: Removed filter button from the custom expressions in Task log analyzed objects.<br />
* D-13838: Removed Split data by filtering column from clustering analysis.<br />
* D-13832: Script and model status updates incorrectly sent next update when previous was still pending.<br />
* D-13839: Charts reset zoom button font size was too small.<br />
* D-13817: Importing data to Snowflake datatable with Append=0 doesn't now drop the underlying Snowflake table.<br />
* D-13825: Some models could not have been deleted from recycle bin.<br />
* D-13852: Recycle bin Projects and Models tab didn't show correct content when Recycle bin only contained either models or projects.<br />
* D-13841: In-memory chart Data type selection type has been corrected to string.<br />
* D-13842: Second time and Third time selections has been hidden in in-memory chart measures.<br />
* D-13850: In Chrome, there were console errors related in incorrect text field autocomplete type and text field without form.<br />
* D-13847: Improved browser side performance by removing unnecessary operations.<br />
* D-13859: Chart without dimensions showed an unnecessary Remove dimension button.<br />
* D-12598: When script is stopped in server, ScriptLauncher could still incorrectly continue to import data.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.5 (build 3334) (released 2023-09-07) ==<br />
<br />
'''Fixed issues:'''<br />
* D-13826: Measures or dimensions with case or event attribute and value selections incorrectly removed calculated attributes when dashboard was opened or chart settings were changed.<br />
* D-13821: Font size of some Highcharts tooltips was too small. Issue appeared when there were tooltips mappings in measures or dimensions.<br />
* D-13810: Simplified help links: now all Help buttons go to the QPR ProcessAnalyzer wiki main page.<br />
* D-13822: Snowflake clustering analysis showed empty strings and nulls as case attribute values in an unclear way as just nothing.<br />
<br />
== QPR ProcessAnalyzer 2023.5 (build 3304) (released 2023-09-05) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In Big Data Chart, the '''Case conformance''' measure and dimension has changed in a way that now it provides boolean values (true/false) instead of integer values (1/0). If [[Measure,_Dimension_and_Column_Settings#Other_settings|colorMappings]] are used for this measure or dimension to set specific colors to visualize conformant and nonconformant cases, the mapped values need to be changed as follows: '''1''' -> '''true''' and '''0''' -> '''false'''. Without the change, the mapped colors are not effective.<br />
<br />
Exmaple: Old configuration:<br />
<pre><br />
"colorMappings": {<br />
"1": "#36d475ff",<br />
"0": "#f5403bff"<br />
}<br />
</pre><br />
New configuration:<br />
<pre><br />
"colorMappings": {<br />
"true": "#36d475ff",<br />
"false": "#f5403bff"<br />
}<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is deprecated. Big data chart has allowed to process data both in Snowflake and SQL Server. Now the support for SQL Server is deprecated and the Big data chart will only support calculation in Snowflake. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). The OperationLog analysis is replaced by the [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog function]] and the Infcluencers analysis is replaced by the [[FindRootCauses_Function|FindRootCauses function]].<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [12, 14, 15, 16, 29];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
By default, Snowflake ODBC driver generates quite much logging to files which might unnecessarily fill up the disk space. It's recommended to set the LogLevel parameter to value 0. The path where the logs are created can be seen in Windows registry (key LogPath). More information about configuring Snowflake ODBC parameters: https://docs.snowflake.com/en/developer-guide/odbc/odbc-parameters.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07971: Machine learning based [[Clustering_Analysis|Clustering analysis]] can be run in Snowflake.<br />
* B-07989: In dashboard designer the stacking order of charts can be changed with buttons [[QPR_ProcessAnalyzer_Dashboard_Designer#Viewing_and_Editing_Dashboards|Bring to front, Send to back, Bring forward and Send backward]].<br />
* B-07977: For [[Sankey_Chart|sankey diagram]], added Start level and End level mappings to define custom start and end level for the sankey flows. Implemented also color mappings to define specific colors for specific values.<br />
* B-08010: To improve performance, charts are loaded and updated only when they are visible in the dashboard.<br />
* B-07975: Added following [[SQL_Expressions#Date_functions|date related functions]] to Snowflake: DayOfYear, DayOfWeek, WeekOfYear, Quarter.<br />
* B-07908: When [[QPR_ProcessAnalyzer_Project_Workspace#Duplicating_Model|model is duplicated]], also filters in the model are also duplicated.<br />
* B-07904: Filters and models API for expression language has been completed.<br />
* B-07991: In [[Filter_Selectors|case and event type filter selectors]], threshold whether the dropdown list or search dialog is shown can be defined using the ''Maximum Rows'' setting. Also the search dialog filters search results by other filter rules in the dashboard.<br />
* B-07999: Filters report has been changed to use the [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|expression language API for filters]].<br />
* B-07540: Added [[QPR_ProcessAnalyzer_Expressions#Throwing_objects|throw statement]] to expression language.<br />
* B-07813: UI components are updated. There are small visual improvements, such as in flowchart flows are routed a bit differently and in charts the hidden series is shown as strike-through in the legend.<br />
* B-07963: Following legacy analysis types have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29) (see more information in the note above).<br />
<br />
'''Fixed issues:'''<br />
* D-13777: Filters could not be created in charts when "Update Filter During Selection" setting was disabled.<br />
* D-13767: Automation per Event Types preset in in-memory incorrectly showed only one event type.<br />
* D-13756: Changing background color in KPI card didn't have any effect.<br />
* D-13812: "Exclude events" was incorrectly translated to "Exclure les cas" in French.<br />
* D-13815: Dashboard designer background grid was not visible in entire area in edit mode. Improved also the grid to match to snapping in move and resize.<br />
* D-13674: Business calendar dialog layout was incorrect when a model with a long name was selected to copy holidays.<br />
* D-13811: Table actions link to a new window didn't go to dashboard if there were other parameters in the link.<br />
* D-13601: Fixed issue where some presets may have given error when attribute value selection and the automatically selected attribute conflicted by the data type.<br />
* D-13753: While Snowflake model was selected, in Filters and User Rights reports the Columns list could not be opened.<br />
* D-13720: Now table column filter and sorting are preserved when resizing or zooming page.<br />
* D-13785: In tables increased number of rows to 20000 that are inspected to get available items shown in Excel-style column filter.<br />
* D-13759: Some statistical calculations had bad performance with large number of rows.<br />
* D-13787: Conformance statistics component didn't have scrollbars when text didn't fit to the visible area.<br />
* D-13788: In-memory "Nonconformance reason" selection caused error when two of them was selected in the same chart.<br />
* D-13783: When Analyzed objects was Generic analysis, column selection incorrectly caused "Analysis has not been selected" error.<br />
* D-13776: When measure name contained quotation mark, notification preview didn't work.<br />
* D-13747: Filtering with integer type of case id with case attribute value filter caused error in Snowflake.<br />
* D-13791: In Firefox, model selection in chart settings didn't show models in the first open.<br />
* D-11984: Recycle bin buttons didn't fit to the screen when screen width was small.<br />
* D-13780: Using CaseId case attribute in clustering analysis did not work with Snowflake 106 cases standard model.<br />
* D-13781: Clustering analysis produced Python error with a certain simple Snowflake model.<br />
* D-13730: Snowflake: Case attribute filtering didn't work when there are cases without row in cases table.<br />
* D-13803: There was chart configuration validation error in browser console when measures were moved into dimensions in Big data chart.<br />
* D-13758: There was performance issue with the Recent tasks system preset.<br />
* D-13793: Snowflake clustering failed when cluster count is larger than case count.<br />
* D-13763: SQL expression based filter rule with Where function to filter events didn't filter anything in Snowflake.<br />
* D-13804: Added missing Millisecond function to Snowflake.<br />
* D-13772: Expression EventLog.Cases.Events caused error "Value cannot be null".<br />
* D-13755: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13739: When switching between System reports there was error: "Uncaught Error: 2nd dimension not found. at y.getExpressionConfiguration".<br />
* D-12109: Sometimes flowcharts showed message "Error in querying event type measures. Input string was not in a correct format".<br />
* D-12473: Cost Savings by Automation preset gave sometimes error "Unable to cast object of type 'System.Double' to type 'System.String'".<br />
* D-13750: Snowflake model didn't work with the Case Duration vs. Manual Activities preset.<br />
* D-13657: There was error converting data type nvarchar to bigint.<br />
* D-13796: Some Snowflake operations didn't work with zero rows and columns.<br />
* D-12494: Now when chart size changes, the table column filters and sorting are preserved.<br />
* D-13736: In Performance benchmarking dialog, the Export result button exported wrong benchmark performance analysis result.<br />
* D-13609: Improved conformance analysis related filter names.<br />
* D-13594: Recycle bin buttons were not visible when opening recycle bin in a narrow screen.<br />
* D-13226: Tooltips in the model properties dialog are now translated.<br />
* D-12569: Table incorrectly showed ellipsis for narrow boolean type of columns showing checkboxes.<br />
* D-13391: Emptying date or datetime picker value was not registered and it didn't trigger functionality.<br />
* D-12621: Value search dialog didn't work with values containing backslashes.<br />
* D-13796: Some Snowflake operation didn't work with zero rows/columns.<br />
<br />
== QPR ProcessAnalyzer 2023.4 (build 2628) (released 2023-06-14) ==<br />
<br />
'''Features:'''<br />
* B-07767: Added [[Gantt_Chart|Gantt chart]] to visualize timeline of cases and events divided into swimlanes.<br />
* B-06383: Added [[Sankey_Chart|Sankey chart]] to visualize flow from one set of values to another.<br />
* B-07941: Implemented many more presets running in Snowflake models for compliance and operational excellence use cases. There are also presets for the path analysis and process bottlenecks identification.<br />
* B-07864: Snowflake conformance analysis shows now [[Conformance_Analysis#Top_Deviations_(in-memory)_/_Deviating_Flows_(Snowflake)|reasons for conformance deviations]], such as which event occurrences deviated from the design model.<br />
* B-07909: Snowflake conformance analysis visualizes [[Conformance_Analysis#Undesired_Events_(Snowflake)|undesired event types]] in table and flowchart.<br />
* B-07823: Flowchart Bottlenecks preset has been changed to show bottlenecks for event types. Also renewed the [[QPR_ProcessAnalyzer_Logs#Task_Log|Tasks reports]] to use expression language based interface.<br />
* B-07891: User interface has been [[Languages_and_Localization|translated into Portuguese]].<br />
* B-07873: Improved [[QPR_ProcessAnalyzer_Pivot_Table|pivot table]] visual layout to highlight totals and aggregated rows. Also the row titles are now visible in the top left.<br />
* B-07905: Added [[SQL_Expressions#Rank_functions|Rank related functions]] to Snowflake for writing more versatile custom KPI's, e.g., FirstValue, LastValue, NthValue, Lead and Lag.<br />
* B-07912: Added more SQL expression [[SQL_Expressions#Array_functions|array functions ArrayToString and ArrayOverlap]] to Snowflake.<br />
* B-06449: Added SQL expression functions ToTimestamp and TryToTimestamp for parsing timestamps from strings using provided format.<br />
* B-07959: Added new functions Base64Encode and Base64Decode to help using basic HTTP authentication when calling web services.<br />
* B-07206: SQL expressions support data [[SqlDataFrame_in_Expression_Language#WithClusterColumn|clustering]] which is an unsupervised machine learning algorithm to group data based on similarities.<br />
* B-07848: Data can be extracted from SAP using the encrypted [[Importing_Data_from_SAP#SNC_encrypted_connection|SNC connection]].<br />
* B-07903: Added expression language API to create and modify filters and models.<br />
* B-03103: [[QPR_ProcessAnalyzer_Logs#Task_Log|Task log]] (operation log) can be accessed in expression language.<br />
* B-07872: List aggregation with Distinct=true orders now items by their value.<br />
* B-07940: Removed "Count" aggregation from textual values in Big data chart (you can use the Case count, Event count, etc. selection instead).<br />
* B-07757: Backend support for datatables linking to user-definable Snowflake database, schema and table.<br />
* B-07825: Improved error message when trying to use non-existing attributes in Snowflake queries.<br />
* B-03101: To expression language, added try-catch-finally statement to handle thrown exceptions.<br />
* B-07861: Removed available and total virtual memory information from User settings dialog.<br />
* B-07902: Optimized sequences of joins in Snowflake queries to improve performance.<br />
* B-07837: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13709: If image width-to-height ratio was lower than container's ratio, image was incorrectly stretched to fit the container.<br />
* D-13660: Disabling filter rules didn't work in Snowflake models.<br />
* D-13526: Passing dataframes from SQL scripts to expression scripts didn't work.<br />
* D-13661: Snowflake conformance analysis crashed when there was no access to conformance related Snowflake UDF's.<br />
* D-13693: Resolved major Snowflake conformance analysis performance issues in the BPMN model handling.<br />
* D-13716: Snowflake root causes analysis incorrectly bypassed Snowflake cache.<br />
* D-13707: In SQL Scripting, the datatable analysis (number 18) didn't always copy the data table contents to the target table correctly.<br />
* D-13653: Big data flowchart Root causes preset showed incorrect legend.<br />
* D-13626: Flowchart froze when converting into big data flowchart and vice versa by modifying chart json settings.<br />
* D-13656: Root causes for attribute gave error "Failed to compare two elements in the array" in some situations.<br />
* D-11563: Pivot table had a minimum height of 300px, which caused bottom part of it to be out of view.<br />
* D-13704: In CSV file import, parsing now allows spaces between column separator and text quotation mark.<br />
* D-13598: Chart gave unclear error message when events datatable was not defined.<br />
* D-13655: Improved error messages for BPMN editor and conformance statistics.<br />
* D-13528: Error message for certain erroneous SQL expressions was unclear.<br />
* D-13677: "Flow occurrences with specific case attribute value" selection didn't work for in-memory chart.<br />
* D-13663: Pivot table border line was slightly broken in the header area.<br />
* D-13608: There was incorrect alignment of items in the table paging controls.<br />
* D-13703: Importing CSV file with some special characters to Snowflake failed (due to incorrect escaping in Snowflake staging files).<br />
* D-13708: Duplicating datatable using user defined table, removed data the source table.<br />
* D-13717: Dependency wheel crashed when there were zero weights and showing data labels.<br />
* D-13348: There was an unclear error message when Snowflake query had a certain incorrect expression.<br />
* D-13732: Pivot table Excel export contained headers formatted incorrectly.<br />
* D-13729: There was a JavaScript error when limited user tried to access business calendar.<br />
* D-13662: Percentile function didn't always work with timespan types.<br />
* D-13646: Using incorrectly configured model without cases datatable caused null reference error.<br />
* D-13629: When tried to use chart with a non-existing model, there is now a proper translated error message.<br />
<br />
== QPR ProcessAnalyzer 2023.3 (build 1990) (released 2023-05-03) ==<br />
<br />
'''Features:'''<br />
* B-07818: [[Conformance_Analysis|Conformance analysis]] is supported in Snowflake with following dashboard components: Big data chart, BPMN editor, Conformance statistics, and Design model selector.<br />
* B-07833: [[Root_Causes#Root_causes_in_flowchart|Root causes analysis for flowchart]] is available for Snowflake showing how the event and flow occurrences explain selected phenomena.<br />
* B-07786: Big data chart has more [[Big_Data_Chart#Measure_aggregations|measure aggregations]], such as median, percentile, standard deviation and variance. Also for textual items, unique values can be listed.<br />
* B-07795: [[QPR_ProcessAnalyzer_Table#Conditional_formatting|Conditional formatting]] supports also columns with non-numerical contents.<br />
* B-07830: [[Big_Data_Chart#Measure_aggregations|None and Any aggregations]] for Snowflake and user-friendly formatting for conformance violations.<br />
* B-06527: Error messages in [[Importing_Data_to_Datatable_from_CSV_File|CSV file import]] show also the column number to help working with CSV files with lot of columns.<br />
* B-07747: In-memory conformance checking accepts design models with multiple tasks having same name (same is followed by the Snowflake implementation).<br />
* B-07659: In-memory flowchart preset Case Conformance to visualize conformance checking violations.<br />
* B-07571: Added function IsConformant to backend to check whether cases are conformant.<br />
* B-07863: Added function ConformanceViolationsFlows to backend to return nonconformance reasons for violating cases.<br />
* B-07844: Support for "array" aggregation to return aggregated items as array.<br />
* B-07856: Support for creating and accessing arrays and objects in SQL expressions.<br />
* B-07860: Array handling functions and Tasks property for DesignModel entity.<br />
* B-07847: Added throttling for QPR ScriptLauncher client-side imports to limit memory usage.<br />
* B-07811: Snowflake query optimization to omit columns that are not used by the query.<br />
<br />
'''Fixed issues:'''<br />
* D-13632: Going from variations to event types led to very poor performance with certain models.<br />
* D-13628: Statistical calculations were incorrectly not applied in chart CSV export.<br />
* D-13575: SQL script may have given error "Operand type clash: nvarchar(max) was incompatible with sql_variant".<br />
* D-13597: UI supports now datatable column type "ShortString" (previously datatable contents preview and CSV import didn't work).<br />
* D-13536: Using business calendar sometimes gave error "System.InvalidOperationException: Collection was modified".<br />
* D-13477: Chart types without y-axis mapping caused an error when series mapping was used.<br />
* D-13453: _model variable was not available for Snowflake expression filter rules.<br />
* D-13527: Checkbox height didn't increase when long label needed to span to multiple lines.<br />
* D-13363: Snowflake query with EvaluateAfterAggregations and IsHidden failed when dimensioning by case id column.<br />
* D-13383: Snowflake query gave error "Invalid column name 'FromCase Name'".<br />
* D-13523: Request id was incorrectly shown as zeros in error messages.<br />
* D-13541: In CSV import, error message for maximum number of columns exceeded is improved (maximum is 300 column for SQL Server).<br />
* D-13583: Objects count in header didn't work for empty Snowflake model.<br />
* D-13553: Larger pacm files can now be imported, as there isn't error "Request body too large. The max request body size is 30000000 bytes".<br />
* D-13306: Stack overflow error was given when using SqlDataFrames.<br />
* D-13487: When Flows root and there was filter in Values expression, some flows were lost.<br />
* D-13540: SqlDataFrame query with 300 columns failed to error "WithExpressionColumn: No name given for the new column".<br />
* D-13429: Ordering in List aggregation couldn't find columns in dataframe query.<br />
* D-13406: Dataframe query with root FlowOccurrences and get value from cases caused error.<br />
* D-13538: There was incorrect handling of escaping characters in column names used in dimensions.<br />
* D-13633: Fixed ordering in List aggregation with null and empty values.<br />
* D-13636: Query that dimensions by numeric case attribute with AggregateOthers true, caused error.<br />
* D-13589: Creating Snowflake datatable did not connect to Snowflake.<br />
* D-13623: Value expressions without aggregation didn't work with AggregateOthers setting.<br />
* D-13554: In in-memory chart, percentile function might have return both Int64 and Double type of objects which cannot be sorted.<br />
* D-13481: Improved error message when trying to use deleted model.<br />
* D-13621: Dynamic value search dialog had incorrect font in lists.<br />
* D-13610: Some invalid BPMN files crashed BPMN editor.<br />
* D-13614: Checkbox label texts overflowed to right.<br />
* D-13520: Removed excessive parameters from the Query Designer for generic context queries.<br />
* D-12998: QPR icon was incorrectly positioned in header in Safari.<br />
* D-13480: Import to duration data type is removed from Snowflake datatables, and for local datatables duration type maximum size is checked.<br />
* D-13517: In Highcharts-based visualizationsm conditional formatting didn't work for other than the first y-axis mapping.<br />
* D-13529: In some presets containing several on-screen settings, when chart showed in error message, on-screen settings showed invalid selection.<br />
* D-13530: Opening dropdown list caused JavaScript error when the list contents should be empty after it previously contained items.<br />
* D-13486: Removed unreachable error message in CSV import.<br />
* D-13524: Fixed in-memory chart flow occurrences root measures "Event attribute (text)" and "Event attribute (number)" that caused error.<br />
<br />
== QPR ProcessAnalyzer 2023.2 (build 1478) (released 2023-03-22) ==<br />
<br />
'''Features:'''<br />
* B-07755: [[Business_Calendar|Business calendar]] for duration calculation is available for Snowflake models.<br />
* B-07719: In Snowflake dashboards, [[Big_Data_Chart#Using_measure_variables|measures can be assigned to variables]] and use the variables in other measures to create combined measures.<br />
* B-07746: Changed in-memory conformance checking to not show invalid flow violations where starting or ending event type is invalid.<br />
* B-07743: [[PA_Configuration_database_table#General_Settings|Default datasource]] can be configured for datatables created by scripts, allowing to set Snowflake as default.<br />
* B-07740: System memory indicator moved from the header to User settings Version information dialog.<br />
* B-07776: New SQL expressions functions Unicode, Char and Regexp, as a basis for future rule-based process mining.<br />
* B-07741: Backend support for aggregation operations Median, Percentile, Stdev, Stdevp, Var and Varp to Snowflake.<br />
* B-07742: Backend support for aggregation operation to list unique items in Snowflake.<br />
* B-07770: Optimized Snowflake SQL generation by combining consecutive WithColumn function calls into one select.<br />
<br />
'''Fixed issues:'''<br />
* D-13491: QPR ProcessAnalyzer server crashed now and then when sorting was in progress and the query was cancelled.<br />
* D-13380: Dimensioning integers in in-memory core calculation didn't work correctly as 0 and -1 were put to same bucket.<br />
* D-13385: In Workspace Bin, Delete Forever and Restore from Bin buttons were misaligned.<br />
* D-13332: Conformance checking didn't show in violations when there were multiple undesired events in same case.<br />
* D-13405: Images take now always all available space in image component area.<br />
* D-13417: KPI card without title was slightly misaligned vertically.<br />
* D-13438: Clicking selected event type or flow in flowchart didn't cancel the filter selection.<br />
* D-13350: Task log and Script log default filter end date is now empty by default.<br />
* D-13381: Disabled browser auto-complete from flowchart variation stepper and Workspace create/rename object dialog.<br />
* D-13347: Improved performance for in-memory business calendar calculation.<br />
* D-13335: In in-memory chart, filtering didn't work in "Flow occurrences" root "Flow occurrences with specific event attribute value" dimension.<br />
* D-13367: Percentage value wasn't displayed properly with German or Spanish language when event types were shown in object counts indicator.<br />
* D-13451: Exported filter file is now named based on selected filter name.<br />
* D-13378: In Big data chart, prevented error "Unable to aggregate from level RootCauses to level Custom".<br />
* D-13293: DataFrame query with root Flows and IncludeEvents and ExcludeEvents filter rules failed.<br />
* D-13370: Fixed issue where on-screen settings that didn't have any selectable items, showed a strange selection.<br />
* D-13392: Clustering analysis was incorrectly shown when originally in-memory chart was converted into big data chart by changing chart json settings.<br />
* D-12784: Some Snowflake queries incorrectly bypassed Snowflake caching because they used unique object names.<br />
* D-13456: Improved error messages for incorrectly configured on-screen settings.<br />
* D-13445: Conformance violations related translated terms have been fine-tuned for better translations into different languages.<br />
* D-13421: Improved error messages when trying to use model having some column mappings missing.<br />
* D-13485: Snowflake business calendar gave error when calendar contained Sunday.<br />
* D-13218: Windows event viewer incorrectly contained log entries that are not errors.<br />
* D-12634: Multiline text boxes width is set to non-changeable.<br />
* D-13034: Confirmation dialog to delete items permanently has been updated.<br />
* D-13288: In dialogs, the Create button didn't show the disabled state correctly.<br />
* D-13427: When dropdown lists didn't have any selectable items, the "N/A" text appeared and the list incorrectly took more space vertically.<br />
* D-13483: In Workspace, the new items menu was too narrow for Spanish texts.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.1 (build 1449) (released 2023-02-24) ==<br />
<br />
'''Features:'''<br />
* B-07690: System setting [[PA_Configuration_database_table#General_Settings|DatabaseId]] can be defined by administrator to get more simple table names in Snowflake.<br />
* B-07737: In flowchart Bottlenecks preset, originally used flow colors has been recovered.<br />
* B-07748: For Analyzed objects "Conformance checking findings" in charts, terminology has been revised and issue with the case count calculation fixed.<br />
* B-07663: In [[Chart_On-screen_Settings|on-screen settings]], when case/event attribute is selected, related attribute values list are reset.<br />
* B-07570: Backend support for [[Business_Calendar|business calendars]] in Snowflake.<br />
* B-07660: Backend support for conformance checking to show also the last event index and event type in NotCompleted reason.<br />
* B-07610: Memory counter related technical properties have been removed from expression language.<br />
<br />
'''Fixed issues:'''<br />
* D-13349: Opening dashboard containing Root causes preset with default settings jammed the system by generating lot of calculations (for more information, see previous release notes).<br />
* D-13277: Stacked charts with date type of data as series did incorrectly show gaps in columns/bars.<br />
* D-13270: Flowchart conditional formatting didn't work with duration multi-unit format.<br />
* D-13358: Calculation results caching works also across different user sessions.<br />
* D-13250: Dashboard with two charts connected with linked settings using variables ended up to to a never ending loop.<br />
* D-13230: SAP import did not automatically create columns to use the correct column types.<br />
* D-12857: Deeply recursive functions caused a crash without any trace.<br />
* D-12994: In Workspace, some buttons were not clickable due to breadcrumb covering them.<br />
* D-13249: In Workspace, there was incorrect error message for duplicate datatable names when there were items with only letter capitalization was different.<br />
* D-13232: In-memory chart Top variations preset is now sorted secondarily by average duration descending.<br />
* D-13300: Setting DashboardFilter variable to empty value didn't have any effect in dashboard but old value was incorrectly used.<br />
* D-12834: Limited the maximum number of dimensions to 20, to avoid too demanding queries for SQL Server.<br />
* D-12917: Changed visual indication of missing items in dropdown lists (it's no longer showing "***").<br />
* D-13111: In Root causes preset, there is now error message when trying to use weighting related columns when weighting isn't in use.<br />
* D-13124: SQLDataFrame query containing filter rule EventTypes aggregating from cases failed.<br />
* D-13207: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed.<br />
* D-13292: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed (rev.2).<br />
* D-12991: Dropdown list texts had some translations missing.<br />
<br />
== QPR ProcessAnalyzer 2023.1 (build 1433) (released 2023-02-07) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release contains a potentially severe issue, where some dashboards completely jam the system by generating lot of calculations. The issue may appear in dashboards that have been created in earlier releases and containing the Root causes preset with default settings. The issue will be fixed by the next release. The issue can be worked around by exporting the affected dashboard, modifying the dashboard file manually and importing the dashboard back. The required modification is to remove line(s) containing <pre>"preset": "RootCauses"</pre> and the comma from the preceding line.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Cases (analysis number: 5), Events (6), and EventTypes (7). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). Note that the legacy analyses removal don't affect the dashboarding functionality.<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [5, 6, 7];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2023.1, the '''.NET Desktop Runtime''' is not needed anymore for QPR ProcessAnalyzer Server, so it can be uninstalled. Also for QPR ScriptLauncher, ''.NET Desktop Runtime'' is not needed, but instead install the '''.NET Runtime''' (which is more lightweight). ''.NET Desktop Runtime'' contains the ''.NET Runtime'', so the actions are not mandatory when updating to QPR ProcessAnalyzer 2023.1.<br />
</div><br />
<br />
'''Features:'''<br />
* B-06997: Expression-based filter rules for Snowflake dashboards to allow versatile filtering and filtering from custom expressions.<br />
* B-07383: Improvements to linked settings to allow binding to variables, tags and filter rules [[Chart_Linked_Settings|(more information)]].<br />
* B-07508: Flowchart preset colors have been renewed to be more intuitive.<br />
* B-07184: Automation preset in flowchart has now options for selecting the Automation attribute and value.<br />
* B-07512: Changed datatable metadata can be refreshed from Snowflake, and all rows in the datatable can be deleted easily in Workspace [[QPR_ProcessAnalyzer_Project_Workspace#Datatables|(more information)]].<br />
* B-07440: Date when the release was made is now shown in User settings.<br />
* B-07595: WeekOfYear property for DateTime objects in expression language to get the week number of a year (between 1 and 53).<br />
* B-07623: In-memory expression language functions Random (to get random numbers) and Hash (to get hash value of string).<br />
* B-07612: Breadcrumb in Workspace has now a Home button to quickly navigate to the top level of the projects hierarchy.<br />
* B-07637: Language selector now shows the language options in local languages.<br />
* B-07228: Remove following deprecated analyses: Cases, Events, and EventTypes (see the release note above).<br />
* B-07538: Backend support: Snowflake root causes analysis can find event attribute related root causes.<br />
* B-07706: Backend support: Snowflake expression-based filter rules support for roots containing Where function.<br />
* B-07611: Removed following legacy filter rules: CaseAttributeTrend, EventAttributeTrend, EventTypeTrend, and Duration.<br />
* B-07598: Refactored client-side import for SQL scripting to use generic client-side task mechanism.<br />
* B-07716: ShortString columns are now properly detected in SQL Server queries.<br />
* B-07652: Now it's possible to pipe multiline expression strings to QPR ScriptLauncher.<br />
* B-07688: AddColumns function for Datatables to create multiple columns in one call.<br />
<br />
'''Fixed issues:'''<br />
* D-13092: Table conditional formatting didn't work when color code was fetched from other column.<br />
* D-13105: Some charts created in earlier release referring to non-existing presets names appeared as empty after software update.<br />
* D-13107: Flowcharts crashed and showed loading animation forever when setting color or flow thickness to non-numerical measure.<br />
* D-13104: In BPMN model editor, context menus to edit elements didn't appear.<br />
* D-12939: Script editor tabs Close buttons didn't work.<br />
* D-13154: "Search by case ID" didn't work in in-memory chart.<br />
* D-12933: CSV columns with only empty values were incorrectly auto-detected as integers.<br />
* D-12929: In-memory chart Root causes for case duration and Root causes for case attributes (weighted) had Custom expression missing.<br />
* D-12928: Pivot table headers were empty when there were two column levels and two values.<br />
* D-12924: Pivot table columns with Count and Distinct Count aggregations are now numeric and aligned right.<br />
* D-13033: Changing colors in chart settings Color palette caused "Item already exists" error and prevented changing colors.<br />
* D-12996: Tags referring to dashboard variables didn't work in Additional root expression.<br />
* D-12877: UI gave error in some situations: Uncaught TypeError: Cannot read properties of undefined (reading 'min').<br />
* D-13071: Prevented selecting two or more of the Y-axis, X-axis and series mappings at the same time for the same measure or dimension.<br />
* D-12895: Big data chart crashed when on-screen setting contained event type selector and there were no event type filter set.<br />
* D-13231: Tooltips for dashboard name, model selector and filter selector in header show now the content text instead of generic instruction.<br />
* D-13139: There was an error when tried to create filter for a custom expression where selected data type didn't match with the actual type of data.<br />
* D-12988: Chart presets selection in chart settings showed unnecessary tooltip.<br />
* D-12901: When set sampling over 1 million, Snowflake models gave error: parameter value out of range: size of fixed sample. Must be between 0 and 1,000,000.<br />
* D-12904: Creating expression filter having lower/greater logic with root objects sampling failed.<br />
* D-12923: Chart schema didn't accept pivotAggregation in dimensions/columns.<br />
* D-12926: Root causes columns Selected weight, Compared weight and Total weight have now correct float data type.<br />
* D-12880: In out-of-the box dashboards, chart titles and subtitles were not translated.<br />
* D-12916: Improved filter rule description text in Filter rule editor dialog for expression filter rules.<br />
* D-12889: No clear error message was given when user tried to export corrupted model from .pacm file.<br />
* D-12869: Date selector in on-screen settings had inconsistent vertical alignment.<br />
* D-12938: When creating a filter with lasso and selecting a single data point only, "equals" kind of filter rule is now created.<br />
* D-12989: "Running tasks as specific time" system report may have ended up in loop causing following error: Maximum call stack size exceeded error.<br />
* D-13010: Pivot table sometimes ended up to never-ending resizing loop when browser zoom was more than 100%.<br />
* D-12790: Expression language: DataFrame.SetColumns: Initializing and using variables defined in closure of SetColumns function parameter didn't work<br />
* D-12927: All on-screen settings were not be visible in narrow charts having several on-screen settings.<br />
* D-12937: Added maximum value limitation to several number input fields in charts.<br />
* D-12947: Message dialog didn't show line breaks correctly (e.g., in CSV file import).<br />
* D-12948: Defining column setting caused error when Measure Expression was not defined.<br />
* D-12946: Filter rule text couldn't be seen entirely from tooltip.<br />
* D-12983: When range filtering using integer values in Highcharts chart, filter is now shown as integer value.<br />
* D-12984: When range filtering in Highcharts charts and there is category axis, filter rule is now based on individual (category) values.<br />
* D-12930: When creating filters from charts using date type of X-axis with lasso, "greater than or equal" and "less than or equal" filter rules are not created.<br />
* D-12920: "Where" function in DataFrame lost column data types of the original DataFrame.<br />
* D-13048: Model notifications failed with certain measures that define variables in root expression leading to error: Variable "sampleSize" already exists in this context.<br />
* D-13116: BPMN editor had some translations missing.<br />
* D-13019: Datatable and script selectors show now datatable/script name instead of id, when opening selector having existing selections.<br />
* D-12951: Changing additional root expression in flowchart didn't refresh the flowchart.<br />
* D-13147: Filter rule boxes in header had different widths, and Add filter rule button vertical alignment was incorrect.<br />
* D-12907: Sometimes case attribute selection showed incorrect attribute name for empty model.<br />
* D-13148: Filters and Datatables system reports loaded unnecessarily twice which could be seen as blinking.<br />
* D-12844: In dataframe query, FlowOccurrences in root and GetValueFrom Cases with filter gave null reference exception<br />
* D-12915: Repeating certain query twice with aggregations in Events root generated invalid SQL<br />
* D-12728: Was huge amount logs in server during client side import (manual testing required as identification)<br />
* D-13156: Persist function failed to snowflake: Invalid unicode escape sequence '\u0027ACCE'; should be at most '\u0010FFFF'.<br />
* D-12876: Flows/FlowOccurrences in root didn't work with SqlExpressionValue filtering.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2022.8 (build 1397) (released 2023-01-11) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release fixes an issue where extracting large datasets from SAP increases memory consumption considerably and may lead to out-of-memory error. This release contains packages for both QPR ScriptLauncher and QPR ProcessAnalyzer Server. If SAP extractions are done using QPR ScriptLauncher in client side mode (ExecuteInClientSide=1), it's enough to update QPR ScriptLauncher to fix this issue.<br />
</div><br />
<br />
'''Fixed issues:'''<br />
* D-12941: Extracting data from SAP consumed unnecessary lot of memory and may have led to out-of-memory error (both when running using QPR ScriptLauncher and in server side).<br />
<br />
== QPR ProcessAnalyzer 2022.8 (build 1396) (released 2022-12-30) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Creating datatables with duplicate names in the same project is prevented, and possible existing duplicate names are automatically changed to unique names with a random suffix. If there are duplicate names, they can be renamed either before updating QPR ProcessAnalyzer (to avoid automatic renaming) or after the update (by changing suffixed names). If the renamed datatables are used by models, the linkage will break because it's based on the datatable name. Creating duplicate datatables has already been prevented in the UI, but the improved method works also in the API level.<br />
<br />
Following SQL query can be used to list datatables (and project id) having duplicate names:<br />
SELECT ITA_NAME, ITA_PROJECT_ID<br />
FROM PA_INTEGRATION_TABLE<br />
GROUP BY ITA_NAME, ITA_PROJECT_ID<br />
HAVING Count(*) > 1<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
If trying to use business calendar for a model that doesn't have the business calendar defined, there will now be an error message instead of showing the chart. Either unselect the business calendar checkbox for the measure or dimension, or define a business calendar to the model. In this situation in earlier releases the business calendar was ignored and full time calculation used.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07498: Automation and Operational Excellence presets and Root causes analysis (for Snowflake), Weighted root causes analysis and Event scattering preset (for Snowflake and in-memory), Root causes for case duration (in-memory).<br />
* B-07177: Flexible mappings, user selectable aggregations and conditional formatting for Pivot table, and flexible mappings for KPI Card.<br />
* B-07518: New function named Query to run call /api/expression/query.<br />
* B-07294: In Workspace, the left side projects hierarchy can be collapsed and expanded to make more space to project contents.<br />
* B-06814: In SQL expressions, new function DurationBetweenDates to calculate duration between timestamps precisely.<br />
* B-07519: Replaced DateDiff function with the new DurationBetweenDates function in big data chart.<br />
* B-07531: In SQL expressions, new mathematical functions Abs, Log, Mod, Power, Rand, Sign and Sqrt.<br />
* B-07297: To optimize performance, Snowflake queries are automatically cancelled if they are not needed by UI.<br />
* B-07569: To optimize performance, TakeSample function implementation is improved for Snowflake.<br />
* B-07198: Several performance improvements to DataFrame queries (used in Snowflake).<br />
* B-07464: Added Lead and Lag functions to SqlDataFrames to support getting previous and next event.<br />
* B-07470: New ExtractSap function to fetch data from SAP using expression language.<br />
* B-07536: New Pivot function to SqlDataFrames to enable root causes analysis.<br />
* B-07488: Primary keys can be set to datatables to improve calculation performance (UI will follow later).<br />
* B-07515: Added RootCauseAnalysis function to SqlDataFrames.<br />
* B-07546: RootCauseAnalysis function support for complex weighting expressions.<br />
* B-03052: Support for user-defined variables in /api/expression/query.<br />
* B-07565: Support for NumberPrecision, DatetimeTruncation and TimespanPrecision properties for Values section in in-memory query.<br />
* B-07513: For product activation file handling, replaced mutex based implementation with exclusive file lock.<br />
* B-07480: Expression language support for DataFlows for data extraction.<br />
* B-07613: Removed support for SQL Server based R scripting.<br />
* B-07567: Take datatable primary keys into use in expression builder to improve performance (part 2).<br />
* B-07588: Remove total memory information from log writing and DateDiff function for in-memory.<br />
<br />
'''Fixed issues:'''<br />
* D-12715: Snowflake calculated imprecisely some operations containing division and aggregation.<br />
* D-12761: Progress bar of the CSV import dialog didn't show any progress.<br />
* D-12799: Opening datatable contents dialog settings was slow when there were lot of rows in the datatable.<br />
* D-12089: Include conforming/nonconforming cases made BPMN editor no responding.<br />
* D-12496: Datagrid filter search keyword didn't work for rounded values, so the search was hidden for other than textual data.<br />
* D-12704: Durations as quarters was calculated incorrectly in charts.<br />
* D-12662: Fixed issue where some special literals in custom expressions didn't work.<br />
* D-12403: Setting Notifications on a model had some visual issues.<br />
* D-12859: Dependency wheel visualization crashed with nulls values in From and To mappings.<br />
* D-12660: Removed unnecessary float conversions in SQL expressions.<br />
* D-12653: In-memory datafram OrderByColumns function with mixed values failed.<br />
* D-12657: When trying to use milliseconds period in some presets, frontend frozed.<br />
* D-12706: Line breaks in data were shown in many places where it's undesired.<br />
* D-12719: Syncfusion dialog headers showed backslaces incorrectly.<br />
* D-12372: Refused to run the JavaScript URL because it violated the Content Security Policy directive.<br />
* D-12730: Logging out when filter selection is in progress, gave javascript error.<br />
* D-12705: Header object counts tooltip was sometimes messed after logout.<br />
* D-12384: Selected project was not highlighted for whole project name string.<br />
* D-12581: Prevented creating duplicate datatable names in same project in parallel execution.<br />
* D-12722: There was incorrect syntax near '<' when running SqlDataFrame expressions.<br />
* D-12736: Swedish and Finnish translation improvements for object counter tooltips.<br />
* D-12702: For BPMN Editor component "Something went wrong" error was given when switching from in-memory to Snowflake model.<br />
* D-12712: UI gave error: TypeError: Cannot read properties of undefined (reading 'id').<br />
* D-12738: Business calendar showed total business time when calendar configuration was invalid.<br />
* D-12776: Special character filter caused JavaScript SyntaxError.<br />
* D-12785: Unnecessary vertical scrollbar displayed for main header toolbar.<br />
* D-12164: There was unnecessary UnauthorizedAccess errors in logs.<br />
* D-12580: Case duration was not same when comparing Big data chart with in-memory chart for same data.<br />
* D-12768: Data grid links and variable change actions didn't work when grouping was used.<br />
* D-12735: FindRootCauses (in-memory) function filtered out cases with zero contribution.<br />
* D-12763: --#CallWebService didn't work from ScriptLauncher.<br />
* D-12789: There was timeout in SQL queries to scripting sandbox.<br />
<br />
== QPR ProcessAnalyzer 2022.7 (build 1331) (released 2022-11-15) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2022.7, to improve security expression language operations that modify data or connect to external datasources are prevented in dashboard custom expressions. The limitation is required, because when a dashboard is opened, its expressions are run with the user's permissions, and the user need to trust the expressions don't perform any unexpected operations, such as delete data. The full functionality of the expression language is available in the scripts and in the Expression Designer.<br />
<br />
The following functions and operations are prevented in dashboards: SendEmail(), CallWebService(), ImportOdbc(), ImportOdbcSecure(), Model.DeletePermanently(), Model.Restore(), Model.TriggerNotifications(), Project.DeletePermanently(), Project.Restore(), Project.CreateDatatable(), Datatable.AddColumn(), Datatable.DeletePermanently(), Datatable.Import(), Datatable.Merge(), Datatable.RemoveColumns(), Datatable.RenameColumns(), Datatable.Truncate(), RecycleBin.DeletePermanently(), and call SQL script. Calling expression scripts is allowed, but in the script all previously mentioned operations are prevented.<br />
<br />
Following SQL query can be executed in the QPR ProcessAnalyzer metadata database to reveal dashboards that potentially have prevented expressions:<br />
SELECT * FROM [PA_UI_ELEMENT] WHERE [UIE_PROPERTIES] LIKE '%SendEmail(%' OR [UIE_PROPERTIES] LIKE '%CallWebService(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbc(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbcSecure(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Restore(%' OR [UIE_PROPERTIES] LIKE '%TriggerNotifications(%' OR [UIE_PROPERTIES] LIKE '%CreateDatatable(%' OR [UIE_PROPERTIES] LIKE '%AddColumn(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Import(%' OR [UIE_PROPERTIES] LIKE '%Merge(%' OR [UIE_PROPERTIES] LIKE '%RemoveColumns(%' OR [UIE_PROPERTIES] LIKE '%RenameColumns(%'<br />
</div><br />
<br />
'''Features:'''<br />
* B-07287: Process Discovery and most important presets for Snowflake.<br />
* B-07271: "Last Row Aggregates Over-limit Rows" setting for big data chart.<br />
* B-06431: Snowflake datatables support for database views in the datasource.<br />
* B-07266: Security: "limited mode" to prevent data modifications and external calls from dashboard expressions.<br />
* B-07097: Improved flowchart root causes color scales.<br />
* B-07363: SQL LIKE function support for escape character.<br />
* B-06877: Improved variation queries performance in Snowflake, part 1.<br />
* B-07444: Improved variation queries performance in Snowflake, part 2.<br />
* B-07382: Support for empty strings and nulls in event type names in dataframe processing.<br />
* B-07273: WithRowNumberColumn, WithRankColumn, WithDenseRankColumn support for descending sorting.<br />
* B-07303: FindRootCauses function support for weighting expression.<br />
* B-07327: Unpivot function for SqlDataFrames (for root cause analysis).<br />
* B-07385: Align token lifetime with SESSION_MAXIMUM_DURATION setting.<br />
* B-07500: ColumnMappings property for IDataFrame and DataTables.<br />
* B-07499: IDataFrame.ApplyFilter function to filter events data using a JSON-based filter.<br />
* B-07469: Translation updates for release 2022.7.<br />
<br />
'''Fixed issues:'''<br />
* D-11630: Drag and drop from chart settings to main header was working incorrectly for filter and root cause rules.<br />
* D-12455: Moving a chart filter from one chart to another created a root cause analysis filter.<br />
* D-12266: Root causes analysis showed incorrect results when certain combination of filters.<br />
* D-12525: Numerical values in Excel export in data grid was formatted incorrectly.<br />
* D-12534: Restoring item from recycle bin changed project from Bin to previous project.<br />
* D-12529: Measure specific datalabel mapping did not work correctly when also mapped to Y-axis.<br />
* D-12532: Multi-selection options caused layout issue for Chart setting.<br />
* D-12541: Layout issue for Polish in multiselect list search dialog.<br />
* D-11277: Increase/decrease Icons were missing in the dimension sorting for Mac.<br />
* D-12552: Uncaught Error: Diagram.selectCollection given something that is not a Part: null.<br />
* D-12567: Tooltip incorrectly showed for label component containing only spaces.<br />
* D-12438: Operation was cancelled because it was replaced by a new operation.<br />
* D-12551: Some expressions didn't work as calculated case/event attributes.<br />
* D-11720: Chart buttons were not visible in Apple Safari and iPad.<br />
* D-12544: On-screen settings "options" parameter did not work.<br />
* D-12528: Multi-unit time unit selection appeared where it's not applicable.<br />
* D-12583: Error message should be provided for invalid settings input than just display JS errors.<br />
* D-12599: Tooltips didn't show correct measures/dimensions when "Show in tooltip" mappings are used.<br />
* D-12561: Chart settings content was incorrectly drawn outside of the chart dialog.<br />
* D-12568: Reload UI sometimes crashed chart having multiselect on-screen settings.<br />
* D-12572: Main header toolbar lost when refresh maximized PA chart.<br />
* D-12612: Drop Unused Filters After setting incorrectly allowed zero seconds.<br />
* D-12533: Error message keeped blinking in Analysis view.<br />
* D-12608: User could not select or add new case attribute when current select attribute doesn't exist.<br />
* D-12451: Prevented deleting running script.<br />
* D-12516: Windows event viewer warning: Failed to gracefully shutdown application.<br />
* D-12523: Business calendar performance - part 2.<br />
* D-12538: Column with same name could be added multiple times to datatable using expression language.<br />
* D-12582: Improved EMS mutex code to support multiple PA service in one server.<br />
* D-12624: Synchronize new (empty) data table generated failed queries in Snowflake.<br />
* D-12622: Advanced setting page reserved room for the expression editor frame that did not exist.<br />
* D-11295: In on-screen settings, some UI controls were vertically misaligned.<br />
* D-11625: The heights of the parameter option menu in the clustering tab was not well aligned.<br />
* D-12103: Small dropdown list layout issue.<br />
* D-12633: Align issue for Column related Advanced settings.<br />
* D-12505: Search dialog didn't escape % and _ characters correctly in dataframe processing.<br />
* D-12645: Tabs in expression settings dialog were partly hidden when dialog is narrow.<br />
* D-11382: Moving of flowchart was sometimes shaky.<br />
* D-12655: Filter rule tooltips in header were styled incorrectly.<br />
* D-12656: Large integer values in filter jsons were incorrectly presented as small integers.<br />
* D-12661: Some exported filters contained unnecessary "invert" property.<br />
* D-12500: Model with numeric case id's and filtering with the attribute mapped as case id: ERROR [22018] Numeric value <nowiki>''</nowiki> is not recognized.<br />
* D-12509: Filtering null values didn't work in boolean attributes in Snowflake.<br />
* D-12571: In dataframe processing in SQL Server, dividing two integers should not make rounding to integer.<br />
* D-12610: Setting for global DropUnusedFiltersAfter was missing.<br />
* D-12613: Filtering with case/event attributes with null values didn't match in Snowflake models.<br />
* D-12617: Model didn't work when DropUnusedFiltersAfter is 00:00:00.<br />
* D-12618: If model ConfigurationJson is null, Configuration property didn't work.<br />
* D-12620: Filtering didn't work when there are backslaces in attribute names in Snowflake models.<br />
* D-12643: AttributeFunctionCallExpression did not always work properly in array context.<br />
* D-12647: SqlDataFrame with SQL Server: Comparing literals to variant column values failed.<br />
* D-12648: Models that have DropUnusedModelsAfter setting caused "The sliding expiration value must be positive" error.<br />
* D-11526: It was unable to translate Unicode character \uD83D at index 176 to specified code page.<br />
* D-12637: In application startup arised FATAL Application startup exception System.UnauthorizedAccessException: Access to the path 'Global\MutexQPRPAActivation' is denied.<br />
<br />
== Old Releases ==<br />
See older releases in [[QPR ProcessAnalyzer Release Archive]]<br />
__NOTOC__<br />
<br />
[[Category: QPR ProcessAnalyzer]]</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&diff=24451QPR ProcessAnalyzer Release Notes2024-02-27T15:46:04Z<p>Ollvihe: /* Next Additional Release: QPR ProcessAnalyzer 2024.2 (planned date 2024-02-27) */</p>
<hr />
<div>This page lists all new features and fixed issues for each QPR ProcessAnalyzer release.<br />
<br />
== Next Additional Release: QPR ProcessAnalyzer 2024.2 (planned date 2024-02-27) ==<br />
<br />
'''Features:'''<br />
<br />
* B-06280: The admin is able to remove any user's password.<br />
<br />
'''Fixed issues:'''<br />
<br />
* D-14045: User with a viewer role had incorrect Snowflake model permission.<br />
<br />
== Latest Release: QPR ProcessAnalyzer 2024.2 (build 5438) (released 2024-02-21) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue: Using Snowflake models and dashboards doesn't work with Viewer and Analyzer roles. The reason is that cache tables created to Snowflake incorrectly require the GenericWrite permission. Workaround is to give users the Designer role which will give the needed GenericWrite permission. Note that the Designer role gives many permissions to the user for the project [[Roles_and_Permissions#Roles_and_Permissions|(more information)]].<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
The legacy User permissions report (analysis number 11) and Filters report (analysis number 30) used in SQL scripts have been removed. Use instead the expressions language to query filters and user permissions, e.g., [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|Models.Filters]] and [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
New version of the Design diagram component has been improved with object-specific measures, and the previous common measures are not migrated into object-specific measures. Thus, the measures need to be configured again, or manually edit the chart json settings (if needed please ask instructions from QPR CustomerCare).<br />
</div><br />
<br />
'''Features:'''<br />
* B-08022: Design diagram supports now BPMN notation, elbow style flows and object-specific measures.<br />
* B-08232: Entire future eventlogs can be [[Create_Predicted_Eventlog|predicted]] based on generative AI models running in Snowflake.<br />
* B-08166: Added expression language function [[Generic_Functions_in_QPR_ProcessAnalyzer#OpenAIChatCompletion|OpenAIChatCompletion]] to answer natural language prompts based on OpenAI ChatGPT API.<br />
* B-08177: Snowflake query performance has been improved by introducing caching of filtered eventlogs using Snowflake tables.<br />
* B-08196: Conditional formatting rules can be defined for [[QPR_ProcessAnalyzer_Table#Textual_equal_rules_for_background_color|textual and boolean values]].<br />
* B-08213: Big data chart expressions event type selections to be multi-select where applicable.<br />
* B-08205: Expression language API is available for storing [[Storing_Secrets_for_Scripts|secrets]] for scripts.<br />
* B-07780: Chart [[QPR_ProcessAnalyzer_Chart#Variable_mappings|variable mappings]] has been removed - use the [[Chart_Linked_Settings|linked settings]] instead. Dashboards using variable mappings are automatically converted to use linked settings.<br />
* B-08117: Added ToSqlDataFrame function to convert in-memory dataframe into SQL dataframes.<br />
* B-08174: Only non-default parameters values are written to the operation log.<br />
* B-08200: Timestamps in System reports are shown in user workstation local time.<br />
* B-08171: Dashboard id has been added to queries, to track from which dashboard queries are originating.<br />
* B-07144: Remove legacy User permissions report (analysis number 11) and Filters report (analysis number 30) in SQL scripts (see note above).<br />
* B-08193: Added retry mechanism to QPR ScriptLauncher to recover if connection to server breaks.<br />
* B-08202: Updated copyright for year 2024.<br />
* B-08199: Frontend components have been updated.<br />
* B-08203: Backend components have been updated.<br />
* B-08209: Translations updated for release 2024.2.<br />
<br />
'''Fixed issues:'''<br />
* D-13972: Some measures/dimensions/columns in Big data chart didn't show the expressions level filtering.<br />
* D-14015: Fixed business calendar incorrect calculation when business period covered entire day.<br />
* D-14014: Fixed issue where Snowflake business calendar could not have end time as 00:00.<br />
* D-13962: System variable values were interpreted incorrectly when used in linked settings.<br />
* D-13971: HiddenInNavigation and SortOrder variables didn't work in navigation menu dashboards list.<br />
* D-13959: Removed possibility to add datatable columns with the legacy "any" data type.<br />
* D-13991: Improved drop-down selector component to handle empty strings as variable values.<br />
* D-13965: Datatable column name length was validated incorrectly which may have caused error in saving with too long column names.<br />
* D-13958: Project names showed unnecessary html escaping in the "Move to" menu.<br />
* D-13964: Model attributes and notifications dialogs gave error when trying to use dashboard tags.<br />
* D-13960: Added missing translations for list of permission list and 12-hour clock format.<br />
* D-13966: Fixed issue were root causes chart tooltip sometimes didn't disappear.<br />
* D-13969: Datatable column schema export sometimes showed empty for the key column.<br />
* D-13862: Session token was not accepted when url path capitalization is different.<br />
* D-13942: Datatable could not be dimensioned if it has column named "CaseId".<br />
* D-13980: Business calendar dialog crashed when tried to open it for a model without access.<br />
* D-13983: Notifications dialog didn't validate situation when same name was used in a measure and dimension.<br />
* D-13981: Dashboard import set incorrect model id to dashboard if there was no access to any model.<br />
* D-11276: Translations were missing for 12-hour clock dates (AM and PM) in dashboards.<br />
* D-13977: Multi-select dropdown lists showed some special characters incorrectly.<br />
* D-13945: Syncfusion toast message didn't work when text contains ${[]}.<br />
* D-13930: Pivot table throws javascript error when certain clicks.<br />
* D-13273: Duplicate datatable row count didn't shown correctly.<br />
* D-13994: There was an error in the in-memory chart with some flow related measures about duplicate variable names when same measure was defined twice.<br />
* D-13985: Models list dots menu had texts misaligned in narrow screens.<br />
* D-13995: In Workspace, wrong datatable was selected after duplication when non-default sorting was applied.<br />
* D-13997: Workspace tables column filtering search caused JavaScript errors.<br />
* D-13978: In table Excel export, the last row representing other items appeared incorrectly for in-memory chart.<br />
* D-14007: In System reports, model related selections are hidden from the Analyzed objects lists.<br />
* D-14005: In big data chart, changing to custom expression caused crash with some expressions having case/event attribute.<br />
* D-14003: When dimensioning was not used, pivot table values were incorrectly rounded in the server side.<br />
* D-14004: Removed empty filters from queries to optimize them.<br />
* D-13988: Fixed issue where data grid context menu rendered initially as too high.<br />
* D-13979: BPMN model editor element settings use now Open Sans font.<br />
* D-14013: Fixed incorrect expression "Duration between first and last occurrence" in big data chart event types.<br />
* D-13984: Fixed the error of refusing to run the JavaScript URL.<br />
* D-14031: ThrownObject property was not included to http error response when error came from the script.<br />
<br />
== QPR ProcessAnalyzer 2024.1 (build 4784) (released 2024-01-10) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Known issue fixed in QPR ProcessAnalyzer 2024.2: In Big data chart, some measures, dimensions and columns have the filtering option missing. The issue concerns for example Duration between events, Path starting/until between specific events, and Cases where event occurs before other selections. Workaround is to set the filter in the chart json settings: the filter can be configured to another expression and copied to the correct expression.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
QPR ProcessAnalyzer Server and QPR ScriptLauncher are now using .Net 8 (previous was .Net 6). When updating to this release, install the .Net 8 Runtime ([[Updating_QPR_ProcessAnalyzer_Server|see more]]). The .Net 6 doesn't need to be uninstalled immediately because .Net 6 and .Net 8 work side-by-side, but due to security reasons, the unused .Net 6 should eventually be uninstalled.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In this release, all filters that don't contain any filter rules, are removed. These are legacy filters which have not been visible in the UI.<br />
</div><br />
<br />
'''Features:'''<br />
* B-08019: New component [[Design_Diagram|Design Diagram]] for showing user-created diagrams in dashboards where to visualize process mining metrics.<br />
* B-08087: Generic [[Dropdown_List_Selector|dropdown list selector]] works with Snowflake models allowing to add selection lists for any values.<br />
* B-08163: Linked settings support for binding to [[Chart_Linked_Settings#Binding_to_case_attribute_filters_with_attribute_name_and_attribute_values|case attribute filter values without defining case attribute name]].<br />
* B-08170: Snowflake model filters can be [[Filtering_in_QPR_ProcessAnalyzer#Filter_actions|saved as new models]] which can be used to create snapshots of part of models.<br />
* B-08093: Multiple dashboards can be exported to same file, and model can be set for imported dashboards.<br />
* B-08161: Added [[Datatable_in_Expression_Language#Modify|Modify]] function to change datatable properties and improved [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#CreateDatatable|CreateDatatable]] function for creating datatables.<br />
* B-08122: Added new system report to list dashboards.<br />
* B-08173: Removed legacy filters that didn't have any filter rules.<br />
* B-07961: In OperationLog, changed parameters to json format and added request id.<br />
* B-08069: Added DashboardId property to [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog]] in expression language.<br />
* B-08139: Added [[Datatable_in_Expression_Language#UpdateRows|UpdateRows]] function to update existing rows in datatables with similar logic than SQL update.<br />
* B-08115: Added [[Datatable_in_Expression_Language#DeleteRows|DeleteRows]] function to delete rows in datatables with similar logic than SQL delete.<br />
* B-08149: QPR ProcessAnalyzer has been updated to .Net 8.<br />
* B-08054: Changed Scripts property in generic context to return all scripts, instead of legacy system level scripts.<br />
* B-08138: Changed Synchronize function to remove all columns when no Snowflake table exists.<br />
* B-07689: For datatables, [[Datatable_in_Expression_Language#ForeignKeys|foreign keys]] to other datatables can be defined using expression language.<br />
* B-08176: Translation updates for release 2024.1.<br />
* B-08175: Workspace should show timestamps in user's local time.<br />
<br />
'''Fixed issues:'''<br />
* D-13913: Datatable properties dialog incorrectly showed linked models from other projects.<br />
* D-13916: Chart filter could not be defined for some expressions in Big data chart.<br />
* D-13933: Navigation menu selected item wasn't highlighted when used Snowflake models.<br />
* D-13906: In Conformance Analysis, deviating flows were not translated.<br />
* D-13907: Improved translation related to datatable properties dialog "Used by models" field.<br />
* D-13904: There was an unclear error message in Snowflake, as exception code 1 was returned without AttributeName and ModelName properties when non-existing attribute was in filter.<br />
* D-13911: Fixed small glitches in the opening and closing of drop-down lists.<br />
* D-13918: Datatable could be configured incorrectly to use table for other datatable.<br />
* D-13932: Duplicating datatable with custom table in datasource losed all data.<br />
* D-11002: Removed legacy in-memory prediction preset.<br />
* D-13912: Added check that array cannot be stored to dashboard Content property.<br />
* D-13936: Query designer default query didn't work with Snowflake models.<br />
* D-13938: There was an incorrect logging with some operations related to ScriptLauncher.<br />
* D-13923: Snowflake expressions didn't work with Where function in root referring to case attribute.<br />
* D-13939: ApplyFilter function gave null reference error for non-existing attribute name.<br />
* D-13931: There were issues with AllowExternalDatasources and EnableFullFunctionality settings.<br />
<br />
== QPR ProcessAnalyzer 2023.7 (build 4326) (released 2023-11-28) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Limitation for the maximum amount of data (B-07636) causes a behavior change in in-memory charts that have the Maximum rows settings empty and have the sorting defined. In certain cases, the order in which measures are evaluated changes (due to an internal performance optimization). If there are custom expressions that define variables, the variables may not be available in other measures anymore. As a resolution, either redefine the variables in those measure expressions or add those measures secondarily to the sorting.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Default query timeout of 30 minutes has been added for --#ImportOdbcQuery, --#ImportSqlQuery and --#ImportOleDbQuery commands. If a query run is taking longer than the timeout, the query is stopped. The timeout can be adjusted using the '''QueryExecutionTimeout''' parameter. Previously, there has been no timeout, so queries that take more than 30 minutes require configuring a longer timeout.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Incorrectly configured [[Chart_Linked_Settings|linked settings]] in charts (available in the ''Advanced'' tab) give now an error message, if they are referring to non-existing measures, dimensions or columns. Previously, incorrect linked settings were ignored. To fix the error message, remove the incorrect linked settings.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07511: Datatables have a [[Datatable_Properties_Dialog|dialog]] to view datatable properties, write description, set the Snowflake source table, add/modify/delete columns, and set the datatable key.<br />
* B-08150: Added setting [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|Apply chart filters first]] to determine whether chart filter rules or dashboard filter rules are applied first when chart queries are filtered.<br />
* B-08091: When filtering charts in Snowflake, case attribute filter is created instead of case id filter.<br />
* B-08091: [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|New setting]] to define whether cases or events are filtered by default.<br />
* B-08091: New preset "Looping paths" to detect whether there are repeating patterns of events.<br />
* B-08091: Duration between events calculation ignores negative durations in Snowflake.<br />
* B-08091: Chart loading animation has been renewed.<br />
* B-07636: To prevent dashboards from jamming when querying too much data, added [[QPR_ProcessAnalyzer_Chart#Available_Visualizations|limitations]] to the amount of data that charts can visualize. Note that the limitation concerns the aggregated data that is visualized, not the source event log data.<br />
* B-08017: [[Dashboard_in_Expression_Language|Dashboards API]] has been added to expression language, allowing to create, modify and delete dashboards in scripts.<br />
* B-08056: Following properties have been added to [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#User.2FGroup|user objects]] in expression language: IsLocked, LastLockedDate, LastLoginDate.<br />
* B-08053: [[Navigation_Menu#System_Reports|User rights report]] has been refactored to use [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property in the expression language. The change also simplifies the report as now it only shows the direct role assignments that are visible in the [[Manage_Users_and_Groups|User Management]].<br />
* B-08151: For Snowflake expressions support for following [[SQL_Expressions#Window_functions|windowing functions]]: sum, average, median, min, and max.<br />
* B-08050: When a model is created, the default filter is not created anymore (this is a refactoring that doesn't have any impact on user interface).<br />
* B-08123: Translation updates for 2023.7.<br />
* B-08092: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13876: In CreateSnowflakeConnection function, ProjectId parameter is optional when OdbcConnectionStringKey is not specified.<br />
* D-13898: Snowflake: Exclude case attribute filter didn't work when there was null values and was selecting at least two values.<br />
* D-13890: Fixed XES file import to work.<br />
* D-13894: Business calendar based duration calculation was incorrect in some durations that spanned to several weeks (for Snowflake and in-memory models).<br />
* D-13899: Using broken OdbcConnectionString in a datatable prevented the datatable from being deleted.<br />
* D-13883: Script run stucked after running a script with error that uses client-side ODBC import.<br />
* D-13879: SqlExpressionValue filter when excluding events didn't work with filter rule root expression only.<br />
* D-13896: Adding or removing columns to datatable didn't change the LastModifiedDate.<br />
* D-13882: User details weren't written to operation log when creating or modifying users.<br />
* D-13771: User rights system report didn't give error when changing columns.<br />
* D-13893: Some event filtering caused null pointer error when primary key had been defined.<br />
* D-13873: Fixed pivot table visual issues after component update.<br />
* D-13900: When adding, renaming or removing columns for Snowflake table fails, operation is now rolled back without any changes.<br />
* D-13866: Querying GET api/uielements was quite slow right after server start.<br />
* D-13864: Combinations of translatable and hardcoded strings didn't get translated in UI.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.6 (build 3933) (released 2023-10-24) ==<br />
<br />
'''Features:'''<br />
* B-08055: Error message for locked account has been replaced with generic error message, so that username enumeration is not possible.<br />
<br />
'''Fixed issues:'''<br />
* D-13884: Attributes dialog crashed with some older model configurations.<br />
* D-13843: In charts, selected case and event attributes switched away when attribute data type was ShortString.<br />
* D-13877: Some Snowflake expressions gave error "exceeds maximum length limit of 255 characters" when selecting lot of items.<br />
* D-13878: Snowflake expression filters for case attribute values didn't accept other than string type of case attributes.<br />
* D-13871: Some statistical calculations with percentages didn't work with Last Row Aggregates Over-limit Rows setting.<br />
* D-13875: Using some case level filters in a model without cases datatable didn't work.<br />
* D-13861: Dashboard opens are now logged to the Task log (i.e., calling GET /api/dashboards/{dashboardid}).<br />
* D-13870: Workspace projects hierarchy focused project showed light grey background making the project name not readable.<br />
* D-13867: When starting datatable refresh and going to other tab, went back to Datatables tab when query completed.<br />
* D-13853: If chart Custom Layout settings had extra series defined, chart may have crashed.<br />
* D-13869: Export as CSV button didn't work in the datatable contents dialog when dialog was still loading.<br />
* D-13872: Main progress spinner had unnecessary small scrollbar on top right.<br />
* D-13863: In the REST API method GET /api/users, password field (that has always been null) has been removed.<br />
<br />
== QPR ProcessAnalyzer 2023.6 (build 3847) (released 2023-10-17) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is removed in this release. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
'''Features:'''<br />
* B-07992: Added 10 new presets including Queue analysis, Four eyes principle, Self-looping events, and Path until selected event. There are also presets for Individual Cases Flow and Range of event type occurrences which use Gantt chart.<br />
* B-08011: Added following date related operations for Snowflake: Day of year, Day of month, Day of week, Week of year, Half-year only, Quarter only, Month only, Hours only, Minutes only, Seconds only, and Milliseconds only. These are available when calculating with date type of data.<br />
* B-08016: [[QPR_ProcessAnalyzer_Table#Table_actions|Table actions to set variables]] can also be opened to a new browser tab. Also improved user interface for table actions.<br />
* B-08018: For Snowflake expressions, added Flows aggregations FromEventType and ToEventType to get starting/ending event type, and FlowOccurrences aggregations FromEvent and ToEvent to get starting/ending event.<br />
* B-08001: Added [[Generic_Functions_in_QPR_ProcessAnalyzer#CallStoredProcedure|CallStoredProcedure]] function to call Snowflake stored procedures. This allows to start ETL transformation in Snowflake orchestrated by QPR ProcessAnalyzer script.<br />
* B-08013: Added [[Generic_Properties_in_Expression_Language#RoleAssignments|RoleAssignments]] property to expression language to replace the legacy UserPermissions analysis (11).<br />
* B-07976: Snowflake [[Filtering_in_QPR_ProcessAnalyzer_Queries#Expression|expression based filter rules]] support additional expression columns allowing more Big data chart expressions to be filterable.<br />
* B-08015: Big data chart doesn't anymore support calculation in SQL Server (using local datatables).<br />
* B-06270: Improved error messages and made them translatable by taking into use exception codes provided by server.<br />
* B-08021: Added possibility to store [[Diagram_in_Expression_Language|designed diagrams]] for models and expression language API for reading and modifying diagrams.<br />
* B-08037: Dropped following unused tables database: PA_IDEA, PA_IDEA_VOTE, PA_REPORT, PA_REPORT_SETTING, PA_SESSION_SERVICE, PA_VIEW_FILTER_RULE, PA_VIEW_FILTER_RULE_PARAMETER.<br />
* B-08052: Language translations have been updated to 2023.6.<br />
* B-08051: Frontend side components have been updated.<br />
* B-08034: Backend side components have been updated.<br />
<br />
'''Fixed issues:'''<br />
* D-13830: Object counts indicator in header showed incorrect counts when there was disabled filter rules in Snowflake models.<br />
* D-13833: In-memory charts didn't work with boolean type of dimensions when filtering with the false value.<br />
* D-13858: Target value measures didn't update chart when controlled using an on-screen setting.<br />
* D-13827: Calculated attributes data type was incorrectly set as Any by the Attributes dialog.<br />
* D-13849: Multiselect list search didn't allow spaces.<br />
* D-13829: Multiselect dropdown lists height jumped couple of pixels when selecting values.<br />
* D-13835: Deselecting a selected data point didn't remove chart filter rule.<br />
* D-13702: Improved Snowflake query performance in situations when there are lot of filter rules (by decreasing number of CTE's).<br />
* D-13819: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13820: Fixed incorrect manifest.json file to avoid "not found" errors when fetching web site icon.<br />
* D-13865: Break, continue, and return statements didn't work properly when called from inside a catch block.<br />
* D-13795: There was a Python error in clustering analysis with Snowflake model.<br />
* D-13823: Some tooltips in Workspace project hierarchy didn't work and caused a JavaScript error.<br />
* D-13824: BPMN editor align context menu layout looked strange.<br />
* D-13813: QPR logo button in the top left was misaligned in Firefox.<br />
* D-13797: Snowflake query may have given following error when using sampling: ambiguous column name '_EventType_NotNull_1'.<br />
* D-13774: TakeSample function with certain columns caused SQL compilation error: ambiguous column name 'Case Name'.<br />
* D-13782: Snowflake: Aggregating from variations didn't work when using sampling.<br />
* D-13836: Some tooltips had a strange two-colored background.<br />
* D-13834: Removed Model statistics column from clustering and root causes analysis.<br />
* D-13860: Removed filter button from the custom expressions in Task log analyzed objects.<br />
* D-13838: Removed Split data by filtering column from clustering analysis.<br />
* D-13832: Script and model status updates incorrectly sent next update when previous was still pending.<br />
* D-13839: Charts reset zoom button font size was too small.<br />
* D-13817: Importing data to Snowflake datatable with Append=0 doesn't now drop the underlying Snowflake table.<br />
* D-13825: Some models could not have been deleted from recycle bin.<br />
* D-13852: Recycle bin Projects and Models tab didn't show correct content when Recycle bin only contained either models or projects.<br />
* D-13841: In-memory chart Data type selection type has been corrected to string.<br />
* D-13842: Second time and Third time selections has been hidden in in-memory chart measures.<br />
* D-13850: In Chrome, there were console errors related in incorrect text field autocomplete type and text field without form.<br />
* D-13847: Improved browser side performance by removing unnecessary operations.<br />
* D-13859: Chart without dimensions showed an unnecessary Remove dimension button.<br />
* D-12598: When script is stopped in server, ScriptLauncher could still incorrectly continue to import data.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.5 (build 3334) (released 2023-09-07) ==<br />
<br />
'''Fixed issues:'''<br />
* D-13826: Measures or dimensions with case or event attribute and value selections incorrectly removed calculated attributes when dashboard was opened or chart settings were changed.<br />
* D-13821: Font size of some Highcharts tooltips was too small. Issue appeared when there were tooltips mappings in measures or dimensions.<br />
* D-13810: Simplified help links: now all Help buttons go to the QPR ProcessAnalyzer wiki main page.<br />
* D-13822: Snowflake clustering analysis showed empty strings and nulls as case attribute values in an unclear way as just nothing.<br />
<br />
== QPR ProcessAnalyzer 2023.5 (build 3304) (released 2023-09-05) ==<br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
In Big Data Chart, the '''Case conformance''' measure and dimension has changed in a way that now it provides boolean values (true/false) instead of integer values (1/0). If [[Measure,_Dimension_and_Column_Settings#Other_settings|colorMappings]] are used for this measure or dimension to set specific colors to visualize conformant and nonconformant cases, the mapped values need to be changed as follows: '''1''' -> '''true''' and '''0''' -> '''false'''. Without the change, the mapped colors are not effective.<br />
<br />
Exmaple: Old configuration:<br />
<pre><br />
"colorMappings": {<br />
"1": "#36d475ff",<br />
"0": "#f5403bff"<br />
}<br />
</pre><br />
New configuration:<br />
<pre><br />
"colorMappings": {<br />
"true": "#36d475ff",<br />
"false": "#f5403bff"<br />
}<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Big data chart support of models with local datatables (i.e., SQL Server stored) is deprecated. Big data chart has allowed to process data both in Snowflake and SQL Server. Now the support for SQL Server is deprecated and the Big data chart will only support calculation in Snowflake. If there are big data charts using SQL Server calculation, either migrate data to Snowflake or switch to in-memory charts (requiring to load data in-memory).<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). The OperationLog analysis is replaced by the [[Generic_Properties_in_Expression_Language#OperationLog|OperationLog function]] and the Infcluencers analysis is replaced by the [[FindRootCauses_Function|FindRootCauses function]].<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [12, 14, 15, 16, 29];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
By default, Snowflake ODBC driver generates quite much logging to files which might unnecessarily fill up the disk space. It's recommended to set the LogLevel parameter to value 0. The path where the logs are created can be seen in Windows registry (key LogPath). More information about configuring Snowflake ODBC parameters: https://docs.snowflake.com/en/developer-guide/odbc/odbc-parameters.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07971: Machine learning based [[Clustering_Analysis|Clustering analysis]] can be run in Snowflake.<br />
* B-07989: In dashboard designer the stacking order of charts can be changed with buttons [[QPR_ProcessAnalyzer_Dashboard_Designer#Viewing_and_Editing_Dashboards|Bring to front, Send to back, Bring forward and Send backward]].<br />
* B-07977: For [[Sankey_Chart|sankey diagram]], added Start level and End level mappings to define custom start and end level for the sankey flows. Implemented also color mappings to define specific colors for specific values.<br />
* B-08010: To improve performance, charts are loaded and updated only when they are visible in the dashboard.<br />
* B-07975: Added following [[SQL_Expressions#Date_functions|date related functions]] to Snowflake: DayOfYear, DayOfWeek, WeekOfYear, Quarter.<br />
* B-07908: When [[QPR_ProcessAnalyzer_Project_Workspace#Duplicating_Model|model is duplicated]], also filters in the model are also duplicated.<br />
* B-07904: Filters and models API for expression language has been completed.<br />
* B-07991: In [[Filter_Selectors|case and event type filter selectors]], threshold whether the dropdown list or search dialog is shown can be defined using the ''Maximum Rows'' setting. Also the search dialog filters search results by other filter rules in the dashboard.<br />
* B-07999: Filters report has been changed to use the [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|expression language API for filters]].<br />
* B-07540: Added [[QPR_ProcessAnalyzer_Expressions#Throwing_objects|throw statement]] to expression language.<br />
* B-07813: UI components are updated. There are small visual improvements, such as in flowchart flows are routed a bit differently and in charts the hidden series is shown as strike-through in the legend.<br />
* B-07963: Following legacy analysis types have been removed: Operation log (analysis number: 12), Root causes (14), Correlations (15), Idea feed (16) and Duration influence (29) (see more information in the note above).<br />
<br />
'''Fixed issues:'''<br />
* D-13777: Filters could not be created in charts when "Update Filter During Selection" setting was disabled.<br />
* D-13767: Automation per Event Types preset in in-memory incorrectly showed only one event type.<br />
* D-13756: Changing background color in KPI card didn't have any effect.<br />
* D-13812: "Exclude events" was incorrectly translated to "Exclure les cas" in French.<br />
* D-13815: Dashboard designer background grid was not visible in entire area in edit mode. Improved also the grid to match to snapping in move and resize.<br />
* D-13674: Business calendar dialog layout was incorrect when a model with a long name was selected to copy holidays.<br />
* D-13811: Table actions link to a new window didn't go to dashboard if there were other parameters in the link.<br />
* D-13601: Fixed issue where some presets may have given error when attribute value selection and the automatically selected attribute conflicted by the data type.<br />
* D-13753: While Snowflake model was selected, in Filters and User Rights reports the Columns list could not be opened.<br />
* D-13720: Now table column filter and sorting are preserved when resizing or zooming page.<br />
* D-13785: In tables increased number of rows to 20000 that are inspected to get available items shown in Excel-style column filter.<br />
* D-13759: Some statistical calculations had bad performance with large number of rows.<br />
* D-13787: Conformance statistics component didn't have scrollbars when text didn't fit to the visible area.<br />
* D-13788: In-memory "Nonconformance reason" selection caused error when two of them was selected in the same chart.<br />
* D-13783: When Analyzed objects was Generic analysis, column selection incorrectly caused "Analysis has not been selected" error.<br />
* D-13776: When measure name contained quotation mark, notification preview didn't work.<br />
* D-13747: Filtering with integer type of case id with case attribute value filter caused error in Snowflake.<br />
* D-13791: In Firefox, model selection in chart settings didn't show models in the first open.<br />
* D-11984: Recycle bin buttons didn't fit to the screen when screen width was small.<br />
* D-13780: Using CaseId case attribute in clustering analysis did not work with Snowflake 106 cases standard model.<br />
* D-13781: Clustering analysis produced Python error with a certain simple Snowflake model.<br />
* D-13730: Snowflake: Case attribute filtering didn't work when there are cases without row in cases table.<br />
* D-13803: There was chart configuration validation error in browser console when measures were moved into dimensions in Big data chart.<br />
* D-13758: There was performance issue with the Recent tasks system preset.<br />
* D-13793: Snowflake clustering failed when cluster count is larger than case count.<br />
* D-13763: SQL expression based filter rule with Where function to filter events didn't filter anything in Snowflake.<br />
* D-13804: Added missing Millisecond function to Snowflake.<br />
* D-13772: Expression EventLog.Cases.Events caused error "Value cannot be null".<br />
* D-13755: Model.CaseAttributes sometimes gave incorrectly Any datatype for all attributes.<br />
* D-13739: When switching between System reports there was error: "Uncaught Error: 2nd dimension not found. at y.getExpressionConfiguration".<br />
* D-12109: Sometimes flowcharts showed message "Error in querying event type measures. Input string was not in a correct format".<br />
* D-12473: Cost Savings by Automation preset gave sometimes error "Unable to cast object of type 'System.Double' to type 'System.String'".<br />
* D-13750: Snowflake model didn't work with the Case Duration vs. Manual Activities preset.<br />
* D-13657: There was error converting data type nvarchar to bigint.<br />
* D-13796: Some Snowflake operations didn't work with zero rows and columns.<br />
* D-12494: Now when chart size changes, the table column filters and sorting are preserved.<br />
* D-13736: In Performance benchmarking dialog, the Export result button exported wrong benchmark performance analysis result.<br />
* D-13609: Improved conformance analysis related filter names.<br />
* D-13594: Recycle bin buttons were not visible when opening recycle bin in a narrow screen.<br />
* D-13226: Tooltips in the model properties dialog are now translated.<br />
* D-12569: Table incorrectly showed ellipsis for narrow boolean type of columns showing checkboxes.<br />
* D-13391: Emptying date or datetime picker value was not registered and it didn't trigger functionality.<br />
* D-12621: Value search dialog didn't work with values containing backslashes.<br />
* D-13796: Some Snowflake operation didn't work with zero rows/columns.<br />
<br />
== QPR ProcessAnalyzer 2023.4 (build 2628) (released 2023-06-14) ==<br />
<br />
'''Features:'''<br />
* B-07767: Added [[Gantt_Chart|Gantt chart]] to visualize timeline of cases and events divided into swimlanes.<br />
* B-06383: Added [[Sankey_Chart|Sankey chart]] to visualize flow from one set of values to another.<br />
* B-07941: Implemented many more presets running in Snowflake models for compliance and operational excellence use cases. There are also presets for the path analysis and process bottlenecks identification.<br />
* B-07864: Snowflake conformance analysis shows now [[Conformance_Analysis#Top_Deviations_(in-memory)_/_Deviating_Flows_(Snowflake)|reasons for conformance deviations]], such as which event occurrences deviated from the design model.<br />
* B-07909: Snowflake conformance analysis visualizes [[Conformance_Analysis#Undesired_Events_(Snowflake)|undesired event types]] in table and flowchart.<br />
* B-07823: Flowchart Bottlenecks preset has been changed to show bottlenecks for event types. Also renewed the [[QPR_ProcessAnalyzer_Logs#Task_Log|Tasks reports]] to use expression language based interface.<br />
* B-07891: User interface has been [[Languages_and_Localization|translated into Portuguese]].<br />
* B-07873: Improved [[QPR_ProcessAnalyzer_Pivot_Table|pivot table]] visual layout to highlight totals and aggregated rows. Also the row titles are now visible in the top left.<br />
* B-07905: Added [[SQL_Expressions#Rank_functions|Rank related functions]] to Snowflake for writing more versatile custom KPI's, e.g., FirstValue, LastValue, NthValue, Lead and Lag.<br />
* B-07912: Added more SQL expression [[SQL_Expressions#Array_functions|array functions ArrayToString and ArrayOverlap]] to Snowflake.<br />
* B-06449: Added SQL expression functions ToTimestamp and TryToTimestamp for parsing timestamps from strings using provided format.<br />
* B-07959: Added new functions Base64Encode and Base64Decode to help using basic HTTP authentication when calling web services.<br />
* B-07206: SQL expressions support data [[SqlDataFrame_in_Expression_Language#WithClusterColumn|clustering]] which is an unsupervised machine learning algorithm to group data based on similarities.<br />
* B-07848: Data can be extracted from SAP using the encrypted [[Importing_Data_from_SAP#SNC_encrypted_connection|SNC connection]].<br />
* B-07903: Added expression language API to create and modify filters and models.<br />
* B-03103: [[QPR_ProcessAnalyzer_Logs#Task_Log|Task log]] (operation log) can be accessed in expression language.<br />
* B-07872: List aggregation with Distinct=true orders now items by their value.<br />
* B-07940: Removed "Count" aggregation from textual values in Big data chart (you can use the Case count, Event count, etc. selection instead).<br />
* B-07757: Backend support for datatables linking to user-definable Snowflake database, schema and table.<br />
* B-07825: Improved error message when trying to use non-existing attributes in Snowflake queries.<br />
* B-03101: To expression language, added try-catch-finally statement to handle thrown exceptions.<br />
* B-07861: Removed available and total virtual memory information from User settings dialog.<br />
* B-07902: Optimized sequences of joins in Snowflake queries to improve performance.<br />
* B-07837: Updated backend components.<br />
<br />
'''Fixed issues:'''<br />
* D-13709: If image width-to-height ratio was lower than container's ratio, image was incorrectly stretched to fit the container.<br />
* D-13660: Disabling filter rules didn't work in Snowflake models.<br />
* D-13526: Passing dataframes from SQL scripts to expression scripts didn't work.<br />
* D-13661: Snowflake conformance analysis crashed when there was no access to conformance related Snowflake UDF's.<br />
* D-13693: Resolved major Snowflake conformance analysis performance issues in the BPMN model handling.<br />
* D-13716: Snowflake root causes analysis incorrectly bypassed Snowflake cache.<br />
* D-13707: In SQL Scripting, the datatable analysis (number 18) didn't always copy the data table contents to the target table correctly.<br />
* D-13653: Big data flowchart Root causes preset showed incorrect legend.<br />
* D-13626: Flowchart froze when converting into big data flowchart and vice versa by modifying chart json settings.<br />
* D-13656: Root causes for attribute gave error "Failed to compare two elements in the array" in some situations.<br />
* D-11563: Pivot table had a minimum height of 300px, which caused bottom part of it to be out of view.<br />
* D-13704: In CSV file import, parsing now allows spaces between column separator and text quotation mark.<br />
* D-13598: Chart gave unclear error message when events datatable was not defined.<br />
* D-13655: Improved error messages for BPMN editor and conformance statistics.<br />
* D-13528: Error message for certain erroneous SQL expressions was unclear.<br />
* D-13677: "Flow occurrences with specific case attribute value" selection didn't work for in-memory chart.<br />
* D-13663: Pivot table border line was slightly broken in the header area.<br />
* D-13608: There was incorrect alignment of items in the table paging controls.<br />
* D-13703: Importing CSV file with some special characters to Snowflake failed (due to incorrect escaping in Snowflake staging files).<br />
* D-13708: Duplicating datatable using user defined table, removed data the source table.<br />
* D-13717: Dependency wheel crashed when there were zero weights and showing data labels.<br />
* D-13348: There was an unclear error message when Snowflake query had a certain incorrect expression.<br />
* D-13732: Pivot table Excel export contained headers formatted incorrectly.<br />
* D-13729: There was a JavaScript error when limited user tried to access business calendar.<br />
* D-13662: Percentile function didn't always work with timespan types.<br />
* D-13646: Using incorrectly configured model without cases datatable caused null reference error.<br />
* D-13629: When tried to use chart with a non-existing model, there is now a proper translated error message.<br />
<br />
== QPR ProcessAnalyzer 2023.3 (build 1990) (released 2023-05-03) ==<br />
<br />
'''Features:'''<br />
* B-07818: [[Conformance_Analysis|Conformance analysis]] is supported in Snowflake with following dashboard components: Big data chart, BPMN editor, Conformance statistics, and Design model selector.<br />
* B-07833: [[Root_Causes#Root_causes_in_flowchart|Root causes analysis for flowchart]] is available for Snowflake showing how the event and flow occurrences explain selected phenomena.<br />
* B-07786: Big data chart has more [[Big_Data_Chart#Measure_aggregations|measure aggregations]], such as median, percentile, standard deviation and variance. Also for textual items, unique values can be listed.<br />
* B-07795: [[QPR_ProcessAnalyzer_Table#Conditional_formatting|Conditional formatting]] supports also columns with non-numerical contents.<br />
* B-07830: [[Big_Data_Chart#Measure_aggregations|None and Any aggregations]] for Snowflake and user-friendly formatting for conformance violations.<br />
* B-06527: Error messages in [[Importing_Data_to_Datatable_from_CSV_File|CSV file import]] show also the column number to help working with CSV files with lot of columns.<br />
* B-07747: In-memory conformance checking accepts design models with multiple tasks having same name (same is followed by the Snowflake implementation).<br />
* B-07659: In-memory flowchart preset Case Conformance to visualize conformance checking violations.<br />
* B-07571: Added function IsConformant to backend to check whether cases are conformant.<br />
* B-07863: Added function ConformanceViolationsFlows to backend to return nonconformance reasons for violating cases.<br />
* B-07844: Support for "array" aggregation to return aggregated items as array.<br />
* B-07856: Support for creating and accessing arrays and objects in SQL expressions.<br />
* B-07860: Array handling functions and Tasks property for DesignModel entity.<br />
* B-07847: Added throttling for QPR ScriptLauncher client-side imports to limit memory usage.<br />
* B-07811: Snowflake query optimization to omit columns that are not used by the query.<br />
<br />
'''Fixed issues:'''<br />
* D-13632: Going from variations to event types led to very poor performance with certain models.<br />
* D-13628: Statistical calculations were incorrectly not applied in chart CSV export.<br />
* D-13575: SQL script may have given error "Operand type clash: nvarchar(max) was incompatible with sql_variant".<br />
* D-13597: UI supports now datatable column type "ShortString" (previously datatable contents preview and CSV import didn't work).<br />
* D-13536: Using business calendar sometimes gave error "System.InvalidOperationException: Collection was modified".<br />
* D-13477: Chart types without y-axis mapping caused an error when series mapping was used.<br />
* D-13453: _model variable was not available for Snowflake expression filter rules.<br />
* D-13527: Checkbox height didn't increase when long label needed to span to multiple lines.<br />
* D-13363: Snowflake query with EvaluateAfterAggregations and IsHidden failed when dimensioning by case id column.<br />
* D-13383: Snowflake query gave error "Invalid column name 'FromCase Name'".<br />
* D-13523: Request id was incorrectly shown as zeros in error messages.<br />
* D-13541: In CSV import, error message for maximum number of columns exceeded is improved (maximum is 300 column for SQL Server).<br />
* D-13583: Objects count in header didn't work for empty Snowflake model.<br />
* D-13553: Larger pacm files can now be imported, as there isn't error "Request body too large. The max request body size is 30000000 bytes".<br />
* D-13306: Stack overflow error was given when using SqlDataFrames.<br />
* D-13487: When Flows root and there was filter in Values expression, some flows were lost.<br />
* D-13540: SqlDataFrame query with 300 columns failed to error "WithExpressionColumn: No name given for the new column".<br />
* D-13429: Ordering in List aggregation couldn't find columns in dataframe query.<br />
* D-13406: Dataframe query with root FlowOccurrences and get value from cases caused error.<br />
* D-13538: There was incorrect handling of escaping characters in column names used in dimensions.<br />
* D-13633: Fixed ordering in List aggregation with null and empty values.<br />
* D-13636: Query that dimensions by numeric case attribute with AggregateOthers true, caused error.<br />
* D-13589: Creating Snowflake datatable did not connect to Snowflake.<br />
* D-13623: Value expressions without aggregation didn't work with AggregateOthers setting.<br />
* D-13554: In in-memory chart, percentile function might have return both Int64 and Double type of objects which cannot be sorted.<br />
* D-13481: Improved error message when trying to use deleted model.<br />
* D-13621: Dynamic value search dialog had incorrect font in lists.<br />
* D-13610: Some invalid BPMN files crashed BPMN editor.<br />
* D-13614: Checkbox label texts overflowed to right.<br />
* D-13520: Removed excessive parameters from the Query Designer for generic context queries.<br />
* D-12998: QPR icon was incorrectly positioned in header in Safari.<br />
* D-13480: Import to duration data type is removed from Snowflake datatables, and for local datatables duration type maximum size is checked.<br />
* D-13517: In Highcharts-based visualizationsm conditional formatting didn't work for other than the first y-axis mapping.<br />
* D-13529: In some presets containing several on-screen settings, when chart showed in error message, on-screen settings showed invalid selection.<br />
* D-13530: Opening dropdown list caused JavaScript error when the list contents should be empty after it previously contained items.<br />
* D-13486: Removed unreachable error message in CSV import.<br />
* D-13524: Fixed in-memory chart flow occurrences root measures "Event attribute (text)" and "Event attribute (number)" that caused error.<br />
<br />
== QPR ProcessAnalyzer 2023.2 (build 1478) (released 2023-03-22) ==<br />
<br />
'''Features:'''<br />
* B-07755: [[Business_Calendar|Business calendar]] for duration calculation is available for Snowflake models.<br />
* B-07719: In Snowflake dashboards, [[Big_Data_Chart#Using_measure_variables|measures can be assigned to variables]] and use the variables in other measures to create combined measures.<br />
* B-07746: Changed in-memory conformance checking to not show invalid flow violations where starting or ending event type is invalid.<br />
* B-07743: [[PA_Configuration_database_table#General_Settings|Default datasource]] can be configured for datatables created by scripts, allowing to set Snowflake as default.<br />
* B-07740: System memory indicator moved from the header to User settings Version information dialog.<br />
* B-07776: New SQL expressions functions Unicode, Char and Regexp, as a basis for future rule-based process mining.<br />
* B-07741: Backend support for aggregation operations Median, Percentile, Stdev, Stdevp, Var and Varp to Snowflake.<br />
* B-07742: Backend support for aggregation operation to list unique items in Snowflake.<br />
* B-07770: Optimized Snowflake SQL generation by combining consecutive WithColumn function calls into one select.<br />
<br />
'''Fixed issues:'''<br />
* D-13491: QPR ProcessAnalyzer server crashed now and then when sorting was in progress and the query was cancelled.<br />
* D-13380: Dimensioning integers in in-memory core calculation didn't work correctly as 0 and -1 were put to same bucket.<br />
* D-13385: In Workspace Bin, Delete Forever and Restore from Bin buttons were misaligned.<br />
* D-13332: Conformance checking didn't show in violations when there were multiple undesired events in same case.<br />
* D-13405: Images take now always all available space in image component area.<br />
* D-13417: KPI card without title was slightly misaligned vertically.<br />
* D-13438: Clicking selected event type or flow in flowchart didn't cancel the filter selection.<br />
* D-13350: Task log and Script log default filter end date is now empty by default.<br />
* D-13381: Disabled browser auto-complete from flowchart variation stepper and Workspace create/rename object dialog.<br />
* D-13347: Improved performance for in-memory business calendar calculation.<br />
* D-13335: In in-memory chart, filtering didn't work in "Flow occurrences" root "Flow occurrences with specific event attribute value" dimension.<br />
* D-13367: Percentage value wasn't displayed properly with German or Spanish language when event types were shown in object counts indicator.<br />
* D-13451: Exported filter file is now named based on selected filter name.<br />
* D-13378: In Big data chart, prevented error "Unable to aggregate from level RootCauses to level Custom".<br />
* D-13293: DataFrame query with root Flows and IncludeEvents and ExcludeEvents filter rules failed.<br />
* D-13370: Fixed issue where on-screen settings that didn't have any selectable items, showed a strange selection.<br />
* D-13392: Clustering analysis was incorrectly shown when originally in-memory chart was converted into big data chart by changing chart json settings.<br />
* D-12784: Some Snowflake queries incorrectly bypassed Snowflake caching because they used unique object names.<br />
* D-13456: Improved error messages for incorrectly configured on-screen settings.<br />
* D-13445: Conformance violations related translated terms have been fine-tuned for better translations into different languages.<br />
* D-13421: Improved error messages when trying to use model having some column mappings missing.<br />
* D-13485: Snowflake business calendar gave error when calendar contained Sunday.<br />
* D-13218: Windows event viewer incorrectly contained log entries that are not errors.<br />
* D-12634: Multiline text boxes width is set to non-changeable.<br />
* D-13034: Confirmation dialog to delete items permanently has been updated.<br />
* D-13288: In dialogs, the Create button didn't show the disabled state correctly.<br />
* D-13427: When dropdown lists didn't have any selectable items, the "N/A" text appeared and the list incorrectly took more space vertically.<br />
* D-13483: In Workspace, the new items menu was too narrow for Spanish texts.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2023.1 (build 1449) (released 2023-02-24) ==<br />
<br />
'''Features:'''<br />
* B-07690: System setting [[PA_Configuration_database_table#General_Settings|DatabaseId]] can be defined by administrator to get more simple table names in Snowflake.<br />
* B-07737: In flowchart Bottlenecks preset, originally used flow colors has been recovered.<br />
* B-07748: For Analyzed objects "Conformance checking findings" in charts, terminology has been revised and issue with the case count calculation fixed.<br />
* B-07663: In [[Chart_On-screen_Settings|on-screen settings]], when case/event attribute is selected, related attribute values list are reset.<br />
* B-07570: Backend support for [[Business_Calendar|business calendars]] in Snowflake.<br />
* B-07660: Backend support for conformance checking to show also the last event index and event type in NotCompleted reason.<br />
* B-07610: Memory counter related technical properties have been removed from expression language.<br />
<br />
'''Fixed issues:'''<br />
* D-13349: Opening dashboard containing Root causes preset with default settings jammed the system by generating lot of calculations (for more information, see previous release notes).<br />
* D-13277: Stacked charts with date type of data as series did incorrectly show gaps in columns/bars.<br />
* D-13270: Flowchart conditional formatting didn't work with duration multi-unit format.<br />
* D-13358: Calculation results caching works also across different user sessions.<br />
* D-13250: Dashboard with two charts connected with linked settings using variables ended up to to a never ending loop.<br />
* D-13230: SAP import did not automatically create columns to use the correct column types.<br />
* D-12857: Deeply recursive functions caused a crash without any trace.<br />
* D-12994: In Workspace, some buttons were not clickable due to breadcrumb covering them.<br />
* D-13249: In Workspace, there was incorrect error message for duplicate datatable names when there were items with only letter capitalization was different.<br />
* D-13232: In-memory chart Top variations preset is now sorted secondarily by average duration descending.<br />
* D-13300: Setting DashboardFilter variable to empty value didn't have any effect in dashboard but old value was incorrectly used.<br />
* D-12834: Limited the maximum number of dimensions to 20, to avoid too demanding queries for SQL Server.<br />
* D-12917: Changed visual indication of missing items in dropdown lists (it's no longer showing "***").<br />
* D-13111: In Root causes preset, there is now error message when trying to use weighting related columns when weighting isn't in use.<br />
* D-13124: SQLDataFrame query containing filter rule EventTypes aggregating from cases failed.<br />
* D-13207: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed.<br />
* D-13292: Dataframe query with AggregateOthers, AggregationFunctionForOthersRow and EvaluateAfterAggregations failed (rev.2).<br />
* D-12991: Dropdown list texts had some translations missing.<br />
<br />
== QPR ProcessAnalyzer 2023.1 (build 1433) (released 2023-02-07) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release contains a potentially severe issue, where some dashboards completely jam the system by generating lot of calculations. The issue may appear in dashboards that have been created in earlier releases and containing the Root causes preset with default settings. The issue will be fixed by the next release. The issue can be worked around by exporting the affected dashboard, modifying the dashboard file manually and importing the dashboard back. The required modification is to remove line(s) containing <pre>"preset": "RootCauses"</pre> and the comma from the preceding line.<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Following legacy analyses have been removed: Cases (analysis number: 5), Events (6), and EventTypes (7). This functionality may be in use in SQL scripts (in [[SQL_Scripting_Commands#--.23GetAnalysis|--#GetAnalysis]] command), and thus needs to be changed to the [[SQL_Scripting_Commands#--.23RunQuery|--#RunQuery]] command (see the [[RunQuery_Script_Examples|examples page]] how each legacy analysis can be replaced). Note that the legacy analyses removal don't affect the dashboarding functionality.<br />
<br />
Following script can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] to show whether there are scripts that use the removed analyses (and thus require migration):<br />
<pre><br />
let removedAnalyses = [5, 6, 7];<br />
OrderByDescending(Flatten(Projects.Scripts).Where({<br />
let scr = _;Sum(removedAnalyses.("'AnalysisType','" + _ + "')").{let num=_;(scr.code ?? "").Replace(" ", "").Replace("\t", "").Replace("\n", "").Replace("\r\n", "").Replace("\r", "").Contains(num)})>0;<br />
}),LastRunStart).(Project.Name + ": " + name + " (id: " + id + ") (last run: " + (LastRunStart ?? "N/A") + ")");<br />
</pre><br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2023.1, the '''.NET Desktop Runtime''' is not needed anymore for QPR ProcessAnalyzer Server, so it can be uninstalled. Also for QPR ScriptLauncher, ''.NET Desktop Runtime'' is not needed, but instead install the '''.NET Runtime''' (which is more lightweight). ''.NET Desktop Runtime'' contains the ''.NET Runtime'', so the actions are not mandatory when updating to QPR ProcessAnalyzer 2023.1.<br />
</div><br />
<br />
'''Features:'''<br />
* B-06997: Expression-based filter rules for Snowflake dashboards to allow versatile filtering and filtering from custom expressions.<br />
* B-07383: Improvements to linked settings to allow binding to variables, tags and filter rules [[Chart_Linked_Settings|(more information)]].<br />
* B-07508: Flowchart preset colors have been renewed to be more intuitive.<br />
* B-07184: Automation preset in flowchart has now options for selecting the Automation attribute and value.<br />
* B-07512: Changed datatable metadata can be refreshed from Snowflake, and all rows in the datatable can be deleted easily in Workspace [[QPR_ProcessAnalyzer_Project_Workspace#Datatables|(more information)]].<br />
* B-07440: Date when the release was made is now shown in User settings.<br />
* B-07595: WeekOfYear property for DateTime objects in expression language to get the week number of a year (between 1 and 53).<br />
* B-07623: In-memory expression language functions Random (to get random numbers) and Hash (to get hash value of string).<br />
* B-07612: Breadcrumb in Workspace has now a Home button to quickly navigate to the top level of the projects hierarchy.<br />
* B-07637: Language selector now shows the language options in local languages.<br />
* B-07228: Remove following deprecated analyses: Cases, Events, and EventTypes (see the release note above).<br />
* B-07538: Backend support: Snowflake root causes analysis can find event attribute related root causes.<br />
* B-07706: Backend support: Snowflake expression-based filter rules support for roots containing Where function.<br />
* B-07611: Removed following legacy filter rules: CaseAttributeTrend, EventAttributeTrend, EventTypeTrend, and Duration.<br />
* B-07598: Refactored client-side import for SQL scripting to use generic client-side task mechanism.<br />
* B-07716: ShortString columns are now properly detected in SQL Server queries.<br />
* B-07652: Now it's possible to pipe multiline expression strings to QPR ScriptLauncher.<br />
* B-07688: AddColumns function for Datatables to create multiple columns in one call.<br />
<br />
'''Fixed issues:'''<br />
* D-13092: Table conditional formatting didn't work when color code was fetched from other column.<br />
* D-13105: Some charts created in earlier release referring to non-existing presets names appeared as empty after software update.<br />
* D-13107: Flowcharts crashed and showed loading animation forever when setting color or flow thickness to non-numerical measure.<br />
* D-13104: In BPMN model editor, context menus to edit elements didn't appear.<br />
* D-12939: Script editor tabs Close buttons didn't work.<br />
* D-13154: "Search by case ID" didn't work in in-memory chart.<br />
* D-12933: CSV columns with only empty values were incorrectly auto-detected as integers.<br />
* D-12929: In-memory chart Root causes for case duration and Root causes for case attributes (weighted) had Custom expression missing.<br />
* D-12928: Pivot table headers were empty when there were two column levels and two values.<br />
* D-12924: Pivot table columns with Count and Distinct Count aggregations are now numeric and aligned right.<br />
* D-13033: Changing colors in chart settings Color palette caused "Item already exists" error and prevented changing colors.<br />
* D-12996: Tags referring to dashboard variables didn't work in Additional root expression.<br />
* D-12877: UI gave error in some situations: Uncaught TypeError: Cannot read properties of undefined (reading 'min').<br />
* D-13071: Prevented selecting two or more of the Y-axis, X-axis and series mappings at the same time for the same measure or dimension.<br />
* D-12895: Big data chart crashed when on-screen setting contained event type selector and there were no event type filter set.<br />
* D-13231: Tooltips for dashboard name, model selector and filter selector in header show now the content text instead of generic instruction.<br />
* D-13139: There was an error when tried to create filter for a custom expression where selected data type didn't match with the actual type of data.<br />
* D-12988: Chart presets selection in chart settings showed unnecessary tooltip.<br />
* D-12901: When set sampling over 1 million, Snowflake models gave error: parameter value out of range: size of fixed sample. Must be between 0 and 1,000,000.<br />
* D-12904: Creating expression filter having lower/greater logic with root objects sampling failed.<br />
* D-12923: Chart schema didn't accept pivotAggregation in dimensions/columns.<br />
* D-12926: Root causes columns Selected weight, Compared weight and Total weight have now correct float data type.<br />
* D-12880: In out-of-the box dashboards, chart titles and subtitles were not translated.<br />
* D-12916: Improved filter rule description text in Filter rule editor dialog for expression filter rules.<br />
* D-12889: No clear error message was given when user tried to export corrupted model from .pacm file.<br />
* D-12869: Date selector in on-screen settings had inconsistent vertical alignment.<br />
* D-12938: When creating a filter with lasso and selecting a single data point only, "equals" kind of filter rule is now created.<br />
* D-12989: "Running tasks as specific time" system report may have ended up in loop causing following error: Maximum call stack size exceeded error.<br />
* D-13010: Pivot table sometimes ended up to never-ending resizing loop when browser zoom was more than 100%.<br />
* D-12790: Expression language: DataFrame.SetColumns: Initializing and using variables defined in closure of SetColumns function parameter didn't work<br />
* D-12927: All on-screen settings were not be visible in narrow charts having several on-screen settings.<br />
* D-12937: Added maximum value limitation to several number input fields in charts.<br />
* D-12947: Message dialog didn't show line breaks correctly (e.g., in CSV file import).<br />
* D-12948: Defining column setting caused error when Measure Expression was not defined.<br />
* D-12946: Filter rule text couldn't be seen entirely from tooltip.<br />
* D-12983: When range filtering using integer values in Highcharts chart, filter is now shown as integer value.<br />
* D-12984: When range filtering in Highcharts charts and there is category axis, filter rule is now based on individual (category) values.<br />
* D-12930: When creating filters from charts using date type of X-axis with lasso, "greater than or equal" and "less than or equal" filter rules are not created.<br />
* D-12920: "Where" function in DataFrame lost column data types of the original DataFrame.<br />
* D-13048: Model notifications failed with certain measures that define variables in root expression leading to error: Variable "sampleSize" already exists in this context.<br />
* D-13116: BPMN editor had some translations missing.<br />
* D-13019: Datatable and script selectors show now datatable/script name instead of id, when opening selector having existing selections.<br />
* D-12951: Changing additional root expression in flowchart didn't refresh the flowchart.<br />
* D-13147: Filter rule boxes in header had different widths, and Add filter rule button vertical alignment was incorrect.<br />
* D-12907: Sometimes case attribute selection showed incorrect attribute name for empty model.<br />
* D-13148: Filters and Datatables system reports loaded unnecessarily twice which could be seen as blinking.<br />
* D-12844: In dataframe query, FlowOccurrences in root and GetValueFrom Cases with filter gave null reference exception<br />
* D-12915: Repeating certain query twice with aggregations in Events root generated invalid SQL<br />
* D-12728: Was huge amount logs in server during client side import (manual testing required as identification)<br />
* D-13156: Persist function failed to snowflake: Invalid unicode escape sequence '\u0027ACCE'; should be at most '\u0010FFFF'.<br />
* D-12876: Flows/FlowOccurrences in root didn't work with SqlExpressionValue filtering.<br />
<br />
== Additional release for QPR ProcessAnalyzer 2022.8 (build 1397) (released 2023-01-11) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
This release fixes an issue where extracting large datasets from SAP increases memory consumption considerably and may lead to out-of-memory error. This release contains packages for both QPR ScriptLauncher and QPR ProcessAnalyzer Server. If SAP extractions are done using QPR ScriptLauncher in client side mode (ExecuteInClientSide=1), it's enough to update QPR ScriptLauncher to fix this issue.<br />
</div><br />
<br />
'''Fixed issues:'''<br />
* D-12941: Extracting data from SAP consumed unnecessary lot of memory and may have led to out-of-memory error (both when running using QPR ScriptLauncher and in server side).<br />
<br />
== QPR ProcessAnalyzer 2022.8 (build 1396) (released 2022-12-30) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Creating datatables with duplicate names in the same project is prevented, and possible existing duplicate names are automatically changed to unique names with a random suffix. If there are duplicate names, they can be renamed either before updating QPR ProcessAnalyzer (to avoid automatic renaming) or after the update (by changing suffixed names). If the renamed datatables are used by models, the linkage will break because it's based on the datatable name. Creating duplicate datatables has already been prevented in the UI, but the improved method works also in the API level.<br />
<br />
Following SQL query can be used to list datatables (and project id) having duplicate names:<br />
SELECT ITA_NAME, ITA_PROJECT_ID<br />
FROM PA_INTEGRATION_TABLE<br />
GROUP BY ITA_NAME, ITA_PROJECT_ID<br />
HAVING Count(*) > 1<br />
</div><br />
<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
If trying to use business calendar for a model that doesn't have the business calendar defined, there will now be an error message instead of showing the chart. Either unselect the business calendar checkbox for the measure or dimension, or define a business calendar to the model. In this situation in earlier releases the business calendar was ignored and full time calculation used.<br />
</div><br />
<br />
'''Features:'''<br />
* B-07498: Automation and Operational Excellence presets and Root causes analysis (for Snowflake), Weighted root causes analysis and Event scattering preset (for Snowflake and in-memory), Root causes for case duration (in-memory).<br />
* B-07177: Flexible mappings, user selectable aggregations and conditional formatting for Pivot table, and flexible mappings for KPI Card.<br />
* B-07518: New function named Query to run call /api/expression/query.<br />
* B-07294: In Workspace, the left side projects hierarchy can be collapsed and expanded to make more space to project contents.<br />
* B-06814: In SQL expressions, new function DurationBetweenDates to calculate duration between timestamps precisely.<br />
* B-07519: Replaced DateDiff function with the new DurationBetweenDates function in big data chart.<br />
* B-07531: In SQL expressions, new mathematical functions Abs, Log, Mod, Power, Rand, Sign and Sqrt.<br />
* B-07297: To optimize performance, Snowflake queries are automatically cancelled if they are not needed by UI.<br />
* B-07569: To optimize performance, TakeSample function implementation is improved for Snowflake.<br />
* B-07198: Several performance improvements to DataFrame queries (used in Snowflake).<br />
* B-07464: Added Lead and Lag functions to SqlDataFrames to support getting previous and next event.<br />
* B-07470: New ExtractSap function to fetch data from SAP using expression language.<br />
* B-07536: New Pivot function to SqlDataFrames to enable root causes analysis.<br />
* B-07488: Primary keys can be set to datatables to improve calculation performance (UI will follow later).<br />
* B-07515: Added RootCauseAnalysis function to SqlDataFrames.<br />
* B-07546: RootCauseAnalysis function support for complex weighting expressions.<br />
* B-03052: Support for user-defined variables in /api/expression/query.<br />
* B-07565: Support for NumberPrecision, DatetimeTruncation and TimespanPrecision properties for Values section in in-memory query.<br />
* B-07513: For product activation file handling, replaced mutex based implementation with exclusive file lock.<br />
* B-07480: Expression language support for DataFlows for data extraction.<br />
* B-07613: Removed support for SQL Server based R scripting.<br />
* B-07567: Take datatable primary keys into use in expression builder to improve performance (part 2).<br />
* B-07588: Remove total memory information from log writing and DateDiff function for in-memory.<br />
<br />
'''Fixed issues:'''<br />
* D-12715: Snowflake calculated imprecisely some operations containing division and aggregation.<br />
* D-12761: Progress bar of the CSV import dialog didn't show any progress.<br />
* D-12799: Opening datatable contents dialog settings was slow when there were lot of rows in the datatable.<br />
* D-12089: Include conforming/nonconforming cases made BPMN editor no responding.<br />
* D-12496: Datagrid filter search keyword didn't work for rounded values, so the search was hidden for other than textual data.<br />
* D-12704: Durations as quarters was calculated incorrectly in charts.<br />
* D-12662: Fixed issue where some special literals in custom expressions didn't work.<br />
* D-12403: Setting Notifications on a model had some visual issues.<br />
* D-12859: Dependency wheel visualization crashed with nulls values in From and To mappings.<br />
* D-12660: Removed unnecessary float conversions in SQL expressions.<br />
* D-12653: In-memory datafram OrderByColumns function with mixed values failed.<br />
* D-12657: When trying to use milliseconds period in some presets, frontend frozed.<br />
* D-12706: Line breaks in data were shown in many places where it's undesired.<br />
* D-12719: Syncfusion dialog headers showed backslaces incorrectly.<br />
* D-12372: Refused to run the JavaScript URL because it violated the Content Security Policy directive.<br />
* D-12730: Logging out when filter selection is in progress, gave javascript error.<br />
* D-12705: Header object counts tooltip was sometimes messed after logout.<br />
* D-12384: Selected project was not highlighted for whole project name string.<br />
* D-12581: Prevented creating duplicate datatable names in same project in parallel execution.<br />
* D-12722: There was incorrect syntax near '<' when running SqlDataFrame expressions.<br />
* D-12736: Swedish and Finnish translation improvements for object counter tooltips.<br />
* D-12702: For BPMN Editor component "Something went wrong" error was given when switching from in-memory to Snowflake model.<br />
* D-12712: UI gave error: TypeError: Cannot read properties of undefined (reading 'id').<br />
* D-12738: Business calendar showed total business time when calendar configuration was invalid.<br />
* D-12776: Special character filter caused JavaScript SyntaxError.<br />
* D-12785: Unnecessary vertical scrollbar displayed for main header toolbar.<br />
* D-12164: There was unnecessary UnauthorizedAccess errors in logs.<br />
* D-12580: Case duration was not same when comparing Big data chart with in-memory chart for same data.<br />
* D-12768: Data grid links and variable change actions didn't work when grouping was used.<br />
* D-12735: FindRootCauses (in-memory) function filtered out cases with zero contribution.<br />
* D-12763: --#CallWebService didn't work from ScriptLauncher.<br />
* D-12789: There was timeout in SQL queries to scripting sandbox.<br />
<br />
== QPR ProcessAnalyzer 2022.7 (build 1331) (released 2022-11-15) ==<br />
<div style="border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;"><br />
Starting from QPR ProcessAnalyzer 2022.7, to improve security expression language operations that modify data or connect to external datasources are prevented in dashboard custom expressions. The limitation is required, because when a dashboard is opened, its expressions are run with the user's permissions, and the user need to trust the expressions don't perform any unexpected operations, such as delete data. The full functionality of the expression language is available in the scripts and in the Expression Designer.<br />
<br />
The following functions and operations are prevented in dashboards: SendEmail(), CallWebService(), ImportOdbc(), ImportOdbcSecure(), Model.DeletePermanently(), Model.Restore(), Model.TriggerNotifications(), Project.DeletePermanently(), Project.Restore(), Project.CreateDatatable(), Datatable.AddColumn(), Datatable.DeletePermanently(), Datatable.Import(), Datatable.Merge(), Datatable.RemoveColumns(), Datatable.RenameColumns(), Datatable.Truncate(), RecycleBin.DeletePermanently(), and call SQL script. Calling expression scripts is allowed, but in the script all previously mentioned operations are prevented.<br />
<br />
Following SQL query can be executed in the QPR ProcessAnalyzer metadata database to reveal dashboards that potentially have prevented expressions:<br />
SELECT * FROM [PA_UI_ELEMENT] WHERE [UIE_PROPERTIES] LIKE '%SendEmail(%' OR [UIE_PROPERTIES] LIKE '%CallWebService(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbc(%' OR [UIE_PROPERTIES] LIKE '%ImportOdbcSecure(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Restore(%' OR [UIE_PROPERTIES] LIKE '%TriggerNotifications(%' OR [UIE_PROPERTIES] LIKE '%CreateDatatable(%' OR [UIE_PROPERTIES] LIKE '%AddColumn(%' OR [UIE_PROPERTIES] LIKE '%DeletePermanently(%' OR [UIE_PROPERTIES] LIKE '%Import(%' OR [UIE_PROPERTIES] LIKE '%Merge(%' OR [UIE_PROPERTIES] LIKE '%RemoveColumns(%' OR [UIE_PROPERTIES] LIKE '%RenameColumns(%'<br />
</div><br />
<br />
'''Features:'''<br />
* B-07287: Process Discovery and most important presets for Snowflake.<br />
* B-07271: "Last Row Aggregates Over-limit Rows" setting for big data chart.<br />
* B-06431: Snowflake datatables support for database views in the datasource.<br />
* B-07266: Security: "limited mode" to prevent data modifications and external calls from dashboard expressions.<br />
* B-07097: Improved flowchart root causes color scales.<br />
* B-07363: SQL LIKE function support for escape character.<br />
* B-06877: Improved variation queries performance in Snowflake, part 1.<br />
* B-07444: Improved variation queries performance in Snowflake, part 2.<br />
* B-07382: Support for empty strings and nulls in event type names in dataframe processing.<br />
* B-07273: WithRowNumberColumn, WithRankColumn, WithDenseRankColumn support for descending sorting.<br />
* B-07303: FindRootCauses function support for weighting expression.<br />
* B-07327: Unpivot function for SqlDataFrames (for root cause analysis).<br />
* B-07385: Align token lifetime with SESSION_MAXIMUM_DURATION setting.<br />
* B-07500: ColumnMappings property for IDataFrame and DataTables.<br />
* B-07499: IDataFrame.ApplyFilter function to filter events data using a JSON-based filter.<br />
* B-07469: Translation updates for release 2022.7.<br />
<br />
'''Fixed issues:'''<br />
* D-11630: Drag and drop from chart settings to main header was working incorrectly for filter and root cause rules.<br />
* D-12455: Moving a chart filter from one chart to another created a root cause analysis filter.<br />
* D-12266: Root causes analysis showed incorrect results when certain combination of filters.<br />
* D-12525: Numerical values in Excel export in data grid was formatted incorrectly.<br />
* D-12534: Restoring item from recycle bin changed project from Bin to previous project.<br />
* D-12529: Measure specific datalabel mapping did not work correctly when also mapped to Y-axis.<br />
* D-12532: Multi-selection options caused layout issue for Chart setting.<br />
* D-12541: Layout issue for Polish in multiselect list search dialog.<br />
* D-11277: Increase/decrease Icons were missing in the dimension sorting for Mac.<br />
* D-12552: Uncaught Error: Diagram.selectCollection given something that is not a Part: null.<br />
* D-12567: Tooltip incorrectly showed for label component containing only spaces.<br />
* D-12438: Operation was cancelled because it was replaced by a new operation.<br />
* D-12551: Some expressions didn't work as calculated case/event attributes.<br />
* D-11720: Chart buttons were not visible in Apple Safari and iPad.<br />
* D-12544: On-screen settings "options" parameter did not work.<br />
* D-12528: Multi-unit time unit selection appeared where it's not applicable.<br />
* D-12583: Error message should be provided for invalid settings input than just display JS errors.<br />
* D-12599: Tooltips didn't show correct measures/dimensions when "Show in tooltip" mappings are used.<br />
* D-12561: Chart settings content was incorrectly drawn outside of the chart dialog.<br />
* D-12568: Reload UI sometimes crashed chart having multiselect on-screen settings.<br />
* D-12572: Main header toolbar lost when refresh maximized PA chart.<br />
* D-12612: Drop Unused Filters After setting incorrectly allowed zero seconds.<br />
* D-12533: Error message keeped blinking in Analysis view.<br />
* D-12608: User could not select or add new case attribute when current select attribute doesn't exist.<br />
* D-12451: Prevented deleting running script.<br />
* D-12516: Windows event viewer warning: Failed to gracefully shutdown application.<br />
* D-12523: Business calendar performance - part 2.<br />
* D-12538: Column with same name could be added multiple times to datatable using expression language.<br />
* D-12582: Improved EMS mutex code to support multiple PA service in one server.<br />
* D-12624: Synchronize new (empty) data table generated failed queries in Snowflake.<br />
* D-12622: Advanced setting page reserved room for the expression editor frame that did not exist.<br />
* D-11295: In on-screen settings, some UI controls were vertically misaligned.<br />
* D-11625: The heights of the parameter option menu in the clustering tab was not well aligned.<br />
* D-12103: Small dropdown list layout issue.<br />
* D-12633: Align issue for Column related Advanced settings.<br />
* D-12505: Search dialog didn't escape % and _ characters correctly in dataframe processing.<br />
* D-12645: Tabs in expression settings dialog were partly hidden when dialog is narrow.<br />
* D-11382: Moving of flowchart was sometimes shaky.<br />
* D-12655: Filter rule tooltips in header were styled incorrectly.<br />
* D-12656: Large integer values in filter jsons were incorrectly presented as small integers.<br />
* D-12661: Some exported filters contained unnecessary "invert" property.<br />
* D-12500: Model with numeric case id's and filtering with the attribute mapped as case id: ERROR [22018] Numeric value <nowiki>''</nowiki> is not recognized.<br />
* D-12509: Filtering null values didn't work in boolean attributes in Snowflake.<br />
* D-12571: In dataframe processing in SQL Server, dividing two integers should not make rounding to integer.<br />
* D-12610: Setting for global DropUnusedFiltersAfter was missing.<br />
* D-12613: Filtering with case/event attributes with null values didn't match in Snowflake models.<br />
* D-12617: Model didn't work when DropUnusedFiltersAfter is 00:00:00.<br />
* D-12618: If model ConfigurationJson is null, Configuration property didn't work.<br />
* D-12620: Filtering didn't work when there are backslaces in attribute names in Snowflake models.<br />
* D-12643: AttributeFunctionCallExpression did not always work properly in array context.<br />
* D-12647: SqlDataFrame with SQL Server: Comparing literals to variant column values failed.<br />
* D-12648: Models that have DropUnusedModelsAfter setting caused "The sliding expiration value must be positive" error.<br />
* D-11526: It was unable to translate Unicode character \uD83D at index 176 to specified code page.<br />
* D-12637: In application startup arised FATAL Application startup exception System.UnauthorizedAccessException: Access to the path 'Global\MutexQPRPAActivation' is denied.<br />
<br />
== Old Releases ==<br />
See older releases in [[QPR ProcessAnalyzer Release Archive]]<br />
__NOTOC__<br />
<br />
[[Category: QPR ProcessAnalyzer]]</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Objects_in_Expression_Language&diff=24450QPR ProcessAnalyzer Objects in Expression Language2024-02-27T12:03:59Z<p>Ollvihe: /* Project */</p>
<hr />
<div>==Filter==<br />
Filters contain a set of filter rules used to filter cases and events in models. Filters are objects located in the models. Filters are owned by the creator user, and when a filter publish mode is private, only the creator can use it.<br />
<br />
{| class="wikitable"<br />
!'''Filter properties'''<br />
! '''Description'''<br />
|-<br />
||CreatedBy (User)<br />
||Returns the user who created the filter.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Returns date when the filter created date.<br />
|-<br />
||Description (String)<br />
||Returns description of the filter.<br />
|-<br />
||Id (Integer)<br />
||Returns id of the filter.<br />
|-<br />
||LastModifiedBy (User)<br />
||Returns user who modified the filter.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Returns date when the filter last modified.<br />
|-<br />
||Model<br />
||Returns model where the filter belongs to.<br />
|-<br />
||ModelId (Integer)<br />
||Returns model where the filter belongs to.<br />
|-<br />
||Name (String)<br />
||Returns the name of the filter.<br />
|-<br />
||Project<br />
||Returns project where the filter belongs to.<br />
|-<br />
||ProjectId (Integer)<br />
||Returns project id where the filter belongs to.<br />
|-<br />
||PublishMode (String)<br />
||Returns publish mode of the filter, one of the following: '''Private''', '''Public''', or '''Default'''.<br />
|-<br />
||Rules (Dictionary)<br />
||Returns a dictionary containing the filter rules in the filter.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Filter Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||<br />
Deletes the filter permanently. To delete own filters, the '''Filtering''' permission is needed, and to delete any filters the '''ManageViews''' permission is needed.<br />
|-<br />
||Modify<br />
||Dictionary<br />
||<br />
Modifies filter properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: ''Name'', ''Description'', ''PublishMode'', and ''Rules''.<br />
<br />
The function returns the updated filter object. Requires ''GenericWrite'' permission for the Project and global ''CreateModel'' permission.<br />
<br />
Example:<br />
<pre><br />
FilterById(1)<br />
.Modify(#{<br />
"Name": "My filter",<br />
"Description": "My description",<br />
"PublishMode": "Public",<br />
"Rules": #{<br />
"Items": [<br />
#{<br />
"Type": "IncludeCases",<br />
"Items": [<br />
#{<br />
"Type": "CaseAttributeValue",<br />
"Attribute": "Account Manager",<br />
"StringifiedValues": [<br />
"0Mary Wilson"<br />
]<br />
}<br />
]<br />
}<br />
]<br />
}<br />
}<br />
)<br />
</pre><br />
|}<br />
<br />
Function to get filter id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||FilterById<br />
||<br />
* Filter id (Integer)<br />
||<br />
Returns Filter object corresponding to the provided filter id.<br />
|}<br />
<br />
==Model==<br />
Notes:<br />
* For in-memory models that are offline, the object counts represent the situation when the model was last time online (loaded into the memory). ''null'' is returned if the model has never been loaded into the memory.<br />
* If [[Case_Level_Permissions|Case permissions]] are used for the model, and user doesn't have '''GenericWrite''' permission for the model, ''null'' is returned for data security reasons. Users that have the '''GenericWrite''' permission, see null when the model is offline, and when online, they see counts where the case level permissions settings are applied.<br />
* Properties ''CaseAttributes'', ''EventAttributes'' and ''Eventlog'' work only for the in-memory models and they require the model to be loaded into the memory. If the model is not in the memory, it is loaded when these properties is used. Other model properties down require the model to be in the memory.<br />
<br />
{| class="wikitable"<br />
!'''Model properties'''<br />
! '''Description'''<br />
|-<br />
||Calendars (BusinessCalendar*)<br />
||<br />
Returns all [[Business_Calendar|business calendars]] stored to the Model as an array. Returns an empty array, if there are no business calendars stored to the model. Note: UI allows to set only one business calendar for a Model.<br />
|-<br />
||CaseAttributes (AttributeType*)<br />
||[[#AttributeType|CaseAttributes]] in the model returned in the alphabetical order. Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||CasesDatatable (Datatable)<br />
||Returns the Datatable the model uses as a datasource for cases. Returns ''null'' if the cases Datatable is not defined or if model uses other than the Datatable datasource.<br />
|-<br />
||Configuration (Dictionary)<br />
||Returns the Model configuration as dictionary. Example:<br />
<pre><br />
ModelById(123).Configuration.DataSource.Events.DataTableName<br />
</pre><br />
|-<br />
||ConfigurationJson (String)<br />
||Returns the Model configuration as JSON string.<br />
|-<br />
||CreatedBy (User)<br />
||User who created the model.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the model was created.<br />
|-<br />
||DefaultCalendar (BusinessCalendar)<br />
||Returns the default [[Business_Calendar|business calendar]] of the Model. Returns ''null'', if there are no calendars in the Model or no calendar has been set as a default calendar. Note: UI allows to set only one business calendar for a Model, which is also the default calendar.<br />
|-<br />
||DefaultFilter (Filter)<br />
||Default filter of the model. Returns ''null'' if the model does not have a default filter.<br />
|-<br />
||DefaultFilterId (Integer)<br />
||Default filter id of the model. Returns ''null'' if the model does not have a default filter.<br />
|-<br />
||Description (String)<br />
||Model description. The model description may contain line breaks.<br />
|-<br />
||DeletedDate (DateTime)<br />
||Timestamp when Model was deleted (moved to the recycle bin).<br />
|-<br />
||DeletedBy (User)<br />
||User how deleted the Model.<br />
|-<br />
||Diagrams (Diagram*)<br />
||Returns an array of all [[Diagram_in_Expression_Language|diagrams]] in the model.<br />
|-<br />
||EstimatedMemory (Integer)<br />
||Returns an estimation of how much memory in bytes the model requires.<br />
|-<br />
||EventsDatatable (Datatable)<br />
||Returns the Datatable the model uses as a datasource for events. Returns ''null'' if the events Datatable is not defined or if model uses other than the Datatable datasource.<br />
|-<br />
||EventAttributes (AttributeType*)<br />
||[[#AttributeType|EventAttributes]] in the model returned in the alphabetical order. Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||EventLog (EventLog)<br />
||EventLog containing the entire model (i.e. event log where no filters have been applied). Using this property requires that the model is loaded in the memory. If the model is not in the memory, it's loaded when this property is used.<br />
|-<br />
||Filters (Filter*)<br />
||Returns an array of all [[#Filter|filters]] in the model.<br />
|-<br />
||Id (Integer)<br />
||Model Id. Model Id is generated by QPR ProcessAnalyzer when the model is created.<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last time modified the model properties. Note that datatables containing the eventlog data are separate objects having similar fields to track the last modification and last data import.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the model was modified the last time.<br />
|-<br />
||Name (String)<br />
||Model name.<br />
|-<br />
||NCache (Integer)<br />
||Number of objects related to the model when the model is loaded into the memory.<br />
|-<br />
||NCaseAttributes (Integer)<br />
||Number of [[#AttributeType|CaseAttributes]] in model. Works only for in-memory models.<br />
|-<br />
||NCases (Integer)<br />
||Number of [[#Case|Cases]] in the model. Works only for in-memory models.<br />
|-<br />
||NEventAttributes (Integer)<br />
||Number of [[#AttributeType|EventAttributes]] in model. Works only for in-memory models.<br />
|-<br />
||NEvents (Integer)<br />
||Number of [[#Event|Events]] in model. Works only for in-memory models.<br />
|-<br />
||NEventTypes (Integer)<br />
||Number of [[#EventType|EventTypes]] in the model. Works only for in-memory models.<br />
|-<br />
||NOpens (Integer)<br />
||Number of times analysis has been requested from the model.<br />
|-<br />
||Project (Project)<br />
||[[#Project|Project]] where the model belongs to.<br />
|-<br />
||ProjectId (Integer)<br />
||[[#Project|Project]] id where the model belongs to.<br />
|-<br />
||Status (String)<br />
||<br />
Memory availability status of the model. There are the following statuses:<br />
* '''Loading''': The model is currently loading into the memory. When the loading is ready, the status changes to ''online''. If the loading fails, the status changes to ''offline''.<br />
* '''Offline''': The model is currently not loaded into the memory. The model needs to be loaded into the memory, so that analyses can be calculated from the model (occurs automatically when an analysis is requested).<br />
* '''Online''': The model is in the memory and ready for analysis calculation. If the model is dropped from the memory, its status changes to ''offline''.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Model Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||CalendarByName (BusinessCalendar)<br />
||<br />
name (String)<br />
||<br />
Returns a [[Business_Calendar|business calendar]] stored to the Model by the name of the calendar. Business calendars can be stored to models in the model properties. Returns ''null'', if a calendar with the provided name is not stored to the model.<br />
<br />
Examples:<br />
<pre><br />
ModelById(123).CalendarByName("MyCalendar")<br />
</pre><br />
|-<br />
||CreateDiagram (Diagram)<br />
||Parameters dictionary<br />
||<br />
Creates a [[Diagram_in_Expression_Language|diagram]] to the model. Parameters is a dictionary containing diagram properties. Following properties are available:<br />
* '''Name''' (string): Diagram name that distinguishes diagrams in a model.<br />
* '''Description''' (string): Diagram description text.<br />
* '''Content''' (dictionary): Diagram content as dictionary.<br />
<br />
Example:<br />
<pre><br />
ModelById(1)<br />
.CreateDiagram(#{<br />
"Name": "My diagram",<br />
"Description": "This is my new diagram",<br />
"Content": #{ ... },<br />
})<br />
</pre><br />
|-<br />
||CreateFilter (Filter)<br />
||Parameters dictionary<br />
||Creates a filter to a model. Requires ''GenericWrite'' permission for the project and global ''CreateModel'' permission. If a filter with that name already exists in the model, an exception is thrown.<br />
The parameters dictionary may have the following properties:<br />
* '''Name''': Name of the filter. This property is mandatory.<br />
* '''Description''': Description of the filter. This property is optional.<br />
* '''Rules''': Filter rules for the filter defined as a dictionary according to the [[Filtering_in_QPR_ProcessAnalyzer_Queries|filter json format]]. This property is mandatory.<br />
* '''PublishMode''': Publish mode of the filter which is one of the following: ''Private'', ''Public'' or ''Default''. This property is optional, and the default value is ''Private''.<br />
<br />
Example:<br />
<pre><br />
let newFilter = modelById(1).CreateFilter(#{ <br />
"Name": "My Filter",<br />
"Rules": #{<br />
"Items": [#{<br />
"Type": "IncludeCases",<br />
"Items": [#{<br />
"Type": "CaseAttributeValue",<br />
"Attribute": "Account Manager",<br />
"StringifiedValues": [ "0Robert Miller" ]<br />
}]<br />
}]<br />
},<br />
"PublishMode": "Public"<br />
});<br />
}<br />
</pre><br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||Deletes the Model permanently. The model doesn't need to be in the recycle bin to be able to delete it permanently.<br />
|-<br />
||Modify (Model)<br />
||Dictionary<br />
||<br />
Modifies model properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: ''Name'', ''Description'', ''ProjectId'', and ''Configuration''.<br />
<br />
The function returns the updated model object. Requires the ''GenericWrite'' permission for the project and the global ''CreateModel'' permission.<br />
<br />
Example:<br />
<pre><br />
ModelById(1)<br />
.Modify(#{<br />
"Name": "My model",<br />
"Description": "My description",<br />
"ProjectId": 2,<br />
"Configuration": #{<br />
"DataSource": #{<br />
"Cases": #{<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My cases datatable",<br />
"Columns": #{<br />
"CaseId": "Case Name"<br />
}<br />
},<br />
"Events": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My events datatable",<br />
"Columns": #{<br />
"CaseId": "Case Name",<br />
"EventType": "Event Type",<br />
"Timestamp": "Start Time"<br />
}<br />
}<br />
}<br />
}<br />
}<br />
)<br />
</pre><br />
|-<br />
||ResetPreprocessings<br />
||(none)<br />
||<br />
Removes all cached items related to the Model, e.g. preprocessings and calculation results. In practice, the Model is reset to a state where it was right after the model was loaded into memory.<br />
|-<br />
||Restore<br />
||(none)<br />
||Restores the Model from the recycle bin back to the original location.<br />
|-<br />
||<span id="ToSqlDataFrame">ToSqlDataFrame</span><br />
||In-memory dataframe<br />
||Converts an in-memory dataframe to an SQL dataframe. In practice, an SQL query is created from the in-memory dataframe and the query is executed in the datasource so that the data is available in the datasource for further SQL operations. This function is intended only to small amounts of data which is less than 16384 rows.<br />
<br />
Example: Select matching cases from events data using in-memory dataframe:<br />
<pre><br />
let model = ModelById(1);<br />
let dfEvents = model.EventsDatatable.SqlDataFrame;<br />
let inMemoryDf = ToDataFrame(<br />
[["1"], ["2"], ["3"]],<br />
[#{"Name": "id", "DataType": "String"}]<br />
);<br />
model.ToSqlDataFrame(inMemoryDf)<br />
.Join(dfEvents, ["id": "CaseId"])<br />
.SelectDistinct(["CaseId"])<br />
.Collect();<br />
</pre><br />
|-<br />
||<span id="TriggerNotifications">TriggerNotifications</span> (Boolean)<br />
||Notification names (String*)<br />
||Triggers the given notifications for the Model. Notifications are given by their names. Triggering means that the configured rules are run and notification emails are sent as defined by the rules. If the notification names parameter is not provided, all notifications in the Model are triggered.<br />
<br />
The function return ''true'' if any notification were triggered, otherwise ''false''.<br />
<pre><br />
ModelById(123).TriggerNotifications(["Notification 1", "Notification 2"]);<br />
Triggers notifications Notification 1 and Notification 2 in model id 123.<br />
<br />
ModelById(123).TriggerNotifications();<br />
Triggers all notifications in model id 123.<br />
</pre><br />
|}<br />
<br />
Function to get Model by model id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ModelById<br />
||<br />
* Model id (Integer)<br />
||<br />
Returns [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Model|Model]] object corresponding to the provided model id.<br />
|}<br />
<br />
== Project ==<br />
{| class="wikitable"<br />
!'''Project properties'''<br />
! '''Description'''<br />
|-<br />
||CreatedBy (User)<br />
||User who created the Project.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the Project was created.<br />
|-<br />
||Dashboards (Dashboard*)<br />
||Returns all [[Dashboard_in_Expression_Language|dashboards]] in the project.<br />
|-<br />
||Datatables (Datatable*)<br />
||Returns all Datatables in the project.<br />
|-<br />
||DeletedDate (DateTime)<br />
||Timestamp when the Project was deleted (moved to the recycle bin).<br />
|-<br />
||Description (String)<br />
||Project description. The project description may contain line breaks.<br />
|-<br />
||DeletedBy (User)<br />
||User who deleted the Project (moved to the recycle bin).<br />
|-<br />
||Id (Integer)<br />
||Id of the Project.<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last modified the Project.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the Project was last modified (refers to the project name, description and parent, not the contents of the project).<br />
|-<br />
||Name (String)<br />
||Name of the Project.<br />
|-<br />
||Models (Model*)<br />
||Models that are in the Project.<br />
|-<br />
||Parent (Project)<br />
||Parent project, i.e. a Project where the Project is located in the hierarchy of Projects. Returns ''null'' for root level Projects. Throws an error if user doesn't have access to the parent project.<br />
|-<br />
||ParentProjectId (Integer)<br />
||Parent project id. Returns ''null'' for root level Projects. The parent project id is returned even if user doesn't have access to the parent project.<br />
|-<br />
||Scripts (Script*)<br />
||Scripts that are in the Project.<br />
|-<br />
||Secrets (Dictionary*)<br />
||Returns array of all [[Storing_Secrets_for_Scripts|secrets]] in the project as Dictionary with following properties:<br />
* '''Name''' (string): Name of the secret.<br />
* '''Type''' (string): Type of the secret which is one of the following: "odbc", "sap", "salesforce".<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Project functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||CreateDashboard (Dashboard)<br />
||Parameters dictionary<br />
||Creates a dashboard to the project. ''EditDashboards'' permission to the project is required. The parameter is dictionary with following supported dashboard properties:<br />
* '''Name''' (String): Name of the dashboard.<br />
* '''Identifier''' (String): Identifier of the dashboard.<br />
* '''Description''' (String): Description of the dashboard.<br />
* '''Content''' (Dictionary): Content of the dashboard.<br />
<br />
Example: Create empty dashboard.<br />
<pre><br />
ProjectById(1)<br />
.CreateDashboard(#{<br />
"Name": "My dashboard",<br />
"Identifier": "MyDashboard"<br />
});<br />
</pre><br />
<br />
Example: Create dashboard with a chart.<br />
<pre><br />
ProjectById(1)<br />
.CreateDashboard(#{<br />
"Name": "My dashboard",<br />
"Content": #{<br />
"version": 4,<br />
"typeName": "View",<br />
"name": "My dashboard",<br />
"subElements": [<br />
#{<br />
"position": #{<br />
"x": 0,<br />
"y": 0,<br />
"width": 0.5,<br />
"height": 0.5,<br />
"zOrder": 0<br />
},<br />
"element": #{<br />
"typeName": "Chart",<br />
"configuration": #{<br />
"root": #{<br />
"expressionType": "Cases",<br />
"expressionParameters": #{}<br />
},<br />
"measures": [#{<br />
"expressionType": "Count",<br />
"expressionParameters": #{}<br />
}]<br />
}<br />
}<br />
}<br />
]<br />
}<br />
});<br />
</pre><br />
|-<br />
||<span id="CreateDatatable">CreateDatatable</span> (Datatable)<br />
||<br />
* Parameters dictionary<br />
||Creates datatable to the project. After creation, there are no columns or rows in the datatable. The function returns the created datatable entity. Following properties can be set for the datatable:<br />
* '''Name''' (string): Name of the datatable. This parameter is mandatory.<br />
* '''Description''' (string): Description for the datatable. This parameter is optional.<br />
* '''NameInDataSource''' (string): Table name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''SchemaNameInDataSource''' (string): Schema name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''DatabaseNameInDataSource''' (string): Database name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.<br />
* '''Type''' (string): Defines where the data for the datatable is located. Available values are '''Snowflake''', '''SqlServer''', and '''Local'''. This parameter is optional and default value is defined by the [[PA_Configuration_database_table#General_Settings|DefaultDataSource]] setting.<br />
* '''Connection''': Connection object for the datatable. This parameter is optional.<br />
<br />
Example: Create a new datatable:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable"<br />
});<br />
</pre><br />
<br />
Example: Create Snowflake datatable linked to a custom table:<br />
<pre><br />
ProjectById(1).CreateDatatable(#{<br />
"Name": "My datatable",<br />
"Description": "My description",<br />
"NameInDataSource": "MyTable",<br />
"SchemaNameInDataSource": "MySchema",<br />
"DatabaseNameInDataSource": "MyDatabase",<br />
"Type": "Snowflake"<br />
});<br />
</pre><br />
|-<br />
||CreateModel (Model)<br />
||<br />
* Parameters dictionary<br />
||Creates a model to a project. Requires ''GenericWrite'' permission for the Project and global ''CreateModel'' permission. If a model with that name already exists, an exception is thrown.<br />
<br />
Parameters dictionary has the following properties:<br />
* '''Name''': Name of the model. This property is mandatory.<br />
* '''Description''': Description of the model. This property is optional.<br />
* '''Configuration''': Configuration dictionary for the model. This property is technically optional, but a working model requires at least datasource settings to be defined.<br />
<br />
Example:<br />
<pre><br />
ProjectById(1).CreateModel(#{ <br />
"Name": "My model",<br />
"Description": "My description",<br />
"Configuration": {<br />
"DataSource": {<br />
"Cases": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My cases datatable",<br />
"Columns": {<br />
"CaseId": "Case Name"<br />
}<br />
},<br />
"Events": {<br />
"DataSourceType": "datatable",<br />
"DataTableName": "My events datatable",<br />
"Columns": {<br />
"CaseId": "Case Name",<br />
"EventType": "Event Type",<br />
"Timestamp": "Start Time"<br />
}<br />
}<br />
}<br />
}<br />
});<br />
</pre><br />
|-<br />
||DatatableByName (Datatable)<br />
||Datatable name (String)<br />
||<br />
Returns Datatable by its name located in the project. Returns null, if Datatable with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).DatatableByName("MyDatatable1")<br />
</pre><br />
<br />
Example: Get datatable by name, and create it if it doesn't exist:<br />
<pre><br />
let project = ProjectById(123);<br />
let datatableName = "MyDatatable1";<br />
let datatable = project.DatatableByName(datatableName);<br />
if (datatable == null) {<br />
datatable = project.CreateDatatable(datatableName);<br />
}<br />
</pre><br />
|-<br />
||DeletePermanently<br />
||(none)<br />
||Deletes the Project permanently. Note that the Project doesn't need to be in the recycle bin to be able to delete it permanently.<br />
|-<br />
||Restore<br />
||(none)<br />
||Restores the Project from the recycle bin back to the original location.<br />
|-<br />
||ModelByName (Model)<br />
||Model name (String)<br />
||<br />
Returns Model by its name located in the project. Returns null, if Model with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).ModelByName("My Model 1")<br />
</pre><br />
|-<br />
||ScriptByName (Script)<br />
||Script name (String)<br />
||<br />
Returns Script by its name located in the project. Returns null, if Script with that name does not exist in the project.<br />
<br />
Example:<br />
<pre><br />
ProjectById(123).ScriptByName("MyScript1")<br />
</pre><br />
|-<br />
||<span id="SetSecret">SetSecret</span><br />
||<br />
# Secret type (string)<br />
# Secret name (string)<br />
# Secret value (string)<br />
||Sets or adds a [[Storing_Secrets_for_Scripts|secret]] for the project. Setting the secret value to ''null'' removes the secret. There can be several secrets with the same name in the same project if the type of the secret is different. Setting secrets requires the project specific ''ManageProject'' permission.<br />
<br />
Parameters:<br />
# '''Type''' (string): Secret type which is one of the following: "odbc" (ODBC connection string), "sap" (SAP password), "salesforce" (Salesforce password).<br />
# '''Name''' (string): Secret name, used to refer to the secret in the commands.<br />
# '''Value''' (string): Secret value which contains the confidential information.<br />
<br />
Example: Set SAP password:<br />
<pre><br />
ProjectById(1).SetSecret("sap", "MySapPassword", "I l0ve 5AP!");<br />
</pre><br />
<br />
Example: Remove SAP password:<br />
<pre><br />
ProjectById(1).SetSecret("sap", "MySapPassword", null);<br />
</pre><br />
|}<br />
<br />
Function to get Project by id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ProjectById<br />
||Project id (Integer)<br />
||<br />
Returns project object corresponding to the provided project id.<br />
|-<br />
||ProjectByName<br />
||Project name (String)<br />
||<br />
Returns project object by given project name. If there is no such project or user doesn't have access to it, ''null'' value is returned. If there are multiple projects with the same name, one of them is returned.<br />
<br />
Example:<br />
<pre><br />
let project = ProjectByName("My Project");<br />
</pre><br />
|}<br />
<br />
== Script ==<br />
Scripts are entities that contain executable code, that can be run. Usually scripts contains ETL routines but also other kind of tasks are possible.<br />
<br />
{| class="wikitable"<br />
!'''Script properties'''<br />
! '''Description'''<br />
|-<br />
||Code (String)<br />
||Script code.<br />
|-<br />
||CreatedBy (User)<br />
||User who created the Script.<br />
|-<br />
||CreatedDate (DateTime)<br />
||Timestamp when the Script was created.<br />
|-<br />
||CurrentRunStart (DateTime)<br />
||Timestamp of the current run start. Null if the script is currently not running.<br />
|-<br />
||Description (String)<br />
||Description of the Script.<br />
|-<br />
||Id (Integer)<br />
||Id of the Script.<br />
|-<br />
||Language (String)<br />
||Either of the following scripting language: '''Expression''' or '''SQL'''. When language is Expression, the script is run as an expression script, and when language is SQL, the script is run as an SQL script (using the sandbox database).<br />
|-<br />
||LastModifiedBy (User)<br />
||User who last modified the Script.<br />
|-<br />
||LastModifiedDate (DateTime)<br />
||Timestamp when the Script was last modified.<br />
|-<br />
||LastRunEnd (DateTime)<br />
||Timestamp of the last completed script run end (either successful completion or failure). Null if the Script hasn't been run yet.<br />
|-<br />
||LastRunResult (String)<br />
||Result of the last run. Options are:<br />
* '''Completed''': The last run was completed successfully.<br />
* '''Failed''': An error occurred during the last run, so likely the script did not complete as intended.<br />
* '''Aborted''': Script run was manually stopped prematurely by a user, so the script did not proceeded in the end.<br />
<br />
Null if the Script hasn't been run yet.<br />
|-<br />
||LastRunStart (DateTime)<br />
||Timestamp of the last completed script run start time. Null if the Script hasn't been run yet.<br />
|-<br />
||Name (String)<br />
||Name of the Script.<br />
|-<br />
||OperationId (Integer)<br />
||Id of the operation which runs the Script. Null if the script is currently not running.<br />
|-<br />
||Project (Project)<br />
||Project where the Script is located. Null if the script is in the global context.<br />
|-<br />
||ProjectId (Integer)<br />
||Id of the project where the Script is located. Null if the script is in the global context.<br />
|-<br />
||Status (String)<br />
||Current status of the script. Options are:<br />
* '''Ready''': Script is not running. In this status, the script can be started (changing the status to ''Running'').<br />
* '''Running''': Script is running. In this status, the script can be stopped (changing the status to ''Stopping''). Calling stop just requests a script to stop, and the actual stopping occurs some time later.<br />
* '''Stopping''': Script has been requested to be stopped, but it's still running. In this status, neither start nor stop can be called for the script. When the script eventually stops, its status changes to ''Ready''.<br />
|}<br />
<br />
{| class="wikitable"<br />
!'''Script functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||Run (Object)<br />
||Dictionary of parameters<br />
||<br />
Runs the script using the provided parameters. The parameters are available in the script as variables (see the example). Any type of variables can be passed to the script. Note that if the script assumes certain variables, but that they are not passed to the script, the script run will throw an error. <br />
<br />
For SQL scripts, the passed parameters are available in the script as variables in format '''@_parameter_<ParameterName>''' where <ParameterName> is the name of the parameter, e.g. ''parameter_myParameter1''. Only string type of parameters can be used, so any other type of data in parameter values is converted into strings.<br />
<br />
The return value of the script is returned by the Run function. Expression scripts return a value with the ''return'' statement or alternatively the result of the last line of the script is the return value. If the script does not return any value, the Run function returns ''_empty''. For SQL scripts, the return value is the last dataset produced by the script (returned as a DataFrame) (SQL scripts might create several datasets using the ''--#ShowReport'' command or the ''Show'' parameter).<br />
<br />
When a script is called using the Run function, the called script status does not change, because it's the parent script that is ''Running''. Also the called script log is not filled, but instead the logging goes to the calling script.<br />
<br />
It's possible to call a script using the Run function several times simultaneously.<br />
<br />
If there is an error when running the called script, the Run function throws the error to the calling script.<br />
<br />
Scripts are run in the script entity context, so for example the following properties are available:<br />
* Id: Script id<br />
* Name: Script name<br />
* Project.Id: Project id where the script is located<br />
* Project.Name: Name of the project where the script is located<br />
<br />
Example: Following script (id 123) raises a specified number to a specified power:<br />
<pre><br />
return Pow(numberToRaise, exponent);<br />
</pre><br />
<br />
The script can be called as follows:<br />
<pre><br />
let runResult = ScriptById(123).Run(#{<br />
"numberToRaise": 4,<br />
"exponent": 2<br />
})<br />
Returns: 16<br />
</pre> <br />
|}<br />
<br />
Function to get a script by the script id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||ScriptById<br />
||<br />
* Script id (Integer)<br />
||<br />
Returns Script object corresponding to the given script id. If script with the given id doesn't exist or user doesn't have permissions to it, an error is given.<br />
|}<br />
<br />
== User/Group ==<br />
User objects represents users and user groups. Note that some properties can only be used for users and some for groups.<br />
<br />
{| class="wikitable"<br />
!'''User/group properties'''<br />
! '''Description'''<br />
|-<br />
||Description (String)<br />
||Description of the user.<br />
|-<br />
||Email (String)<br />
||Email address of the user.<br />
|-<br />
||FullName (String)<br />
||Full name of the user or group name.<br />
|-<br />
||GlobalPermissions (String*)<br />
||Array of global [[Roles and Permissions#Global_and_Project_Roles|permissions]] of the user. Global permissions come from the global roles assigned to the user and groups that the user belongs to. Note that to get the effective permissions for certain objects, also project specific permissions need to be taken into account.<br />
|-<br />
||GroupMemberNames (String*)<br />
||Array of names of members of a user group. This property is available for groups.<br />
|-<br />
||GroupMembers (User*)<br />
||Array of members of a user group. This property is available for groups.<br />
|-<br />
||GroupNames (String*)<br />
||Array of names of user groups the user belongs to. This property is available for users.<br />
|-<br />
||Groups (User*)<br />
||Array of user groups the user belongs to. This property is available for users.<br />
|-<br />
||HasPassword (Boolean)<br />
||Returns true if user has a password defined in QPR ProcessAnalyzer and thus user can authenticate using the password. If user doesn't have a password, the SAML authentication is the only way to log in. ''ManageUsers'' permission is needed to access this property for other users.<br />
|-<br />
||Id (Integer)<br />
||Id of the user, which is unique for every user.<br />
|-<br />
||IsActive (Boolean)<br />
||Returns true only if the user is active (not disabled).<br />
|-<br />
||IsGroup (Boolean)<br />
||Returns true if the user is a user group.<br />
|-<br />
||IsLocked (Boolean)<br />
||Returns true if user account is currently [[User_Session_Management#Preventing_password_guessing_attacks|locked]]. ''ManageUsers'' permission is needed to access this property.<br />
|-<br />
||LastLockedDate (DateTime)<br />
||Returns date when user account was locked the last time. Returns ''null'' if the user account has never been locked. ''ManageUsers'' permission is needed to access this property.<br />
|-<br />
||LastLoginDate (DateTime)<br />
||Returns date when the user made last successful login. ''ManageUsers'' permission is needed to access this property for other users.<br />
|-<br />
||Name (String)<br />
||Login name of the user or group.<br />
|-<br />
||Roles (Object**)<br />
||<br />
Returns all roles of the user (both global and project roles) as a nested array structure.<br />
<br />
Example:<br />
<pre><br />
ToJson(Users.Where(name == "qpr").Roles)<br />
Returns (for example):<br />
[<br />
[{"calcId": "Project:1"}, "Administrator"],<br />
[{"calcId": "Project:2"}, "Analyzer"],<br />
[{"calcId": "Project:3"}, "Viewer"],<br />
[null, "RunScripts"],<br />
[null, "Administrator"]<br />
]<br />
</pre><br />
|}<br />
<br />
{| class="wikitable"<br />
!'''User/group functions'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||EffectivePermissionsFor (String Array)<br />
||<br />
* Project to get permissions<br />
||<br />
Returns effective (actual) permission of the user to the given project. Project is given as a [[#Project|project object]] (not as a project id). Effective permissions determine the actual permissions that the user has, i.e. a combination of all permissions assigned to the user and groups the user belong to, including both project specific and global roles.<br />
<br />
Permissions for the EffectivePermissionsFor function are as follows:<br />
* All users can query their own permissions<br />
* To get permissions for any user, the user needs to have [[Roles_and_Permissions|ManageUsers permission]].<br />
<br />
Note that ''inactive'' users don't have any effective permissions, so the EffectivePermissionsFor function does not return any permissions for those users.<br />
<br />
Examples:<br />
<pre><br />
EffectivePermissionsFor(ModelById(1234).Project)<br />
Returns (for example): ["EditDashboards", "Filtering", "GenericRead"]<br />
</pre><br />
|-<br />
||GetAttribute<br />
||<br />
||<br />
Returns user attribute value by given attribute name and optionally by the model/project/dashboard context. Supported data types are String, Integer, Float, and DateTime. To store more complex data types, data can be converted into json and stored as string. If the attribute doesn't exist, null is returned.<br />
<br />
For example, if using dashboard as context, the attributes are effectively bound to each user and each dashboard separately. Thus, there can be several attributes with the same name as long as the dashboard is different.<br />
<br />
Parameters:<br />
# '''Attribute name''' (String): Name of the attribute.<br />
# '''Attribute context''' (Project/Model/Dashboard): Optional context object the attribute is linked to.<br />
<br />
Users have permissions to get attributes for themselves, and also (administrator) users with global ''ManageUsers'' permission can get attributes for all users. In addition, if using the context object, the ''GenericRead'' permission is required for the context object.<br />
<br />
Example: Get user attribute MyDataValue for myself:<br />
<pre><br />
CurrentUser<br />
.GetAttribute("MyDataValue");<br />
</pre><br />
<br />
Example: Get user attribute MyDataValue for user John:<br />
<pre><br />
Users<br />
.Where(Name=="John")<br />
.GetAttribute("MyDataValue");<br />
</pre><br />
<br />
Example: Get user attribute MyDataValue for user 1 related to dashboard id 1:<br />
<pre><br />
UserById(1)<br />
.GetAttribute("MyDataValue", DashboardById(1));<br />
</pre><br />
|-<br />
||SetAttribute<br />
||<br />
||<br />
Sets user attribute value for given attribute name and optionally for the model/project/dashboard context. Supported data types are String, Integer, Float, and DateTime. To store more complex data types, data can be converted into json and stored as string. If setting value ''null'', the user attribute is removed. Required permissions are same as in the GetAttribute function.<br />
<br />
Parameters:<br />
# '''Attribute name''' (String): Name of the attribute.<br />
# '''Attribute value''' (String/Integer/Float/DateTime): Attribute value to be stored.<br />
# '''Attribute context''' (Project/Model/Dashboard): Optional context object the attribute value is linked to.<br />
<br />
Example: Set user attribute MyDataValue for myself:<br />
<pre><br />
CurrentUser<br />
.SetAttribute("MyDataValue ", "value");<br />
</pre><br />
<br />
Example: Set value 123 as user attribute MyDataValue for user John:<br />
<pre><br />
Users<br />
.Where(Name=="John")<br />
.SetAttribute("MyDataValue", 123);<br />
</pre><br />
<br />
Example: Set current time as user attribute MyDataValue for user 1 related to dashboard id 1:<br />
<pre><br />
UserById(1)<br />
.GetAttribute("MyDataValue", Now, DashboardById(1));<br />
</pre><br />
|}<br />
<br />
Function to get User by user id:<br />
{| class="wikitable"<br />
!'''Function'''<br />
!'''Parameters'''<br />
! '''Description'''<br />
|-<br />
||UserById<br />
||<br />
* User id (Integer)<br />
||<br />
Returns User object corresponding to the provided user id.<br />
|}</div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=Actions_to_Run_Script_in_Table&diff=24447Actions to Run Script in Table2024-02-27T09:17:48Z<p>Ollvihe: /* Example action settings */</p>
<hr />
<div><br />
== Overview==<br />
Dashboard functionality can be extended by running scripts that are started from the table's context menu. For example, the scripts can call external web services or retrieve additional information for the selected rows in the table. The scripts are run synchronously, i.e., a loading animation is shown during the entire script run and user needs to wait for the script completion. Thus, the script should preferably be designed to run quickly.<br />
<br />
When the script run is completed, the return value of the script is shown to the user in a popup dialog. If the script run fails, the error response is also shown to the user. If a script throws a user-defined exception, the thrown value is shown in the popup dialog. If the script throws other than user-defined exception, the more detailed error message is shown as popup message.<br />
<br />
The script action can be configured to be available only when a single row is selected in the table or when multiple rows are selected. Depending on the intended action, the multi-row selection may or may not be suitable.<br />
<br />
Security note: Scripts are run with user's own permissions and they are able to modify data in the system, so when running a script action, the user needs to be sure what does the script contain.<br />
<br />
== Action settings ==<br />
Chart actions can be set in the chart settings by clicking ''Chart actions'' in the ''Advanced'' tab. Actions are configured in json format (see next chapter for examples). Following action settings are available:<br />
* '''type''' (mandatory): Use the value '''RunScript''' to run a script.<br />
* '''label''' (mandatory): Text visible in the context menu item.<br />
* '''icon''': Google Material icon visible left of the context menu item.<br />
* '''projectName''': Name of the project where the script is located. If this setting is not defined, the script is searched in the project where the dashboard is located.<br />
* '''scriptName''': Name of the run script.<br />
* '''scriptId''': Id of the run script. When defined, the projectName and scriptName parameters are ignored.<br />
* '''multiselect''': Whether the script run is available when multiple rows are selected (''true'') or only when one row is selected (''false''). Default is ''true''.<br />
* '''completedMessageHeader''': Header text of the popup dialog shown when the action is successfully completed.<br />
* '''errorMessageHeader''': Header text of the popup dialog shown when the action fails.<br />
* '''parameters''': Object of additional parameters for the script. The parameters are available as a dictionary in the script.<br />
<br />
The ''type'' and ''label'' are mandatory, and either the ''scriptName'' or ''scriptId'' is mandatory depending whether to define the script by name or by id.<br />
<br />
== Passed parameters ==<br />
Following parameters are passed to the script and are available as variables in the script (see examples below how to use the variables):<br />
* '''selectedData''': Dictionary of arrays containing the selected row(s) data for each column. The data is available as following keys:<br />
** Column header labels (text visible in the table header row)<br />
** Column technical names (dimension0, dimension1, ... measure0, measures2, ...).<br />
** Column indices (0, 1, 2, ...)<br />
* '''rowIndices''': Array of selected row indices (first row is zero).<br />
* '''variables''': Dictionary containing dashboard variables.<br />
* '''action''': Dictionary containing settings of the clicked action. This is where to access the action parameters.<br />
* '''query''': Dictionary containing the query made by the chart.<br />
* '''chartSettings''': Dictionary containing the chart settings.<br />
<br />
== Example action settings ==<br />
This example configures three different kind of actions:<br />
<pre><br />
[<br />
{<br />
"type": "RunScript",<br />
"label": "Show details",<br />
"icon": "smart_toy",<br />
"scriptName": "Snow row details",<br />
"multiselect": false,<br />
"parameters": {<br />
"param1": "val1",<br />
"param2": 2.3<br />
}<br />
},<br />
{<br />
"type": "RunScript",<br />
"label": "Create ticket",<br />
"icon": "functions",<br />
"projectName": "My project",<br />
"scriptName": "Create ticket to external system",<br />
"completedMessageHeader": "Ticket has been created",<br />
"errorMessageHeader": "Creating ticket failed"<br />
},<br />
{<br />
"type": "RunScript",<br />
"label": "Get data",<br />
"icon": "move",<br />
"scriptId": 1<br />
}<br />
]<br />
</pre><br />
<br />
== Example scripts ==<br />
<br />
This script reads the first two columns and sums them together. If the columns don't contain numeric data, an error is thrown:<br />
<pre><br />
let firstNumber = selectedData["0"][0];<br />
try {<br />
firstNumber = ToFloat(firstNumber);<br />
} catch (error) {<br />
throw "First column doesn't contain number";<br />
}<br />
let secondNumber = selectedData["1"][0];<br />
try {<br />
secondNumber = ToFloat(secondNumber);<br />
} catch (error) {<br />
throw "Second column doesn't contain number";<br />
}<br />
return firstNumber + secondNumber;<br />
</pre><br />
<br />
This script sums all selected rows together in the first column. If the column doesn't contain numeric data, an error is thrown:<br />
<pre><br />
let columnSum;<br />
try {<br />
columnSum = Sum(selectedData["0"].ToFloat(_));<br />
} catch (error) {<br />
throw "Selected rows column contains non-numeric data.";<br />
}<br />
return columnSum;<br />
</pre><br />
<br />
This script returns selected model name (''ModelId'' variable is used).<br />
<pre><br />
let modelId = variables.ModelId;<br />
return ModelById(modelId).Name;<br />
</pre><br />
<br />
This script calculates the number of cases in the filtered data (''ModelId'' and ''Filter'' variables are used).<br />
<pre><br />
let data = Query(#{<br />
"ProcessingMethod": "dataframe",<br />
"ContextType": "model",<br />
"ModelId": variables.ModelId,<br />
"Root": "Cases",<br />
"Filter": ParseJson(variables.Filter),<br />
"Dimensions": [],<br />
"Values": [#{<br />
"Name": "caseCount",<br />
"AggregationFunction": "count"<br />
}],<br />
}).Collect();<br />
return data[0];<br />
</pre></div>Ollvihehttps://wiki.onqpr.com/pa/index.php?title=Actions_to_Run_Script_in_Table&diff=24446Actions to Run Script in Table2024-02-27T09:12:28Z<p>Ollvihe: /* Example action settings */</p>
<hr />
<div><br />
== Overview==<br />
Dashboard functionality can be extended by running scripts that are started from the table's context menu. For example, the scripts can call external web services or retrieve additional information for the selected rows in the table. The scripts are run synchronously, i.e., a loading animation is shown during the entire script run and user needs to wait for the script completion. Thus, the script should preferably be designed to run quickly.<br />
<br />
When the script run is completed, the return value of the script is shown to the user in a popup dialog. If the script run fails, the error response is also shown to the user. If a script throws a user-defined exception, the thrown value is shown in the popup dialog. If the script throws other than user-defined exception, the more detailed error message is shown as popup message.<br />
<br />
The script action can be configured to be available only when a single row is selected in the table or when multiple rows are selected. Depending on the intended action, the multi-row selection may or may not be suitable.<br />
<br />
Security note: Scripts are run with user's own permissions and they are able to modify data in the system, so when running a script action, the user needs to be sure what does the script contain.<br />
<br />
== Action settings ==<br />
Chart actions can be set in the chart settings by clicking ''Chart actions'' in the ''Advanced'' tab. Actions are configured in json format (see next chapter for examples). Following action settings are available:<br />
* '''type''' (mandatory): Use the value '''RunScript''' to run a script.<br />
* '''label''' (mandatory): Text visible in the context menu item.<br />
* '''icon''': Google Material icon visible left of the context menu item.<br />
* '''projectName''': Name of the project where the script is located. If this setting is not defined, the script is searched in the project where the dashboard is located.<br />
* '''scriptName''': Name of the run script.<br />
* '''scriptId''': Id of the run script. When defined, the projectName and scriptName parameters are ignored.<br />
* '''multiselect''': Whether the script run is available when multiple rows are selected (''true'') or only when one row is selected (''false''). Default is ''true''.<br />
* '''completedMessageHeader''': Header text of the popup dialog shown when the action is successfully completed.<br />
* '''errorMessageHeader''': Header text of the popup dialog shown when the action fails.<br />
* '''parameters''': Object of additional parameters for the script. The parameters are available as a dictionary in the script.<br />
<br />
The ''type'' and ''label'' are mandatory, and either the ''scriptName'' or ''scriptId'' is mandatory depending whether to define the script by name or by id.<br />
<br />
== Passed parameters ==<br />
Following parameters are passed to the script and are available as variables in the script (see examples below how to use the variables):<br />
* '''selectedData''': Dictionary of arrays containing the selected row(s) data for each column. The data is available as following keys:<br />
** Column header labels (text visible in the table header row)<br />
** Column technical names (dimension0, dimension1, ... measure0, measures2, ...).<br />
** Column indices (0, 1, 2, ...)<br />
* '''rowIndices''': Array of selected row indices (first row is zero).<br />
* '''variables''': Dictionary containing dashboard variables.<br />
* '''action''': Dictionary containing settings of the clicked action. This is where to access the action parameters.<br />
* '''query''': Dictionary containing the query made by the chart.<br />
* '''chartSettings''': Dictionary containing the chart settings.<br />
<br />
== Example action settings ==<br />
This example configures three different kind of actions:<br />
<pre><br />
[<br />
{<br />
"type": "RunScript",<br />
"label": "Show details",<br />
"icon": "smart_toy",<br />
"scriptName": "Snow row details",<br />
"multiselect": false,<br />
"parameters": {<br />
"param1": "val1",<br />
"param2": 2.3<br />
}<br />
},<br />
{<br />
"type": "RunScript",<br />
"label": "Create ticket",<br />
"icon": "smart_toy",<br />
"projectName": "My project",<br />
"scriptName": "Create ticket to external system",<br />
"completedMessageHeader": "Ticket has been created",<br />
"errorMessageHeader": "Creating ticket failed"<br />
},<br />
{<br />
"type": "RunScript",<br />
"label": "Get data",<br />
"icon": "smart_toy",<br />
"scriptId": 1<br />
}<br />
]<br />
</pre><br />
<br />
== Example scripts ==<br />
<br />
This script reads the first two columns and sums them together. If the columns don't contain numeric data, an error is thrown:<br />
<pre><br />
let firstNumber = selectedData["0"][0];<br />
try {<br />
firstNumber = ToFloat(firstNumber);<br />
} catch (error) {<br />
throw "First column doesn't contain number";<br />
}<br />
let secondNumber = selectedData["1"][0];<br />
try {<br />
secondNumber = ToFloat(secondNumber);<br />
} catch (error) {<br />
throw "Second column doesn't contain number";<br />
}<br />
return firstNumber + secondNumber;<br />
</pre><br />
<br />
This script sums all selected rows together in the first column. If the column doesn't contain numeric data, an error is thrown:<br />
<pre><br />
let columnSum;<br />
try {<br />
columnSum = Sum(selectedData["0"].ToFloat(_));<br />
} catch (error) {<br />
throw "Selected rows column contains non-numeric data.";<br />
}<br />
return columnSum;<br />
</pre><br />
<br />
This script returns selected model name (''ModelId'' variable is used).<br />
<pre><br />
let modelId = variables.ModelId;<br />
return ModelById(modelId).Name;<br />
</pre><br />
<br />
This script calculates the number of cases in the filtered data (''ModelId'' and ''Filter'' variables are used).<br />
<pre><br />
let data = Query(#{<br />
"ProcessingMethod": "dataframe",<br />
"ContextType": "model",<br />
"ModelId": variables.ModelId,<br />
"Root": "Cases",<br />
"Filter": ParseJson(variables.Filter),<br />
"Dimensions": [],<br />
"Values": [#{<br />
"Name": "caseCount",<br />
"AggregationFunction": "count"<br />
}],<br />
}).Collect();<br />
return data[0];<br />
</pre></div>Ollvihe