<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.onqpr.com/pa/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ollvihe</id>
	<title>QPR ProcessAnalyzer Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.onqpr.com/pa/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ollvihe"/>
	<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php/Special:Contributions/Ollvihe"/>
	<updated>2026-04-13T18:50:14Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.1</generator>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&amp;diff=28112</id>
		<title>QPR ProcessAnalyzer Release Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&amp;diff=28112"/>
		<updated>2026-04-13T14:50:38Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists all new features and fixed issues for each QPR ProcessAnalyzer release.&lt;br /&gt;
&lt;br /&gt;
==NextRelease: QPR ProcessAnalyzer 2026.4==&lt;br /&gt;
[[Next_Release_Roadmap|See roadmap for next release features and fixes]]&lt;br /&gt;
&lt;br /&gt;
==Current Release: QPR ProcessAnalyzer 2026.3 (build 10933) (released date 13.04.2026)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2026_3.pdf QPR_ProcessAnalyzer_2026_3.pdf]&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
* QPR ProcessAnalyzer acts as [[QPR_ProcessAnalyzer_as_MCP_Server|MCP server]] supporting MCP tools implemented using scripts with OAuth and API key authentication. (B-09004)&lt;br /&gt;
* [[Object-centric_Process_Mining_Model#Configure_object-centric_model|Units for each object type]] can be specified in object-centric models. (B-08992)&lt;br /&gt;
* [[PA_Configuration_database_table#:~:text=DefaultColorPalette|Charts color palette]] can be changed globally to easily manage consistent visual layout. (B-08993)&lt;br /&gt;
* [[External_Content|External content component]] url supports tags refering to dashboard variables to show dynamically changing web page. (B-08998)&lt;br /&gt;
* [[QPR_ProcessAnalyzer_Project_Workspace#Exporting_Project|Project export and import]] using files support public filters stored in models. (B-09007)&lt;br /&gt;
* [[QPR_ProcessAnalyzer_KPI_Card|KPI Card]] shows null value label when data has no rows, and table and chart show &amp;quot;No data&amp;quot; message. (B-08999)&lt;br /&gt;
* [[QPR_MEA_Integration|QPR MEA web service]] operations can be called using QPR ProcessAnalyzer expression language. (B-09030)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
* Flowchart had flows missing if shown flows were beyond the top-500 flows. (D-14848)&lt;br /&gt;
* Expression filter rules with greater/less than criteria were incorrectly applied as equal filters when editing chart filters. (D-14852)&lt;br /&gt;
* Table column filter dialog was not entire visible in narrow table located in the bottom of screen. (D-14783)&lt;br /&gt;
* Opening Scripts tab in Workspace was slow when there were scripts with long script log. (D-14670)&lt;br /&gt;
* Fixed issue where object-centric model queries sometimes gave inconsistent results. (D-14854)&lt;br /&gt;
* Snowflake query gave &amp;quot;invalid identifier&amp;quot; error when there were two measures with same cases going though event measure filter. (D-14845)&lt;br /&gt;
* Filter rules drag-and-drop didn&#039;t work between expressions in the same chart. (D-14850)&lt;br /&gt;
* Better error message is shown when invalid value is specified to dashboard aspect ratio flex, chart margin, dashboard margin, external content border width, or external content border corner radius. (D-14805)&lt;br /&gt;
* Improved error message when object-centric model perspective doesn&#039;t have the object type correctly defined. (D-14795)&lt;br /&gt;
* Reduced project properties dialog minimum height to fit for smaller screens. (D-14834)&lt;br /&gt;
* Updated NLTK to version 3.9.3. (D-14829)&lt;br /&gt;
&lt;br /&gt;
===Other improvements===&lt;br /&gt;
* Frontend components have been updated. (B-09028)&lt;br /&gt;
* Backend components have been updated. (B-09027)&lt;br /&gt;
&lt;br /&gt;
==Additional release for QPR ProcessAnalyzer 2026.2 (build 10910) (released date 16.3.2026)==&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
* Filters report in System reports shows also other users&#039; private filters for admins. (B-09017)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
* Filter rules were lost when saving a filter with &amp;quot;Cases with specific events&amp;quot;, &amp;quot;Cases starting with&amp;quot; or &amp;quot;Cases ending to&amp;quot; rules. (D-14847)&lt;br /&gt;
* Fixed issue where object-centric models sometimes gave &amp;quot;Object &amp;lt;cachetablename&amp;gt; does not exist or not authorized&amp;quot; error. (D-14797)&lt;br /&gt;
* ExtractSap function didn&#039;t work with QPR ScriptLauncher when using secret for storing SAP password. (D-14813)&lt;br /&gt;
* Variation stepper incorrectly skipped steps when going down when variation count is maximum. (D-14844)&lt;br /&gt;
* Improved error message when creating model from filter fails. (D-14811)&lt;br /&gt;
* System dashboard names were incorrectly translated twice. (D-14841)&lt;br /&gt;
* AI Assistant had one translation missing. (D-14840)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2026.2 (build 10897) (released date 2026-02-26)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2026_2.pdf QPR_ProcessAnalyzer_2026_2.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Snowflake user-defined functions (UDF) used by QPR ProcessAnalyzer have been updated to use Python 3.13. Some of the old versions of the functions use Python 3.9 which has been deprecated by Snowflake. Although the old versions are not anymore used by QPR ProcessAnalyzer, they are not automatically deleted and thus Snowflake may send notifications about existing deprecated functions. It&#039;s recommended to remove the old functions which are following:&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V2&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V3&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V4&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V5&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V6&lt;br /&gt;
* QPRPA_UDF_BPMN_CONFORMANCE_VIOLATIONS_FLOWS&lt;br /&gt;
* QPRPA_UDF_BPMN_CONFORMANCE_VIOLATIONS_FLOWS_V2&lt;br /&gt;
* QPRPA_UDF_BPMN_CONFORMANCE_VIOLATIONS_FLOWS_V3&lt;br /&gt;
* QPRPA_UDF_BPMN_IS_CONFORMANT&lt;br /&gt;
* QPRPA_UDF_BPMN_IS_CONFORMANT_V2&lt;br /&gt;
* QPRPA_UDF_BPMN_IS_CONFORMANT_V3&lt;br /&gt;
* QPRPA_UDTF_CLUSTER&lt;br /&gt;
* QPRPA_UDTF_CLUSTER_V2&lt;br /&gt;
* QPRPA_UDTF_CLUSTER_V3&lt;br /&gt;
* QPRPA_UDTF_CLUSTER_V4&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
* Fully conformant [[QPR_ProcessAnalyzer_BPMN_Editor#Auto-creating_BPMN_Diagram_from_Eventlog|BPMN diagrams]] can be created from eventlogs with proper layout and identifying exclusive and parallel gateways. (B-08900)&lt;br /&gt;
* [[Object-Centric_Flowchart|Object-centric flowchart]] flows visibility can be controlled with a stepper based on top variations, and start and end symbols can be hidden for each event type. (B-08987)&lt;br /&gt;
* Added preset for object-centric flowchart, and improved Process Discovery dashboard usage for object-centric models. (B-08863)&lt;br /&gt;
* Viewer users can [[Filtering_in_QPR_ProcessAnalyzer#Saving_filters|save private filters]] for personal use. (B-08920)&lt;br /&gt;
* [[Chart_On-screen_Settings|On-screen settings]] support static and dynamic case/event attribute values selection, and [[Chart_Linked_Settings|linked settings]] can bind to on-screen settings. (B-08814)&lt;br /&gt;
* [[AI_Root_Causes|AI root causes analysis]] related error situations are easier to resolve with easier to understand error messages. (B-08997)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
* Histogram chart did not show at all and gave a JavaScript error. (D-14801)&lt;br /&gt;
* When chart with multiple series was sorted by measure, some datapoints were not shown when visible X-axis was limited by zooming or Custom layout settings. (D-14793)&lt;br /&gt;
* Disabled filter rules were incorrectly applied for the shown items in the filter rule editing dialog. (D-14791)&lt;br /&gt;
* If there were more than one Range filter components in dashboard, periods menu incorrectly affected all of them. (D-14818)&lt;br /&gt;
* List of event types in object-centric flowchart settings didn&#039;t open if there were object types linked to none events. (D-14798)&lt;br /&gt;
* Snowflake flowchart root causes analysis gave &amp;quot;SQL compilation error&amp;quot; when run with case duration criteria. (D-14790)&lt;br /&gt;
* Term &amp;quot;Second&amp;quot; when meaning time unit was translated incorrectly in French. (D-14803)&lt;br /&gt;
* OpenTelemetry metrics were not sent to Prometheus correctly. (D-14804)&lt;br /&gt;
* Opening script editor by url didn&#039;t show project path and also javascript error appeared to console. (D-14794)&lt;br /&gt;
* Fixed issue where case attribute prediction failed when using more than one iteration. (D-14789)&lt;br /&gt;
* SQLDataFrame with several append operations had performance issue. (D-14772)&lt;br /&gt;
* Null coalescing operators didn&#039;t work correctly in chaining in expression language. (D-14762)&lt;br /&gt;
* Native app could not call procedure if project referred to other database and schema. (D-14749)&lt;br /&gt;
* Trying to create script with duplicate name gave unclear error: Cannot insert duplicate key row in object &#039;dbo.PA_SCRIPT&#039; with unique index &#039;PA_SCRIPT_UNIQUE_NAME_IN_PROJECT&#039;. (D-14784)&lt;br /&gt;
* BPMN editor popup menu was partly hidden behind other chart components. (D-14345)&lt;br /&gt;
* When going to context menu report from BPMN editor, &amp;quot;Operation was cancelled by a user&amp;quot; was given when query was in progress. (D-14807)&lt;br /&gt;
* BPMN editor tooltips measure descriptions didn&#039;t disappear at all. (D-14809)&lt;br /&gt;
* Presets benchmarking didn&#039;t work for models without case attributes. (D-14822)&lt;br /&gt;
* Object-centric filter rule editor gave javascript error when opened for case-centric model. (D-14799)&lt;br /&gt;
* Object-centric filter rule could incorrectly be dropped as root causes comparison rule. (D-14796)&lt;br /&gt;
* Localization missing for &amp;quot;Save as new filter&amp;quot; button. (D-14839)&lt;br /&gt;
&lt;br /&gt;
===Other improvements===&lt;br /&gt;
* SQL queries run in Snowflake have been further optimized. (B-08936)&lt;br /&gt;
* Snowflake stored procedures and user defined functions have been migrated to Python 3.13. (B-08984)&lt;br /&gt;
* Frontend components have been updated. (B-08991)&lt;br /&gt;
* Backend components have been updated. (B-08990)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2026.1 (build 10870) (released date 2026-01-19)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2026_1.pdf QPR_ProcessAnalyzer_2026_1.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
QPR ProcessAnalyzer Server and QPR ScriptLauncher are running on .NET 10, replacing the previous .NET 8 version. When updating to this release, make sure to install the .NET 10 Runtime ([[Updating_QPR_ProcessAnalyzer_Server|update instructions]]). While .NET 8 and .NET 10 can run side by side, .NET 8 does not need to be removed immediately. However, for security reasons, any unused .NET 8 installation should be uninstalled as soon as possible after the update.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Known issue: The histogram visualization doesn&#039;t work in this release. The issue will be fixed in the next release. Possible workaround is to use the column chart where to set no spacing between columns. This can be configured with the following [[QPR_ProcessAnalyzer_Chart#:~:text=Custom%20Layout|Custom Layout]] settings:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;plotOptions&amp;quot;: {&lt;br /&gt;
		&amp;quot;series&amp;quot;: {&lt;br /&gt;
			&amp;quot;pointPadding&amp;quot;: 0,&lt;br /&gt;
			&amp;quot;groupPadding&amp;quot;: 0&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*Object-centric models support versatile [[Filtering_in_QPR_ProcessAnalyzer|object-centric filters]] based on case-centric filter rules using perspective. (B-08595)&lt;br /&gt;
*[[AI_Root_Causes|AI Root Causes analysis]] is shown in a hierarchy for easier readability. (B-08921)&lt;br /&gt;
*[[Process_Flowchart|Case-centric flowchart]] performance has been improved by making all queries simultaneously. (B-08916)&lt;br /&gt;
* Object counts indicator is hidden for object-centric models when perspective is not set. (B-08825)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
* Filter to exclude case attribute values incorrectly excluded null values even if null wasn&#039;t selected. (D-14773)&lt;br /&gt;
*Prediction generated invalid models where case IDs in events datatable didn&#039;t exist in cases datatable. (D-14758)&lt;br /&gt;
* AI Root Causes presets didn&#039;t work with models without case attributes. (D-14759)&lt;br /&gt;
* Snowflake query with multiple columns with aggregations and Coalesce function gave &amp;quot;invalid identifier&amp;quot; error. (D-14763)&lt;br /&gt;
*Dropdown list to add business calendar holidays from other model shows empty items. (D-14786)&lt;br /&gt;
*In-memory Average function didn&#039;t work when aggregating dates using model&#039;s Attribute function. (D-14761)&lt;br /&gt;
*Sometimes opening models list gave error &amp;quot;User doesn&#039;t have permission GenericRead to model&amp;quot;. (D-14742)&lt;br /&gt;
&lt;br /&gt;
===Other improvements=== &lt;br /&gt;
*[[QPR_ProcessAnalyzer_Security_Hardening#Added_HTTP_Headers|Content-security-policy]] img-src blob: directive has been restored for Highcharts image export. (B-08904)&lt;br /&gt;
*Backend components have been updated [[Updating_QPR_ProcessAnalyzer_Server|including .NET 10]]. (B-08926)&lt;br /&gt;
*Frontend components have been updated. (B-08927)&lt;br /&gt;
&lt;br /&gt;
==Additional release for QPR ProcessAnalyzer 2025.7 (build 10845) (released 2025-12-11)==&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*QPR ProcessAnalyzer can be deployed on-premise using [[Deploy_QPR_ProcessAnalyzer_from_Container|Linux containers]]. (B-08915)&lt;br /&gt;
*Snowflake SQL queries have been simplified to improve performance, e.g., when quering flows. (B-08901)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues=== &lt;br /&gt;
*ODBC and Loading script models, and models with calculated attributes didn&#039;t allow to create or modify case and event attribute filters from header. (D-14751)&lt;br /&gt;
*Fixed incompatibility issue when using Keycloak as identity provider for SAML authentication. (D-14757)&lt;br /&gt;
*System report for users incorrectly listed some users with read-only permissions as Developers (issue with the EffectivePermissionTypesFor function). (D-14748)&lt;br /&gt;
*Referrer-Policy HTTP header was incorrectly set to &amp;quot;same-origins&amp;quot; causing browser console error in Windows deployments. (D-14736)&lt;br /&gt;
*Fixed issue where QPR ProcessAnalyzer request ID was not added to Snowflake data modification queries. (D-14728)&lt;br /&gt;
*Login request duration was incorrectly shown as zero or negative in System reports. (D-14737)&lt;br /&gt;
*In chart settings, some Snowflake measures with aggregations were missing possibility to define percentile value. (D-14276)&lt;br /&gt;
*Fixed issue where it was not possible to delete a model with same name in the same project during the same session. (D-14708)&lt;br /&gt;
*Script editor to specific script can now be opened with a direct url containing the script_editor parameter. (D-14745)&lt;br /&gt;
*Fixed issue were sometimes an incorrect error code was given for a cancelled query. (D-14755)&lt;br /&gt;
*Improved error message if model loading fails when loading script returns incorrect type of data. (D-14637)&lt;br /&gt;
*Fixed issue where variations query with sampling was slow for new models. (D-14729)&lt;br /&gt;
*Added tooltip to gantt chart&#039;s table layout header so that the header text can be fully seen. (D-13748)&lt;br /&gt;
*Switching between Snowflake and in-memory chart by adjusting chart configuration json caused some items in chart settings to appear twice. (D-14667)&lt;br /&gt;
*Selecting model in dashboard when previously there was no model selected and going back to Workspace, gave error message. (D-14735)&lt;br /&gt;
*Query Designer gave untranslated error message: &amp;quot;You don&#039;t have permissions to model ...&amp;quot;. (D-14727)&lt;br /&gt;
*Query Designer gave untranslated error message &amp;quot;Unable to use Snowflake tables as data source for in-memory query&amp;quot;. (D-14683)&lt;br /&gt;
*In Query Designer, table column menu gave JavaScript error for columns where first row was null. (D-14684)&lt;br /&gt;
*Query Designer incorrectly gave message &amp;quot;There are no columns in the data&amp;quot; when the data had no rows. (D-14692)&lt;br /&gt;
*Fixed issue in Manage Users dialog where row selections disappeared when resizing the dialog. (D-14647)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.7 (build 10821) (released 2025-11-13)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_7.pdf QPR_ProcessAnalyzer_2025_7.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Known issue: Creating case and event attribute filters in dashboards is not possible from the main header for the following types of in-memory models and attributes:&lt;br /&gt;
*Any attributes for [[QPR_ProcessAnalyzer_Model_Datasources#ODBC_Datasource|ODBC loaded models]]&lt;br /&gt;
*Any attributes for [[QPR_ProcessAnalyzer_Model_Datasources#Loading_Script|Loading script models]]&lt;br /&gt;
*Calculated attributes in any in-memory models.&lt;br /&gt;
&lt;br /&gt;
Workaround is to create the filter rule in a chart&#039;s settings and drag-and-drop it to the header. The issue has been fixed by the next release (D-14751). The issue does not concern Snowflake models.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features ===&lt;br /&gt;
*Presets added for [[AI_Root_Causes|AI Root Causes analysis]] based on Snowflake Top Insights which is a decision tree model finding combinations of root cause contributors. (B-08889)&lt;br /&gt;
*Added new [[Range_Filter|filter selector]] component to dashboards to easily create date and number range filters. (B-08877)&lt;br /&gt;
*Projects can be browsed in the [[Navigation_Menu|navigation menu]] to access all dashboards, and also organized the menu into two columns. (B-08708)&lt;br /&gt;
*When QPR ProcessAnalyzer is [[Embed_to_Website|embedded to a website]], SAML authentication is performed in a separate window for more robust operation. (B-08871)&lt;br /&gt;
*For more flexible options, [[AI_Agent|AI Agents]] runs the language model query using the Snowflake account where the selected model is located. (B-08860)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*If DefaultUiLanguage in PA_CONFIGURATION table was not defined, users who haven&#039;t changed language could not login. (D-14706)&lt;br /&gt;
*Improved performance in opening dashboard. (D-14705)&lt;br /&gt;
* Snowflake Native App didn&#039;t show the version number and build timestamp correctly. (D-14703)&lt;br /&gt;
*Snowflake Native App activation failed with a custom compute pool if container service was in the suspended state. (D-14722)&lt;br /&gt;
*Server stuck when trying to generate SQL for SqlDataFrame having multiple columns with the same name. (D-14730)&lt;br /&gt;
*In eventlog prediction, fixed issues preventing the usage of case attribute value prediction. (D-14702)&lt;br /&gt;
*Snowflake DurationBetweenDates function calculated incorrectly when used in a in divisor. (D-14723)&lt;br /&gt;
* Import now succeeds when importing Snowflake datatables refering to data without access. (D-14694)&lt;br /&gt;
*Fixed incorrect color in table column filters, and Workspace loading time has been improved. (D-14704)&lt;br /&gt;
* Fixed issue where dropdown list with projects showed &amp;quot;undefined&amp;quot; in place of project id. (D-14659)&lt;br /&gt;
*Fixed issue where specifying a secret name longer than 440 characters, prevented saving the secret and resulted in an error. (D-14674)&lt;br /&gt;
* SAML authentication failed when it needed to create a new user to QPR ProcessAnalyzer. (D-14717)&lt;br /&gt;
* Fixed issue where SQL dataframe queries didn&#039;t work if the root expression ended to a semicolon. (D-14714)&lt;br /&gt;
*Specific Snowflake query with a comparison criteria, AggregateFrom and GetValueFrom functions gave error about invalid identifier. (D-14718)&lt;br /&gt;
&lt;br /&gt;
===Other improvements=== &lt;br /&gt;
*[[QPR_ProcessAnalyzer_Security_Hardening#HTTP_Response_Headers|Content-Security-Policy HTTP header]] has been reduced to more secure by removing the script-src &#039;unsafe-eval&#039; and img-src &#039;blob&#039; directives. (B-08897)&lt;br /&gt;
*Added [[QPR_ProcessAnalyzer_Security_Hardening#HTTP_Response_Headers|security related HTTP headers]]: X-Permitted-Cross-Domain-Policies, Cross-Origin-Embedder-Policy, Cross-Origin-Opener-Policy, Cross-Origin-Resource-Policy, Referrer-Policy, and Permissions-Policy. (B-08879)&lt;br /&gt;
*Implemented backend support for Snowflake Top Insights for [[SqlDataFrame_in_Expression_Language#:~:text=TopInsights|AI root causes analysis]]. (B-08664)&lt;br /&gt;
*Implemented improved error handling when trying to save too long text to database. (B-08892)&lt;br /&gt;
*For more understandable error messages, error handling and error message generation have been refactored. (B-08754)&lt;br /&gt;
*Optimized database queries and reduced log writing. (B-08870)&lt;br /&gt;
*Frontend components have been updated. (B-08899)&lt;br /&gt;
*Backend components have been updated. (B-08898)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.6 (build 10690) (released 2025-10-01)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_6.pdf QPR_ProcessAnalyzer_2025_6.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Known issue: If the [[PA_Configuration_database_table#:~:text=DefaultUiLanguage|DefaultUiLanguage]] system configuration is not defined, users who haven&#039;t changed their own language, are unable to login. To prevent this problem, please ensure the DefaultUiLanguage is defined. The next release has fixed this issue (D-14706).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Content-Security-Policy (CSP) HTTP header has been updated to enhance security by implementing more restrictive settings. The following directives have been added:&lt;br /&gt;
*object-src &#039;none&#039;&lt;br /&gt;
*frame-ancestors &#039;self&#039;&lt;br /&gt;
*form-action &#039;none&#039;&lt;br /&gt;
*base-uri &#039;none&#039;&lt;br /&gt;
*worker-src blob:&lt;br /&gt;
&lt;br /&gt;
These new restrictions may affect usage that has previously been possible. For example, with the new settings, QPR ProcessAnalyzer can be embedded to a website only within the same origin. For detailed instructions on embedding QPR ProcessAnalyzer on a different website, please refer to [[Embed_to_Website|this quide]]. Additionally, for information on modifying the CSP settings, see documentation for [[QPR_ProcessAnalyzer_Security_Hardening#HTTP_Response_Headers|security hardening]].&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
In the QPR ProcessAnalyzer 2025.6 Native App, the release version number is not displayed correctly in the User Settings dialog. This omission does not have any other complications. QPR ProcessAnalyzer 2025.6 is the only release with this issue, making it possible to identify this release despite the missing version number. This issue is specific to the Native App only. The next release has fixed this issue (D-14703).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*[[User_Settings#Starting_dashboard|Starting dashboard]] after login can be defined for user groups, allowing to create customized starting pages for easy navigation. (B-08791)&lt;br /&gt;
*Snowflake [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|chart&#039;s event filters]] are now embedded to filters created from chart, to precisely follow chart calculation. (B-08845)&lt;br /&gt;
*Result data can be filtered in Snowflake charts using [[QPR_ProcessAnalyzer_Chart#:~:text=Result%20filtering%20expression|result filtering expression]] which works for any datasets. (B-08751)&lt;br /&gt;
*Filter rules order now stays the same when making filter selections and confirming filter. (B-08801)&lt;br /&gt;
*Added model setting [[QPR_ProcessAnalyzer_Project_Workspace#Hiding_Object_Count_Statistics|Show object count statistics]] to hide object counts information in dropdown lists to optimize performance. (B-08849)&lt;br /&gt;
*Added support for [[Chart_On-screen_Settings#:~:text=showStatistics|hiding statistics for on-screen setting]] dropdown lists to improve performance, and in addition the case ID is hidden Case/Event attribute profiling presets. (B-08840)&lt;br /&gt;
*Added following audit fields to users and groups: Created date, Created by, Last modified date, and Last modified by. (B-08792)&lt;br /&gt;
*Snowflake Native App: Added procedure to that [[QPR_ProcessAnalyzer_Native_App_in_Snowflake#Recover_administrator_access|creates administrator user to Native App]] if access to the app has been lost. Also, prevented user management operations that remove own access. (B-08733)&lt;br /&gt;
*Snowflake Native App: Added procedure to [[Change_Native_App_Compute_Pool_Size|change Native App compute pool size]]. Changed new Native Apps to use CPU_X64_S size compute pool, and improved Native App stability. (B-08859)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues=== &lt;br /&gt;
*Snowflake Cortex based AI Assistant didn&#039;t show the results table. (D-14643)&lt;br /&gt;
*When percent stacking is used, Y-axis values are now shown as percentages in data label and tooltip. (D-14633)&lt;br /&gt;
*Fixed issue where Label&amp;amp;Link component had sometimes unnecessary vertical scrollbar. (D-14685)&lt;br /&gt;
*Model validation showed incorrect error message for models with numeric duplicate case ID&#039;s. (D-14687)&lt;br /&gt;
*In Workspace, scripts &amp;quot;View current run log&amp;quot; dialog didn&#039;t update log correctly when new entries were added. (D-14662)&lt;br /&gt;
*Event type mapping in charts didn&#039;t work in object-centric models. (D-14620)&lt;br /&gt;
*Model generation didn&#039;t work as transformation step using _system.ML.ApplyTransformation function. (D-14654)&lt;br /&gt;
*Others aggregation has been removed from date type of dimensions because tables don&#039;t work with textual data in date columns. (D-14623)&lt;br /&gt;
*Fixed issue in AI Assistant where using both Snowflake Cortex and OpenAI modes caused error. (D-14646)&lt;br /&gt;
*In User Management Effective permissions table, column filter incorrectly showed &amp;quot;true&amp;quot; and &amp;quot;false&amp;quot; as options. (D-14639)&lt;br /&gt;
*Pivot table incorrectly showed &amp;quot;Numeric value is not recognized&amp;quot; error when Count or Unique count aggregations were used. (D-14559)&lt;br /&gt;
*Workspace buttons are now visible in small screens spanning to multiple lines. (D-14587)&lt;br /&gt;
*Added tooltip text to &amp;quot;Move to&amp;quot; submenu containing projects so that long project names can be seen. (D-14612)&lt;br /&gt;
*Translation was missing from error messages when deleting items from recycle bin. (D-14652)&lt;br /&gt;
*Fixed data type related issues with in-memory Floor, Ceiling and aggregation functions. (D-14622)&lt;br /&gt;
*Optimized resource loading by getting rid of unnecessary file assets/i18n/en_US.json. (D-14641)&lt;br /&gt;
*Fixed issue where opening script editor gave javascript error about content-security-policy violation. (D-14627)&lt;br /&gt;
*Fixed issue in charts showing datatable content had a strange error when datatable was not selected. (D-14650)&lt;br /&gt;
*Fixed incorrect data types in some project, user and group related measures. (D-14619)&lt;br /&gt;
* Fixed issue where moving expression scripts was not possible when SQL Scripting was not allowed. (D-14624)&lt;br /&gt;
*Deleting and renaming scripts were not available for expression scripts when SQL Scripting was not allowed. (D-14625)&lt;br /&gt;
*Improved documentation for situation when non-existing Snowflake warehouse is configured for a model. (D-14543)&lt;br /&gt;
*Project properties dialog shows a descriptive text when no secrets have been defined instead of an empty table. (D-14611)&lt;br /&gt;
* Improved messages and New project button visibility in Workspace top level when no projects are shown. (D-14609)&lt;br /&gt;
*Event preset gave error if enabling Apply with Chart Filters setting and trying to create filters. (D-14695)&lt;br /&gt;
&lt;br /&gt;
===Other improvements===&lt;br /&gt;
*Added QPR ProcessAnalyzer API request ID to Snowflake queries to easily find matching query in Snowflake query history. (B-08839)&lt;br /&gt;
*[[QPR_ProcessAnalyzer_Security_Hardening#Added_HTTP_Headers|Content Security Policy HTTP header]] includes now object-src, frame-ancestors, form-action, base-uri, and worker-src. (B-08794)&lt;br /&gt;
*Snowflake queries have been optimized by removing null and empty string checks from mapped columns as they are now handled by the model validation check. (B-08837)&lt;br /&gt;
*Added backend support for object-centric model filtering based on case-centric filter rules. (B-08836)&lt;br /&gt;
*Frontend components have been updated. (B-08851)&lt;br /&gt;
*Backend components have been updated. (B-08852)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.5 (build 10361) (released 2025-08-21)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_5.pdf QPR_ProcessAnalyzer_2025_5.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
When using Snowflake Cortex, the AI Assistant is not showing the results table in the assistant&#039;s response. This issue has been fixed by the next release.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===  &lt;br /&gt;
*[[Object-Centric_Flowchart|Object-centric flowchart]] can also use object-to-object relations to link events and objects simplifying event-to-object configuration. (B-08671)&lt;br /&gt;
*[[AI_Assistant_for_QPR_ProcessAnalyzer|AI Assistant]] can provide precise quantitative analysis by making queries to eventlog data (powered by Snowflake Cortex Analyst and Agents). (B-08652)&lt;br /&gt;
*[[Filtering_in_QPR_ProcessAnalyzer|Flows and variations can be filtered]] from any event attribute viewpoint in Snowflake. (B-08737)&lt;br /&gt;
* Added [[Project_Properties_Dialog|project properties dialog]] for viewing project information, changing Snowflake connection settings and project secrets. (B-08655)&lt;br /&gt;
*[[QPR_ProcessAnalyzer_Project_Workspace#Validating_Model|Model validity check]] easily detects technically invalid models and shows detailed reason for invalidity. (B-08624)&lt;br /&gt;
*Projects can be [[QPR_ProcessAnalyzer_Project_Workspace#Exporting_Project|exported]] to json files and imported as new projects. (B-08717)&lt;br /&gt;
*Action buttons can be added to dashboard by defining [[Label_and_Link|label component]] that can change dashboard variables and run scripts. (B-08694)&lt;br /&gt;
*Web user interface is available in [[Languages_and_Localization|Ukrainian language]]. (B-08734)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Fixed following error when performing client-side SAP import: Could not find a part of the path (QPR_ImportSource_Chunk_*.tmp). (D-14589)&lt;br /&gt;
*Fixed issue where ManageProjects permission was incorrectly required when running scripts using QPR ScriptLauncher non-legacy mode. (D-14562)&lt;br /&gt;
*Fixed following error when using SAP import from SQL script called from expression language called from SQL: The given key &#039;&#039; was not present in the dictionary. (D-14593)&lt;br /&gt;
*Some analyses didn&#039;t work, when case ID columns for cases and events datatables differed only in upper/lowercase letters. (D-14556)&lt;br /&gt;
*Business calendar didn&#039;t work for some measures/dimensions/columns and some had business calendar checkboxes missing. (D-14563)&lt;br /&gt;
*Prediction failed to following error: transformer_model_next_activity/event_year_input_embedding. (D-14551)&lt;br /&gt;
*Scripting now works correctly after rows from PA_OPERATION_STATUS table have been deleted. (D-14545)&lt;br /&gt;
*Fixed issue where case-centric flowchart was very slow for object-centric model. (D-14544)&lt;br /&gt;
*Prevented creating dashboards, models and scripts with duplicate names in the same project. (D-09480)&lt;br /&gt;
*KPI Card now shows line breaks correctly in textual values. (D-14546)&lt;br /&gt;
*Improved table Excel export for list data to show items with separator character instead of showing as JSON. (D-14479)&lt;br /&gt;
*Column showing non-conformance reason was incorrectly aligned to right. (D-14570)&lt;br /&gt;
*GetRelatedValueFrom function caused column name conflict when used multiple times in same query. (D-14591)&lt;br /&gt;
* Fixed issue where in-memory sorting for arrays gave &amp;quot;Error in sorting analysis result rows possibly due to multiple types of values ...&amp;quot;. (D-14592)&lt;br /&gt;
*Array type of values were shown incorrectly when used Last Row Aggregates Over-limit Rows setting. (D-14616)&lt;br /&gt;
*Fixed the &amp;quot;Most common&amp;quot; text aggregation sorting error for in-memory calculation. (D-14573)&lt;br /&gt;
*Snowflake model validation gave incorrect error message when mapped column didn&#039;t exist in datatable. (D-14565)&lt;br /&gt;
*Improved model validation to detect when connection string key for model or datatable does not exist. (D-14607)&lt;br /&gt;
* Model validation gave incorrect error when when events datatable case id mapping was missing. (D-14566)&lt;br /&gt;
*Model validation gave incorrect error message when cases and events datatables were in different datasources. (D-14567)&lt;br /&gt;
*Model validation gave incorrect error message when underlying Snowflake table didn&#039;t exist. (D-14568)&lt;br /&gt;
*Workspace Card/Table mode toggle buttons were not translated. (D-14547)&lt;br /&gt;
*Some invalid queries gave unexpected errors and strange outputs. (D-14569)&lt;br /&gt;
* Added translations to model notifications preview table headers. (D-14590)&lt;br /&gt;
* Added translations to access denied message for header object counts indicator. (D-13967)&lt;br /&gt;
* AI Assistant explaining charts speaks now user interface language. (D-14578)&lt;br /&gt;
* AI Agent prompt chart editor didn&#039;t show correctly if model was not selected. (D-14536)&lt;br /&gt;
*AI Assistant gave &amp;quot;Unsupported cache table type&amp;quot; error when trying to explain object-centric flowchart. (D-14477)&lt;br /&gt;
&lt;br /&gt;
===Other improvements ===&lt;br /&gt;
*When trying to open dashboard with an invalid model, the precise model validation error message is shown. (B-08629)&lt;br /&gt;
*Account locked message is now same as username/password incorrect to prevent account enumeration attack. (B-08740)&lt;br /&gt;
*Stringified value format supports also json objects. (B-08766)&lt;br /&gt;
*Event attribute used as event type can be defined for flow and variation filters in Snowflake models (backend support). (B-08705)&lt;br /&gt;
*Translations have been updated. (B-08757)&lt;br /&gt;
*Frontend components have been updated. (B-08760)&lt;br /&gt;
*Backend components have been updated. (B-08759)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.4 (build 9985) (released 2025-05-28)==&lt;br /&gt;
&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_4.pdf QPR_ProcessAnalyzer_2025_4.pdf]&lt;br /&gt;
&lt;br /&gt;
===New features ===&lt;br /&gt;
*Added new AI Agent presets analyzing current state and proposing improvements based on different viewpoints, such as Event and Case Counts, Automation, Bottlenecks, and Root Causes. (B-08710)&lt;br /&gt;
*Added a [[Filter_Selectors#Filter_selector|generic filtering component]] that can be configured for creating any type of filters for distinct values. (B-08654)&lt;br /&gt;
*Volume declining in measures due to case sampling can be compensated in chart and flowchart by using a [[Measure,_Dimension_and_Column_Settings#Statistical_calculations|Statistical calculation method]]. (B-08598)&lt;br /&gt;
*In object-centric models, Object ID, Event ID, Event timestamp, and Event type [[Object-centric_Process_Mining_Model#Object-centric_perspectives|attribute names]] are shown correctly. (B-08680)&lt;br /&gt;
*Snowflake native app has now [[QPR_ProcessAnalyzer_Native_App_in_Snowflake#User_access_to_application|application roles]] for user (for using app) and administrator (for managing app). (B-08660)&lt;br /&gt;
*For Snowflake native app, IMPORTED PRIVILEGES ON SNOWFLAKE DB privilege is removed and instead the [[QPR_ProcessAnalyzer_Native_App_in_Snowflake#Optional_privilege_for_AI_Agent|CORTEX_USER database role]] can be assigned. (B-08718)&lt;br /&gt;
*[[QPR_ProcessAnalyzer_Native_App_in_Snowflake#Logging|Native app logging]] has been improved and now sharing application logs with QPR is possible. (B-08661)&lt;br /&gt;
* Added [[DataFrame_in_Expression_Language#CsvToDataFrame|CsvToDataFrame]] function to expression language to convert textual CSV data into in-memory dataframe. (B-08246)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Fixed &amp;quot;Invalid identifier&amp;quot; error when opening attribute selection list for case attribute preset caused by object id columns which differed only by letter capitalization. (D-14539)&lt;br /&gt;
*When Image component is clicked in dashboard edit mode, the component is now selected instead of link followed. (D-14525)&lt;br /&gt;
*Filters created from dimensions having dimension-specific filter rules will now create expression filter rule where dimensions-specific filter is embedded, for accurately following the selection. (D-14499)&lt;br /&gt;
*Filtering variations or list of event attribute values didn&#039;t work in in-memory models. (D-14476)&lt;br /&gt;
*Fixed issue where AI Agent didn&#039;t update when dashboard variable changed used by prompt chart. (D-14537)&lt;br /&gt;
* Fixed issue where some statistical calculations inadvertently changed row order when applying in groups. (D-14495)&lt;br /&gt;
*In in-memory models, array type of data was not dimensioned correctly. (D-14518)&lt;br /&gt;
* AI Agent Process Variations preset gave &amp;quot;division by zero&amp;quot; error when there were zero cases. (D-14508)&lt;br /&gt;
*Table grouping header labels were not formatted correctly. (D-14514)&lt;br /&gt;
*Fixed Root causes analysis to work with object-centric models. (D-14515)&lt;br /&gt;
*Filtering by OcelObjectId didn&#039;t work when model didn&#039;t have object type table for perspective used in filter. (D-14522)&lt;br /&gt;
*Fixed Root causes analysis with weighting expression to work with object-centric models. (D-14517)&lt;br /&gt;
*Fixed issue where persisting query results where query is started from datatable having custom table name overwrote data in original table. (D-14528)&lt;br /&gt;
*Flowchart SVG export did not show start and end symbols. (D-12401)&lt;br /&gt;
*Fixed issue where join operation didn&#039;t find renamed columns in SqlDataFrames. (D-14512)&lt;br /&gt;
*Improved chart filtering button positions to work with small chart sizes. (D-14509)&lt;br /&gt;
*Datatable foreign key columns dictionary data type was incorrect preventing reading columns information. (D-14505)&lt;br /&gt;
*Workspace scripts editor allowed to change script code for viewer users (altough not save it). (D-14534)&lt;br /&gt;
* In chart custom sorting, trying to refer to measure that had None aggregation, caused SQL compilation error. (D-14526)&lt;br /&gt;
*Model validation check crashed when the datatables were in different datasources. (D-14502)&lt;br /&gt;
&lt;br /&gt;
===Other improvements=== &lt;br /&gt;
*Added expression language functions for using Snowflake Cortex Agents with Cortex Analyst access to query eventlogs. (B-08647)&lt;br /&gt;
*Projects can be export and imported in JSON format containing dashboards, models, datatables and scripts. (B-08613)&lt;br /&gt;
*Simplified object-centric model queries by accepting OcelObjectId as object attribute name in filters. (B-08702)&lt;br /&gt;
*Streamlined import API by removing importMode parameter and changing default fileType to CSV. (B-08704)&lt;br /&gt;
*Frontend components have been updated. (B-08695)&lt;br /&gt;
*Backend components has been updated. (B-08696)&lt;br /&gt;
&lt;br /&gt;
==Additional release for QPR ProcessAnalyzer 2025.3 (build 9805) (released 2025-04-30)==&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*Navigation menu is now displaying dashboards from open dashboard&#039;s project or from selected Workspace project (earlier dashboards were shown from the selected model&#039;s project). (B-08673)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues === &lt;br /&gt;
*Fixed issue where AI Agent made unnecessary queries when filtering dashboard, and also opening dashboard with lot of chart may have been slow. (D-14503)&lt;br /&gt;
*When datatable columns were modified, queries to the data may have given &amp;quot;Invalid identifier&amp;quot; error. (D-14507)&lt;br /&gt;
*Clustering analysis didn&#039;t work with object-centric models. (D-14486)&lt;br /&gt;
*When a new groups is added, it&#039;s selected by default in the Manage Users dialog. Also clicking a selected group does not deselect it. (D-14491)&lt;br /&gt;
*Deleting last group didn&#039;t remove the group from the list. (D-14504)&lt;br /&gt;
&lt;br /&gt;
==Additional release for QPR ProcessAnalyzer 2025.3 (build 9725) (released 2025-04-23)==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
There is an issue causing some dashboards having more than 50 charts to open slowly. The issue has been fixed in the next release by D-14503.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Fixed Issues=== &lt;br /&gt;
*Fixed issue where system stopped responding after opening Scripts tab several times (error in logs: Timeout expired prior to obtaining a connection from the pool). (D-14506)&lt;br /&gt;
*Fixed issue where the object-centric models object types tables didn&#039;t work without the timestamp column. (B-08683)&lt;br /&gt;
*Snowflake cache tables are now created after initiating calculation is completed to improve performance. (D-14460)&lt;br /&gt;
*Fixed issue in User Management where assigning role to project or adding user to group was not saved when there was a column filter. (D-14124)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.3 (build 9699) (released 2025-04-16)==&lt;br /&gt;
&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_3.pdf QPR_ProcessAnalyzer_2025_3.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
There is a potentially serious issue that can cause the system to stop responding, when opening the Scripts tab in the Workspace. The issue has been fixed in the next release (build 9725) by D-14506.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Object-centric model simplification in the story B-08667 (object attributes can only have a single value) doesn&#039;t work with this release. The issue has been fixed in the next release (build 9725) by B-08683.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*Enhanced [[AI Agent]] with UI for editing prompt datasets, and added checkbox to include other charts in dashboard to prompt. (B-08641)&lt;br /&gt;
*In [[Object-centric_Process_Mining_Model|object-centric models]], object-to-object relations are now followed by traversing once all object types. (B-08606)&lt;br /&gt;
*In object-centric models, event type and object type tables are not mandatory anymore, and common attributes can be specified in events and objects tables. (B-08663)&lt;br /&gt;
*Object-centric models support simplified structure where object attributes can only have a single value. (B-08667)&lt;br /&gt;
*Object relation steps setting can be empty to traverse all linked objects in the object-centric model. (B-08668)&lt;br /&gt;
*Snowflake Event Types preset has been improved by adding suggestion of desired and undesired activities based on frequency of occurrence. (B-08656)&lt;br /&gt;
* Added checkbox for [[Measure,_Dimension_and_Column_Settings#Advanced_settings|disabling filtering]] for individual dimensions or columns. (B-08589)&lt;br /&gt;
*Case and event attributes dropdown lists show number of unique values in Snowflake models (instead of attribute datatype as previously). (B-08316)&lt;br /&gt;
*[[SAML_2.0_Federated_Authentication|SAML authentication]] can now synchronize user groups from identity provider. (B-08612)&lt;br /&gt;
*Groups can be [[Manage_Users_and_Groups#Deleting_Group|deleted]] in user management. (B-08330)&lt;br /&gt;
*[[Storing_Secrets_for_Scripts|Secrets]] can be defines as global that can be used by all projects. To set global secrets, [[Generic_Functions_in_QPR_ProcessAnalyzer#SetSecret|SetSecret]] function works also in the generic context. (B-08599)&lt;br /&gt;
*Snowflake [[Clustering_Analysis|Clustering analysis]] shows now number of event occurrences as features describing clusters. (B-08353)&lt;br /&gt;
*Model validity check has been extended to find issues in the eventlog data for Snowflake case-centric models. (B-07910)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Fixed a potential issue which could have leaked database connections and caused connection pool starvation. (D-14414)&lt;br /&gt;
*Renewed self-signed certificate used by SAML 2.0 authentication with ten years of validity. (D-14424)&lt;br /&gt;
*Improved CallWebService function to send request body when using DELETE method. (D-14488)&lt;br /&gt;
* Login page now shows correct error message when there are serious system errors during login. (D-14480)&lt;br /&gt;
*&amp;quot;Datatable contents (in-memory)&amp;quot; option now works also with Snowflake datatables. (D-14391)&lt;br /&gt;
*Added maximum data size limitation to AI assistant to avoid error with large datasets. (D-14419)&lt;br /&gt;
*Day of the Year/Week/Month/Quater selection didn&#039;t work with specific event time in in-memory chart. (D-14421)&lt;br /&gt;
*KPI card now shows a scrollbar when content doesn&#039;t fit to the available space. (D-13428)&lt;br /&gt;
* Workspace projects hierarchy tooltips didn&#039;t show special characters correctly. (D-14430)&lt;br /&gt;
*BPMN editor crashed when creating filter from tasks giving following error: Cannot read properties of null (reading &#039;querySelector&#039;). (D-14399)&lt;br /&gt;
*Value expressions didn&#039;t work that are referred in dimension and containing aggregation. (D-13624)&lt;br /&gt;
* Fixed issue where object-centric flowchart filter selection gave error when case-centric model was selected. (D-14408)&lt;br /&gt;
*Fixed issue where query to non-existing model incorrectly returned &amp;quot;Sequence contains no elements&amp;quot;. (D-14402)&lt;br /&gt;
*Incorrect StringifiedValues in chart settings and expression filter rule caused UI to stuck. (D-14485)&lt;br /&gt;
*Table column filter value list didn&#039;t show the null value label correctly. (D-13844)&lt;br /&gt;
*&amp;quot;Visualize list items with colors&amp;quot; setting didn&#039;t work with the &amp;quot;Last Row Aggregates Over-limit Rows&amp;quot; setting. (D-14357)&lt;br /&gt;
*Made sure that failed queries are not added to model filter cache. (D-14484)&lt;br /&gt;
*Chart settings crashed when trying to use without model selected giving following error: Cannot read properties of undefined (reading &#039;injectValue&#039;). (D-14395)&lt;br /&gt;
*Fixed issue where chart settings opened on top of full screen BPMN editor. (D-14472)&lt;br /&gt;
*Show details button in some error messages didn&#039;t have any effect when pressed. (D-14490)&lt;br /&gt;
*Model validation message was incorrect for model where other datatable is Snowflake and other SQL Server. (D-14475)&lt;br /&gt;
&lt;br /&gt;
=== Other improvements=== &lt;br /&gt;
*Logging has been set to Warning level for Native App to avoid excessive number of log entries to Snowflake events table. (B-08687)&lt;br /&gt;
*Datatable duplication is now synchronous in Snowflake until 30 seconds to avoid showing the created duplicate datatable with zero rows while the operation is still in progress. (B-08634)&lt;br /&gt;
*Improved Snowflake cache table creation logic when there are multiple simultaneous queries. (B-08622)&lt;br /&gt;
*Refactored SQL Server operations to improve robustness and avoid leaking database connections. (B-08649)&lt;br /&gt;
*Frontend components have been updated. (B-08638)&lt;br /&gt;
* Backend components have been updated. (B-08639)&lt;br /&gt;
*Translations have been updated. (B-08640)&lt;br /&gt;
&lt;br /&gt;
== Additional release for QPR ProcessAnalyzer 2025.2 (build 9476) (released 2025-03-19)==&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Fixed issue where charts axis labels had unnecessary line breaks on spaces. (D-14413)&lt;br /&gt;
*Fixed issue where AI Agent and LLMComplete function didn&#039;t work in Native App. (D-14410)&lt;br /&gt;
*Fixed translations for Workspace Scripts tab column filter for Status and Result columns. (D-14393)&lt;br /&gt;
*Fixed issue where Volume Distribution of Flow Analyzed object type didn&#039;t work. (D-14390)&lt;br /&gt;
*Removed reference to fonts.googleapis.com for stylesheets to avoid content-security-policy error. (D-14373)&lt;br /&gt;
* Syncfusion dialog headers now show special characters correctly. (D-14407)&lt;br /&gt;
*Object attribute filter gave null reference error when object type didn&#039;t exist in model. (D-14379)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.2 (build 9410) (released 2025-03-05)==&lt;br /&gt;
&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_2.pdf QPR_ProcessAnalyzer_2025_2.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Detection of models with incomplete datasource configuration has been improved, and now models where the event timestamp column type is string, are not anymore considered valid models. Earlier the string type of data was accepted and converted into dates when model was loaded (for in-memory models) or in SQL queries (in Snowflake models).&lt;br /&gt;
&lt;br /&gt;
The following query can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] (with System administrator user) to list models where the events datatable timestamp column type is string:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Models.Where({&lt;br /&gt;
	let timestampColumn = _.Configuration?.TryGetValue(&amp;quot;Datasource&amp;quot;)?.TryGetValue(&amp;quot;Events&amp;quot;)?.TryGetValue(&amp;quot;Columns&amp;quot;)?.TryGetValue(&amp;quot;Timestamp&amp;quot;);&lt;br /&gt;
	return First(_.EventsDatatable?.Columns?.Where(Name==timestampColumn))?.Datatype == &amp;quot;String&amp;quot;;&lt;br /&gt;
}).(Name + &amp;quot; (id: &amp;quot; + Id + &amp;quot;)&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
For Snowflake dashboards, table actions to [[QPR_ProcessAnalyzer_Table#Table_actions|set dashboard variables]] now set the variable values in the [[Stringified_Value_Format|stringified format]] instead of as raw values. This makes the variables set by table actions compatible with the [[Chart_Linked_Settings|linked settings]] which also use the stringified format by default for the Snowflake models.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features=== &lt;br /&gt;
*Introduced [[AI Agent]] which is a new dashboard component showing LLM generated answers based on user prompt and input data. (B-08556)&lt;br /&gt;
*Added [[Filtering_in_QPR_ProcessAnalyzer_Queries#Object-centric_filter_rules|filtering by object attributes]] for object-centric models. Filters can be created from dialog or selecting items from charts. (B-08547)&lt;br /&gt;
*In object-centric models, object-to-object relations are followed only forward and backward directions. Additionally, there are performance improvements for object-centric models. (B-08577)&lt;br /&gt;
*Snowflake warehouse can be [[QPR_ProcessAnalyzer_Project_Workspace#Change_Snowflake_Warehouse_for_Model|specified for each model]] allowing to use optimal type of warehouse for different sizes of models. (B-08610)&lt;br /&gt;
*Home screen has been removed, and [[QPR_ProcessAnalyzer_Project_Workspace|Workspace]] has new card layout and other UX improvements. (B-08541)&lt;br /&gt;
*Added [[Filtering_in_QPR_ProcessAnalyzer#Saving_filters|filter description]] field to filter properties dialog. (B-08451)&lt;br /&gt;
*Removed event type existence check from charts, so that non-existing event types are allowed. (B-08585)&lt;br /&gt;
*Snowflake Native App configuration data can be [[QPR_ProcessAnalyzer_Native_App_in_Snowflake#Backup_configuration_data|backed up to a snapshot and restored]]. (B-08591)&lt;br /&gt;
*Improved detection of invalid models by adding [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#CheckModelValidity|CheckModelValidity]] function returning model validation errors. (B-08426)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Prevented following error in Snowflake dashboards: Object &amp;quot;qprpa_dt_cache_...&amp;quot; already exists when creating a cache table. (D-14348)&lt;br /&gt;
*In-memory chart &amp;quot;Cases filtered by attribute&amp;quot; didn&#039;t work for date type of attributes. (D-14387)&lt;br /&gt;
*Fixed issue where each dashboard element resize made element width or height increase when chart margin was more than zero. (D-14361)&lt;br /&gt;
*Chart related buttons are now hidden in datatable content preview. (D-14360)&lt;br /&gt;
*Fixed issue where gateway based data import didn&#039;t write SAP errors into script log. (D-14351)&lt;br /&gt;
*Snowflake chart gave error when &amp;quot;Last Row Aggregates Over-limit Rows&amp;quot; setting was used with list aggregation. (D-14352)&lt;br /&gt;
*&amp;quot;Users&amp;quot; system report performance has been improved by adding EffectivePermissionTypesFor function. (D-14266)&lt;br /&gt;
*Fixed issue where AI Assistant crashed when used with a model having ODBC or expression datasource. (D-14340)&lt;br /&gt;
*Fixed issue where AI Assistant explaining charts crashed when applying to Label component. (D-14344)&lt;br /&gt;
* Improved client-side import not to perform redundant datatable configuration data queries. (D-14347)&lt;br /&gt;
*Model was incorrectly identified as in-memory model when datatables were missing. (D-14325)&lt;br /&gt;
*Model default filter is now in use when model is opened from Workspace. (D-14376)&lt;br /&gt;
&lt;br /&gt;
===Other improvements===  &lt;br /&gt;
*Changed Snowflake charts to store [[QPR_ProcessAnalyzer_Table#Table_actions|variable change actions]] in stringified format to make them compatible with linked settings. (B-08587)&lt;br /&gt;
*Backend support for [[Filtering_in_QPR_ProcessAnalyzer_Queries#Object-centric_filter_rules|object-centric filter rules Disabled flag]]. (B-08611)&lt;br /&gt;
*Implemented Entity Framework based database initialization and migrations. (B-08566)&lt;br /&gt;
*Added support for following Entity Framework database providers: SQL Server (full), Snowflake Hybrid Tables (experimental), PostgreSQL (experimental). (B-08581)&lt;br /&gt;
*Frontend components have been updated. (B-08597)&lt;br /&gt;
*Backend components have been updated. (B-08596)&lt;br /&gt;
*Translations have been updated for release 2025.2. (B-08607)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.1 (build 9124) (released 2025-01-23)==&lt;br /&gt;
&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_1.pdf QPR_ProcessAnalyzer_2025_1.pdf]&lt;br /&gt;
&lt;br /&gt;
===New features=== &lt;br /&gt;
*B-08526: Variations and other lists can be visualized with colors, and &amp;quot;List separator&amp;quot; field is available for dimensions and columns.&lt;br /&gt;
*B-08530: Charts can have a [[QPR_ProcessAnalyzer_Chart#Visual_Settings|description text]] which are shown in a dialog when pressing the info button.&lt;br /&gt;
*B-08546: Added [[SQL_Expressions#LLMComplete|LlmComplete]] function to access Snowflake Cortex large language models.&lt;br /&gt;
*B-08439: Added project settings [[QPR_ProcessAnalyzer_Project_Workspace#Project-level_Snowflake_Database_and_Schema|DatabaseNameInDataSource and SchemaNameInDataSource]] to define Snowflake database and schema.&lt;br /&gt;
*B-08531: Projects can be created in expression language using [[Generic_Functions_in_QPR_ProcessAnalyzer#CreateProject|CreateProject]] function.&lt;br /&gt;
*B-08387: Added backend support for object-centric model [[Filtering_in_QPR_ProcessAnalyzer_Queries#Object-centric_filter_rules|filtering for object attributes]].&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*D-14339: Week numbers showed incorrect year for last dates in the end of year.&lt;br /&gt;
*D-14323: Filtering with &amp;quot;Split data by filtering&amp;quot; dimension didn&#039;t work with exclude type of filter rules and when there were multiple filter rules.&lt;br /&gt;
*D-14346: Fixed issue where manual activation using activation utility didn&#039;t work.&lt;br /&gt;
*D-14326: Fixed issue where extra columns in objects table broke object-centric model.&lt;br /&gt;
*D-14306: Fixed issue when there were both TimeStamp and ToTimeStamp event data columns.&lt;br /&gt;
*D-14332: Flowchart event type and flow queries are now simultaneous which will improve performance.&lt;br /&gt;
*D-14331: Flowchart lost selection when flowchart used linked variables with array values.&lt;br /&gt;
*D-14299: Table text filters didn&#039;t work in Snowflake (starts with, ends with, contains).&lt;br /&gt;
*D-14338: Model.Modify function generated model json configuration that frontend wasn&#039;t incompatible with.&lt;br /&gt;
*D-14342: Flow step and Zoom settings control have same size and layout is aligned.&lt;br /&gt;
*D-14316: Occurrence impact on case duration measure didn&#039;t work with certain in-memory models.&lt;br /&gt;
*D-14327: AI Assistant had console error when pressing send button without text.&lt;br /&gt;
*D-14341: AI Assistant overlapped with BPMN editor in fullscreen mode.&lt;br /&gt;
*D-14321: Added error message for AI Assistant when trying to use it without model selected.&lt;br /&gt;
&lt;br /&gt;
===Other improvements=== &lt;br /&gt;
*B-08391: Datatable access has been optimized improving performance for object-centric models.&lt;br /&gt;
* B-08529: Added support for array type in stringified value format.&lt;br /&gt;
*B-08527: Improved SAP connector error handling and removed assumption for fixed dll file names.&lt;br /&gt;
*B-08552: Migrated rest of SQL queries into Entity Framework as preparation for storing configuration data to Snowflake hybrid tables.&lt;br /&gt;
*B-08544: Frontend components have been updated.&lt;br /&gt;
*B-08561: Updated translations for release 2025.1.&lt;br /&gt;
&lt;br /&gt;
==Old Releases==&lt;br /&gt;
See older releases in [[QPR ProcessAnalyzer Release Archive]]&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
[[Category: QPR ProcessAnalyzer]]&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&amp;diff=28111</id>
		<title>QPR ProcessAnalyzer Release Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&amp;diff=28111"/>
		<updated>2026-04-13T14:50:27Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: /* Latest Release: QPR ProcessAnalyzer 2026.3 (build 10933) (released date 13.04.2026) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists all new features and fixed issues for each QPR ProcessAnalyzer release.&lt;br /&gt;
&lt;br /&gt;
[[Next_Release_Roadmap|See roadmap for next release features and fixes]]&lt;br /&gt;
&lt;br /&gt;
==NextRelease: QPR ProcessAnalyzer 2026.4==&lt;br /&gt;
&lt;br /&gt;
==Current Release: QPR ProcessAnalyzer 2026.3 (build 10933) (released date 13.04.2026)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2026_3.pdf QPR_ProcessAnalyzer_2026_3.pdf]&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
* QPR ProcessAnalyzer acts as [[QPR_ProcessAnalyzer_as_MCP_Server|MCP server]] supporting MCP tools implemented using scripts with OAuth and API key authentication. (B-09004)&lt;br /&gt;
* [[Object-centric_Process_Mining_Model#Configure_object-centric_model|Units for each object type]] can be specified in object-centric models. (B-08992)&lt;br /&gt;
* [[PA_Configuration_database_table#:~:text=DefaultColorPalette|Charts color palette]] can be changed globally to easily manage consistent visual layout. (B-08993)&lt;br /&gt;
* [[External_Content|External content component]] url supports tags refering to dashboard variables to show dynamically changing web page. (B-08998)&lt;br /&gt;
* [[QPR_ProcessAnalyzer_Project_Workspace#Exporting_Project|Project export and import]] using files support public filters stored in models. (B-09007)&lt;br /&gt;
* [[QPR_ProcessAnalyzer_KPI_Card|KPI Card]] shows null value label when data has no rows, and table and chart show &amp;quot;No data&amp;quot; message. (B-08999)&lt;br /&gt;
* [[QPR_MEA_Integration|QPR MEA web service]] operations can be called using QPR ProcessAnalyzer expression language. (B-09030)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
* Flowchart had flows missing if shown flows were beyond the top-500 flows. (D-14848)&lt;br /&gt;
* Expression filter rules with greater/less than criteria were incorrectly applied as equal filters when editing chart filters. (D-14852)&lt;br /&gt;
* Table column filter dialog was not entire visible in narrow table located in the bottom of screen. (D-14783)&lt;br /&gt;
* Opening Scripts tab in Workspace was slow when there were scripts with long script log. (D-14670)&lt;br /&gt;
* Fixed issue where object-centric model queries sometimes gave inconsistent results. (D-14854)&lt;br /&gt;
* Snowflake query gave &amp;quot;invalid identifier&amp;quot; error when there were two measures with same cases going though event measure filter. (D-14845)&lt;br /&gt;
* Filter rules drag-and-drop didn&#039;t work between expressions in the same chart. (D-14850)&lt;br /&gt;
* Better error message is shown when invalid value is specified to dashboard aspect ratio flex, chart margin, dashboard margin, external content border width, or external content border corner radius. (D-14805)&lt;br /&gt;
* Improved error message when object-centric model perspective doesn&#039;t have the object type correctly defined. (D-14795)&lt;br /&gt;
* Reduced project properties dialog minimum height to fit for smaller screens. (D-14834)&lt;br /&gt;
* Updated NLTK to version 3.9.3. (D-14829)&lt;br /&gt;
&lt;br /&gt;
===Other improvements===&lt;br /&gt;
* Frontend components have been updated. (B-09028)&lt;br /&gt;
* Backend components have been updated. (B-09027)&lt;br /&gt;
&lt;br /&gt;
==Additional release for QPR ProcessAnalyzer 2026.2 (build 10910) (released date 16.3.2026)==&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
* Filters report in System reports shows also other users&#039; private filters for admins. (B-09017)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
* Filter rules were lost when saving a filter with &amp;quot;Cases with specific events&amp;quot;, &amp;quot;Cases starting with&amp;quot; or &amp;quot;Cases ending to&amp;quot; rules. (D-14847)&lt;br /&gt;
* Fixed issue where object-centric models sometimes gave &amp;quot;Object &amp;lt;cachetablename&amp;gt; does not exist or not authorized&amp;quot; error. (D-14797)&lt;br /&gt;
* ExtractSap function didn&#039;t work with QPR ScriptLauncher when using secret for storing SAP password. (D-14813)&lt;br /&gt;
* Variation stepper incorrectly skipped steps when going down when variation count is maximum. (D-14844)&lt;br /&gt;
* Improved error message when creating model from filter fails. (D-14811)&lt;br /&gt;
* System dashboard names were incorrectly translated twice. (D-14841)&lt;br /&gt;
* AI Assistant had one translation missing. (D-14840)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2026.2 (build 10897) (released date 2026-02-26)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2026_2.pdf QPR_ProcessAnalyzer_2026_2.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Snowflake user-defined functions (UDF) used by QPR ProcessAnalyzer have been updated to use Python 3.13. Some of the old versions of the functions use Python 3.9 which has been deprecated by Snowflake. Although the old versions are not anymore used by QPR ProcessAnalyzer, they are not automatically deleted and thus Snowflake may send notifications about existing deprecated functions. It&#039;s recommended to remove the old functions which are following:&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V2&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V3&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V4&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V5&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V6&lt;br /&gt;
* QPRPA_UDF_BPMN_CONFORMANCE_VIOLATIONS_FLOWS&lt;br /&gt;
* QPRPA_UDF_BPMN_CONFORMANCE_VIOLATIONS_FLOWS_V2&lt;br /&gt;
* QPRPA_UDF_BPMN_CONFORMANCE_VIOLATIONS_FLOWS_V3&lt;br /&gt;
* QPRPA_UDF_BPMN_IS_CONFORMANT&lt;br /&gt;
* QPRPA_UDF_BPMN_IS_CONFORMANT_V2&lt;br /&gt;
* QPRPA_UDF_BPMN_IS_CONFORMANT_V3&lt;br /&gt;
* QPRPA_UDTF_CLUSTER&lt;br /&gt;
* QPRPA_UDTF_CLUSTER_V2&lt;br /&gt;
* QPRPA_UDTF_CLUSTER_V3&lt;br /&gt;
* QPRPA_UDTF_CLUSTER_V4&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
* Fully conformant [[QPR_ProcessAnalyzer_BPMN_Editor#Auto-creating_BPMN_Diagram_from_Eventlog|BPMN diagrams]] can be created from eventlogs with proper layout and identifying exclusive and parallel gateways. (B-08900)&lt;br /&gt;
* [[Object-Centric_Flowchart|Object-centric flowchart]] flows visibility can be controlled with a stepper based on top variations, and start and end symbols can be hidden for each event type. (B-08987)&lt;br /&gt;
* Added preset for object-centric flowchart, and improved Process Discovery dashboard usage for object-centric models. (B-08863)&lt;br /&gt;
* Viewer users can [[Filtering_in_QPR_ProcessAnalyzer#Saving_filters|save private filters]] for personal use. (B-08920)&lt;br /&gt;
* [[Chart_On-screen_Settings|On-screen settings]] support static and dynamic case/event attribute values selection, and [[Chart_Linked_Settings|linked settings]] can bind to on-screen settings. (B-08814)&lt;br /&gt;
* [[AI_Root_Causes|AI root causes analysis]] related error situations are easier to resolve with easier to understand error messages. (B-08997)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
* Histogram chart did not show at all and gave a JavaScript error. (D-14801)&lt;br /&gt;
* When chart with multiple series was sorted by measure, some datapoints were not shown when visible X-axis was limited by zooming or Custom layout settings. (D-14793)&lt;br /&gt;
* Disabled filter rules were incorrectly applied for the shown items in the filter rule editing dialog. (D-14791)&lt;br /&gt;
* If there were more than one Range filter components in dashboard, periods menu incorrectly affected all of them. (D-14818)&lt;br /&gt;
* List of event types in object-centric flowchart settings didn&#039;t open if there were object types linked to none events. (D-14798)&lt;br /&gt;
* Snowflake flowchart root causes analysis gave &amp;quot;SQL compilation error&amp;quot; when run with case duration criteria. (D-14790)&lt;br /&gt;
* Term &amp;quot;Second&amp;quot; when meaning time unit was translated incorrectly in French. (D-14803)&lt;br /&gt;
* OpenTelemetry metrics were not sent to Prometheus correctly. (D-14804)&lt;br /&gt;
* Opening script editor by url didn&#039;t show project path and also javascript error appeared to console. (D-14794)&lt;br /&gt;
* Fixed issue where case attribute prediction failed when using more than one iteration. (D-14789)&lt;br /&gt;
* SQLDataFrame with several append operations had performance issue. (D-14772)&lt;br /&gt;
* Null coalescing operators didn&#039;t work correctly in chaining in expression language. (D-14762)&lt;br /&gt;
* Native app could not call procedure if project referred to other database and schema. (D-14749)&lt;br /&gt;
* Trying to create script with duplicate name gave unclear error: Cannot insert duplicate key row in object &#039;dbo.PA_SCRIPT&#039; with unique index &#039;PA_SCRIPT_UNIQUE_NAME_IN_PROJECT&#039;. (D-14784)&lt;br /&gt;
* BPMN editor popup menu was partly hidden behind other chart components. (D-14345)&lt;br /&gt;
* When going to context menu report from BPMN editor, &amp;quot;Operation was cancelled by a user&amp;quot; was given when query was in progress. (D-14807)&lt;br /&gt;
* BPMN editor tooltips measure descriptions didn&#039;t disappear at all. (D-14809)&lt;br /&gt;
* Presets benchmarking didn&#039;t work for models without case attributes. (D-14822)&lt;br /&gt;
* Object-centric filter rule editor gave javascript error when opened for case-centric model. (D-14799)&lt;br /&gt;
* Object-centric filter rule could incorrectly be dropped as root causes comparison rule. (D-14796)&lt;br /&gt;
* Localization missing for &amp;quot;Save as new filter&amp;quot; button. (D-14839)&lt;br /&gt;
&lt;br /&gt;
===Other improvements===&lt;br /&gt;
* SQL queries run in Snowflake have been further optimized. (B-08936)&lt;br /&gt;
* Snowflake stored procedures and user defined functions have been migrated to Python 3.13. (B-08984)&lt;br /&gt;
* Frontend components have been updated. (B-08991)&lt;br /&gt;
* Backend components have been updated. (B-08990)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2026.1 (build 10870) (released date 2026-01-19)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2026_1.pdf QPR_ProcessAnalyzer_2026_1.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
QPR ProcessAnalyzer Server and QPR ScriptLauncher are running on .NET 10, replacing the previous .NET 8 version. When updating to this release, make sure to install the .NET 10 Runtime ([[Updating_QPR_ProcessAnalyzer_Server|update instructions]]). While .NET 8 and .NET 10 can run side by side, .NET 8 does not need to be removed immediately. However, for security reasons, any unused .NET 8 installation should be uninstalled as soon as possible after the update.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Known issue: The histogram visualization doesn&#039;t work in this release. The issue will be fixed in the next release. Possible workaround is to use the column chart where to set no spacing between columns. This can be configured with the following [[QPR_ProcessAnalyzer_Chart#:~:text=Custom%20Layout|Custom Layout]] settings:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;plotOptions&amp;quot;: {&lt;br /&gt;
		&amp;quot;series&amp;quot;: {&lt;br /&gt;
			&amp;quot;pointPadding&amp;quot;: 0,&lt;br /&gt;
			&amp;quot;groupPadding&amp;quot;: 0&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*Object-centric models support versatile [[Filtering_in_QPR_ProcessAnalyzer|object-centric filters]] based on case-centric filter rules using perspective. (B-08595)&lt;br /&gt;
*[[AI_Root_Causes|AI Root Causes analysis]] is shown in a hierarchy for easier readability. (B-08921)&lt;br /&gt;
*[[Process_Flowchart|Case-centric flowchart]] performance has been improved by making all queries simultaneously. (B-08916)&lt;br /&gt;
* Object counts indicator is hidden for object-centric models when perspective is not set. (B-08825)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
* Filter to exclude case attribute values incorrectly excluded null values even if null wasn&#039;t selected. (D-14773)&lt;br /&gt;
*Prediction generated invalid models where case IDs in events datatable didn&#039;t exist in cases datatable. (D-14758)&lt;br /&gt;
* AI Root Causes presets didn&#039;t work with models without case attributes. (D-14759)&lt;br /&gt;
* Snowflake query with multiple columns with aggregations and Coalesce function gave &amp;quot;invalid identifier&amp;quot; error. (D-14763)&lt;br /&gt;
*Dropdown list to add business calendar holidays from other model shows empty items. (D-14786)&lt;br /&gt;
*In-memory Average function didn&#039;t work when aggregating dates using model&#039;s Attribute function. (D-14761)&lt;br /&gt;
*Sometimes opening models list gave error &amp;quot;User doesn&#039;t have permission GenericRead to model&amp;quot;. (D-14742)&lt;br /&gt;
&lt;br /&gt;
===Other improvements=== &lt;br /&gt;
*[[QPR_ProcessAnalyzer_Security_Hardening#Added_HTTP_Headers|Content-security-policy]] img-src blob: directive has been restored for Highcharts image export. (B-08904)&lt;br /&gt;
*Backend components have been updated [[Updating_QPR_ProcessAnalyzer_Server|including .NET 10]]. (B-08926)&lt;br /&gt;
*Frontend components have been updated. (B-08927)&lt;br /&gt;
&lt;br /&gt;
==Additional release for QPR ProcessAnalyzer 2025.7 (build 10845) (released 2025-12-11)==&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*QPR ProcessAnalyzer can be deployed on-premise using [[Deploy_QPR_ProcessAnalyzer_from_Container|Linux containers]]. (B-08915)&lt;br /&gt;
*Snowflake SQL queries have been simplified to improve performance, e.g., when quering flows. (B-08901)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues=== &lt;br /&gt;
*ODBC and Loading script models, and models with calculated attributes didn&#039;t allow to create or modify case and event attribute filters from header. (D-14751)&lt;br /&gt;
*Fixed incompatibility issue when using Keycloak as identity provider for SAML authentication. (D-14757)&lt;br /&gt;
*System report for users incorrectly listed some users with read-only permissions as Developers (issue with the EffectivePermissionTypesFor function). (D-14748)&lt;br /&gt;
*Referrer-Policy HTTP header was incorrectly set to &amp;quot;same-origins&amp;quot; causing browser console error in Windows deployments. (D-14736)&lt;br /&gt;
*Fixed issue where QPR ProcessAnalyzer request ID was not added to Snowflake data modification queries. (D-14728)&lt;br /&gt;
*Login request duration was incorrectly shown as zero or negative in System reports. (D-14737)&lt;br /&gt;
*In chart settings, some Snowflake measures with aggregations were missing possibility to define percentile value. (D-14276)&lt;br /&gt;
*Fixed issue where it was not possible to delete a model with same name in the same project during the same session. (D-14708)&lt;br /&gt;
*Script editor to specific script can now be opened with a direct url containing the script_editor parameter. (D-14745)&lt;br /&gt;
*Fixed issue were sometimes an incorrect error code was given for a cancelled query. (D-14755)&lt;br /&gt;
*Improved error message if model loading fails when loading script returns incorrect type of data. (D-14637)&lt;br /&gt;
*Fixed issue where variations query with sampling was slow for new models. (D-14729)&lt;br /&gt;
*Added tooltip to gantt chart&#039;s table layout header so that the header text can be fully seen. (D-13748)&lt;br /&gt;
*Switching between Snowflake and in-memory chart by adjusting chart configuration json caused some items in chart settings to appear twice. (D-14667)&lt;br /&gt;
*Selecting model in dashboard when previously there was no model selected and going back to Workspace, gave error message. (D-14735)&lt;br /&gt;
*Query Designer gave untranslated error message: &amp;quot;You don&#039;t have permissions to model ...&amp;quot;. (D-14727)&lt;br /&gt;
*Query Designer gave untranslated error message &amp;quot;Unable to use Snowflake tables as data source for in-memory query&amp;quot;. (D-14683)&lt;br /&gt;
*In Query Designer, table column menu gave JavaScript error for columns where first row was null. (D-14684)&lt;br /&gt;
*Query Designer incorrectly gave message &amp;quot;There are no columns in the data&amp;quot; when the data had no rows. (D-14692)&lt;br /&gt;
*Fixed issue in Manage Users dialog where row selections disappeared when resizing the dialog. (D-14647)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.7 (build 10821) (released 2025-11-13)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_7.pdf QPR_ProcessAnalyzer_2025_7.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Known issue: Creating case and event attribute filters in dashboards is not possible from the main header for the following types of in-memory models and attributes:&lt;br /&gt;
*Any attributes for [[QPR_ProcessAnalyzer_Model_Datasources#ODBC_Datasource|ODBC loaded models]]&lt;br /&gt;
*Any attributes for [[QPR_ProcessAnalyzer_Model_Datasources#Loading_Script|Loading script models]]&lt;br /&gt;
*Calculated attributes in any in-memory models.&lt;br /&gt;
&lt;br /&gt;
Workaround is to create the filter rule in a chart&#039;s settings and drag-and-drop it to the header. The issue has been fixed by the next release (D-14751). The issue does not concern Snowflake models.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features ===&lt;br /&gt;
*Presets added for [[AI_Root_Causes|AI Root Causes analysis]] based on Snowflake Top Insights which is a decision tree model finding combinations of root cause contributors. (B-08889)&lt;br /&gt;
*Added new [[Range_Filter|filter selector]] component to dashboards to easily create date and number range filters. (B-08877)&lt;br /&gt;
*Projects can be browsed in the [[Navigation_Menu|navigation menu]] to access all dashboards, and also organized the menu into two columns. (B-08708)&lt;br /&gt;
*When QPR ProcessAnalyzer is [[Embed_to_Website|embedded to a website]], SAML authentication is performed in a separate window for more robust operation. (B-08871)&lt;br /&gt;
*For more flexible options, [[AI_Agent|AI Agents]] runs the language model query using the Snowflake account where the selected model is located. (B-08860)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*If DefaultUiLanguage in PA_CONFIGURATION table was not defined, users who haven&#039;t changed language could not login. (D-14706)&lt;br /&gt;
*Improved performance in opening dashboard. (D-14705)&lt;br /&gt;
* Snowflake Native App didn&#039;t show the version number and build timestamp correctly. (D-14703)&lt;br /&gt;
*Snowflake Native App activation failed with a custom compute pool if container service was in the suspended state. (D-14722)&lt;br /&gt;
*Server stuck when trying to generate SQL for SqlDataFrame having multiple columns with the same name. (D-14730)&lt;br /&gt;
*In eventlog prediction, fixed issues preventing the usage of case attribute value prediction. (D-14702)&lt;br /&gt;
*Snowflake DurationBetweenDates function calculated incorrectly when used in a in divisor. (D-14723)&lt;br /&gt;
* Import now succeeds when importing Snowflake datatables refering to data without access. (D-14694)&lt;br /&gt;
*Fixed incorrect color in table column filters, and Workspace loading time has been improved. (D-14704)&lt;br /&gt;
* Fixed issue where dropdown list with projects showed &amp;quot;undefined&amp;quot; in place of project id. (D-14659)&lt;br /&gt;
*Fixed issue where specifying a secret name longer than 440 characters, prevented saving the secret and resulted in an error. (D-14674)&lt;br /&gt;
* SAML authentication failed when it needed to create a new user to QPR ProcessAnalyzer. (D-14717)&lt;br /&gt;
* Fixed issue where SQL dataframe queries didn&#039;t work if the root expression ended to a semicolon. (D-14714)&lt;br /&gt;
*Specific Snowflake query with a comparison criteria, AggregateFrom and GetValueFrom functions gave error about invalid identifier. (D-14718)&lt;br /&gt;
&lt;br /&gt;
===Other improvements=== &lt;br /&gt;
*[[QPR_ProcessAnalyzer_Security_Hardening#HTTP_Response_Headers|Content-Security-Policy HTTP header]] has been reduced to more secure by removing the script-src &#039;unsafe-eval&#039; and img-src &#039;blob&#039; directives. (B-08897)&lt;br /&gt;
*Added [[QPR_ProcessAnalyzer_Security_Hardening#HTTP_Response_Headers|security related HTTP headers]]: X-Permitted-Cross-Domain-Policies, Cross-Origin-Embedder-Policy, Cross-Origin-Opener-Policy, Cross-Origin-Resource-Policy, Referrer-Policy, and Permissions-Policy. (B-08879)&lt;br /&gt;
*Implemented backend support for Snowflake Top Insights for [[SqlDataFrame_in_Expression_Language#:~:text=TopInsights|AI root causes analysis]]. (B-08664)&lt;br /&gt;
*Implemented improved error handling when trying to save too long text to database. (B-08892)&lt;br /&gt;
*For more understandable error messages, error handling and error message generation have been refactored. (B-08754)&lt;br /&gt;
*Optimized database queries and reduced log writing. (B-08870)&lt;br /&gt;
*Frontend components have been updated. (B-08899)&lt;br /&gt;
*Backend components have been updated. (B-08898)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.6 (build 10690) (released 2025-10-01)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_6.pdf QPR_ProcessAnalyzer_2025_6.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Known issue: If the [[PA_Configuration_database_table#:~:text=DefaultUiLanguage|DefaultUiLanguage]] system configuration is not defined, users who haven&#039;t changed their own language, are unable to login. To prevent this problem, please ensure the DefaultUiLanguage is defined. The next release has fixed this issue (D-14706).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Content-Security-Policy (CSP) HTTP header has been updated to enhance security by implementing more restrictive settings. The following directives have been added:&lt;br /&gt;
*object-src &#039;none&#039;&lt;br /&gt;
*frame-ancestors &#039;self&#039;&lt;br /&gt;
*form-action &#039;none&#039;&lt;br /&gt;
*base-uri &#039;none&#039;&lt;br /&gt;
*worker-src blob:&lt;br /&gt;
&lt;br /&gt;
These new restrictions may affect usage that has previously been possible. For example, with the new settings, QPR ProcessAnalyzer can be embedded to a website only within the same origin. For detailed instructions on embedding QPR ProcessAnalyzer on a different website, please refer to [[Embed_to_Website|this quide]]. Additionally, for information on modifying the CSP settings, see documentation for [[QPR_ProcessAnalyzer_Security_Hardening#HTTP_Response_Headers|security hardening]].&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
In the QPR ProcessAnalyzer 2025.6 Native App, the release version number is not displayed correctly in the User Settings dialog. This omission does not have any other complications. QPR ProcessAnalyzer 2025.6 is the only release with this issue, making it possible to identify this release despite the missing version number. This issue is specific to the Native App only. The next release has fixed this issue (D-14703).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*[[User_Settings#Starting_dashboard|Starting dashboard]] after login can be defined for user groups, allowing to create customized starting pages for easy navigation. (B-08791)&lt;br /&gt;
*Snowflake [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|chart&#039;s event filters]] are now embedded to filters created from chart, to precisely follow chart calculation. (B-08845)&lt;br /&gt;
*Result data can be filtered in Snowflake charts using [[QPR_ProcessAnalyzer_Chart#:~:text=Result%20filtering%20expression|result filtering expression]] which works for any datasets. (B-08751)&lt;br /&gt;
*Filter rules order now stays the same when making filter selections and confirming filter. (B-08801)&lt;br /&gt;
*Added model setting [[QPR_ProcessAnalyzer_Project_Workspace#Hiding_Object_Count_Statistics|Show object count statistics]] to hide object counts information in dropdown lists to optimize performance. (B-08849)&lt;br /&gt;
*Added support for [[Chart_On-screen_Settings#:~:text=showStatistics|hiding statistics for on-screen setting]] dropdown lists to improve performance, and in addition the case ID is hidden Case/Event attribute profiling presets. (B-08840)&lt;br /&gt;
*Added following audit fields to users and groups: Created date, Created by, Last modified date, and Last modified by. (B-08792)&lt;br /&gt;
*Snowflake Native App: Added procedure to that [[QPR_ProcessAnalyzer_Native_App_in_Snowflake#Recover_administrator_access|creates administrator user to Native App]] if access to the app has been lost. Also, prevented user management operations that remove own access. (B-08733)&lt;br /&gt;
*Snowflake Native App: Added procedure to [[Change_Native_App_Compute_Pool_Size|change Native App compute pool size]]. Changed new Native Apps to use CPU_X64_S size compute pool, and improved Native App stability. (B-08859)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues=== &lt;br /&gt;
*Snowflake Cortex based AI Assistant didn&#039;t show the results table. (D-14643)&lt;br /&gt;
*When percent stacking is used, Y-axis values are now shown as percentages in data label and tooltip. (D-14633)&lt;br /&gt;
*Fixed issue where Label&amp;amp;Link component had sometimes unnecessary vertical scrollbar. (D-14685)&lt;br /&gt;
*Model validation showed incorrect error message for models with numeric duplicate case ID&#039;s. (D-14687)&lt;br /&gt;
*In Workspace, scripts &amp;quot;View current run log&amp;quot; dialog didn&#039;t update log correctly when new entries were added. (D-14662)&lt;br /&gt;
*Event type mapping in charts didn&#039;t work in object-centric models. (D-14620)&lt;br /&gt;
*Model generation didn&#039;t work as transformation step using _system.ML.ApplyTransformation function. (D-14654)&lt;br /&gt;
*Others aggregation has been removed from date type of dimensions because tables don&#039;t work with textual data in date columns. (D-14623)&lt;br /&gt;
*Fixed issue in AI Assistant where using both Snowflake Cortex and OpenAI modes caused error. (D-14646)&lt;br /&gt;
*In User Management Effective permissions table, column filter incorrectly showed &amp;quot;true&amp;quot; and &amp;quot;false&amp;quot; as options. (D-14639)&lt;br /&gt;
*Pivot table incorrectly showed &amp;quot;Numeric value is not recognized&amp;quot; error when Count or Unique count aggregations were used. (D-14559)&lt;br /&gt;
*Workspace buttons are now visible in small screens spanning to multiple lines. (D-14587)&lt;br /&gt;
*Added tooltip text to &amp;quot;Move to&amp;quot; submenu containing projects so that long project names can be seen. (D-14612)&lt;br /&gt;
*Translation was missing from error messages when deleting items from recycle bin. (D-14652)&lt;br /&gt;
*Fixed data type related issues with in-memory Floor, Ceiling and aggregation functions. (D-14622)&lt;br /&gt;
*Optimized resource loading by getting rid of unnecessary file assets/i18n/en_US.json. (D-14641)&lt;br /&gt;
*Fixed issue where opening script editor gave javascript error about content-security-policy violation. (D-14627)&lt;br /&gt;
*Fixed issue in charts showing datatable content had a strange error when datatable was not selected. (D-14650)&lt;br /&gt;
*Fixed incorrect data types in some project, user and group related measures. (D-14619)&lt;br /&gt;
* Fixed issue where moving expression scripts was not possible when SQL Scripting was not allowed. (D-14624)&lt;br /&gt;
*Deleting and renaming scripts were not available for expression scripts when SQL Scripting was not allowed. (D-14625)&lt;br /&gt;
*Improved documentation for situation when non-existing Snowflake warehouse is configured for a model. (D-14543)&lt;br /&gt;
*Project properties dialog shows a descriptive text when no secrets have been defined instead of an empty table. (D-14611)&lt;br /&gt;
* Improved messages and New project button visibility in Workspace top level when no projects are shown. (D-14609)&lt;br /&gt;
*Event preset gave error if enabling Apply with Chart Filters setting and trying to create filters. (D-14695)&lt;br /&gt;
&lt;br /&gt;
===Other improvements===&lt;br /&gt;
*Added QPR ProcessAnalyzer API request ID to Snowflake queries to easily find matching query in Snowflake query history. (B-08839)&lt;br /&gt;
*[[QPR_ProcessAnalyzer_Security_Hardening#Added_HTTP_Headers|Content Security Policy HTTP header]] includes now object-src, frame-ancestors, form-action, base-uri, and worker-src. (B-08794)&lt;br /&gt;
*Snowflake queries have been optimized by removing null and empty string checks from mapped columns as they are now handled by the model validation check. (B-08837)&lt;br /&gt;
*Added backend support for object-centric model filtering based on case-centric filter rules. (B-08836)&lt;br /&gt;
*Frontend components have been updated. (B-08851)&lt;br /&gt;
*Backend components have been updated. (B-08852)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.5 (build 10361) (released 2025-08-21)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_5.pdf QPR_ProcessAnalyzer_2025_5.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
When using Snowflake Cortex, the AI Assistant is not showing the results table in the assistant&#039;s response. This issue has been fixed by the next release.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===  &lt;br /&gt;
*[[Object-Centric_Flowchart|Object-centric flowchart]] can also use object-to-object relations to link events and objects simplifying event-to-object configuration. (B-08671)&lt;br /&gt;
*[[AI_Assistant_for_QPR_ProcessAnalyzer|AI Assistant]] can provide precise quantitative analysis by making queries to eventlog data (powered by Snowflake Cortex Analyst and Agents). (B-08652)&lt;br /&gt;
*[[Filtering_in_QPR_ProcessAnalyzer|Flows and variations can be filtered]] from any event attribute viewpoint in Snowflake. (B-08737)&lt;br /&gt;
* Added [[Project_Properties_Dialog|project properties dialog]] for viewing project information, changing Snowflake connection settings and project secrets. (B-08655)&lt;br /&gt;
*[[QPR_ProcessAnalyzer_Project_Workspace#Validating_Model|Model validity check]] easily detects technically invalid models and shows detailed reason for invalidity. (B-08624)&lt;br /&gt;
*Projects can be [[QPR_ProcessAnalyzer_Project_Workspace#Exporting_Project|exported]] to json files and imported as new projects. (B-08717)&lt;br /&gt;
*Action buttons can be added to dashboard by defining [[Label_and_Link|label component]] that can change dashboard variables and run scripts. (B-08694)&lt;br /&gt;
*Web user interface is available in [[Languages_and_Localization|Ukrainian language]]. (B-08734)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Fixed following error when performing client-side SAP import: Could not find a part of the path (QPR_ImportSource_Chunk_*.tmp). (D-14589)&lt;br /&gt;
*Fixed issue where ManageProjects permission was incorrectly required when running scripts using QPR ScriptLauncher non-legacy mode. (D-14562)&lt;br /&gt;
*Fixed following error when using SAP import from SQL script called from expression language called from SQL: The given key &#039;&#039; was not present in the dictionary. (D-14593)&lt;br /&gt;
*Some analyses didn&#039;t work, when case ID columns for cases and events datatables differed only in upper/lowercase letters. (D-14556)&lt;br /&gt;
*Business calendar didn&#039;t work for some measures/dimensions/columns and some had business calendar checkboxes missing. (D-14563)&lt;br /&gt;
*Prediction failed to following error: transformer_model_next_activity/event_year_input_embedding. (D-14551)&lt;br /&gt;
*Scripting now works correctly after rows from PA_OPERATION_STATUS table have been deleted. (D-14545)&lt;br /&gt;
*Fixed issue where case-centric flowchart was very slow for object-centric model. (D-14544)&lt;br /&gt;
*Prevented creating dashboards, models and scripts with duplicate names in the same project. (D-09480)&lt;br /&gt;
*KPI Card now shows line breaks correctly in textual values. (D-14546)&lt;br /&gt;
*Improved table Excel export for list data to show items with separator character instead of showing as JSON. (D-14479)&lt;br /&gt;
*Column showing non-conformance reason was incorrectly aligned to right. (D-14570)&lt;br /&gt;
*GetRelatedValueFrom function caused column name conflict when used multiple times in same query. (D-14591)&lt;br /&gt;
* Fixed issue where in-memory sorting for arrays gave &amp;quot;Error in sorting analysis result rows possibly due to multiple types of values ...&amp;quot;. (D-14592)&lt;br /&gt;
*Array type of values were shown incorrectly when used Last Row Aggregates Over-limit Rows setting. (D-14616)&lt;br /&gt;
*Fixed the &amp;quot;Most common&amp;quot; text aggregation sorting error for in-memory calculation. (D-14573)&lt;br /&gt;
*Snowflake model validation gave incorrect error message when mapped column didn&#039;t exist in datatable. (D-14565)&lt;br /&gt;
*Improved model validation to detect when connection string key for model or datatable does not exist. (D-14607)&lt;br /&gt;
* Model validation gave incorrect error when when events datatable case id mapping was missing. (D-14566)&lt;br /&gt;
*Model validation gave incorrect error message when cases and events datatables were in different datasources. (D-14567)&lt;br /&gt;
*Model validation gave incorrect error message when underlying Snowflake table didn&#039;t exist. (D-14568)&lt;br /&gt;
*Workspace Card/Table mode toggle buttons were not translated. (D-14547)&lt;br /&gt;
*Some invalid queries gave unexpected errors and strange outputs. (D-14569)&lt;br /&gt;
* Added translations to model notifications preview table headers. (D-14590)&lt;br /&gt;
* Added translations to access denied message for header object counts indicator. (D-13967)&lt;br /&gt;
* AI Assistant explaining charts speaks now user interface language. (D-14578)&lt;br /&gt;
* AI Agent prompt chart editor didn&#039;t show correctly if model was not selected. (D-14536)&lt;br /&gt;
*AI Assistant gave &amp;quot;Unsupported cache table type&amp;quot; error when trying to explain object-centric flowchart. (D-14477)&lt;br /&gt;
&lt;br /&gt;
===Other improvements ===&lt;br /&gt;
*When trying to open dashboard with an invalid model, the precise model validation error message is shown. (B-08629)&lt;br /&gt;
*Account locked message is now same as username/password incorrect to prevent account enumeration attack. (B-08740)&lt;br /&gt;
*Stringified value format supports also json objects. (B-08766)&lt;br /&gt;
*Event attribute used as event type can be defined for flow and variation filters in Snowflake models (backend support). (B-08705)&lt;br /&gt;
*Translations have been updated. (B-08757)&lt;br /&gt;
*Frontend components have been updated. (B-08760)&lt;br /&gt;
*Backend components have been updated. (B-08759)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.4 (build 9985) (released 2025-05-28)==&lt;br /&gt;
&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_4.pdf QPR_ProcessAnalyzer_2025_4.pdf]&lt;br /&gt;
&lt;br /&gt;
===New features ===&lt;br /&gt;
*Added new AI Agent presets analyzing current state and proposing improvements based on different viewpoints, such as Event and Case Counts, Automation, Bottlenecks, and Root Causes. (B-08710)&lt;br /&gt;
*Added a [[Filter_Selectors#Filter_selector|generic filtering component]] that can be configured for creating any type of filters for distinct values. (B-08654)&lt;br /&gt;
*Volume declining in measures due to case sampling can be compensated in chart and flowchart by using a [[Measure,_Dimension_and_Column_Settings#Statistical_calculations|Statistical calculation method]]. (B-08598)&lt;br /&gt;
*In object-centric models, Object ID, Event ID, Event timestamp, and Event type [[Object-centric_Process_Mining_Model#Object-centric_perspectives|attribute names]] are shown correctly. (B-08680)&lt;br /&gt;
*Snowflake native app has now [[QPR_ProcessAnalyzer_Native_App_in_Snowflake#User_access_to_application|application roles]] for user (for using app) and administrator (for managing app). (B-08660)&lt;br /&gt;
*For Snowflake native app, IMPORTED PRIVILEGES ON SNOWFLAKE DB privilege is removed and instead the [[QPR_ProcessAnalyzer_Native_App_in_Snowflake#Optional_privilege_for_AI_Agent|CORTEX_USER database role]] can be assigned. (B-08718)&lt;br /&gt;
*[[QPR_ProcessAnalyzer_Native_App_in_Snowflake#Logging|Native app logging]] has been improved and now sharing application logs with QPR is possible. (B-08661)&lt;br /&gt;
* Added [[DataFrame_in_Expression_Language#CsvToDataFrame|CsvToDataFrame]] function to expression language to convert textual CSV data into in-memory dataframe. (B-08246)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Fixed &amp;quot;Invalid identifier&amp;quot; error when opening attribute selection list for case attribute preset caused by object id columns which differed only by letter capitalization. (D-14539)&lt;br /&gt;
*When Image component is clicked in dashboard edit mode, the component is now selected instead of link followed. (D-14525)&lt;br /&gt;
*Filters created from dimensions having dimension-specific filter rules will now create expression filter rule where dimensions-specific filter is embedded, for accurately following the selection. (D-14499)&lt;br /&gt;
*Filtering variations or list of event attribute values didn&#039;t work in in-memory models. (D-14476)&lt;br /&gt;
*Fixed issue where AI Agent didn&#039;t update when dashboard variable changed used by prompt chart. (D-14537)&lt;br /&gt;
* Fixed issue where some statistical calculations inadvertently changed row order when applying in groups. (D-14495)&lt;br /&gt;
*In in-memory models, array type of data was not dimensioned correctly. (D-14518)&lt;br /&gt;
* AI Agent Process Variations preset gave &amp;quot;division by zero&amp;quot; error when there were zero cases. (D-14508)&lt;br /&gt;
*Table grouping header labels were not formatted correctly. (D-14514)&lt;br /&gt;
*Fixed Root causes analysis to work with object-centric models. (D-14515)&lt;br /&gt;
*Filtering by OcelObjectId didn&#039;t work when model didn&#039;t have object type table for perspective used in filter. (D-14522)&lt;br /&gt;
*Fixed Root causes analysis with weighting expression to work with object-centric models. (D-14517)&lt;br /&gt;
*Fixed issue where persisting query results where query is started from datatable having custom table name overwrote data in original table. (D-14528)&lt;br /&gt;
*Flowchart SVG export did not show start and end symbols. (D-12401)&lt;br /&gt;
*Fixed issue where join operation didn&#039;t find renamed columns in SqlDataFrames. (D-14512)&lt;br /&gt;
*Improved chart filtering button positions to work with small chart sizes. (D-14509)&lt;br /&gt;
*Datatable foreign key columns dictionary data type was incorrect preventing reading columns information. (D-14505)&lt;br /&gt;
*Workspace scripts editor allowed to change script code for viewer users (altough not save it). (D-14534)&lt;br /&gt;
* In chart custom sorting, trying to refer to measure that had None aggregation, caused SQL compilation error. (D-14526)&lt;br /&gt;
*Model validation check crashed when the datatables were in different datasources. (D-14502)&lt;br /&gt;
&lt;br /&gt;
===Other improvements=== &lt;br /&gt;
*Added expression language functions for using Snowflake Cortex Agents with Cortex Analyst access to query eventlogs. (B-08647)&lt;br /&gt;
*Projects can be export and imported in JSON format containing dashboards, models, datatables and scripts. (B-08613)&lt;br /&gt;
*Simplified object-centric model queries by accepting OcelObjectId as object attribute name in filters. (B-08702)&lt;br /&gt;
*Streamlined import API by removing importMode parameter and changing default fileType to CSV. (B-08704)&lt;br /&gt;
*Frontend components have been updated. (B-08695)&lt;br /&gt;
*Backend components has been updated. (B-08696)&lt;br /&gt;
&lt;br /&gt;
==Additional release for QPR ProcessAnalyzer 2025.3 (build 9805) (released 2025-04-30)==&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*Navigation menu is now displaying dashboards from open dashboard&#039;s project or from selected Workspace project (earlier dashboards were shown from the selected model&#039;s project). (B-08673)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues === &lt;br /&gt;
*Fixed issue where AI Agent made unnecessary queries when filtering dashboard, and also opening dashboard with lot of chart may have been slow. (D-14503)&lt;br /&gt;
*When datatable columns were modified, queries to the data may have given &amp;quot;Invalid identifier&amp;quot; error. (D-14507)&lt;br /&gt;
*Clustering analysis didn&#039;t work with object-centric models. (D-14486)&lt;br /&gt;
*When a new groups is added, it&#039;s selected by default in the Manage Users dialog. Also clicking a selected group does not deselect it. (D-14491)&lt;br /&gt;
*Deleting last group didn&#039;t remove the group from the list. (D-14504)&lt;br /&gt;
&lt;br /&gt;
==Additional release for QPR ProcessAnalyzer 2025.3 (build 9725) (released 2025-04-23)==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
There is an issue causing some dashboards having more than 50 charts to open slowly. The issue has been fixed in the next release by D-14503.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Fixed Issues=== &lt;br /&gt;
*Fixed issue where system stopped responding after opening Scripts tab several times (error in logs: Timeout expired prior to obtaining a connection from the pool). (D-14506)&lt;br /&gt;
*Fixed issue where the object-centric models object types tables didn&#039;t work without the timestamp column. (B-08683)&lt;br /&gt;
*Snowflake cache tables are now created after initiating calculation is completed to improve performance. (D-14460)&lt;br /&gt;
*Fixed issue in User Management where assigning role to project or adding user to group was not saved when there was a column filter. (D-14124)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.3 (build 9699) (released 2025-04-16)==&lt;br /&gt;
&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_3.pdf QPR_ProcessAnalyzer_2025_3.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
There is a potentially serious issue that can cause the system to stop responding, when opening the Scripts tab in the Workspace. The issue has been fixed in the next release (build 9725) by D-14506.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Object-centric model simplification in the story B-08667 (object attributes can only have a single value) doesn&#039;t work with this release. The issue has been fixed in the next release (build 9725) by B-08683.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*Enhanced [[AI Agent]] with UI for editing prompt datasets, and added checkbox to include other charts in dashboard to prompt. (B-08641)&lt;br /&gt;
*In [[Object-centric_Process_Mining_Model|object-centric models]], object-to-object relations are now followed by traversing once all object types. (B-08606)&lt;br /&gt;
*In object-centric models, event type and object type tables are not mandatory anymore, and common attributes can be specified in events and objects tables. (B-08663)&lt;br /&gt;
*Object-centric models support simplified structure where object attributes can only have a single value. (B-08667)&lt;br /&gt;
*Object relation steps setting can be empty to traverse all linked objects in the object-centric model. (B-08668)&lt;br /&gt;
*Snowflake Event Types preset has been improved by adding suggestion of desired and undesired activities based on frequency of occurrence. (B-08656)&lt;br /&gt;
* Added checkbox for [[Measure,_Dimension_and_Column_Settings#Advanced_settings|disabling filtering]] for individual dimensions or columns. (B-08589)&lt;br /&gt;
*Case and event attributes dropdown lists show number of unique values in Snowflake models (instead of attribute datatype as previously). (B-08316)&lt;br /&gt;
*[[SAML_2.0_Federated_Authentication|SAML authentication]] can now synchronize user groups from identity provider. (B-08612)&lt;br /&gt;
*Groups can be [[Manage_Users_and_Groups#Deleting_Group|deleted]] in user management. (B-08330)&lt;br /&gt;
*[[Storing_Secrets_for_Scripts|Secrets]] can be defines as global that can be used by all projects. To set global secrets, [[Generic_Functions_in_QPR_ProcessAnalyzer#SetSecret|SetSecret]] function works also in the generic context. (B-08599)&lt;br /&gt;
*Snowflake [[Clustering_Analysis|Clustering analysis]] shows now number of event occurrences as features describing clusters. (B-08353)&lt;br /&gt;
*Model validity check has been extended to find issues in the eventlog data for Snowflake case-centric models. (B-07910)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Fixed a potential issue which could have leaked database connections and caused connection pool starvation. (D-14414)&lt;br /&gt;
*Renewed self-signed certificate used by SAML 2.0 authentication with ten years of validity. (D-14424)&lt;br /&gt;
*Improved CallWebService function to send request body when using DELETE method. (D-14488)&lt;br /&gt;
* Login page now shows correct error message when there are serious system errors during login. (D-14480)&lt;br /&gt;
*&amp;quot;Datatable contents (in-memory)&amp;quot; option now works also with Snowflake datatables. (D-14391)&lt;br /&gt;
*Added maximum data size limitation to AI assistant to avoid error with large datasets. (D-14419)&lt;br /&gt;
*Day of the Year/Week/Month/Quater selection didn&#039;t work with specific event time in in-memory chart. (D-14421)&lt;br /&gt;
*KPI card now shows a scrollbar when content doesn&#039;t fit to the available space. (D-13428)&lt;br /&gt;
* Workspace projects hierarchy tooltips didn&#039;t show special characters correctly. (D-14430)&lt;br /&gt;
*BPMN editor crashed when creating filter from tasks giving following error: Cannot read properties of null (reading &#039;querySelector&#039;). (D-14399)&lt;br /&gt;
*Value expressions didn&#039;t work that are referred in dimension and containing aggregation. (D-13624)&lt;br /&gt;
* Fixed issue where object-centric flowchart filter selection gave error when case-centric model was selected. (D-14408)&lt;br /&gt;
*Fixed issue where query to non-existing model incorrectly returned &amp;quot;Sequence contains no elements&amp;quot;. (D-14402)&lt;br /&gt;
*Incorrect StringifiedValues in chart settings and expression filter rule caused UI to stuck. (D-14485)&lt;br /&gt;
*Table column filter value list didn&#039;t show the null value label correctly. (D-13844)&lt;br /&gt;
*&amp;quot;Visualize list items with colors&amp;quot; setting didn&#039;t work with the &amp;quot;Last Row Aggregates Over-limit Rows&amp;quot; setting. (D-14357)&lt;br /&gt;
*Made sure that failed queries are not added to model filter cache. (D-14484)&lt;br /&gt;
*Chart settings crashed when trying to use without model selected giving following error: Cannot read properties of undefined (reading &#039;injectValue&#039;). (D-14395)&lt;br /&gt;
*Fixed issue where chart settings opened on top of full screen BPMN editor. (D-14472)&lt;br /&gt;
*Show details button in some error messages didn&#039;t have any effect when pressed. (D-14490)&lt;br /&gt;
*Model validation message was incorrect for model where other datatable is Snowflake and other SQL Server. (D-14475)&lt;br /&gt;
&lt;br /&gt;
=== Other improvements=== &lt;br /&gt;
*Logging has been set to Warning level for Native App to avoid excessive number of log entries to Snowflake events table. (B-08687)&lt;br /&gt;
*Datatable duplication is now synchronous in Snowflake until 30 seconds to avoid showing the created duplicate datatable with zero rows while the operation is still in progress. (B-08634)&lt;br /&gt;
*Improved Snowflake cache table creation logic when there are multiple simultaneous queries. (B-08622)&lt;br /&gt;
*Refactored SQL Server operations to improve robustness and avoid leaking database connections. (B-08649)&lt;br /&gt;
*Frontend components have been updated. (B-08638)&lt;br /&gt;
* Backend components have been updated. (B-08639)&lt;br /&gt;
*Translations have been updated. (B-08640)&lt;br /&gt;
&lt;br /&gt;
== Additional release for QPR ProcessAnalyzer 2025.2 (build 9476) (released 2025-03-19)==&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Fixed issue where charts axis labels had unnecessary line breaks on spaces. (D-14413)&lt;br /&gt;
*Fixed issue where AI Agent and LLMComplete function didn&#039;t work in Native App. (D-14410)&lt;br /&gt;
*Fixed translations for Workspace Scripts tab column filter for Status and Result columns. (D-14393)&lt;br /&gt;
*Fixed issue where Volume Distribution of Flow Analyzed object type didn&#039;t work. (D-14390)&lt;br /&gt;
*Removed reference to fonts.googleapis.com for stylesheets to avoid content-security-policy error. (D-14373)&lt;br /&gt;
* Syncfusion dialog headers now show special characters correctly. (D-14407)&lt;br /&gt;
*Object attribute filter gave null reference error when object type didn&#039;t exist in model. (D-14379)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.2 (build 9410) (released 2025-03-05)==&lt;br /&gt;
&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_2.pdf QPR_ProcessAnalyzer_2025_2.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Detection of models with incomplete datasource configuration has been improved, and now models where the event timestamp column type is string, are not anymore considered valid models. Earlier the string type of data was accepted and converted into dates when model was loaded (for in-memory models) or in SQL queries (in Snowflake models).&lt;br /&gt;
&lt;br /&gt;
The following query can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] (with System administrator user) to list models where the events datatable timestamp column type is string:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Models.Where({&lt;br /&gt;
	let timestampColumn = _.Configuration?.TryGetValue(&amp;quot;Datasource&amp;quot;)?.TryGetValue(&amp;quot;Events&amp;quot;)?.TryGetValue(&amp;quot;Columns&amp;quot;)?.TryGetValue(&amp;quot;Timestamp&amp;quot;);&lt;br /&gt;
	return First(_.EventsDatatable?.Columns?.Where(Name==timestampColumn))?.Datatype == &amp;quot;String&amp;quot;;&lt;br /&gt;
}).(Name + &amp;quot; (id: &amp;quot; + Id + &amp;quot;)&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
For Snowflake dashboards, table actions to [[QPR_ProcessAnalyzer_Table#Table_actions|set dashboard variables]] now set the variable values in the [[Stringified_Value_Format|stringified format]] instead of as raw values. This makes the variables set by table actions compatible with the [[Chart_Linked_Settings|linked settings]] which also use the stringified format by default for the Snowflake models.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features=== &lt;br /&gt;
*Introduced [[AI Agent]] which is a new dashboard component showing LLM generated answers based on user prompt and input data. (B-08556)&lt;br /&gt;
*Added [[Filtering_in_QPR_ProcessAnalyzer_Queries#Object-centric_filter_rules|filtering by object attributes]] for object-centric models. Filters can be created from dialog or selecting items from charts. (B-08547)&lt;br /&gt;
*In object-centric models, object-to-object relations are followed only forward and backward directions. Additionally, there are performance improvements for object-centric models. (B-08577)&lt;br /&gt;
*Snowflake warehouse can be [[QPR_ProcessAnalyzer_Project_Workspace#Change_Snowflake_Warehouse_for_Model|specified for each model]] allowing to use optimal type of warehouse for different sizes of models. (B-08610)&lt;br /&gt;
*Home screen has been removed, and [[QPR_ProcessAnalyzer_Project_Workspace|Workspace]] has new card layout and other UX improvements. (B-08541)&lt;br /&gt;
*Added [[Filtering_in_QPR_ProcessAnalyzer#Saving_filters|filter description]] field to filter properties dialog. (B-08451)&lt;br /&gt;
*Removed event type existence check from charts, so that non-existing event types are allowed. (B-08585)&lt;br /&gt;
*Snowflake Native App configuration data can be [[QPR_ProcessAnalyzer_Native_App_in_Snowflake#Backup_configuration_data|backed up to a snapshot and restored]]. (B-08591)&lt;br /&gt;
*Improved detection of invalid models by adding [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#CheckModelValidity|CheckModelValidity]] function returning model validation errors. (B-08426)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Prevented following error in Snowflake dashboards: Object &amp;quot;qprpa_dt_cache_...&amp;quot; already exists when creating a cache table. (D-14348)&lt;br /&gt;
*In-memory chart &amp;quot;Cases filtered by attribute&amp;quot; didn&#039;t work for date type of attributes. (D-14387)&lt;br /&gt;
*Fixed issue where each dashboard element resize made element width or height increase when chart margin was more than zero. (D-14361)&lt;br /&gt;
*Chart related buttons are now hidden in datatable content preview. (D-14360)&lt;br /&gt;
*Fixed issue where gateway based data import didn&#039;t write SAP errors into script log. (D-14351)&lt;br /&gt;
*Snowflake chart gave error when &amp;quot;Last Row Aggregates Over-limit Rows&amp;quot; setting was used with list aggregation. (D-14352)&lt;br /&gt;
*&amp;quot;Users&amp;quot; system report performance has been improved by adding EffectivePermissionTypesFor function. (D-14266)&lt;br /&gt;
*Fixed issue where AI Assistant crashed when used with a model having ODBC or expression datasource. (D-14340)&lt;br /&gt;
*Fixed issue where AI Assistant explaining charts crashed when applying to Label component. (D-14344)&lt;br /&gt;
* Improved client-side import not to perform redundant datatable configuration data queries. (D-14347)&lt;br /&gt;
*Model was incorrectly identified as in-memory model when datatables were missing. (D-14325)&lt;br /&gt;
*Model default filter is now in use when model is opened from Workspace. (D-14376)&lt;br /&gt;
&lt;br /&gt;
===Other improvements===  &lt;br /&gt;
*Changed Snowflake charts to store [[QPR_ProcessAnalyzer_Table#Table_actions|variable change actions]] in stringified format to make them compatible with linked settings. (B-08587)&lt;br /&gt;
*Backend support for [[Filtering_in_QPR_ProcessAnalyzer_Queries#Object-centric_filter_rules|object-centric filter rules Disabled flag]]. (B-08611)&lt;br /&gt;
*Implemented Entity Framework based database initialization and migrations. (B-08566)&lt;br /&gt;
*Added support for following Entity Framework database providers: SQL Server (full), Snowflake Hybrid Tables (experimental), PostgreSQL (experimental). (B-08581)&lt;br /&gt;
*Frontend components have been updated. (B-08597)&lt;br /&gt;
*Backend components have been updated. (B-08596)&lt;br /&gt;
*Translations have been updated for release 2025.2. (B-08607)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.1 (build 9124) (released 2025-01-23)==&lt;br /&gt;
&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_1.pdf QPR_ProcessAnalyzer_2025_1.pdf]&lt;br /&gt;
&lt;br /&gt;
===New features=== &lt;br /&gt;
*B-08526: Variations and other lists can be visualized with colors, and &amp;quot;List separator&amp;quot; field is available for dimensions and columns.&lt;br /&gt;
*B-08530: Charts can have a [[QPR_ProcessAnalyzer_Chart#Visual_Settings|description text]] which are shown in a dialog when pressing the info button.&lt;br /&gt;
*B-08546: Added [[SQL_Expressions#LLMComplete|LlmComplete]] function to access Snowflake Cortex large language models.&lt;br /&gt;
*B-08439: Added project settings [[QPR_ProcessAnalyzer_Project_Workspace#Project-level_Snowflake_Database_and_Schema|DatabaseNameInDataSource and SchemaNameInDataSource]] to define Snowflake database and schema.&lt;br /&gt;
*B-08531: Projects can be created in expression language using [[Generic_Functions_in_QPR_ProcessAnalyzer#CreateProject|CreateProject]] function.&lt;br /&gt;
*B-08387: Added backend support for object-centric model [[Filtering_in_QPR_ProcessAnalyzer_Queries#Object-centric_filter_rules|filtering for object attributes]].&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*D-14339: Week numbers showed incorrect year for last dates in the end of year.&lt;br /&gt;
*D-14323: Filtering with &amp;quot;Split data by filtering&amp;quot; dimension didn&#039;t work with exclude type of filter rules and when there were multiple filter rules.&lt;br /&gt;
*D-14346: Fixed issue where manual activation using activation utility didn&#039;t work.&lt;br /&gt;
*D-14326: Fixed issue where extra columns in objects table broke object-centric model.&lt;br /&gt;
*D-14306: Fixed issue when there were both TimeStamp and ToTimeStamp event data columns.&lt;br /&gt;
*D-14332: Flowchart event type and flow queries are now simultaneous which will improve performance.&lt;br /&gt;
*D-14331: Flowchart lost selection when flowchart used linked variables with array values.&lt;br /&gt;
*D-14299: Table text filters didn&#039;t work in Snowflake (starts with, ends with, contains).&lt;br /&gt;
*D-14338: Model.Modify function generated model json configuration that frontend wasn&#039;t incompatible with.&lt;br /&gt;
*D-14342: Flow step and Zoom settings control have same size and layout is aligned.&lt;br /&gt;
*D-14316: Occurrence impact on case duration measure didn&#039;t work with certain in-memory models.&lt;br /&gt;
*D-14327: AI Assistant had console error when pressing send button without text.&lt;br /&gt;
*D-14341: AI Assistant overlapped with BPMN editor in fullscreen mode.&lt;br /&gt;
*D-14321: Added error message for AI Assistant when trying to use it without model selected.&lt;br /&gt;
&lt;br /&gt;
===Other improvements=== &lt;br /&gt;
*B-08391: Datatable access has been optimized improving performance for object-centric models.&lt;br /&gt;
* B-08529: Added support for array type in stringified value format.&lt;br /&gt;
*B-08527: Improved SAP connector error handling and removed assumption for fixed dll file names.&lt;br /&gt;
*B-08552: Migrated rest of SQL queries into Entity Framework as preparation for storing configuration data to Snowflake hybrid tables.&lt;br /&gt;
*B-08544: Frontend components have been updated.&lt;br /&gt;
*B-08561: Updated translations for release 2025.1.&lt;br /&gt;
&lt;br /&gt;
==Old Releases==&lt;br /&gt;
See older releases in [[QPR ProcessAnalyzer Release Archive]]&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
[[Category: QPR ProcessAnalyzer]]&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=Next_Release_Roadmap&amp;diff=28107</id>
		<title>Next Release Roadmap</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=Next_Release_Roadmap&amp;diff=28107"/>
		<updated>2026-04-13T12:36:26Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--10933--&amp;gt;&lt;br /&gt;
This page contains preliminary information about new features and fixed issues in the next release.&lt;br /&gt;
&lt;br /&gt;
==Features under work==&lt;br /&gt;
* Data models with datatables and relations can be visualized and modified with ER diagrams. (&#039;&#039;B-09023&#039;&#039;)&lt;br /&gt;
* Open and save BPMN diagrams stored in QPR ProcessDesigner. (&#039;&#039;B-09041&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Note: Features and fixes currently under work are not necessarily targeting to the next release.&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=Next_Release_Roadmap&amp;diff=28106</id>
		<title>Next Release Roadmap</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=Next_Release_Roadmap&amp;diff=28106"/>
		<updated>2026-04-13T12:36:02Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--10933--&amp;gt;&lt;br /&gt;
This page contains preliminary information about new features and fixed issues in the next release.&lt;br /&gt;
&lt;br /&gt;
==Features under work==&lt;br /&gt;
* Data models with datatables and relations can be visualized and modified with ER diagrams. (&#039;&#039;B-09023&#039;&#039;)&lt;br /&gt;
* Open and save BPMN diagrams stored in Process Designer. (&#039;&#039;B-09041&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Note: Features and fixes currently under work are not necessarily targeting to the next release.&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=Next_Release_Roadmap&amp;diff=28105</id>
		<title>Next Release Roadmap</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=Next_Release_Roadmap&amp;diff=28105"/>
		<updated>2026-04-13T12:33:10Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--10933--&amp;gt;&lt;br /&gt;
This page contains preliminary information about new features and fixed issues in the next release.&lt;br /&gt;
&lt;br /&gt;
==Features under work==&lt;br /&gt;
* Data models with datatables and relations can be visualized and modified with ER diagrams. (&#039;&#039;B-09023&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Note: Features and fixes currently under work are not necessarily targeting to the next release.&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=Next_Release_Roadmap&amp;diff=28104</id>
		<title>Next Release Roadmap</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=Next_Release_Roadmap&amp;diff=28104"/>
		<updated>2026-04-13T12:33:04Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--10933--&amp;gt;&lt;br /&gt;
This page contains preliminary information about new features and fixed issues in the next release.&lt;br /&gt;
&lt;br /&gt;
==New features in next release==&lt;br /&gt;
* Units can be specified for object counts for each object types in object-centric models. (&#039;&#039;B-08992&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
==Features under work==&lt;br /&gt;
* Data models with datatables and relations can be visualized and modified with ER diagrams. (&#039;&#039;B-09023&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Note: Features and fixes currently under work are not necessarily targeting to the next release.&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=QPR_MEA_Integration&amp;diff=28101</id>
		<title>QPR MEA Integration</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=QPR_MEA_Integration&amp;diff=28101"/>
		<updated>2026-04-13T10:40:17Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: /* MEA Connection String */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;QPR ProcessAnalyzer is able to connect to a QPR MEA (QPR Suite) instance and call its Web Service operations. To use the MEA connection, the following steps are required:&lt;br /&gt;
# Create a connection string and store it as a secret.&lt;br /&gt;
# Create a connection object.&lt;br /&gt;
# Call web service operations using the connection object.&lt;br /&gt;
&lt;br /&gt;
QPR MEA Web Service documentation: https://kb.qpr.com/qpr2025-1/qpr_web_service.html.&lt;br /&gt;
&lt;br /&gt;
== MEA Connection String ==&lt;br /&gt;
To connect to QPR MEA, the MEA connection string needs to be created and stored as a [[Storing_Secrets_for_Scripts|secret]].&lt;br /&gt;
&lt;br /&gt;
The MEA connection string is a json object with following properties:&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039;: URL of the QPR MEA Web Service endpoint.&lt;br /&gt;
* &#039;&#039;&#039;logOnName&#039;&#039;&#039;: Log on name of the user who will access the QPR MEA Web Service.&lt;br /&gt;
* &#039;&#039;&#039;password&#039;&#039;&#039;: User&#039;s password in QPR MEA.&lt;br /&gt;
&lt;br /&gt;
All QPR ProcessAnalyzer users who have access to the project where the connection string is stored, can use the MEA connection. The MEA user permissions in the connection string determine what operations can be done in the MEA side. For security reasons, if the intention is only to fetch data, the read-only permissions are sufficient for the MEA user.&lt;br /&gt;
&lt;br /&gt;
Example connection string:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ &amp;quot;url&amp;quot;: &amp;quot;https://&amp;lt;hostname&amp;gt;/QPR/Portal/QPR.Isapi.dll/wsforward/MainService.svc/webHttp&amp;quot;, &amp;quot;logOnName&amp;quot;: &amp;quot;MyUser&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;MyPassword&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example to store the connection string as a secret:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).SetSecret(&amp;quot;QprMea&amp;quot;, &amp;quot;MeaConnection&amp;quot;, `{ &amp;quot;url&amp;quot;: &amp;quot;https://&amp;lt;hostname&amp;gt;/QPR/Portal/QPR.Isapi.dll/wsforward/MainService.svc/webHttp&amp;quot;, &amp;quot;logOnName&amp;quot;: &amp;quot;MyUser&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;MyPassword&amp;quot; }`);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MEA Web Service Operations ==&lt;br /&gt;
&lt;br /&gt;
=== QueryObjects ===&lt;br /&gt;
Calls QueryObjects and returns query results as a hierarchical dictionary. More information: https://kb.qpr.com/qpr2025-1/queryobjects.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;Query&#039;&#039;&#039; (String): Actual query. See https://kb.qpr.com/qpr2025-1/query_syntax.html.&lt;br /&gt;
* &#039;&#039;&#039;Attributes&#039;&#039;&#039; (String): Comma-separated list of attributes that are included in the results. See https://kb.qpr.com/qpr2025-1/supported_parameters.html.&lt;br /&gt;
* &#039;&#039;&#039;Criteria&#039;&#039;&#039; (String): Results filtering criteria. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=globalparameters.&lt;br /&gt;
* &#039;&#039;&#039;Sort By&#039;&#039;&#039; (String): Comma-separated list of attributes for sorting results.&lt;br /&gt;
* &#039;&#039;&#039;Options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Return name and typename of all the subprocesses in a model whose name contains text &amp;quot;Account&amp;quot;. Results are ordered by name and only at most three results are returned.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .QueryObjects(&lt;br /&gt;
    &amp;quot;[PG.1374444994].Subprocess&amp;quot;,&lt;br /&gt;
    &amp;quot;name, typename&amp;quot;,&lt;br /&gt;
    `Find(&amp;quot;Account&amp;quot;, Name)`,&lt;br /&gt;
    &amp;quot;name&amp;quot;,&lt;br /&gt;
    &amp;quot;MaxCount=3&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CreateObject ===&lt;br /&gt;
Calls CreateObject and returns the MEA ID of the created object. More information: https://kb.qpr.com/qpr2025-1/createobject2.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;Namespace ID&#039;&#039;&#039; (String): MEA ID of the namespace into which the object is to be created.&lt;br /&gt;
* &#039;&#039;&#039;Object type name&#039;&#039;&#039; (String): Defines type of the new object.&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039; (String): Defines name for the new object.&lt;br /&gt;
* &#039;&#039;&#039;Parent IDs&#039;&#039;&#039; (String or String*): MEA ID of parent object. If array is given, every array element specifies one ID.&lt;br /&gt;
* &#039;&#039;&#039;Attributes&#039;&#039;&#039; (Dictionary): Key/value pairs of &amp;lt;attribute&amp;gt;/&amp;lt;attribute value&amp;gt; to be set for the created object.&lt;br /&gt;
* &#039;&#039;&#039;Options&#039;&#039;&#039; (String): Optional options for the operation. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Connect to the configured QPR MEA and create a new top-level comment action.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .CreateObject(&amp;quot;PO&amp;quot;, &amp;quot;Comment&amp;quot;, &amp;quot;Test comment&amp;quot;, &amp;quot;&amp;quot;, #{&amp;quot;description&amp;quot;: &amp;quot;Test comment description&amp;quot;});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DeleteObject ===&lt;br /&gt;
Calls DeleteObject. More information: https://kb.qpr.com/qpr2025-1/deleteobject2.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;Object IDs&#039;&#039;&#039; (String or String*): One or more MEA IDs of objects to be deleted. If array is given, every array element specifies one ID of object to be deleted.&lt;br /&gt;
* &#039;&#039;&#039;Options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Connect to the configured QPR MEA and delete an object. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .DeleteObject(&amp;quot;PO.0.985518423&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GetAttribute ===&lt;br /&gt;
Calls GetAttribute and returns the value of given object attribute as a string. More information: https://kb.qpr.com/qpr2025-1/getattributeasstring.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;Object ID&#039;&#039;&#039; (String):  MEA ID of an object from which the attribute is fetched.&lt;br /&gt;
* &#039;&#039;&#039;Attribute&#039;&#039;&#039; (String): Name of the attribute that is queried. See https://kb.qpr.com/qpr2025-1/supported_parameters.html.&lt;br /&gt;
* &#039;&#039;&#039;Options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Returns the name of an object.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .GetAttribute(&lt;br /&gt;
    &amp;quot;[PG.785401983.683494101]&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SetAttribute ===&lt;br /&gt;
Calls SetAttribute to set an attribute value. More information: https://kb.qpr.com/qpr2025-1/setattribute.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;Object IDs&#039;&#039;&#039; (String or String*): MEA ID of an object from which the attribute is fetched. If array is given, every array element specifies one ID.&lt;br /&gt;
* &#039;&#039;&#039;Attribute&#039;&#039;&#039; (String): Name of the attribute that is queried. See https://kb.qpr.com/qpr2025-1/supported_parameters.html.&lt;br /&gt;
* &#039;&#039;&#039;Value&#039;&#039;&#039; (String): Value to be set for given attribute.&lt;br /&gt;
* &#039;&#039;&#039;Options&#039;&#039;&#039;:  Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Change the name of a user to &amp;quot;ChangedUser&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .SetAttribute(&lt;br /&gt;
    &amp;quot;[UM.0.123]&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;,&lt;br /&gt;
    &amp;quot;ChangedUser&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Downloads&amp;diff=28100</id>
		<title>QPR ProcessAnalyzer Downloads</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Downloads&amp;diff=28100"/>
		<updated>2026-04-12T22:49:16Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: /* QPR ProcessAnalyzer Server (on Linux) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
When updating, please read the [[QPR_ProcessAnalyzer_Release_Notes|release notes]] between the original and target releases, to check any special considerations regarding the update.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer ScriptLauncher==&lt;br /&gt;
[[QPR_ProcessAnalyzer_ScriptLauncher#Installing_ScriptLauncher|Installation instructions]] for QPR ProcessAnalyzer ScriptLauncher.&lt;br /&gt;
* QPR ProcessAnalyzer ScriptLauncher 2026.2 (build 10910): https://files.qpr.com/releases/QPRProcessAnalyzerScriptLauncher_10910.zip&lt;br /&gt;
* QPR ProcessAnalyzer ScriptLauncher 2026.1 (build 10870): https://files.qpr.com/releases/QPRProcessAnalyzerScriptLauncher_10870.zip&lt;br /&gt;
* QPR ProcessAnalyzer ScriptLauncher 2025.7 (build 10845): https://files.qpr.com/releases/QPRProcessAnalyzerScriptLauncher_10845.zip&lt;br /&gt;
* QPR ProcessAnalyzer ScriptLauncher 2025.6 (build 10690): https://files.qpr.com/releases/QPRProcessAnalyzerScriptLauncher_10690.zip&lt;br /&gt;
* QPR ProcessAnalyzer ScriptLauncher 2025.5 (build 10361): https://files.qpr.com/releases/QPRProcessAnalyzerScriptLauncher_10361.zip&lt;br /&gt;
* QPR ProcessAnalyzer ScriptLauncher 2025.4 (build 9985): https://files.qpr.com/releases/QPRProcessAnalyzerScriptLauncher_9985.zip&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer Server (on Windows)==&lt;br /&gt;
[[Installing_QPR_ProcessAnalyzer_Server_on_Windows|Windows installation instructions]] for QPR ProcessAnalyzer Server.&lt;br /&gt;
* QPR ProcessAnalyzer Server 2026.2 (build 10910): https://files.qpr.com/releases/QPRProcessAnalyzerServer_10910.zip&lt;br /&gt;
* QPR ProcessAnalyzer Server 2026.1 (build 10870): https://files.qpr.com/releases/QPRProcessAnalyzerServer_10870.zip&lt;br /&gt;
* QPR ProcessAnalyzer Server 2025.7 (build 10845): https://files.qpr.com/releases/QPRProcessAnalyzerServer_10845.zip&lt;br /&gt;
* QPR ProcessAnalyzer Server 2025.6 (build 10690): https://files.qpr.com/releases/QPRProcessAnalyzerServer_10690.zip&lt;br /&gt;
* QPR ProcessAnalyzer Server 2025.5 (build 10361): https://files.qpr.com/releases/QPRProcessAnalyzerServer_10361.zip&lt;br /&gt;
* QPR ProcessAnalyzer Server 2025.4 (build 9985): https://files.qpr.com/releases/QPRProcessAnalyzerServer_9985.zip&lt;br /&gt;
&lt;br /&gt;
If you need older releases, please contact customercare@qpr.com.&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer Server (on Linux)==&lt;br /&gt;
QPR ProcessAnalyzer is available as a [[Deploy_QPR_ProcessAnalyzer_from_Container|Linux container]] distributed using a container registry. To get an access, contact customercare@qpr.com.&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Downloads&amp;diff=28099</id>
		<title>QPR ProcessAnalyzer Downloads</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Downloads&amp;diff=28099"/>
		<updated>2026-04-12T22:48:55Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: /* QPR ProcessAnalyzer Server (on Linux) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
When updating, please read the [[QPR_ProcessAnalyzer_Release_Notes|release notes]] between the original and target releases, to check any special considerations regarding the update.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer ScriptLauncher==&lt;br /&gt;
[[QPR_ProcessAnalyzer_ScriptLauncher#Installing_ScriptLauncher|Installation instructions]] for QPR ProcessAnalyzer ScriptLauncher.&lt;br /&gt;
* QPR ProcessAnalyzer ScriptLauncher 2026.2 (build 10910): https://files.qpr.com/releases/QPRProcessAnalyzerScriptLauncher_10910.zip&lt;br /&gt;
* QPR ProcessAnalyzer ScriptLauncher 2026.1 (build 10870): https://files.qpr.com/releases/QPRProcessAnalyzerScriptLauncher_10870.zip&lt;br /&gt;
* QPR ProcessAnalyzer ScriptLauncher 2025.7 (build 10845): https://files.qpr.com/releases/QPRProcessAnalyzerScriptLauncher_10845.zip&lt;br /&gt;
* QPR ProcessAnalyzer ScriptLauncher 2025.6 (build 10690): https://files.qpr.com/releases/QPRProcessAnalyzerScriptLauncher_10690.zip&lt;br /&gt;
* QPR ProcessAnalyzer ScriptLauncher 2025.5 (build 10361): https://files.qpr.com/releases/QPRProcessAnalyzerScriptLauncher_10361.zip&lt;br /&gt;
* QPR ProcessAnalyzer ScriptLauncher 2025.4 (build 9985): https://files.qpr.com/releases/QPRProcessAnalyzerScriptLauncher_9985.zip&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer Server (on Windows)==&lt;br /&gt;
[[Installing_QPR_ProcessAnalyzer_Server_on_Windows|Windows installation instructions]] for QPR ProcessAnalyzer Server.&lt;br /&gt;
* QPR ProcessAnalyzer Server 2026.2 (build 10910): https://files.qpr.com/releases/QPRProcessAnalyzerServer_10910.zip&lt;br /&gt;
* QPR ProcessAnalyzer Server 2026.1 (build 10870): https://files.qpr.com/releases/QPRProcessAnalyzerServer_10870.zip&lt;br /&gt;
* QPR ProcessAnalyzer Server 2025.7 (build 10845): https://files.qpr.com/releases/QPRProcessAnalyzerServer_10845.zip&lt;br /&gt;
* QPR ProcessAnalyzer Server 2025.6 (build 10690): https://files.qpr.com/releases/QPRProcessAnalyzerServer_10690.zip&lt;br /&gt;
* QPR ProcessAnalyzer Server 2025.5 (build 10361): https://files.qpr.com/releases/QPRProcessAnalyzerServer_10361.zip&lt;br /&gt;
* QPR ProcessAnalyzer Server 2025.4 (build 9985): https://files.qpr.com/releases/QPRProcessAnalyzerServer_9985.zip&lt;br /&gt;
&lt;br /&gt;
If you need older releases, please contact customercare@qpr.com.&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer Server (on Linux)==&lt;br /&gt;
QPR ProcessAnalyzer is available as a [[Deploy_QPR_ProcessAnalyzer_from_Container|Linux container]] distributed using a container registry. Please, contact customercare@qpr.com to get an access.&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Downloads&amp;diff=28098</id>
		<title>QPR ProcessAnalyzer Downloads</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Downloads&amp;diff=28098"/>
		<updated>2026-04-12T22:48:36Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: /* QPR ProcessAnalyzer Server (on Windows) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
When updating, please read the [[QPR_ProcessAnalyzer_Release_Notes|release notes]] between the original and target releases, to check any special considerations regarding the update.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer ScriptLauncher==&lt;br /&gt;
[[QPR_ProcessAnalyzer_ScriptLauncher#Installing_ScriptLauncher|Installation instructions]] for QPR ProcessAnalyzer ScriptLauncher.&lt;br /&gt;
* QPR ProcessAnalyzer ScriptLauncher 2026.2 (build 10910): https://files.qpr.com/releases/QPRProcessAnalyzerScriptLauncher_10910.zip&lt;br /&gt;
* QPR ProcessAnalyzer ScriptLauncher 2026.1 (build 10870): https://files.qpr.com/releases/QPRProcessAnalyzerScriptLauncher_10870.zip&lt;br /&gt;
* QPR ProcessAnalyzer ScriptLauncher 2025.7 (build 10845): https://files.qpr.com/releases/QPRProcessAnalyzerScriptLauncher_10845.zip&lt;br /&gt;
* QPR ProcessAnalyzer ScriptLauncher 2025.6 (build 10690): https://files.qpr.com/releases/QPRProcessAnalyzerScriptLauncher_10690.zip&lt;br /&gt;
* QPR ProcessAnalyzer ScriptLauncher 2025.5 (build 10361): https://files.qpr.com/releases/QPRProcessAnalyzerScriptLauncher_10361.zip&lt;br /&gt;
* QPR ProcessAnalyzer ScriptLauncher 2025.4 (build 9985): https://files.qpr.com/releases/QPRProcessAnalyzerScriptLauncher_9985.zip&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer Server (on Windows)==&lt;br /&gt;
[[Installing_QPR_ProcessAnalyzer_Server_on_Windows|Windows installation instructions]] for QPR ProcessAnalyzer Server.&lt;br /&gt;
* QPR ProcessAnalyzer Server 2026.2 (build 10910): https://files.qpr.com/releases/QPRProcessAnalyzerServer_10910.zip&lt;br /&gt;
* QPR ProcessAnalyzer Server 2026.1 (build 10870): https://files.qpr.com/releases/QPRProcessAnalyzerServer_10870.zip&lt;br /&gt;
* QPR ProcessAnalyzer Server 2025.7 (build 10845): https://files.qpr.com/releases/QPRProcessAnalyzerServer_10845.zip&lt;br /&gt;
* QPR ProcessAnalyzer Server 2025.6 (build 10690): https://files.qpr.com/releases/QPRProcessAnalyzerServer_10690.zip&lt;br /&gt;
* QPR ProcessAnalyzer Server 2025.5 (build 10361): https://files.qpr.com/releases/QPRProcessAnalyzerServer_10361.zip&lt;br /&gt;
* QPR ProcessAnalyzer Server 2025.4 (build 9985): https://files.qpr.com/releases/QPRProcessAnalyzerServer_9985.zip&lt;br /&gt;
&lt;br /&gt;
If you need older releases, please contact customercare@qpr.com.&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer Server (on Linux)==&lt;br /&gt;
QPR ProcessAnalyzer is available as a [[Deploy_QPR_ProcessAnalyzer_from_Container|Linux container]] distributed using a private container registry. Please, contact customercare@qpr.com to get an access.&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Downloads&amp;diff=28097</id>
		<title>QPR ProcessAnalyzer Downloads</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Downloads&amp;diff=28097"/>
		<updated>2026-04-12T22:46:00Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: /* QPR ProcessAnalyzer Server (on Windows) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
When updating, please read the [[QPR_ProcessAnalyzer_Release_Notes|release notes]] between the original and target releases, to check any special considerations regarding the update.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer ScriptLauncher==&lt;br /&gt;
[[QPR_ProcessAnalyzer_ScriptLauncher#Installing_ScriptLauncher|Installation instructions]] for QPR ProcessAnalyzer ScriptLauncher.&lt;br /&gt;
* QPR ProcessAnalyzer ScriptLauncher 2026.2 (build 10910): https://files.qpr.com/releases/QPRProcessAnalyzerScriptLauncher_10910.zip&lt;br /&gt;
* QPR ProcessAnalyzer ScriptLauncher 2026.1 (build 10870): https://files.qpr.com/releases/QPRProcessAnalyzerScriptLauncher_10870.zip&lt;br /&gt;
* QPR ProcessAnalyzer ScriptLauncher 2025.7 (build 10845): https://files.qpr.com/releases/QPRProcessAnalyzerScriptLauncher_10845.zip&lt;br /&gt;
* QPR ProcessAnalyzer ScriptLauncher 2025.6 (build 10690): https://files.qpr.com/releases/QPRProcessAnalyzerScriptLauncher_10690.zip&lt;br /&gt;
* QPR ProcessAnalyzer ScriptLauncher 2025.5 (build 10361): https://files.qpr.com/releases/QPRProcessAnalyzerScriptLauncher_10361.zip&lt;br /&gt;
* QPR ProcessAnalyzer ScriptLauncher 2025.4 (build 9985): https://files.qpr.com/releases/QPRProcessAnalyzerScriptLauncher_9985.zip&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer Server (on Windows)==&lt;br /&gt;
[[Installing_QPR_ProcessAnalyzer_Server_on_Windows|Windows installation instructions]] for QPR ProcessAnalyzer Server.&lt;br /&gt;
* QPR ProcessAnalyzer Server 2026.2 (build 10910): https://files.qpr.com/releases/QPRProcessAnalyzerServer_10910.zip&lt;br /&gt;
* QPR ProcessAnalyzer Server 2026.1 (build 10870): https://files.qpr.com/releases/QPRProcessAnalyzerServer_10870.zip&lt;br /&gt;
* QPR ProcessAnalyzer Server 2025.7 (build 10845): https://files.qpr.com/releases/QPRProcessAnalyzerServer_10845.zip&lt;br /&gt;
* QPR ProcessAnalyzer Server 2025.6 (build 10690): https://files.qpr.com/releases/QPRProcessAnalyzerServer_10690.zip&lt;br /&gt;
* QPR ProcessAnalyzer Server 2025.5 (build 10361): https://files.qpr.com/releases/QPRProcessAnalyzerServer_10361.zip&lt;br /&gt;
* QPR ProcessAnalyzer Server 2025.4 (build 9985): https://files.qpr.com/releases/QPRProcessAnalyzerServer_9985.zip&lt;br /&gt;
&lt;br /&gt;
If you need older releases, please contact customercare@qpr.com.&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Downloads&amp;diff=28096</id>
		<title>QPR ProcessAnalyzer Downloads</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Downloads&amp;diff=28096"/>
		<updated>2026-04-12T22:45:48Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: /* QPR ProcessAnalyzer ScriptLauncher */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
When updating, please read the [[QPR_ProcessAnalyzer_Release_Notes|release notes]] between the original and target releases, to check any special considerations regarding the update.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer ScriptLauncher==&lt;br /&gt;
[[QPR_ProcessAnalyzer_ScriptLauncher#Installing_ScriptLauncher|Installation instructions]] for QPR ProcessAnalyzer ScriptLauncher.&lt;br /&gt;
* QPR ProcessAnalyzer ScriptLauncher 2026.2 (build 10910): https://files.qpr.com/releases/QPRProcessAnalyzerScriptLauncher_10910.zip&lt;br /&gt;
* QPR ProcessAnalyzer ScriptLauncher 2026.1 (build 10870): https://files.qpr.com/releases/QPRProcessAnalyzerScriptLauncher_10870.zip&lt;br /&gt;
* QPR ProcessAnalyzer ScriptLauncher 2025.7 (build 10845): https://files.qpr.com/releases/QPRProcessAnalyzerScriptLauncher_10845.zip&lt;br /&gt;
* QPR ProcessAnalyzer ScriptLauncher 2025.6 (build 10690): https://files.qpr.com/releases/QPRProcessAnalyzerScriptLauncher_10690.zip&lt;br /&gt;
* QPR ProcessAnalyzer ScriptLauncher 2025.5 (build 10361): https://files.qpr.com/releases/QPRProcessAnalyzerScriptLauncher_10361.zip&lt;br /&gt;
* QPR ProcessAnalyzer ScriptLauncher 2025.4 (build 9985): https://files.qpr.com/releases/QPRProcessAnalyzerScriptLauncher_9985.zip&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer Server (on Windows)==&lt;br /&gt;
[[Installing_QPR_ProcessAnalyzer_Server_on_Windows|Windows installation instructions]] for QPR ProcessAnalyzer Server.&lt;br /&gt;
*QPR ProcessAnalyzer Server 2026.2 (build 10910): https://files.qpr.com/releases/QPRProcessAnalyzerServer_10910.zip&lt;br /&gt;
*QPR ProcessAnalyzer Server 2026.1 (build 10870): https://files.qpr.com/releases/QPRProcessAnalyzerServer_10870.zip&lt;br /&gt;
*QPR ProcessAnalyzer Server 2025.7 (build 10845): https://files.qpr.com/releases/QPRProcessAnalyzerServer_10845.zip&lt;br /&gt;
*QPR ProcessAnalyzer Server 2025.6 (build 10690): https://files.qpr.com/releases/QPRProcessAnalyzerServer_10690.zip&lt;br /&gt;
*QPR ProcessAnalyzer Server 2025.5 (build 10361): https://files.qpr.com/releases/QPRProcessAnalyzerServer_10361.zip&lt;br /&gt;
*QPR ProcessAnalyzer Server 2025.4 (build 9985): https://files.qpr.com/releases/QPRProcessAnalyzerServer_9985.zip&lt;br /&gt;
*QPR ProcessAnalyzer Server 2025.3 (build 9805): https://files.qpr.com/releases/QPRProcessAnalyzerServer_9805.zip&lt;br /&gt;
*QPR ProcessAnalyzer Server 2025.2 (build 9476): https://files.qpr.com/releases/QPRProcessAnalyzerServer_9476.zip&lt;br /&gt;
*QPR ProcessAnalyzer Server 2025.1 (build 9124): https://files.qpr.com/releases/QPRProcessAnalyzerServer_9124.zip&lt;br /&gt;
*QPR ProcessAnalyzer Server 2024.8 (build 8937): https://files.qpr.com/releases/QPRProcessAnalyzerServer_8937.zip&lt;br /&gt;
*QPR ProcessAnalyzer Server 2024.7 (build 8234): https://files.qpr.com/releases/QPRProcessAnalyzerServer_8234.zip&lt;br /&gt;
*QPR ProcessAnalyzer Server 2024.6 (build 7414): https://files.qpr.com/releases/QPRProcessAnalyzerServer_7414.zip&lt;br /&gt;
*QPR ProcessAnalyzer Server 2024.5 (build 6814): https://files.qpr.com/releases/QPRProcessAnalyzerServer_6814.zip&lt;br /&gt;
*QPR ProcessAnalyzer Server 2024.4 (build 6246): https://files.qpr.com/releases/QPRProcessAnalyzerServer_6246.zip&lt;br /&gt;
&lt;br /&gt;
If you need older releases, please contact customercare@qpr.com.&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&amp;diff=28095</id>
		<title>QPR ProcessAnalyzer Release Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&amp;diff=28095"/>
		<updated>2026-04-12T22:45:05Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: /* New features */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists all new features and fixed issues for each QPR ProcessAnalyzer release.&lt;br /&gt;
&lt;br /&gt;
==Next Release: QPR ProcessAnalyzer 2026.3 (planned release during week of April 6th)==&lt;br /&gt;
[[Next_Release_Roadmap|See roadmap for next release features and fixes]]&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
* QPR ProcessAnalyzer acts as [[QPR_ProcessAnalyzer_as_MCP_Server|MCP server]] supporting MCP tools implemented using scripts with OAuth and API key authentication. (B-09004)&lt;br /&gt;
* [[Object-centric_Process_Mining_Model#Configure_object-centric_model|Units for each object type]] can be specified in object-centric models. (B-08992)&lt;br /&gt;
* [[PA_Configuration_database_table#:~:text=DefaultColorPalette|Charts color palette]] can be changed globally to easily manage consistent visual layout. (B-08993)&lt;br /&gt;
* [[External_Content|External content component]] url supports tags refering to dashboard variables to show dynamically changing web page. (B-08998)&lt;br /&gt;
* [[QPR_ProcessAnalyzer_Project_Workspace#Exporting_Project|Project export and import]] using files support public filters stored in models. (B-09007)&lt;br /&gt;
* [[QPR_ProcessAnalyzer_KPI_Card|KPI Card]] shows null value label when data has no rows, and table and chart show &amp;quot;No data&amp;quot; message. (B-08999)&lt;br /&gt;
* [[QPR_MEA_Integration|QPR MEA web service]] operations can be called using QPR ProcessAnalyzer expression language. (B-09030)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
* Flowchart had flows missing if shown flows were beyond the top-500 flows. (D-14848)&lt;br /&gt;
* Expression filter rules with greater/less than criteria were incorrectly applied as equal filters when editing chart filters. (D-14852)&lt;br /&gt;
* Table column filter dialog was not entire visible in narrow table located in the bottom of screen. (D-14783)&lt;br /&gt;
* Opening Scripts tab in Workspace was slow when there were scripts with long script log. (D-14670)&lt;br /&gt;
* Fixed issue where object-centric model queries sometimes gave inconsistent results. (D-14854)&lt;br /&gt;
* Snowflake query gave &amp;quot;invalid identifier&amp;quot; error when there were two measures with same cases going though event measure filter. (D-14845)&lt;br /&gt;
* Filter rules drag-and-drop didn&#039;t work between expressions in the same chart. (D-14850)&lt;br /&gt;
* Better error message is shown when invalid value is specified to dashboard aspect ratio flex, chart margin, dashboard margin, external content border width, or external content border corner radius. (D-14805)&lt;br /&gt;
* Improved error message when object-centric model perspective doesn&#039;t have the object type correctly defined. (D-14795)&lt;br /&gt;
&lt;br /&gt;
===Other improvements===&lt;br /&gt;
* Frontend components have been updated. (B-09028)&lt;br /&gt;
* Backend components have been updated. (B-09027)&lt;br /&gt;
&lt;br /&gt;
==Current Release: Additional release for QPR ProcessAnalyzer 2026.2 (build 10910) (released date 16.3.2026)==&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
* Filters report in System reports shows also other users&#039; private filters for admins. (B-09017)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
* Filter rules were lost when saving a filter with &amp;quot;Cases with specific events&amp;quot;, &amp;quot;Cases starting with&amp;quot; or &amp;quot;Cases ending to&amp;quot; rules. (D-14847)&lt;br /&gt;
* Fixed issue where object-centric models sometimes gave &amp;quot;Object &amp;lt;cachetablename&amp;gt; does not exist or not authorized&amp;quot; error. (D-14797)&lt;br /&gt;
* ExtractSap function didn&#039;t work with QPR ScriptLauncher when using secret for storing SAP password. (D-14813)&lt;br /&gt;
* Variation stepper incorrectly skipped steps when going down when variation count is maximum. (D-14844)&lt;br /&gt;
* Improved error message when creating model from filter fails. (D-14811)&lt;br /&gt;
* System dashboard names were incorrectly translated twice. (D-14841)&lt;br /&gt;
* AI Assistant had one translation missing. (D-14840)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2026.2 (build 10897) (released date 2026-02-26)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2026_2.pdf QPR_ProcessAnalyzer_2026_2.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Snowflake user-defined functions (UDF) used by QPR ProcessAnalyzer have been updated to use Python 3.13. Some of the old versions of the functions use Python 3.9 which has been deprecated by Snowflake. Although the old versions are not anymore used by QPR ProcessAnalyzer, they are not automatically deleted and thus Snowflake may send notifications about existing deprecated functions. It&#039;s recommended to remove the old functions which are following:&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V2&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V3&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V4&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V5&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V6&lt;br /&gt;
* QPRPA_UDF_BPMN_CONFORMANCE_VIOLATIONS_FLOWS&lt;br /&gt;
* QPRPA_UDF_BPMN_CONFORMANCE_VIOLATIONS_FLOWS_V2&lt;br /&gt;
* QPRPA_UDF_BPMN_CONFORMANCE_VIOLATIONS_FLOWS_V3&lt;br /&gt;
* QPRPA_UDF_BPMN_IS_CONFORMANT&lt;br /&gt;
* QPRPA_UDF_BPMN_IS_CONFORMANT_V2&lt;br /&gt;
* QPRPA_UDF_BPMN_IS_CONFORMANT_V3&lt;br /&gt;
* QPRPA_UDTF_CLUSTER&lt;br /&gt;
* QPRPA_UDTF_CLUSTER_V2&lt;br /&gt;
* QPRPA_UDTF_CLUSTER_V3&lt;br /&gt;
* QPRPA_UDTF_CLUSTER_V4&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
* Fully conformant [[QPR_ProcessAnalyzer_BPMN_Editor#Auto-creating_BPMN_Diagram_from_Eventlog|BPMN diagrams]] can be created from eventlogs with proper layout and identifying exclusive and parallel gateways. (B-08900)&lt;br /&gt;
* [[Object-Centric_Flowchart|Object-centric flowchart]] flows visibility can be controlled with a stepper based on top variations, and start and end symbols can be hidden for each event type. (B-08987)&lt;br /&gt;
* Added preset for object-centric flowchart, and improved Process Discovery dashboard usage for object-centric models. (B-08863)&lt;br /&gt;
* Viewer users can [[Filtering_in_QPR_ProcessAnalyzer#Saving_filters|save private filters]] for personal use. (B-08920)&lt;br /&gt;
* [[Chart_On-screen_Settings|On-screen settings]] support static and dynamic case/event attribute values selection, and [[Chart_Linked_Settings|linked settings]] can bind to on-screen settings. (B-08814)&lt;br /&gt;
* [[AI_Root_Causes|AI root causes analysis]] related error situations are easier to resolve with easier to understand error messages. (B-08997)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
* Histogram chart did not show at all and gave a JavaScript error. (D-14801)&lt;br /&gt;
* When chart with multiple series was sorted by measure, some datapoints were not shown when visible X-axis was limited by zooming or Custom layout settings. (D-14793)&lt;br /&gt;
* Disabled filter rules were incorrectly applied for the shown items in the filter rule editing dialog. (D-14791)&lt;br /&gt;
* If there were more than one Range filter components in dashboard, periods menu incorrectly affected all of them. (D-14818)&lt;br /&gt;
* List of event types in object-centric flowchart settings didn&#039;t open if there were object types linked to none events. (D-14798)&lt;br /&gt;
* Snowflake flowchart root causes analysis gave &amp;quot;SQL compilation error&amp;quot; when run with case duration criteria. (D-14790)&lt;br /&gt;
* Term &amp;quot;Second&amp;quot; when meaning time unit was translated incorrectly in French. (D-14803)&lt;br /&gt;
* OpenTelemetry metrics were not sent to Prometheus correctly. (D-14804)&lt;br /&gt;
* Opening script editor by url didn&#039;t show project path and also javascript error appeared to console. (D-14794)&lt;br /&gt;
* Fixed issue where case attribute prediction failed when using more than one iteration. (D-14789)&lt;br /&gt;
* SQLDataFrame with several append operations had performance issue. (D-14772)&lt;br /&gt;
* Null coalescing operators didn&#039;t work correctly in chaining in expression language. (D-14762)&lt;br /&gt;
* Native app could not call procedure if project referred to other database and schema. (D-14749)&lt;br /&gt;
* Trying to create script with duplicate name gave unclear error: Cannot insert duplicate key row in object &#039;dbo.PA_SCRIPT&#039; with unique index &#039;PA_SCRIPT_UNIQUE_NAME_IN_PROJECT&#039;. (D-14784)&lt;br /&gt;
* BPMN editor popup menu was partly hidden behind other chart components. (D-14345)&lt;br /&gt;
* When going to context menu report from BPMN editor, &amp;quot;Operation was cancelled by a user&amp;quot; was given when query was in progress. (D-14807)&lt;br /&gt;
* BPMN editor tooltips measure descriptions didn&#039;t disappear at all. (D-14809)&lt;br /&gt;
* Presets benchmarking didn&#039;t work for models without case attributes. (D-14822)&lt;br /&gt;
* Object-centric filter rule editor gave javascript error when opened for case-centric model. (D-14799)&lt;br /&gt;
* Object-centric filter rule could incorrectly be dropped as root causes comparison rule. (D-14796)&lt;br /&gt;
* Localization missing for &amp;quot;Save as new filter&amp;quot; button. (D-14839)&lt;br /&gt;
&lt;br /&gt;
===Other improvements===&lt;br /&gt;
* SQL queries run in Snowflake have been further optimized. (B-08936)&lt;br /&gt;
* Snowflake stored procedures and user defined functions have been migrated to Python 3.13. (B-08984)&lt;br /&gt;
* Frontend components have been updated. (B-08991)&lt;br /&gt;
* Backend components have been updated. (B-08990)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2026.1 (build 10870) (released date 2026-01-19)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2026_1.pdf QPR_ProcessAnalyzer_2026_1.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
QPR ProcessAnalyzer Server and QPR ScriptLauncher are running on .NET 10, replacing the previous .NET 8 version. When updating to this release, make sure to install the .NET 10 Runtime ([[Updating_QPR_ProcessAnalyzer_Server|update instructions]]). While .NET 8 and .NET 10 can run side by side, .NET 8 does not need to be removed immediately. However, for security reasons, any unused .NET 8 installation should be uninstalled as soon as possible after the update.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Known issue: The histogram visualization doesn&#039;t work in this release. The issue will be fixed in the next release. Possible workaround is to use the column chart where to set no spacing between columns. This can be configured with the following [[QPR_ProcessAnalyzer_Chart#:~:text=Custom%20Layout|Custom Layout]] settings:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;plotOptions&amp;quot;: {&lt;br /&gt;
		&amp;quot;series&amp;quot;: {&lt;br /&gt;
			&amp;quot;pointPadding&amp;quot;: 0,&lt;br /&gt;
			&amp;quot;groupPadding&amp;quot;: 0&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*Object-centric models support versatile [[Filtering_in_QPR_ProcessAnalyzer|object-centric filters]] based on case-centric filter rules using perspective. (B-08595)&lt;br /&gt;
*[[AI_Root_Causes|AI Root Causes analysis]] is shown in a hierarchy for easier readability. (B-08921)&lt;br /&gt;
*[[Process_Flowchart|Case-centric flowchart]] performance has been improved by making all queries simultaneously. (B-08916)&lt;br /&gt;
* Object counts indicator is hidden for object-centric models when perspective is not set. (B-08825)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
* Filter to exclude case attribute values incorrectly excluded null values even if null wasn&#039;t selected. (D-14773)&lt;br /&gt;
*Prediction generated invalid models where case IDs in events datatable didn&#039;t exist in cases datatable. (D-14758)&lt;br /&gt;
* AI Root Causes presets didn&#039;t work with models without case attributes. (D-14759)&lt;br /&gt;
* Snowflake query with multiple columns with aggregations and Coalesce function gave &amp;quot;invalid identifier&amp;quot; error. (D-14763)&lt;br /&gt;
*Dropdown list to add business calendar holidays from other model shows empty items. (D-14786)&lt;br /&gt;
*In-memory Average function didn&#039;t work when aggregating dates using model&#039;s Attribute function. (D-14761)&lt;br /&gt;
*Sometimes opening models list gave error &amp;quot;User doesn&#039;t have permission GenericRead to model&amp;quot;. (D-14742)&lt;br /&gt;
&lt;br /&gt;
===Other improvements=== &lt;br /&gt;
*[[QPR_ProcessAnalyzer_Security_Hardening#Added_HTTP_Headers|Content-security-policy]] img-src blob: directive has been restored for Highcharts image export. (B-08904)&lt;br /&gt;
*Backend components have been updated [[Updating_QPR_ProcessAnalyzer_Server|including .NET 10]]. (B-08926)&lt;br /&gt;
*Frontend components have been updated. (B-08927)&lt;br /&gt;
&lt;br /&gt;
==Additional release for QPR ProcessAnalyzer 2025.7 (build 10845) (released 2025-12-11)==&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*QPR ProcessAnalyzer can be deployed on-premise using [[Deploy_QPR_ProcessAnalyzer_from_Container|Linux containers]]. (B-08915)&lt;br /&gt;
*Snowflake SQL queries have been simplified to improve performance, e.g., when quering flows. (B-08901)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues=== &lt;br /&gt;
*ODBC and Loading script models, and models with calculated attributes didn&#039;t allow to create or modify case and event attribute filters from header. (D-14751)&lt;br /&gt;
*Fixed incompatibility issue when using Keycloak as identity provider for SAML authentication. (D-14757)&lt;br /&gt;
*System report for users incorrectly listed some users with read-only permissions as Developers (issue with the EffectivePermissionTypesFor function). (D-14748)&lt;br /&gt;
*Referrer-Policy HTTP header was incorrectly set to &amp;quot;same-origins&amp;quot; causing browser console error in Windows deployments. (D-14736)&lt;br /&gt;
*Fixed issue where QPR ProcessAnalyzer request ID was not added to Snowflake data modification queries. (D-14728)&lt;br /&gt;
*Login request duration was incorrectly shown as zero or negative in System reports. (D-14737)&lt;br /&gt;
*In chart settings, some Snowflake measures with aggregations were missing possibility to define percentile value. (D-14276)&lt;br /&gt;
*Fixed issue where it was not possible to delete a model with same name in the same project during the same session. (D-14708)&lt;br /&gt;
*Script editor to specific script can now be opened with a direct url containing the script_editor parameter. (D-14745)&lt;br /&gt;
*Fixed issue were sometimes an incorrect error code was given for a cancelled query. (D-14755)&lt;br /&gt;
*Improved error message if model loading fails when loading script returns incorrect type of data. (D-14637)&lt;br /&gt;
*Fixed issue where variations query with sampling was slow for new models. (D-14729)&lt;br /&gt;
*Added tooltip to gantt chart&#039;s table layout header so that the header text can be fully seen. (D-13748)&lt;br /&gt;
*Switching between Snowflake and in-memory chart by adjusting chart configuration json caused some items in chart settings to appear twice. (D-14667)&lt;br /&gt;
*Selecting model in dashboard when previously there was no model selected and going back to Workspace, gave error message. (D-14735)&lt;br /&gt;
*Query Designer gave untranslated error message: &amp;quot;You don&#039;t have permissions to model ...&amp;quot;. (D-14727)&lt;br /&gt;
*Query Designer gave untranslated error message &amp;quot;Unable to use Snowflake tables as data source for in-memory query&amp;quot;. (D-14683)&lt;br /&gt;
*In Query Designer, table column menu gave JavaScript error for columns where first row was null. (D-14684)&lt;br /&gt;
*Query Designer incorrectly gave message &amp;quot;There are no columns in the data&amp;quot; when the data had no rows. (D-14692)&lt;br /&gt;
*Fixed issue in Manage Users dialog where row selections disappeared when resizing the dialog. (D-14647)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.7 (build 10821) (released 2025-11-13)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_7.pdf QPR_ProcessAnalyzer_2025_7.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Known issue: Creating case and event attribute filters in dashboards is not possible from the main header for the following types of in-memory models and attributes:&lt;br /&gt;
*Any attributes for [[QPR_ProcessAnalyzer_Model_Datasources#ODBC_Datasource|ODBC loaded models]]&lt;br /&gt;
*Any attributes for [[QPR_ProcessAnalyzer_Model_Datasources#Loading_Script|Loading script models]]&lt;br /&gt;
*Calculated attributes in any in-memory models.&lt;br /&gt;
&lt;br /&gt;
Workaround is to create the filter rule in a chart&#039;s settings and drag-and-drop it to the header. The issue has been fixed by the next release (D-14751). The issue does not concern Snowflake models.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features ===&lt;br /&gt;
*Presets added for [[AI_Root_Causes|AI Root Causes analysis]] based on Snowflake Top Insights which is a decision tree model finding combinations of root cause contributors. (B-08889)&lt;br /&gt;
*Added new [[Range_Filter|filter selector]] component to dashboards to easily create date and number range filters. (B-08877)&lt;br /&gt;
*Projects can be browsed in the [[Navigation_Menu|navigation menu]] to access all dashboards, and also organized the menu into two columns. (B-08708)&lt;br /&gt;
*When QPR ProcessAnalyzer is [[Embed_to_Website|embedded to a website]], SAML authentication is performed in a separate window for more robust operation. (B-08871)&lt;br /&gt;
*For more flexible options, [[AI_Agent|AI Agents]] runs the language model query using the Snowflake account where the selected model is located. (B-08860)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*If DefaultUiLanguage in PA_CONFIGURATION table was not defined, users who haven&#039;t changed language could not login. (D-14706)&lt;br /&gt;
*Improved performance in opening dashboard. (D-14705)&lt;br /&gt;
* Snowflake Native App didn&#039;t show the version number and build timestamp correctly. (D-14703)&lt;br /&gt;
*Snowflake Native App activation failed with a custom compute pool if container service was in the suspended state. (D-14722)&lt;br /&gt;
*Server stuck when trying to generate SQL for SqlDataFrame having multiple columns with the same name. (D-14730)&lt;br /&gt;
*In eventlog prediction, fixed issues preventing the usage of case attribute value prediction. (D-14702)&lt;br /&gt;
*Snowflake DurationBetweenDates function calculated incorrectly when used in a in divisor. (D-14723)&lt;br /&gt;
* Import now succeeds when importing Snowflake datatables refering to data without access. (D-14694)&lt;br /&gt;
*Fixed incorrect color in table column filters, and Workspace loading time has been improved. (D-14704)&lt;br /&gt;
* Fixed issue where dropdown list with projects showed &amp;quot;undefined&amp;quot; in place of project id. (D-14659)&lt;br /&gt;
*Fixed issue where specifying a secret name longer than 440 characters, prevented saving the secret and resulted in an error. (D-14674)&lt;br /&gt;
* SAML authentication failed when it needed to create a new user to QPR ProcessAnalyzer. (D-14717)&lt;br /&gt;
* Fixed issue where SQL dataframe queries didn&#039;t work if the root expression ended to a semicolon. (D-14714)&lt;br /&gt;
*Specific Snowflake query with a comparison criteria, AggregateFrom and GetValueFrom functions gave error about invalid identifier. (D-14718)&lt;br /&gt;
&lt;br /&gt;
===Other improvements=== &lt;br /&gt;
*[[QPR_ProcessAnalyzer_Security_Hardening#HTTP_Response_Headers|Content-Security-Policy HTTP header]] has been reduced to more secure by removing the script-src &#039;unsafe-eval&#039; and img-src &#039;blob&#039; directives. (B-08897)&lt;br /&gt;
*Added [[QPR_ProcessAnalyzer_Security_Hardening#HTTP_Response_Headers|security related HTTP headers]]: X-Permitted-Cross-Domain-Policies, Cross-Origin-Embedder-Policy, Cross-Origin-Opener-Policy, Cross-Origin-Resource-Policy, Referrer-Policy, and Permissions-Policy. (B-08879)&lt;br /&gt;
*Implemented backend support for Snowflake Top Insights for [[SqlDataFrame_in_Expression_Language#:~:text=TopInsights|AI root causes analysis]]. (B-08664)&lt;br /&gt;
*Implemented improved error handling when trying to save too long text to database. (B-08892)&lt;br /&gt;
*For more understandable error messages, error handling and error message generation have been refactored. (B-08754)&lt;br /&gt;
*Optimized database queries and reduced log writing. (B-08870)&lt;br /&gt;
*Frontend components have been updated. (B-08899)&lt;br /&gt;
*Backend components have been updated. (B-08898)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.6 (build 10690) (released 2025-10-01)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_6.pdf QPR_ProcessAnalyzer_2025_6.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Known issue: If the [[PA_Configuration_database_table#:~:text=DefaultUiLanguage|DefaultUiLanguage]] system configuration is not defined, users who haven&#039;t changed their own language, are unable to login. To prevent this problem, please ensure the DefaultUiLanguage is defined. The next release has fixed this issue (D-14706).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Content-Security-Policy (CSP) HTTP header has been updated to enhance security by implementing more restrictive settings. The following directives have been added:&lt;br /&gt;
*object-src &#039;none&#039;&lt;br /&gt;
*frame-ancestors &#039;self&#039;&lt;br /&gt;
*form-action &#039;none&#039;&lt;br /&gt;
*base-uri &#039;none&#039;&lt;br /&gt;
*worker-src blob:&lt;br /&gt;
&lt;br /&gt;
These new restrictions may affect usage that has previously been possible. For example, with the new settings, QPR ProcessAnalyzer can be embedded to a website only within the same origin. For detailed instructions on embedding QPR ProcessAnalyzer on a different website, please refer to [[Embed_to_Website|this quide]]. Additionally, for information on modifying the CSP settings, see documentation for [[QPR_ProcessAnalyzer_Security_Hardening#HTTP_Response_Headers|security hardening]].&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
In the QPR ProcessAnalyzer 2025.6 Native App, the release version number is not displayed correctly in the User Settings dialog. This omission does not have any other complications. QPR ProcessAnalyzer 2025.6 is the only release with this issue, making it possible to identify this release despite the missing version number. This issue is specific to the Native App only. The next release has fixed this issue (D-14703).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*[[User_Settings#Starting_dashboard|Starting dashboard]] after login can be defined for user groups, allowing to create customized starting pages for easy navigation. (B-08791)&lt;br /&gt;
*Snowflake [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|chart&#039;s event filters]] are now embedded to filters created from chart, to precisely follow chart calculation. (B-08845)&lt;br /&gt;
*Result data can be filtered in Snowflake charts using [[QPR_ProcessAnalyzer_Chart#:~:text=Result%20filtering%20expression|result filtering expression]] which works for any datasets. (B-08751)&lt;br /&gt;
*Filter rules order now stays the same when making filter selections and confirming filter. (B-08801)&lt;br /&gt;
*Added model setting [[QPR_ProcessAnalyzer_Project_Workspace#Hiding_Object_Count_Statistics|Show object count statistics]] to hide object counts information in dropdown lists to optimize performance. (B-08849)&lt;br /&gt;
*Added support for [[Chart_On-screen_Settings#:~:text=showStatistics|hiding statistics for on-screen setting]] dropdown lists to improve performance, and in addition the case ID is hidden Case/Event attribute profiling presets. (B-08840)&lt;br /&gt;
*Added following audit fields to users and groups: Created date, Created by, Last modified date, and Last modified by. (B-08792)&lt;br /&gt;
*Snowflake Native App: Added procedure to that [[QPR_ProcessAnalyzer_Native_App_in_Snowflake#Recover_administrator_access|creates administrator user to Native App]] if access to the app has been lost. Also, prevented user management operations that remove own access. (B-08733)&lt;br /&gt;
*Snowflake Native App: Added procedure to [[Change_Native_App_Compute_Pool_Size|change Native App compute pool size]]. Changed new Native Apps to use CPU_X64_S size compute pool, and improved Native App stability. (B-08859)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues=== &lt;br /&gt;
*Snowflake Cortex based AI Assistant didn&#039;t show the results table. (D-14643)&lt;br /&gt;
*When percent stacking is used, Y-axis values are now shown as percentages in data label and tooltip. (D-14633)&lt;br /&gt;
*Fixed issue where Label&amp;amp;Link component had sometimes unnecessary vertical scrollbar. (D-14685)&lt;br /&gt;
*Model validation showed incorrect error message for models with numeric duplicate case ID&#039;s. (D-14687)&lt;br /&gt;
*In Workspace, scripts &amp;quot;View current run log&amp;quot; dialog didn&#039;t update log correctly when new entries were added. (D-14662)&lt;br /&gt;
*Event type mapping in charts didn&#039;t work in object-centric models. (D-14620)&lt;br /&gt;
*Model generation didn&#039;t work as transformation step using _system.ML.ApplyTransformation function. (D-14654)&lt;br /&gt;
*Others aggregation has been removed from date type of dimensions because tables don&#039;t work with textual data in date columns. (D-14623)&lt;br /&gt;
*Fixed issue in AI Assistant where using both Snowflake Cortex and OpenAI modes caused error. (D-14646)&lt;br /&gt;
*In User Management Effective permissions table, column filter incorrectly showed &amp;quot;true&amp;quot; and &amp;quot;false&amp;quot; as options. (D-14639)&lt;br /&gt;
*Pivot table incorrectly showed &amp;quot;Numeric value is not recognized&amp;quot; error when Count or Unique count aggregations were used. (D-14559)&lt;br /&gt;
*Workspace buttons are now visible in small screens spanning to multiple lines. (D-14587)&lt;br /&gt;
*Added tooltip text to &amp;quot;Move to&amp;quot; submenu containing projects so that long project names can be seen. (D-14612)&lt;br /&gt;
*Translation was missing from error messages when deleting items from recycle bin. (D-14652)&lt;br /&gt;
*Fixed data type related issues with in-memory Floor, Ceiling and aggregation functions. (D-14622)&lt;br /&gt;
*Optimized resource loading by getting rid of unnecessary file assets/i18n/en_US.json. (D-14641)&lt;br /&gt;
*Fixed issue where opening script editor gave javascript error about content-security-policy violation. (D-14627)&lt;br /&gt;
*Fixed issue in charts showing datatable content had a strange error when datatable was not selected. (D-14650)&lt;br /&gt;
*Fixed incorrect data types in some project, user and group related measures. (D-14619)&lt;br /&gt;
* Fixed issue where moving expression scripts was not possible when SQL Scripting was not allowed. (D-14624)&lt;br /&gt;
*Deleting and renaming scripts were not available for expression scripts when SQL Scripting was not allowed. (D-14625)&lt;br /&gt;
*Improved documentation for situation when non-existing Snowflake warehouse is configured for a model. (D-14543)&lt;br /&gt;
*Project properties dialog shows a descriptive text when no secrets have been defined instead of an empty table. (D-14611)&lt;br /&gt;
* Improved messages and New project button visibility in Workspace top level when no projects are shown. (D-14609)&lt;br /&gt;
*Event preset gave error if enabling Apply with Chart Filters setting and trying to create filters. (D-14695)&lt;br /&gt;
&lt;br /&gt;
===Other improvements===&lt;br /&gt;
*Added QPR ProcessAnalyzer API request ID to Snowflake queries to easily find matching query in Snowflake query history. (B-08839)&lt;br /&gt;
*[[QPR_ProcessAnalyzer_Security_Hardening#Added_HTTP_Headers|Content Security Policy HTTP header]] includes now object-src, frame-ancestors, form-action, base-uri, and worker-src. (B-08794)&lt;br /&gt;
*Snowflake queries have been optimized by removing null and empty string checks from mapped columns as they are now handled by the model validation check. (B-08837)&lt;br /&gt;
*Added backend support for object-centric model filtering based on case-centric filter rules. (B-08836)&lt;br /&gt;
*Frontend components have been updated. (B-08851)&lt;br /&gt;
*Backend components have been updated. (B-08852)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.5 (build 10361) (released 2025-08-21)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_5.pdf QPR_ProcessAnalyzer_2025_5.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
When using Snowflake Cortex, the AI Assistant is not showing the results table in the assistant&#039;s response. This issue has been fixed by the next release.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===  &lt;br /&gt;
*[[Object-Centric_Flowchart|Object-centric flowchart]] can also use object-to-object relations to link events and objects simplifying event-to-object configuration. (B-08671)&lt;br /&gt;
*[[AI_Assistant_for_QPR_ProcessAnalyzer|AI Assistant]] can provide precise quantitative analysis by making queries to eventlog data (powered by Snowflake Cortex Analyst and Agents). (B-08652)&lt;br /&gt;
*[[Filtering_in_QPR_ProcessAnalyzer|Flows and variations can be filtered]] from any event attribute viewpoint in Snowflake. (B-08737)&lt;br /&gt;
* Added [[Project_Properties_Dialog|project properties dialog]] for viewing project information, changing Snowflake connection settings and project secrets. (B-08655)&lt;br /&gt;
*[[QPR_ProcessAnalyzer_Project_Workspace#Validating_Model|Model validity check]] easily detects technically invalid models and shows detailed reason for invalidity. (B-08624)&lt;br /&gt;
*Projects can be [[QPR_ProcessAnalyzer_Project_Workspace#Exporting_Project|exported]] to json files and imported as new projects. (B-08717)&lt;br /&gt;
*Action buttons can be added to dashboard by defining [[Label_and_Link|label component]] that can change dashboard variables and run scripts. (B-08694)&lt;br /&gt;
*Web user interface is available in [[Languages_and_Localization|Ukrainian language]]. (B-08734)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Fixed following error when performing client-side SAP import: Could not find a part of the path (QPR_ImportSource_Chunk_*.tmp). (D-14589)&lt;br /&gt;
*Fixed issue where ManageProjects permission was incorrectly required when running scripts using QPR ScriptLauncher non-legacy mode. (D-14562)&lt;br /&gt;
*Fixed following error when using SAP import from SQL script called from expression language called from SQL: The given key &#039;&#039; was not present in the dictionary. (D-14593)&lt;br /&gt;
*Some analyses didn&#039;t work, when case ID columns for cases and events datatables differed only in upper/lowercase letters. (D-14556)&lt;br /&gt;
*Business calendar didn&#039;t work for some measures/dimensions/columns and some had business calendar checkboxes missing. (D-14563)&lt;br /&gt;
*Prediction failed to following error: transformer_model_next_activity/event_year_input_embedding. (D-14551)&lt;br /&gt;
*Scripting now works correctly after rows from PA_OPERATION_STATUS table have been deleted. (D-14545)&lt;br /&gt;
*Fixed issue where case-centric flowchart was very slow for object-centric model. (D-14544)&lt;br /&gt;
*Prevented creating dashboards, models and scripts with duplicate names in the same project. (D-09480)&lt;br /&gt;
*KPI Card now shows line breaks correctly in textual values. (D-14546)&lt;br /&gt;
*Improved table Excel export for list data to show items with separator character instead of showing as JSON. (D-14479)&lt;br /&gt;
*Column showing non-conformance reason was incorrectly aligned to right. (D-14570)&lt;br /&gt;
*GetRelatedValueFrom function caused column name conflict when used multiple times in same query. (D-14591)&lt;br /&gt;
* Fixed issue where in-memory sorting for arrays gave &amp;quot;Error in sorting analysis result rows possibly due to multiple types of values ...&amp;quot;. (D-14592)&lt;br /&gt;
*Array type of values were shown incorrectly when used Last Row Aggregates Over-limit Rows setting. (D-14616)&lt;br /&gt;
*Fixed the &amp;quot;Most common&amp;quot; text aggregation sorting error for in-memory calculation. (D-14573)&lt;br /&gt;
*Snowflake model validation gave incorrect error message when mapped column didn&#039;t exist in datatable. (D-14565)&lt;br /&gt;
*Improved model validation to detect when connection string key for model or datatable does not exist. (D-14607)&lt;br /&gt;
* Model validation gave incorrect error when when events datatable case id mapping was missing. (D-14566)&lt;br /&gt;
*Model validation gave incorrect error message when cases and events datatables were in different datasources. (D-14567)&lt;br /&gt;
*Model validation gave incorrect error message when underlying Snowflake table didn&#039;t exist. (D-14568)&lt;br /&gt;
*Workspace Card/Table mode toggle buttons were not translated. (D-14547)&lt;br /&gt;
*Some invalid queries gave unexpected errors and strange outputs. (D-14569)&lt;br /&gt;
* Added translations to model notifications preview table headers. (D-14590)&lt;br /&gt;
* Added translations to access denied message for header object counts indicator. (D-13967)&lt;br /&gt;
* AI Assistant explaining charts speaks now user interface language. (D-14578)&lt;br /&gt;
* AI Agent prompt chart editor didn&#039;t show correctly if model was not selected. (D-14536)&lt;br /&gt;
*AI Assistant gave &amp;quot;Unsupported cache table type&amp;quot; error when trying to explain object-centric flowchart. (D-14477)&lt;br /&gt;
&lt;br /&gt;
===Other improvements ===&lt;br /&gt;
*When trying to open dashboard with an invalid model, the precise model validation error message is shown. (B-08629)&lt;br /&gt;
*Account locked message is now same as username/password incorrect to prevent account enumeration attack. (B-08740)&lt;br /&gt;
*Stringified value format supports also json objects. (B-08766)&lt;br /&gt;
*Event attribute used as event type can be defined for flow and variation filters in Snowflake models (backend support). (B-08705)&lt;br /&gt;
*Translations have been updated. (B-08757)&lt;br /&gt;
*Frontend components have been updated. (B-08760)&lt;br /&gt;
*Backend components have been updated. (B-08759)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.4 (build 9985) (released 2025-05-28)==&lt;br /&gt;
&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_4.pdf QPR_ProcessAnalyzer_2025_4.pdf]&lt;br /&gt;
&lt;br /&gt;
===New features ===&lt;br /&gt;
*Added new AI Agent presets analyzing current state and proposing improvements based on different viewpoints, such as Event and Case Counts, Automation, Bottlenecks, and Root Causes. (B-08710)&lt;br /&gt;
*Added a [[Filter_Selectors#Filter_selector|generic filtering component]] that can be configured for creating any type of filters for distinct values. (B-08654)&lt;br /&gt;
*Volume declining in measures due to case sampling can be compensated in chart and flowchart by using a [[Measure,_Dimension_and_Column_Settings#Statistical_calculations|Statistical calculation method]]. (B-08598)&lt;br /&gt;
*In object-centric models, Object ID, Event ID, Event timestamp, and Event type [[Object-centric_Process_Mining_Model#Object-centric_perspectives|attribute names]] are shown correctly. (B-08680)&lt;br /&gt;
*Snowflake native app has now [[QPR_ProcessAnalyzer_Native_App_in_Snowflake#User_access_to_application|application roles]] for user (for using app) and administrator (for managing app). (B-08660)&lt;br /&gt;
*For Snowflake native app, IMPORTED PRIVILEGES ON SNOWFLAKE DB privilege is removed and instead the [[QPR_ProcessAnalyzer_Native_App_in_Snowflake#Optional_privilege_for_AI_Agent|CORTEX_USER database role]] can be assigned. (B-08718)&lt;br /&gt;
*[[QPR_ProcessAnalyzer_Native_App_in_Snowflake#Logging|Native app logging]] has been improved and now sharing application logs with QPR is possible. (B-08661)&lt;br /&gt;
* Added [[DataFrame_in_Expression_Language#CsvToDataFrame|CsvToDataFrame]] function to expression language to convert textual CSV data into in-memory dataframe. (B-08246)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Fixed &amp;quot;Invalid identifier&amp;quot; error when opening attribute selection list for case attribute preset caused by object id columns which differed only by letter capitalization. (D-14539)&lt;br /&gt;
*When Image component is clicked in dashboard edit mode, the component is now selected instead of link followed. (D-14525)&lt;br /&gt;
*Filters created from dimensions having dimension-specific filter rules will now create expression filter rule where dimensions-specific filter is embedded, for accurately following the selection. (D-14499)&lt;br /&gt;
*Filtering variations or list of event attribute values didn&#039;t work in in-memory models. (D-14476)&lt;br /&gt;
*Fixed issue where AI Agent didn&#039;t update when dashboard variable changed used by prompt chart. (D-14537)&lt;br /&gt;
* Fixed issue where some statistical calculations inadvertently changed row order when applying in groups. (D-14495)&lt;br /&gt;
*In in-memory models, array type of data was not dimensioned correctly. (D-14518)&lt;br /&gt;
* AI Agent Process Variations preset gave &amp;quot;division by zero&amp;quot; error when there were zero cases. (D-14508)&lt;br /&gt;
*Table grouping header labels were not formatted correctly. (D-14514)&lt;br /&gt;
*Fixed Root causes analysis to work with object-centric models. (D-14515)&lt;br /&gt;
*Filtering by OcelObjectId didn&#039;t work when model didn&#039;t have object type table for perspective used in filter. (D-14522)&lt;br /&gt;
*Fixed Root causes analysis with weighting expression to work with object-centric models. (D-14517)&lt;br /&gt;
*Fixed issue where persisting query results where query is started from datatable having custom table name overwrote data in original table. (D-14528)&lt;br /&gt;
*Flowchart SVG export did not show start and end symbols. (D-12401)&lt;br /&gt;
*Fixed issue where join operation didn&#039;t find renamed columns in SqlDataFrames. (D-14512)&lt;br /&gt;
*Improved chart filtering button positions to work with small chart sizes. (D-14509)&lt;br /&gt;
*Datatable foreign key columns dictionary data type was incorrect preventing reading columns information. (D-14505)&lt;br /&gt;
*Workspace scripts editor allowed to change script code for viewer users (altough not save it). (D-14534)&lt;br /&gt;
* In chart custom sorting, trying to refer to measure that had None aggregation, caused SQL compilation error. (D-14526)&lt;br /&gt;
*Model validation check crashed when the datatables were in different datasources. (D-14502)&lt;br /&gt;
&lt;br /&gt;
===Other improvements=== &lt;br /&gt;
*Added expression language functions for using Snowflake Cortex Agents with Cortex Analyst access to query eventlogs. (B-08647)&lt;br /&gt;
*Projects can be export and imported in JSON format containing dashboards, models, datatables and scripts. (B-08613)&lt;br /&gt;
*Simplified object-centric model queries by accepting OcelObjectId as object attribute name in filters. (B-08702)&lt;br /&gt;
*Streamlined import API by removing importMode parameter and changing default fileType to CSV. (B-08704)&lt;br /&gt;
*Frontend components have been updated. (B-08695)&lt;br /&gt;
*Backend components has been updated. (B-08696)&lt;br /&gt;
&lt;br /&gt;
==Additional release for QPR ProcessAnalyzer 2025.3 (build 9805) (released 2025-04-30)==&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*Navigation menu is now displaying dashboards from open dashboard&#039;s project or from selected Workspace project (earlier dashboards were shown from the selected model&#039;s project). (B-08673)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues === &lt;br /&gt;
*Fixed issue where AI Agent made unnecessary queries when filtering dashboard, and also opening dashboard with lot of chart may have been slow. (D-14503)&lt;br /&gt;
*When datatable columns were modified, queries to the data may have given &amp;quot;Invalid identifier&amp;quot; error. (D-14507)&lt;br /&gt;
*Clustering analysis didn&#039;t work with object-centric models. (D-14486)&lt;br /&gt;
*When a new groups is added, it&#039;s selected by default in the Manage Users dialog. Also clicking a selected group does not deselect it. (D-14491)&lt;br /&gt;
*Deleting last group didn&#039;t remove the group from the list. (D-14504)&lt;br /&gt;
&lt;br /&gt;
==Additional release for QPR ProcessAnalyzer 2025.3 (build 9725) (released 2025-04-23)==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
There is an issue causing some dashboards having more than 50 charts to open slowly. The issue has been fixed in the next release by D-14503.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Fixed Issues=== &lt;br /&gt;
*Fixed issue where system stopped responding after opening Scripts tab several times (error in logs: Timeout expired prior to obtaining a connection from the pool). (D-14506)&lt;br /&gt;
*Fixed issue where the object-centric models object types tables didn&#039;t work without the timestamp column. (B-08683)&lt;br /&gt;
*Snowflake cache tables are now created after initiating calculation is completed to improve performance. (D-14460)&lt;br /&gt;
*Fixed issue in User Management where assigning role to project or adding user to group was not saved when there was a column filter. (D-14124)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.3 (build 9699) (released 2025-04-16)==&lt;br /&gt;
&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_3.pdf QPR_ProcessAnalyzer_2025_3.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
There is a potentially serious issue that can cause the system to stop responding, when opening the Scripts tab in the Workspace. The issue has been fixed in the next release (build 9725) by D-14506.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Object-centric model simplification in the story B-08667 (object attributes can only have a single value) doesn&#039;t work with this release. The issue has been fixed in the next release (build 9725) by B-08683.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*Enhanced [[AI Agent]] with UI for editing prompt datasets, and added checkbox to include other charts in dashboard to prompt. (B-08641)&lt;br /&gt;
*In [[Object-centric_Process_Mining_Model|object-centric models]], object-to-object relations are now followed by traversing once all object types. (B-08606)&lt;br /&gt;
*In object-centric models, event type and object type tables are not mandatory anymore, and common attributes can be specified in events and objects tables. (B-08663)&lt;br /&gt;
*Object-centric models support simplified structure where object attributes can only have a single value. (B-08667)&lt;br /&gt;
*Object relation steps setting can be empty to traverse all linked objects in the object-centric model. (B-08668)&lt;br /&gt;
*Snowflake Event Types preset has been improved by adding suggestion of desired and undesired activities based on frequency of occurrence. (B-08656)&lt;br /&gt;
* Added checkbox for [[Measure,_Dimension_and_Column_Settings#Advanced_settings|disabling filtering]] for individual dimensions or columns. (B-08589)&lt;br /&gt;
*Case and event attributes dropdown lists show number of unique values in Snowflake models (instead of attribute datatype as previously). (B-08316)&lt;br /&gt;
*[[SAML_2.0_Federated_Authentication|SAML authentication]] can now synchronize user groups from identity provider. (B-08612)&lt;br /&gt;
*Groups can be [[Manage_Users_and_Groups#Deleting_Group|deleted]] in user management. (B-08330)&lt;br /&gt;
*[[Storing_Secrets_for_Scripts|Secrets]] can be defines as global that can be used by all projects. To set global secrets, [[Generic_Functions_in_QPR_ProcessAnalyzer#SetSecret|SetSecret]] function works also in the generic context. (B-08599)&lt;br /&gt;
*Snowflake [[Clustering_Analysis|Clustering analysis]] shows now number of event occurrences as features describing clusters. (B-08353)&lt;br /&gt;
*Model validity check has been extended to find issues in the eventlog data for Snowflake case-centric models. (B-07910)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Fixed a potential issue which could have leaked database connections and caused connection pool starvation. (D-14414)&lt;br /&gt;
*Renewed self-signed certificate used by SAML 2.0 authentication with ten years of validity. (D-14424)&lt;br /&gt;
*Improved CallWebService function to send request body when using DELETE method. (D-14488)&lt;br /&gt;
* Login page now shows correct error message when there are serious system errors during login. (D-14480)&lt;br /&gt;
*&amp;quot;Datatable contents (in-memory)&amp;quot; option now works also with Snowflake datatables. (D-14391)&lt;br /&gt;
*Added maximum data size limitation to AI assistant to avoid error with large datasets. (D-14419)&lt;br /&gt;
*Day of the Year/Week/Month/Quater selection didn&#039;t work with specific event time in in-memory chart. (D-14421)&lt;br /&gt;
*KPI card now shows a scrollbar when content doesn&#039;t fit to the available space. (D-13428)&lt;br /&gt;
* Workspace projects hierarchy tooltips didn&#039;t show special characters correctly. (D-14430)&lt;br /&gt;
*BPMN editor crashed when creating filter from tasks giving following error: Cannot read properties of null (reading &#039;querySelector&#039;). (D-14399)&lt;br /&gt;
*Value expressions didn&#039;t work that are referred in dimension and containing aggregation. (D-13624)&lt;br /&gt;
* Fixed issue where object-centric flowchart filter selection gave error when case-centric model was selected. (D-14408)&lt;br /&gt;
*Fixed issue where query to non-existing model incorrectly returned &amp;quot;Sequence contains no elements&amp;quot;. (D-14402)&lt;br /&gt;
*Incorrect StringifiedValues in chart settings and expression filter rule caused UI to stuck. (D-14485)&lt;br /&gt;
*Table column filter value list didn&#039;t show the null value label correctly. (D-13844)&lt;br /&gt;
*&amp;quot;Visualize list items with colors&amp;quot; setting didn&#039;t work with the &amp;quot;Last Row Aggregates Over-limit Rows&amp;quot; setting. (D-14357)&lt;br /&gt;
*Made sure that failed queries are not added to model filter cache. (D-14484)&lt;br /&gt;
*Chart settings crashed when trying to use without model selected giving following error: Cannot read properties of undefined (reading &#039;injectValue&#039;). (D-14395)&lt;br /&gt;
*Fixed issue where chart settings opened on top of full screen BPMN editor. (D-14472)&lt;br /&gt;
*Show details button in some error messages didn&#039;t have any effect when pressed. (D-14490)&lt;br /&gt;
*Model validation message was incorrect for model where other datatable is Snowflake and other SQL Server. (D-14475)&lt;br /&gt;
&lt;br /&gt;
=== Other improvements=== &lt;br /&gt;
*Logging has been set to Warning level for Native App to avoid excessive number of log entries to Snowflake events table. (B-08687)&lt;br /&gt;
*Datatable duplication is now synchronous in Snowflake until 30 seconds to avoid showing the created duplicate datatable with zero rows while the operation is still in progress. (B-08634)&lt;br /&gt;
*Improved Snowflake cache table creation logic when there are multiple simultaneous queries. (B-08622)&lt;br /&gt;
*Refactored SQL Server operations to improve robustness and avoid leaking database connections. (B-08649)&lt;br /&gt;
*Frontend components have been updated. (B-08638)&lt;br /&gt;
* Backend components have been updated. (B-08639)&lt;br /&gt;
*Translations have been updated. (B-08640)&lt;br /&gt;
&lt;br /&gt;
== Additional release for QPR ProcessAnalyzer 2025.2 (build 9476) (released 2025-03-19)==&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Fixed issue where charts axis labels had unnecessary line breaks on spaces. (D-14413)&lt;br /&gt;
*Fixed issue where AI Agent and LLMComplete function didn&#039;t work in Native App. (D-14410)&lt;br /&gt;
*Fixed translations for Workspace Scripts tab column filter for Status and Result columns. (D-14393)&lt;br /&gt;
*Fixed issue where Volume Distribution of Flow Analyzed object type didn&#039;t work. (D-14390)&lt;br /&gt;
*Removed reference to fonts.googleapis.com for stylesheets to avoid content-security-policy error. (D-14373)&lt;br /&gt;
* Syncfusion dialog headers now show special characters correctly. (D-14407)&lt;br /&gt;
*Object attribute filter gave null reference error when object type didn&#039;t exist in model. (D-14379)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.2 (build 9410) (released 2025-03-05)==&lt;br /&gt;
&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_2.pdf QPR_ProcessAnalyzer_2025_2.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Detection of models with incomplete datasource configuration has been improved, and now models where the event timestamp column type is string, are not anymore considered valid models. Earlier the string type of data was accepted and converted into dates when model was loaded (for in-memory models) or in SQL queries (in Snowflake models).&lt;br /&gt;
&lt;br /&gt;
The following query can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] (with System administrator user) to list models where the events datatable timestamp column type is string:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Models.Where({&lt;br /&gt;
	let timestampColumn = _.Configuration?.TryGetValue(&amp;quot;Datasource&amp;quot;)?.TryGetValue(&amp;quot;Events&amp;quot;)?.TryGetValue(&amp;quot;Columns&amp;quot;)?.TryGetValue(&amp;quot;Timestamp&amp;quot;);&lt;br /&gt;
	return First(_.EventsDatatable?.Columns?.Where(Name==timestampColumn))?.Datatype == &amp;quot;String&amp;quot;;&lt;br /&gt;
}).(Name + &amp;quot; (id: &amp;quot; + Id + &amp;quot;)&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
For Snowflake dashboards, table actions to [[QPR_ProcessAnalyzer_Table#Table_actions|set dashboard variables]] now set the variable values in the [[Stringified_Value_Format|stringified format]] instead of as raw values. This makes the variables set by table actions compatible with the [[Chart_Linked_Settings|linked settings]] which also use the stringified format by default for the Snowflake models.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features=== &lt;br /&gt;
*Introduced [[AI Agent]] which is a new dashboard component showing LLM generated answers based on user prompt and input data. (B-08556)&lt;br /&gt;
*Added [[Filtering_in_QPR_ProcessAnalyzer_Queries#Object-centric_filter_rules|filtering by object attributes]] for object-centric models. Filters can be created from dialog or selecting items from charts. (B-08547)&lt;br /&gt;
*In object-centric models, object-to-object relations are followed only forward and backward directions. Additionally, there are performance improvements for object-centric models. (B-08577)&lt;br /&gt;
*Snowflake warehouse can be [[QPR_ProcessAnalyzer_Project_Workspace#Change_Snowflake_Warehouse_for_Model|specified for each model]] allowing to use optimal type of warehouse for different sizes of models. (B-08610)&lt;br /&gt;
*Home screen has been removed, and [[QPR_ProcessAnalyzer_Project_Workspace|Workspace]] has new card layout and other UX improvements. (B-08541)&lt;br /&gt;
*Added [[Filtering_in_QPR_ProcessAnalyzer#Saving_filters|filter description]] field to filter properties dialog. (B-08451)&lt;br /&gt;
*Removed event type existence check from charts, so that non-existing event types are allowed. (B-08585)&lt;br /&gt;
*Snowflake Native App configuration data can be [[QPR_ProcessAnalyzer_Native_App_in_Snowflake#Backup_configuration_data|backed up to a snapshot and restored]]. (B-08591)&lt;br /&gt;
*Improved detection of invalid models by adding [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#CheckModelValidity|CheckModelValidity]] function returning model validation errors. (B-08426)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Prevented following error in Snowflake dashboards: Object &amp;quot;qprpa_dt_cache_...&amp;quot; already exists when creating a cache table. (D-14348)&lt;br /&gt;
*In-memory chart &amp;quot;Cases filtered by attribute&amp;quot; didn&#039;t work for date type of attributes. (D-14387)&lt;br /&gt;
*Fixed issue where each dashboard element resize made element width or height increase when chart margin was more than zero. (D-14361)&lt;br /&gt;
*Chart related buttons are now hidden in datatable content preview. (D-14360)&lt;br /&gt;
*Fixed issue where gateway based data import didn&#039;t write SAP errors into script log. (D-14351)&lt;br /&gt;
*Snowflake chart gave error when &amp;quot;Last Row Aggregates Over-limit Rows&amp;quot; setting was used with list aggregation. (D-14352)&lt;br /&gt;
*&amp;quot;Users&amp;quot; system report performance has been improved by adding EffectivePermissionTypesFor function. (D-14266)&lt;br /&gt;
*Fixed issue where AI Assistant crashed when used with a model having ODBC or expression datasource. (D-14340)&lt;br /&gt;
*Fixed issue where AI Assistant explaining charts crashed when applying to Label component. (D-14344)&lt;br /&gt;
* Improved client-side import not to perform redundant datatable configuration data queries. (D-14347)&lt;br /&gt;
*Model was incorrectly identified as in-memory model when datatables were missing. (D-14325)&lt;br /&gt;
*Model default filter is now in use when model is opened from Workspace. (D-14376)&lt;br /&gt;
&lt;br /&gt;
===Other improvements===  &lt;br /&gt;
*Changed Snowflake charts to store [[QPR_ProcessAnalyzer_Table#Table_actions|variable change actions]] in stringified format to make them compatible with linked settings. (B-08587)&lt;br /&gt;
*Backend support for [[Filtering_in_QPR_ProcessAnalyzer_Queries#Object-centric_filter_rules|object-centric filter rules Disabled flag]]. (B-08611)&lt;br /&gt;
*Implemented Entity Framework based database initialization and migrations. (B-08566)&lt;br /&gt;
*Added support for following Entity Framework database providers: SQL Server (full), Snowflake Hybrid Tables (experimental), PostgreSQL (experimental). (B-08581)&lt;br /&gt;
*Frontend components have been updated. (B-08597)&lt;br /&gt;
*Backend components have been updated. (B-08596)&lt;br /&gt;
*Translations have been updated for release 2025.2. (B-08607)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.1 (build 9124) (released 2025-01-23)==&lt;br /&gt;
&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_1.pdf QPR_ProcessAnalyzer_2025_1.pdf]&lt;br /&gt;
&lt;br /&gt;
===New features=== &lt;br /&gt;
*B-08526: Variations and other lists can be visualized with colors, and &amp;quot;List separator&amp;quot; field is available for dimensions and columns.&lt;br /&gt;
*B-08530: Charts can have a [[QPR_ProcessAnalyzer_Chart#Visual_Settings|description text]] which are shown in a dialog when pressing the info button.&lt;br /&gt;
*B-08546: Added [[SQL_Expressions#LLMComplete|LlmComplete]] function to access Snowflake Cortex large language models.&lt;br /&gt;
*B-08439: Added project settings [[QPR_ProcessAnalyzer_Project_Workspace#Project-level_Snowflake_Database_and_Schema|DatabaseNameInDataSource and SchemaNameInDataSource]] to define Snowflake database and schema.&lt;br /&gt;
*B-08531: Projects can be created in expression language using [[Generic_Functions_in_QPR_ProcessAnalyzer#CreateProject|CreateProject]] function.&lt;br /&gt;
*B-08387: Added backend support for object-centric model [[Filtering_in_QPR_ProcessAnalyzer_Queries#Object-centric_filter_rules|filtering for object attributes]].&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*D-14339: Week numbers showed incorrect year for last dates in the end of year.&lt;br /&gt;
*D-14323: Filtering with &amp;quot;Split data by filtering&amp;quot; dimension didn&#039;t work with exclude type of filter rules and when there were multiple filter rules.&lt;br /&gt;
*D-14346: Fixed issue where manual activation using activation utility didn&#039;t work.&lt;br /&gt;
*D-14326: Fixed issue where extra columns in objects table broke object-centric model.&lt;br /&gt;
*D-14306: Fixed issue when there were both TimeStamp and ToTimeStamp event data columns.&lt;br /&gt;
*D-14332: Flowchart event type and flow queries are now simultaneous which will improve performance.&lt;br /&gt;
*D-14331: Flowchart lost selection when flowchart used linked variables with array values.&lt;br /&gt;
*D-14299: Table text filters didn&#039;t work in Snowflake (starts with, ends with, contains).&lt;br /&gt;
*D-14338: Model.Modify function generated model json configuration that frontend wasn&#039;t incompatible with.&lt;br /&gt;
*D-14342: Flow step and Zoom settings control have same size and layout is aligned.&lt;br /&gt;
*D-14316: Occurrence impact on case duration measure didn&#039;t work with certain in-memory models.&lt;br /&gt;
*D-14327: AI Assistant had console error when pressing send button without text.&lt;br /&gt;
*D-14341: AI Assistant overlapped with BPMN editor in fullscreen mode.&lt;br /&gt;
*D-14321: Added error message for AI Assistant when trying to use it without model selected.&lt;br /&gt;
&lt;br /&gt;
===Other improvements=== &lt;br /&gt;
*B-08391: Datatable access has been optimized improving performance for object-centric models.&lt;br /&gt;
* B-08529: Added support for array type in stringified value format.&lt;br /&gt;
*B-08527: Improved SAP connector error handling and removed assumption for fixed dll file names.&lt;br /&gt;
*B-08552: Migrated rest of SQL queries into Entity Framework as preparation for storing configuration data to Snowflake hybrid tables.&lt;br /&gt;
*B-08544: Frontend components have been updated.&lt;br /&gt;
*B-08561: Updated translations for release 2025.1.&lt;br /&gt;
&lt;br /&gt;
==Old Releases==&lt;br /&gt;
See older releases in [[QPR ProcessAnalyzer Release Archive]]&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
[[Category: QPR ProcessAnalyzer]]&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&amp;diff=28094</id>
		<title>QPR ProcessAnalyzer Release Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&amp;diff=28094"/>
		<updated>2026-04-12T22:43:45Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: /* New features */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists all new features and fixed issues for each QPR ProcessAnalyzer release.&lt;br /&gt;
&lt;br /&gt;
==Next Release: QPR ProcessAnalyzer 2026.3 (planned release during week of April 6th)==&lt;br /&gt;
[[Next_Release_Roadmap|See roadmap for next release features and fixes]]&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
* QPR ProcessAnalyzer acts as [[QPR_ProcessAnalyzer_as_MCP_Server|MCP server]] where MCP tools are implemented using scripts. (B-09004)&lt;br /&gt;
* [[Object-centric_Process_Mining_Model#Configure_object-centric_model|Units for each object type]] can be specified in object-centric models. (B-08992)&lt;br /&gt;
* [[PA_Configuration_database_table#:~:text=DefaultColorPalette|Charts color palette]] can be changed globally to easily manage consistent visual layout. (B-08993)&lt;br /&gt;
* [[External_Content|External content component]] url supports tags refering to dashboard variables to show dynamically changing web page. (B-08998)&lt;br /&gt;
* [[QPR_ProcessAnalyzer_Project_Workspace#Exporting_Project|Project export and import]] using files support public filters stored in models. (B-09007)&lt;br /&gt;
* [[QPR_ProcessAnalyzer_KPI_Card|KPI Card]] shows null value label when data has no rows, and table and chart show &amp;quot;No data&amp;quot; message. (B-08999)&lt;br /&gt;
* [[QPR_MEA_Integration|QPR MEA web service]] operations can be called using QPR ProcessAnalyzer expression language. (B-09030)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
* Flowchart had flows missing if shown flows were beyond the top-500 flows. (D-14848)&lt;br /&gt;
* Expression filter rules with greater/less than criteria were incorrectly applied as equal filters when editing chart filters. (D-14852)&lt;br /&gt;
* Table column filter dialog was not entire visible in narrow table located in the bottom of screen. (D-14783)&lt;br /&gt;
* Opening Scripts tab in Workspace was slow when there were scripts with long script log. (D-14670)&lt;br /&gt;
* Fixed issue where object-centric model queries sometimes gave inconsistent results. (D-14854)&lt;br /&gt;
* Snowflake query gave &amp;quot;invalid identifier&amp;quot; error when there were two measures with same cases going though event measure filter. (D-14845)&lt;br /&gt;
* Filter rules drag-and-drop didn&#039;t work between expressions in the same chart. (D-14850)&lt;br /&gt;
* Better error message is shown when invalid value is specified to dashboard aspect ratio flex, chart margin, dashboard margin, external content border width, or external content border corner radius. (D-14805)&lt;br /&gt;
* Improved error message when object-centric model perspective doesn&#039;t have the object type correctly defined. (D-14795)&lt;br /&gt;
&lt;br /&gt;
===Other improvements===&lt;br /&gt;
* Frontend components have been updated. (B-09028)&lt;br /&gt;
* Backend components have been updated. (B-09027)&lt;br /&gt;
&lt;br /&gt;
==Current Release: Additional release for QPR ProcessAnalyzer 2026.2 (build 10910) (released date 16.3.2026)==&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
* Filters report in System reports shows also other users&#039; private filters for admins. (B-09017)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
* Filter rules were lost when saving a filter with &amp;quot;Cases with specific events&amp;quot;, &amp;quot;Cases starting with&amp;quot; or &amp;quot;Cases ending to&amp;quot; rules. (D-14847)&lt;br /&gt;
* Fixed issue where object-centric models sometimes gave &amp;quot;Object &amp;lt;cachetablename&amp;gt; does not exist or not authorized&amp;quot; error. (D-14797)&lt;br /&gt;
* ExtractSap function didn&#039;t work with QPR ScriptLauncher when using secret for storing SAP password. (D-14813)&lt;br /&gt;
* Variation stepper incorrectly skipped steps when going down when variation count is maximum. (D-14844)&lt;br /&gt;
* Improved error message when creating model from filter fails. (D-14811)&lt;br /&gt;
* System dashboard names were incorrectly translated twice. (D-14841)&lt;br /&gt;
* AI Assistant had one translation missing. (D-14840)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2026.2 (build 10897) (released date 2026-02-26)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2026_2.pdf QPR_ProcessAnalyzer_2026_2.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Snowflake user-defined functions (UDF) used by QPR ProcessAnalyzer have been updated to use Python 3.13. Some of the old versions of the functions use Python 3.9 which has been deprecated by Snowflake. Although the old versions are not anymore used by QPR ProcessAnalyzer, they are not automatically deleted and thus Snowflake may send notifications about existing deprecated functions. It&#039;s recommended to remove the old functions which are following:&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V2&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V3&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V4&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V5&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V6&lt;br /&gt;
* QPRPA_UDF_BPMN_CONFORMANCE_VIOLATIONS_FLOWS&lt;br /&gt;
* QPRPA_UDF_BPMN_CONFORMANCE_VIOLATIONS_FLOWS_V2&lt;br /&gt;
* QPRPA_UDF_BPMN_CONFORMANCE_VIOLATIONS_FLOWS_V3&lt;br /&gt;
* QPRPA_UDF_BPMN_IS_CONFORMANT&lt;br /&gt;
* QPRPA_UDF_BPMN_IS_CONFORMANT_V2&lt;br /&gt;
* QPRPA_UDF_BPMN_IS_CONFORMANT_V3&lt;br /&gt;
* QPRPA_UDTF_CLUSTER&lt;br /&gt;
* QPRPA_UDTF_CLUSTER_V2&lt;br /&gt;
* QPRPA_UDTF_CLUSTER_V3&lt;br /&gt;
* QPRPA_UDTF_CLUSTER_V4&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
* Fully conformant [[QPR_ProcessAnalyzer_BPMN_Editor#Auto-creating_BPMN_Diagram_from_Eventlog|BPMN diagrams]] can be created from eventlogs with proper layout and identifying exclusive and parallel gateways. (B-08900)&lt;br /&gt;
* [[Object-Centric_Flowchart|Object-centric flowchart]] flows visibility can be controlled with a stepper based on top variations, and start and end symbols can be hidden for each event type. (B-08987)&lt;br /&gt;
* Added preset for object-centric flowchart, and improved Process Discovery dashboard usage for object-centric models. (B-08863)&lt;br /&gt;
* Viewer users can [[Filtering_in_QPR_ProcessAnalyzer#Saving_filters|save private filters]] for personal use. (B-08920)&lt;br /&gt;
* [[Chart_On-screen_Settings|On-screen settings]] support static and dynamic case/event attribute values selection, and [[Chart_Linked_Settings|linked settings]] can bind to on-screen settings. (B-08814)&lt;br /&gt;
* [[AI_Root_Causes|AI root causes analysis]] related error situations are easier to resolve with easier to understand error messages. (B-08997)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
* Histogram chart did not show at all and gave a JavaScript error. (D-14801)&lt;br /&gt;
* When chart with multiple series was sorted by measure, some datapoints were not shown when visible X-axis was limited by zooming or Custom layout settings. (D-14793)&lt;br /&gt;
* Disabled filter rules were incorrectly applied for the shown items in the filter rule editing dialog. (D-14791)&lt;br /&gt;
* If there were more than one Range filter components in dashboard, periods menu incorrectly affected all of them. (D-14818)&lt;br /&gt;
* List of event types in object-centric flowchart settings didn&#039;t open if there were object types linked to none events. (D-14798)&lt;br /&gt;
* Snowflake flowchart root causes analysis gave &amp;quot;SQL compilation error&amp;quot; when run with case duration criteria. (D-14790)&lt;br /&gt;
* Term &amp;quot;Second&amp;quot; when meaning time unit was translated incorrectly in French. (D-14803)&lt;br /&gt;
* OpenTelemetry metrics were not sent to Prometheus correctly. (D-14804)&lt;br /&gt;
* Opening script editor by url didn&#039;t show project path and also javascript error appeared to console. (D-14794)&lt;br /&gt;
* Fixed issue where case attribute prediction failed when using more than one iteration. (D-14789)&lt;br /&gt;
* SQLDataFrame with several append operations had performance issue. (D-14772)&lt;br /&gt;
* Null coalescing operators didn&#039;t work correctly in chaining in expression language. (D-14762)&lt;br /&gt;
* Native app could not call procedure if project referred to other database and schema. (D-14749)&lt;br /&gt;
* Trying to create script with duplicate name gave unclear error: Cannot insert duplicate key row in object &#039;dbo.PA_SCRIPT&#039; with unique index &#039;PA_SCRIPT_UNIQUE_NAME_IN_PROJECT&#039;. (D-14784)&lt;br /&gt;
* BPMN editor popup menu was partly hidden behind other chart components. (D-14345)&lt;br /&gt;
* When going to context menu report from BPMN editor, &amp;quot;Operation was cancelled by a user&amp;quot; was given when query was in progress. (D-14807)&lt;br /&gt;
* BPMN editor tooltips measure descriptions didn&#039;t disappear at all. (D-14809)&lt;br /&gt;
* Presets benchmarking didn&#039;t work for models without case attributes. (D-14822)&lt;br /&gt;
* Object-centric filter rule editor gave javascript error when opened for case-centric model. (D-14799)&lt;br /&gt;
* Object-centric filter rule could incorrectly be dropped as root causes comparison rule. (D-14796)&lt;br /&gt;
* Localization missing for &amp;quot;Save as new filter&amp;quot; button. (D-14839)&lt;br /&gt;
&lt;br /&gt;
===Other improvements===&lt;br /&gt;
* SQL queries run in Snowflake have been further optimized. (B-08936)&lt;br /&gt;
* Snowflake stored procedures and user defined functions have been migrated to Python 3.13. (B-08984)&lt;br /&gt;
* Frontend components have been updated. (B-08991)&lt;br /&gt;
* Backend components have been updated. (B-08990)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2026.1 (build 10870) (released date 2026-01-19)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2026_1.pdf QPR_ProcessAnalyzer_2026_1.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
QPR ProcessAnalyzer Server and QPR ScriptLauncher are running on .NET 10, replacing the previous .NET 8 version. When updating to this release, make sure to install the .NET 10 Runtime ([[Updating_QPR_ProcessAnalyzer_Server|update instructions]]). While .NET 8 and .NET 10 can run side by side, .NET 8 does not need to be removed immediately. However, for security reasons, any unused .NET 8 installation should be uninstalled as soon as possible after the update.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Known issue: The histogram visualization doesn&#039;t work in this release. The issue will be fixed in the next release. Possible workaround is to use the column chart where to set no spacing between columns. This can be configured with the following [[QPR_ProcessAnalyzer_Chart#:~:text=Custom%20Layout|Custom Layout]] settings:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;plotOptions&amp;quot;: {&lt;br /&gt;
		&amp;quot;series&amp;quot;: {&lt;br /&gt;
			&amp;quot;pointPadding&amp;quot;: 0,&lt;br /&gt;
			&amp;quot;groupPadding&amp;quot;: 0&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*Object-centric models support versatile [[Filtering_in_QPR_ProcessAnalyzer|object-centric filters]] based on case-centric filter rules using perspective. (B-08595)&lt;br /&gt;
*[[AI_Root_Causes|AI Root Causes analysis]] is shown in a hierarchy for easier readability. (B-08921)&lt;br /&gt;
*[[Process_Flowchart|Case-centric flowchart]] performance has been improved by making all queries simultaneously. (B-08916)&lt;br /&gt;
* Object counts indicator is hidden for object-centric models when perspective is not set. (B-08825)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
* Filter to exclude case attribute values incorrectly excluded null values even if null wasn&#039;t selected. (D-14773)&lt;br /&gt;
*Prediction generated invalid models where case IDs in events datatable didn&#039;t exist in cases datatable. (D-14758)&lt;br /&gt;
* AI Root Causes presets didn&#039;t work with models without case attributes. (D-14759)&lt;br /&gt;
* Snowflake query with multiple columns with aggregations and Coalesce function gave &amp;quot;invalid identifier&amp;quot; error. (D-14763)&lt;br /&gt;
*Dropdown list to add business calendar holidays from other model shows empty items. (D-14786)&lt;br /&gt;
*In-memory Average function didn&#039;t work when aggregating dates using model&#039;s Attribute function. (D-14761)&lt;br /&gt;
*Sometimes opening models list gave error &amp;quot;User doesn&#039;t have permission GenericRead to model&amp;quot;. (D-14742)&lt;br /&gt;
&lt;br /&gt;
===Other improvements=== &lt;br /&gt;
*[[QPR_ProcessAnalyzer_Security_Hardening#Added_HTTP_Headers|Content-security-policy]] img-src blob: directive has been restored for Highcharts image export. (B-08904)&lt;br /&gt;
*Backend components have been updated [[Updating_QPR_ProcessAnalyzer_Server|including .NET 10]]. (B-08926)&lt;br /&gt;
*Frontend components have been updated. (B-08927)&lt;br /&gt;
&lt;br /&gt;
==Additional release for QPR ProcessAnalyzer 2025.7 (build 10845) (released 2025-12-11)==&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*QPR ProcessAnalyzer can be deployed on-premise using [[Deploy_QPR_ProcessAnalyzer_from_Container|Linux containers]]. (B-08915)&lt;br /&gt;
*Snowflake SQL queries have been simplified to improve performance, e.g., when quering flows. (B-08901)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues=== &lt;br /&gt;
*ODBC and Loading script models, and models with calculated attributes didn&#039;t allow to create or modify case and event attribute filters from header. (D-14751)&lt;br /&gt;
*Fixed incompatibility issue when using Keycloak as identity provider for SAML authentication. (D-14757)&lt;br /&gt;
*System report for users incorrectly listed some users with read-only permissions as Developers (issue with the EffectivePermissionTypesFor function). (D-14748)&lt;br /&gt;
*Referrer-Policy HTTP header was incorrectly set to &amp;quot;same-origins&amp;quot; causing browser console error in Windows deployments. (D-14736)&lt;br /&gt;
*Fixed issue where QPR ProcessAnalyzer request ID was not added to Snowflake data modification queries. (D-14728)&lt;br /&gt;
*Login request duration was incorrectly shown as zero or negative in System reports. (D-14737)&lt;br /&gt;
*In chart settings, some Snowflake measures with aggregations were missing possibility to define percentile value. (D-14276)&lt;br /&gt;
*Fixed issue where it was not possible to delete a model with same name in the same project during the same session. (D-14708)&lt;br /&gt;
*Script editor to specific script can now be opened with a direct url containing the script_editor parameter. (D-14745)&lt;br /&gt;
*Fixed issue were sometimes an incorrect error code was given for a cancelled query. (D-14755)&lt;br /&gt;
*Improved error message if model loading fails when loading script returns incorrect type of data. (D-14637)&lt;br /&gt;
*Fixed issue where variations query with sampling was slow for new models. (D-14729)&lt;br /&gt;
*Added tooltip to gantt chart&#039;s table layout header so that the header text can be fully seen. (D-13748)&lt;br /&gt;
*Switching between Snowflake and in-memory chart by adjusting chart configuration json caused some items in chart settings to appear twice. (D-14667)&lt;br /&gt;
*Selecting model in dashboard when previously there was no model selected and going back to Workspace, gave error message. (D-14735)&lt;br /&gt;
*Query Designer gave untranslated error message: &amp;quot;You don&#039;t have permissions to model ...&amp;quot;. (D-14727)&lt;br /&gt;
*Query Designer gave untranslated error message &amp;quot;Unable to use Snowflake tables as data source for in-memory query&amp;quot;. (D-14683)&lt;br /&gt;
*In Query Designer, table column menu gave JavaScript error for columns where first row was null. (D-14684)&lt;br /&gt;
*Query Designer incorrectly gave message &amp;quot;There are no columns in the data&amp;quot; when the data had no rows. (D-14692)&lt;br /&gt;
*Fixed issue in Manage Users dialog where row selections disappeared when resizing the dialog. (D-14647)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.7 (build 10821) (released 2025-11-13)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_7.pdf QPR_ProcessAnalyzer_2025_7.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Known issue: Creating case and event attribute filters in dashboards is not possible from the main header for the following types of in-memory models and attributes:&lt;br /&gt;
*Any attributes for [[QPR_ProcessAnalyzer_Model_Datasources#ODBC_Datasource|ODBC loaded models]]&lt;br /&gt;
*Any attributes for [[QPR_ProcessAnalyzer_Model_Datasources#Loading_Script|Loading script models]]&lt;br /&gt;
*Calculated attributes in any in-memory models.&lt;br /&gt;
&lt;br /&gt;
Workaround is to create the filter rule in a chart&#039;s settings and drag-and-drop it to the header. The issue has been fixed by the next release (D-14751). The issue does not concern Snowflake models.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features ===&lt;br /&gt;
*Presets added for [[AI_Root_Causes|AI Root Causes analysis]] based on Snowflake Top Insights which is a decision tree model finding combinations of root cause contributors. (B-08889)&lt;br /&gt;
*Added new [[Range_Filter|filter selector]] component to dashboards to easily create date and number range filters. (B-08877)&lt;br /&gt;
*Projects can be browsed in the [[Navigation_Menu|navigation menu]] to access all dashboards, and also organized the menu into two columns. (B-08708)&lt;br /&gt;
*When QPR ProcessAnalyzer is [[Embed_to_Website|embedded to a website]], SAML authentication is performed in a separate window for more robust operation. (B-08871)&lt;br /&gt;
*For more flexible options, [[AI_Agent|AI Agents]] runs the language model query using the Snowflake account where the selected model is located. (B-08860)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*If DefaultUiLanguage in PA_CONFIGURATION table was not defined, users who haven&#039;t changed language could not login. (D-14706)&lt;br /&gt;
*Improved performance in opening dashboard. (D-14705)&lt;br /&gt;
* Snowflake Native App didn&#039;t show the version number and build timestamp correctly. (D-14703)&lt;br /&gt;
*Snowflake Native App activation failed with a custom compute pool if container service was in the suspended state. (D-14722)&lt;br /&gt;
*Server stuck when trying to generate SQL for SqlDataFrame having multiple columns with the same name. (D-14730)&lt;br /&gt;
*In eventlog prediction, fixed issues preventing the usage of case attribute value prediction. (D-14702)&lt;br /&gt;
*Snowflake DurationBetweenDates function calculated incorrectly when used in a in divisor. (D-14723)&lt;br /&gt;
* Import now succeeds when importing Snowflake datatables refering to data without access. (D-14694)&lt;br /&gt;
*Fixed incorrect color in table column filters, and Workspace loading time has been improved. (D-14704)&lt;br /&gt;
* Fixed issue where dropdown list with projects showed &amp;quot;undefined&amp;quot; in place of project id. (D-14659)&lt;br /&gt;
*Fixed issue where specifying a secret name longer than 440 characters, prevented saving the secret and resulted in an error. (D-14674)&lt;br /&gt;
* SAML authentication failed when it needed to create a new user to QPR ProcessAnalyzer. (D-14717)&lt;br /&gt;
* Fixed issue where SQL dataframe queries didn&#039;t work if the root expression ended to a semicolon. (D-14714)&lt;br /&gt;
*Specific Snowflake query with a comparison criteria, AggregateFrom and GetValueFrom functions gave error about invalid identifier. (D-14718)&lt;br /&gt;
&lt;br /&gt;
===Other improvements=== &lt;br /&gt;
*[[QPR_ProcessAnalyzer_Security_Hardening#HTTP_Response_Headers|Content-Security-Policy HTTP header]] has been reduced to more secure by removing the script-src &#039;unsafe-eval&#039; and img-src &#039;blob&#039; directives. (B-08897)&lt;br /&gt;
*Added [[QPR_ProcessAnalyzer_Security_Hardening#HTTP_Response_Headers|security related HTTP headers]]: X-Permitted-Cross-Domain-Policies, Cross-Origin-Embedder-Policy, Cross-Origin-Opener-Policy, Cross-Origin-Resource-Policy, Referrer-Policy, and Permissions-Policy. (B-08879)&lt;br /&gt;
*Implemented backend support for Snowflake Top Insights for [[SqlDataFrame_in_Expression_Language#:~:text=TopInsights|AI root causes analysis]]. (B-08664)&lt;br /&gt;
*Implemented improved error handling when trying to save too long text to database. (B-08892)&lt;br /&gt;
*For more understandable error messages, error handling and error message generation have been refactored. (B-08754)&lt;br /&gt;
*Optimized database queries and reduced log writing. (B-08870)&lt;br /&gt;
*Frontend components have been updated. (B-08899)&lt;br /&gt;
*Backend components have been updated. (B-08898)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.6 (build 10690) (released 2025-10-01)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_6.pdf QPR_ProcessAnalyzer_2025_6.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Known issue: If the [[PA_Configuration_database_table#:~:text=DefaultUiLanguage|DefaultUiLanguage]] system configuration is not defined, users who haven&#039;t changed their own language, are unable to login. To prevent this problem, please ensure the DefaultUiLanguage is defined. The next release has fixed this issue (D-14706).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Content-Security-Policy (CSP) HTTP header has been updated to enhance security by implementing more restrictive settings. The following directives have been added:&lt;br /&gt;
*object-src &#039;none&#039;&lt;br /&gt;
*frame-ancestors &#039;self&#039;&lt;br /&gt;
*form-action &#039;none&#039;&lt;br /&gt;
*base-uri &#039;none&#039;&lt;br /&gt;
*worker-src blob:&lt;br /&gt;
&lt;br /&gt;
These new restrictions may affect usage that has previously been possible. For example, with the new settings, QPR ProcessAnalyzer can be embedded to a website only within the same origin. For detailed instructions on embedding QPR ProcessAnalyzer on a different website, please refer to [[Embed_to_Website|this quide]]. Additionally, for information on modifying the CSP settings, see documentation for [[QPR_ProcessAnalyzer_Security_Hardening#HTTP_Response_Headers|security hardening]].&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
In the QPR ProcessAnalyzer 2025.6 Native App, the release version number is not displayed correctly in the User Settings dialog. This omission does not have any other complications. QPR ProcessAnalyzer 2025.6 is the only release with this issue, making it possible to identify this release despite the missing version number. This issue is specific to the Native App only. The next release has fixed this issue (D-14703).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*[[User_Settings#Starting_dashboard|Starting dashboard]] after login can be defined for user groups, allowing to create customized starting pages for easy navigation. (B-08791)&lt;br /&gt;
*Snowflake [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|chart&#039;s event filters]] are now embedded to filters created from chart, to precisely follow chart calculation. (B-08845)&lt;br /&gt;
*Result data can be filtered in Snowflake charts using [[QPR_ProcessAnalyzer_Chart#:~:text=Result%20filtering%20expression|result filtering expression]] which works for any datasets. (B-08751)&lt;br /&gt;
*Filter rules order now stays the same when making filter selections and confirming filter. (B-08801)&lt;br /&gt;
*Added model setting [[QPR_ProcessAnalyzer_Project_Workspace#Hiding_Object_Count_Statistics|Show object count statistics]] to hide object counts information in dropdown lists to optimize performance. (B-08849)&lt;br /&gt;
*Added support for [[Chart_On-screen_Settings#:~:text=showStatistics|hiding statistics for on-screen setting]] dropdown lists to improve performance, and in addition the case ID is hidden Case/Event attribute profiling presets. (B-08840)&lt;br /&gt;
*Added following audit fields to users and groups: Created date, Created by, Last modified date, and Last modified by. (B-08792)&lt;br /&gt;
*Snowflake Native App: Added procedure to that [[QPR_ProcessAnalyzer_Native_App_in_Snowflake#Recover_administrator_access|creates administrator user to Native App]] if access to the app has been lost. Also, prevented user management operations that remove own access. (B-08733)&lt;br /&gt;
*Snowflake Native App: Added procedure to [[Change_Native_App_Compute_Pool_Size|change Native App compute pool size]]. Changed new Native Apps to use CPU_X64_S size compute pool, and improved Native App stability. (B-08859)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues=== &lt;br /&gt;
*Snowflake Cortex based AI Assistant didn&#039;t show the results table. (D-14643)&lt;br /&gt;
*When percent stacking is used, Y-axis values are now shown as percentages in data label and tooltip. (D-14633)&lt;br /&gt;
*Fixed issue where Label&amp;amp;Link component had sometimes unnecessary vertical scrollbar. (D-14685)&lt;br /&gt;
*Model validation showed incorrect error message for models with numeric duplicate case ID&#039;s. (D-14687)&lt;br /&gt;
*In Workspace, scripts &amp;quot;View current run log&amp;quot; dialog didn&#039;t update log correctly when new entries were added. (D-14662)&lt;br /&gt;
*Event type mapping in charts didn&#039;t work in object-centric models. (D-14620)&lt;br /&gt;
*Model generation didn&#039;t work as transformation step using _system.ML.ApplyTransformation function. (D-14654)&lt;br /&gt;
*Others aggregation has been removed from date type of dimensions because tables don&#039;t work with textual data in date columns. (D-14623)&lt;br /&gt;
*Fixed issue in AI Assistant where using both Snowflake Cortex and OpenAI modes caused error. (D-14646)&lt;br /&gt;
*In User Management Effective permissions table, column filter incorrectly showed &amp;quot;true&amp;quot; and &amp;quot;false&amp;quot; as options. (D-14639)&lt;br /&gt;
*Pivot table incorrectly showed &amp;quot;Numeric value is not recognized&amp;quot; error when Count or Unique count aggregations were used. (D-14559)&lt;br /&gt;
*Workspace buttons are now visible in small screens spanning to multiple lines. (D-14587)&lt;br /&gt;
*Added tooltip text to &amp;quot;Move to&amp;quot; submenu containing projects so that long project names can be seen. (D-14612)&lt;br /&gt;
*Translation was missing from error messages when deleting items from recycle bin. (D-14652)&lt;br /&gt;
*Fixed data type related issues with in-memory Floor, Ceiling and aggregation functions. (D-14622)&lt;br /&gt;
*Optimized resource loading by getting rid of unnecessary file assets/i18n/en_US.json. (D-14641)&lt;br /&gt;
*Fixed issue where opening script editor gave javascript error about content-security-policy violation. (D-14627)&lt;br /&gt;
*Fixed issue in charts showing datatable content had a strange error when datatable was not selected. (D-14650)&lt;br /&gt;
*Fixed incorrect data types in some project, user and group related measures. (D-14619)&lt;br /&gt;
* Fixed issue where moving expression scripts was not possible when SQL Scripting was not allowed. (D-14624)&lt;br /&gt;
*Deleting and renaming scripts were not available for expression scripts when SQL Scripting was not allowed. (D-14625)&lt;br /&gt;
*Improved documentation for situation when non-existing Snowflake warehouse is configured for a model. (D-14543)&lt;br /&gt;
*Project properties dialog shows a descriptive text when no secrets have been defined instead of an empty table. (D-14611)&lt;br /&gt;
* Improved messages and New project button visibility in Workspace top level when no projects are shown. (D-14609)&lt;br /&gt;
*Event preset gave error if enabling Apply with Chart Filters setting and trying to create filters. (D-14695)&lt;br /&gt;
&lt;br /&gt;
===Other improvements===&lt;br /&gt;
*Added QPR ProcessAnalyzer API request ID to Snowflake queries to easily find matching query in Snowflake query history. (B-08839)&lt;br /&gt;
*[[QPR_ProcessAnalyzer_Security_Hardening#Added_HTTP_Headers|Content Security Policy HTTP header]] includes now object-src, frame-ancestors, form-action, base-uri, and worker-src. (B-08794)&lt;br /&gt;
*Snowflake queries have been optimized by removing null and empty string checks from mapped columns as they are now handled by the model validation check. (B-08837)&lt;br /&gt;
*Added backend support for object-centric model filtering based on case-centric filter rules. (B-08836)&lt;br /&gt;
*Frontend components have been updated. (B-08851)&lt;br /&gt;
*Backend components have been updated. (B-08852)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.5 (build 10361) (released 2025-08-21)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_5.pdf QPR_ProcessAnalyzer_2025_5.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
When using Snowflake Cortex, the AI Assistant is not showing the results table in the assistant&#039;s response. This issue has been fixed by the next release.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===  &lt;br /&gt;
*[[Object-Centric_Flowchart|Object-centric flowchart]] can also use object-to-object relations to link events and objects simplifying event-to-object configuration. (B-08671)&lt;br /&gt;
*[[AI_Assistant_for_QPR_ProcessAnalyzer|AI Assistant]] can provide precise quantitative analysis by making queries to eventlog data (powered by Snowflake Cortex Analyst and Agents). (B-08652)&lt;br /&gt;
*[[Filtering_in_QPR_ProcessAnalyzer|Flows and variations can be filtered]] from any event attribute viewpoint in Snowflake. (B-08737)&lt;br /&gt;
* Added [[Project_Properties_Dialog|project properties dialog]] for viewing project information, changing Snowflake connection settings and project secrets. (B-08655)&lt;br /&gt;
*[[QPR_ProcessAnalyzer_Project_Workspace#Validating_Model|Model validity check]] easily detects technically invalid models and shows detailed reason for invalidity. (B-08624)&lt;br /&gt;
*Projects can be [[QPR_ProcessAnalyzer_Project_Workspace#Exporting_Project|exported]] to json files and imported as new projects. (B-08717)&lt;br /&gt;
*Action buttons can be added to dashboard by defining [[Label_and_Link|label component]] that can change dashboard variables and run scripts. (B-08694)&lt;br /&gt;
*Web user interface is available in [[Languages_and_Localization|Ukrainian language]]. (B-08734)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Fixed following error when performing client-side SAP import: Could not find a part of the path (QPR_ImportSource_Chunk_*.tmp). (D-14589)&lt;br /&gt;
*Fixed issue where ManageProjects permission was incorrectly required when running scripts using QPR ScriptLauncher non-legacy mode. (D-14562)&lt;br /&gt;
*Fixed following error when using SAP import from SQL script called from expression language called from SQL: The given key &#039;&#039; was not present in the dictionary. (D-14593)&lt;br /&gt;
*Some analyses didn&#039;t work, when case ID columns for cases and events datatables differed only in upper/lowercase letters. (D-14556)&lt;br /&gt;
*Business calendar didn&#039;t work for some measures/dimensions/columns and some had business calendar checkboxes missing. (D-14563)&lt;br /&gt;
*Prediction failed to following error: transformer_model_next_activity/event_year_input_embedding. (D-14551)&lt;br /&gt;
*Scripting now works correctly after rows from PA_OPERATION_STATUS table have been deleted. (D-14545)&lt;br /&gt;
*Fixed issue where case-centric flowchart was very slow for object-centric model. (D-14544)&lt;br /&gt;
*Prevented creating dashboards, models and scripts with duplicate names in the same project. (D-09480)&lt;br /&gt;
*KPI Card now shows line breaks correctly in textual values. (D-14546)&lt;br /&gt;
*Improved table Excel export for list data to show items with separator character instead of showing as JSON. (D-14479)&lt;br /&gt;
*Column showing non-conformance reason was incorrectly aligned to right. (D-14570)&lt;br /&gt;
*GetRelatedValueFrom function caused column name conflict when used multiple times in same query. (D-14591)&lt;br /&gt;
* Fixed issue where in-memory sorting for arrays gave &amp;quot;Error in sorting analysis result rows possibly due to multiple types of values ...&amp;quot;. (D-14592)&lt;br /&gt;
*Array type of values were shown incorrectly when used Last Row Aggregates Over-limit Rows setting. (D-14616)&lt;br /&gt;
*Fixed the &amp;quot;Most common&amp;quot; text aggregation sorting error for in-memory calculation. (D-14573)&lt;br /&gt;
*Snowflake model validation gave incorrect error message when mapped column didn&#039;t exist in datatable. (D-14565)&lt;br /&gt;
*Improved model validation to detect when connection string key for model or datatable does not exist. (D-14607)&lt;br /&gt;
* Model validation gave incorrect error when when events datatable case id mapping was missing. (D-14566)&lt;br /&gt;
*Model validation gave incorrect error message when cases and events datatables were in different datasources. (D-14567)&lt;br /&gt;
*Model validation gave incorrect error message when underlying Snowflake table didn&#039;t exist. (D-14568)&lt;br /&gt;
*Workspace Card/Table mode toggle buttons were not translated. (D-14547)&lt;br /&gt;
*Some invalid queries gave unexpected errors and strange outputs. (D-14569)&lt;br /&gt;
* Added translations to model notifications preview table headers. (D-14590)&lt;br /&gt;
* Added translations to access denied message for header object counts indicator. (D-13967)&lt;br /&gt;
* AI Assistant explaining charts speaks now user interface language. (D-14578)&lt;br /&gt;
* AI Agent prompt chart editor didn&#039;t show correctly if model was not selected. (D-14536)&lt;br /&gt;
*AI Assistant gave &amp;quot;Unsupported cache table type&amp;quot; error when trying to explain object-centric flowchart. (D-14477)&lt;br /&gt;
&lt;br /&gt;
===Other improvements ===&lt;br /&gt;
*When trying to open dashboard with an invalid model, the precise model validation error message is shown. (B-08629)&lt;br /&gt;
*Account locked message is now same as username/password incorrect to prevent account enumeration attack. (B-08740)&lt;br /&gt;
*Stringified value format supports also json objects. (B-08766)&lt;br /&gt;
*Event attribute used as event type can be defined for flow and variation filters in Snowflake models (backend support). (B-08705)&lt;br /&gt;
*Translations have been updated. (B-08757)&lt;br /&gt;
*Frontend components have been updated. (B-08760)&lt;br /&gt;
*Backend components have been updated. (B-08759)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.4 (build 9985) (released 2025-05-28)==&lt;br /&gt;
&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_4.pdf QPR_ProcessAnalyzer_2025_4.pdf]&lt;br /&gt;
&lt;br /&gt;
===New features ===&lt;br /&gt;
*Added new AI Agent presets analyzing current state and proposing improvements based on different viewpoints, such as Event and Case Counts, Automation, Bottlenecks, and Root Causes. (B-08710)&lt;br /&gt;
*Added a [[Filter_Selectors#Filter_selector|generic filtering component]] that can be configured for creating any type of filters for distinct values. (B-08654)&lt;br /&gt;
*Volume declining in measures due to case sampling can be compensated in chart and flowchart by using a [[Measure,_Dimension_and_Column_Settings#Statistical_calculations|Statistical calculation method]]. (B-08598)&lt;br /&gt;
*In object-centric models, Object ID, Event ID, Event timestamp, and Event type [[Object-centric_Process_Mining_Model#Object-centric_perspectives|attribute names]] are shown correctly. (B-08680)&lt;br /&gt;
*Snowflake native app has now [[QPR_ProcessAnalyzer_Native_App_in_Snowflake#User_access_to_application|application roles]] for user (for using app) and administrator (for managing app). (B-08660)&lt;br /&gt;
*For Snowflake native app, IMPORTED PRIVILEGES ON SNOWFLAKE DB privilege is removed and instead the [[QPR_ProcessAnalyzer_Native_App_in_Snowflake#Optional_privilege_for_AI_Agent|CORTEX_USER database role]] can be assigned. (B-08718)&lt;br /&gt;
*[[QPR_ProcessAnalyzer_Native_App_in_Snowflake#Logging|Native app logging]] has been improved and now sharing application logs with QPR is possible. (B-08661)&lt;br /&gt;
* Added [[DataFrame_in_Expression_Language#CsvToDataFrame|CsvToDataFrame]] function to expression language to convert textual CSV data into in-memory dataframe. (B-08246)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Fixed &amp;quot;Invalid identifier&amp;quot; error when opening attribute selection list for case attribute preset caused by object id columns which differed only by letter capitalization. (D-14539)&lt;br /&gt;
*When Image component is clicked in dashboard edit mode, the component is now selected instead of link followed. (D-14525)&lt;br /&gt;
*Filters created from dimensions having dimension-specific filter rules will now create expression filter rule where dimensions-specific filter is embedded, for accurately following the selection. (D-14499)&lt;br /&gt;
*Filtering variations or list of event attribute values didn&#039;t work in in-memory models. (D-14476)&lt;br /&gt;
*Fixed issue where AI Agent didn&#039;t update when dashboard variable changed used by prompt chart. (D-14537)&lt;br /&gt;
* Fixed issue where some statistical calculations inadvertently changed row order when applying in groups. (D-14495)&lt;br /&gt;
*In in-memory models, array type of data was not dimensioned correctly. (D-14518)&lt;br /&gt;
* AI Agent Process Variations preset gave &amp;quot;division by zero&amp;quot; error when there were zero cases. (D-14508)&lt;br /&gt;
*Table grouping header labels were not formatted correctly. (D-14514)&lt;br /&gt;
*Fixed Root causes analysis to work with object-centric models. (D-14515)&lt;br /&gt;
*Filtering by OcelObjectId didn&#039;t work when model didn&#039;t have object type table for perspective used in filter. (D-14522)&lt;br /&gt;
*Fixed Root causes analysis with weighting expression to work with object-centric models. (D-14517)&lt;br /&gt;
*Fixed issue where persisting query results where query is started from datatable having custom table name overwrote data in original table. (D-14528)&lt;br /&gt;
*Flowchart SVG export did not show start and end symbols. (D-12401)&lt;br /&gt;
*Fixed issue where join operation didn&#039;t find renamed columns in SqlDataFrames. (D-14512)&lt;br /&gt;
*Improved chart filtering button positions to work with small chart sizes. (D-14509)&lt;br /&gt;
*Datatable foreign key columns dictionary data type was incorrect preventing reading columns information. (D-14505)&lt;br /&gt;
*Workspace scripts editor allowed to change script code for viewer users (altough not save it). (D-14534)&lt;br /&gt;
* In chart custom sorting, trying to refer to measure that had None aggregation, caused SQL compilation error. (D-14526)&lt;br /&gt;
*Model validation check crashed when the datatables were in different datasources. (D-14502)&lt;br /&gt;
&lt;br /&gt;
===Other improvements=== &lt;br /&gt;
*Added expression language functions for using Snowflake Cortex Agents with Cortex Analyst access to query eventlogs. (B-08647)&lt;br /&gt;
*Projects can be export and imported in JSON format containing dashboards, models, datatables and scripts. (B-08613)&lt;br /&gt;
*Simplified object-centric model queries by accepting OcelObjectId as object attribute name in filters. (B-08702)&lt;br /&gt;
*Streamlined import API by removing importMode parameter and changing default fileType to CSV. (B-08704)&lt;br /&gt;
*Frontend components have been updated. (B-08695)&lt;br /&gt;
*Backend components has been updated. (B-08696)&lt;br /&gt;
&lt;br /&gt;
==Additional release for QPR ProcessAnalyzer 2025.3 (build 9805) (released 2025-04-30)==&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*Navigation menu is now displaying dashboards from open dashboard&#039;s project or from selected Workspace project (earlier dashboards were shown from the selected model&#039;s project). (B-08673)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues === &lt;br /&gt;
*Fixed issue where AI Agent made unnecessary queries when filtering dashboard, and also opening dashboard with lot of chart may have been slow. (D-14503)&lt;br /&gt;
*When datatable columns were modified, queries to the data may have given &amp;quot;Invalid identifier&amp;quot; error. (D-14507)&lt;br /&gt;
*Clustering analysis didn&#039;t work with object-centric models. (D-14486)&lt;br /&gt;
*When a new groups is added, it&#039;s selected by default in the Manage Users dialog. Also clicking a selected group does not deselect it. (D-14491)&lt;br /&gt;
*Deleting last group didn&#039;t remove the group from the list. (D-14504)&lt;br /&gt;
&lt;br /&gt;
==Additional release for QPR ProcessAnalyzer 2025.3 (build 9725) (released 2025-04-23)==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
There is an issue causing some dashboards having more than 50 charts to open slowly. The issue has been fixed in the next release by D-14503.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Fixed Issues=== &lt;br /&gt;
*Fixed issue where system stopped responding after opening Scripts tab several times (error in logs: Timeout expired prior to obtaining a connection from the pool). (D-14506)&lt;br /&gt;
*Fixed issue where the object-centric models object types tables didn&#039;t work without the timestamp column. (B-08683)&lt;br /&gt;
*Snowflake cache tables are now created after initiating calculation is completed to improve performance. (D-14460)&lt;br /&gt;
*Fixed issue in User Management where assigning role to project or adding user to group was not saved when there was a column filter. (D-14124)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.3 (build 9699) (released 2025-04-16)==&lt;br /&gt;
&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_3.pdf QPR_ProcessAnalyzer_2025_3.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
There is a potentially serious issue that can cause the system to stop responding, when opening the Scripts tab in the Workspace. The issue has been fixed in the next release (build 9725) by D-14506.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Object-centric model simplification in the story B-08667 (object attributes can only have a single value) doesn&#039;t work with this release. The issue has been fixed in the next release (build 9725) by B-08683.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*Enhanced [[AI Agent]] with UI for editing prompt datasets, and added checkbox to include other charts in dashboard to prompt. (B-08641)&lt;br /&gt;
*In [[Object-centric_Process_Mining_Model|object-centric models]], object-to-object relations are now followed by traversing once all object types. (B-08606)&lt;br /&gt;
*In object-centric models, event type and object type tables are not mandatory anymore, and common attributes can be specified in events and objects tables. (B-08663)&lt;br /&gt;
*Object-centric models support simplified structure where object attributes can only have a single value. (B-08667)&lt;br /&gt;
*Object relation steps setting can be empty to traverse all linked objects in the object-centric model. (B-08668)&lt;br /&gt;
*Snowflake Event Types preset has been improved by adding suggestion of desired and undesired activities based on frequency of occurrence. (B-08656)&lt;br /&gt;
* Added checkbox for [[Measure,_Dimension_and_Column_Settings#Advanced_settings|disabling filtering]] for individual dimensions or columns. (B-08589)&lt;br /&gt;
*Case and event attributes dropdown lists show number of unique values in Snowflake models (instead of attribute datatype as previously). (B-08316)&lt;br /&gt;
*[[SAML_2.0_Federated_Authentication|SAML authentication]] can now synchronize user groups from identity provider. (B-08612)&lt;br /&gt;
*Groups can be [[Manage_Users_and_Groups#Deleting_Group|deleted]] in user management. (B-08330)&lt;br /&gt;
*[[Storing_Secrets_for_Scripts|Secrets]] can be defines as global that can be used by all projects. To set global secrets, [[Generic_Functions_in_QPR_ProcessAnalyzer#SetSecret|SetSecret]] function works also in the generic context. (B-08599)&lt;br /&gt;
*Snowflake [[Clustering_Analysis|Clustering analysis]] shows now number of event occurrences as features describing clusters. (B-08353)&lt;br /&gt;
*Model validity check has been extended to find issues in the eventlog data for Snowflake case-centric models. (B-07910)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Fixed a potential issue which could have leaked database connections and caused connection pool starvation. (D-14414)&lt;br /&gt;
*Renewed self-signed certificate used by SAML 2.0 authentication with ten years of validity. (D-14424)&lt;br /&gt;
*Improved CallWebService function to send request body when using DELETE method. (D-14488)&lt;br /&gt;
* Login page now shows correct error message when there are serious system errors during login. (D-14480)&lt;br /&gt;
*&amp;quot;Datatable contents (in-memory)&amp;quot; option now works also with Snowflake datatables. (D-14391)&lt;br /&gt;
*Added maximum data size limitation to AI assistant to avoid error with large datasets. (D-14419)&lt;br /&gt;
*Day of the Year/Week/Month/Quater selection didn&#039;t work with specific event time in in-memory chart. (D-14421)&lt;br /&gt;
*KPI card now shows a scrollbar when content doesn&#039;t fit to the available space. (D-13428)&lt;br /&gt;
* Workspace projects hierarchy tooltips didn&#039;t show special characters correctly. (D-14430)&lt;br /&gt;
*BPMN editor crashed when creating filter from tasks giving following error: Cannot read properties of null (reading &#039;querySelector&#039;). (D-14399)&lt;br /&gt;
*Value expressions didn&#039;t work that are referred in dimension and containing aggregation. (D-13624)&lt;br /&gt;
* Fixed issue where object-centric flowchart filter selection gave error when case-centric model was selected. (D-14408)&lt;br /&gt;
*Fixed issue where query to non-existing model incorrectly returned &amp;quot;Sequence contains no elements&amp;quot;. (D-14402)&lt;br /&gt;
*Incorrect StringifiedValues in chart settings and expression filter rule caused UI to stuck. (D-14485)&lt;br /&gt;
*Table column filter value list didn&#039;t show the null value label correctly. (D-13844)&lt;br /&gt;
*&amp;quot;Visualize list items with colors&amp;quot; setting didn&#039;t work with the &amp;quot;Last Row Aggregates Over-limit Rows&amp;quot; setting. (D-14357)&lt;br /&gt;
*Made sure that failed queries are not added to model filter cache. (D-14484)&lt;br /&gt;
*Chart settings crashed when trying to use without model selected giving following error: Cannot read properties of undefined (reading &#039;injectValue&#039;). (D-14395)&lt;br /&gt;
*Fixed issue where chart settings opened on top of full screen BPMN editor. (D-14472)&lt;br /&gt;
*Show details button in some error messages didn&#039;t have any effect when pressed. (D-14490)&lt;br /&gt;
*Model validation message was incorrect for model where other datatable is Snowflake and other SQL Server. (D-14475)&lt;br /&gt;
&lt;br /&gt;
=== Other improvements=== &lt;br /&gt;
*Logging has been set to Warning level for Native App to avoid excessive number of log entries to Snowflake events table. (B-08687)&lt;br /&gt;
*Datatable duplication is now synchronous in Snowflake until 30 seconds to avoid showing the created duplicate datatable with zero rows while the operation is still in progress. (B-08634)&lt;br /&gt;
*Improved Snowflake cache table creation logic when there are multiple simultaneous queries. (B-08622)&lt;br /&gt;
*Refactored SQL Server operations to improve robustness and avoid leaking database connections. (B-08649)&lt;br /&gt;
*Frontend components have been updated. (B-08638)&lt;br /&gt;
* Backend components have been updated. (B-08639)&lt;br /&gt;
*Translations have been updated. (B-08640)&lt;br /&gt;
&lt;br /&gt;
== Additional release for QPR ProcessAnalyzer 2025.2 (build 9476) (released 2025-03-19)==&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Fixed issue where charts axis labels had unnecessary line breaks on spaces. (D-14413)&lt;br /&gt;
*Fixed issue where AI Agent and LLMComplete function didn&#039;t work in Native App. (D-14410)&lt;br /&gt;
*Fixed translations for Workspace Scripts tab column filter for Status and Result columns. (D-14393)&lt;br /&gt;
*Fixed issue where Volume Distribution of Flow Analyzed object type didn&#039;t work. (D-14390)&lt;br /&gt;
*Removed reference to fonts.googleapis.com for stylesheets to avoid content-security-policy error. (D-14373)&lt;br /&gt;
* Syncfusion dialog headers now show special characters correctly. (D-14407)&lt;br /&gt;
*Object attribute filter gave null reference error when object type didn&#039;t exist in model. (D-14379)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.2 (build 9410) (released 2025-03-05)==&lt;br /&gt;
&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_2.pdf QPR_ProcessAnalyzer_2025_2.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Detection of models with incomplete datasource configuration has been improved, and now models where the event timestamp column type is string, are not anymore considered valid models. Earlier the string type of data was accepted and converted into dates when model was loaded (for in-memory models) or in SQL queries (in Snowflake models).&lt;br /&gt;
&lt;br /&gt;
The following query can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] (with System administrator user) to list models where the events datatable timestamp column type is string:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Models.Where({&lt;br /&gt;
	let timestampColumn = _.Configuration?.TryGetValue(&amp;quot;Datasource&amp;quot;)?.TryGetValue(&amp;quot;Events&amp;quot;)?.TryGetValue(&amp;quot;Columns&amp;quot;)?.TryGetValue(&amp;quot;Timestamp&amp;quot;);&lt;br /&gt;
	return First(_.EventsDatatable?.Columns?.Where(Name==timestampColumn))?.Datatype == &amp;quot;String&amp;quot;;&lt;br /&gt;
}).(Name + &amp;quot; (id: &amp;quot; + Id + &amp;quot;)&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
For Snowflake dashboards, table actions to [[QPR_ProcessAnalyzer_Table#Table_actions|set dashboard variables]] now set the variable values in the [[Stringified_Value_Format|stringified format]] instead of as raw values. This makes the variables set by table actions compatible with the [[Chart_Linked_Settings|linked settings]] which also use the stringified format by default for the Snowflake models.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features=== &lt;br /&gt;
*Introduced [[AI Agent]] which is a new dashboard component showing LLM generated answers based on user prompt and input data. (B-08556)&lt;br /&gt;
*Added [[Filtering_in_QPR_ProcessAnalyzer_Queries#Object-centric_filter_rules|filtering by object attributes]] for object-centric models. Filters can be created from dialog or selecting items from charts. (B-08547)&lt;br /&gt;
*In object-centric models, object-to-object relations are followed only forward and backward directions. Additionally, there are performance improvements for object-centric models. (B-08577)&lt;br /&gt;
*Snowflake warehouse can be [[QPR_ProcessAnalyzer_Project_Workspace#Change_Snowflake_Warehouse_for_Model|specified for each model]] allowing to use optimal type of warehouse for different sizes of models. (B-08610)&lt;br /&gt;
*Home screen has been removed, and [[QPR_ProcessAnalyzer_Project_Workspace|Workspace]] has new card layout and other UX improvements. (B-08541)&lt;br /&gt;
*Added [[Filtering_in_QPR_ProcessAnalyzer#Saving_filters|filter description]] field to filter properties dialog. (B-08451)&lt;br /&gt;
*Removed event type existence check from charts, so that non-existing event types are allowed. (B-08585)&lt;br /&gt;
*Snowflake Native App configuration data can be [[QPR_ProcessAnalyzer_Native_App_in_Snowflake#Backup_configuration_data|backed up to a snapshot and restored]]. (B-08591)&lt;br /&gt;
*Improved detection of invalid models by adding [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#CheckModelValidity|CheckModelValidity]] function returning model validation errors. (B-08426)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Prevented following error in Snowflake dashboards: Object &amp;quot;qprpa_dt_cache_...&amp;quot; already exists when creating a cache table. (D-14348)&lt;br /&gt;
*In-memory chart &amp;quot;Cases filtered by attribute&amp;quot; didn&#039;t work for date type of attributes. (D-14387)&lt;br /&gt;
*Fixed issue where each dashboard element resize made element width or height increase when chart margin was more than zero. (D-14361)&lt;br /&gt;
*Chart related buttons are now hidden in datatable content preview. (D-14360)&lt;br /&gt;
*Fixed issue where gateway based data import didn&#039;t write SAP errors into script log. (D-14351)&lt;br /&gt;
*Snowflake chart gave error when &amp;quot;Last Row Aggregates Over-limit Rows&amp;quot; setting was used with list aggregation. (D-14352)&lt;br /&gt;
*&amp;quot;Users&amp;quot; system report performance has been improved by adding EffectivePermissionTypesFor function. (D-14266)&lt;br /&gt;
*Fixed issue where AI Assistant crashed when used with a model having ODBC or expression datasource. (D-14340)&lt;br /&gt;
*Fixed issue where AI Assistant explaining charts crashed when applying to Label component. (D-14344)&lt;br /&gt;
* Improved client-side import not to perform redundant datatable configuration data queries. (D-14347)&lt;br /&gt;
*Model was incorrectly identified as in-memory model when datatables were missing. (D-14325)&lt;br /&gt;
*Model default filter is now in use when model is opened from Workspace. (D-14376)&lt;br /&gt;
&lt;br /&gt;
===Other improvements===  &lt;br /&gt;
*Changed Snowflake charts to store [[QPR_ProcessAnalyzer_Table#Table_actions|variable change actions]] in stringified format to make them compatible with linked settings. (B-08587)&lt;br /&gt;
*Backend support for [[Filtering_in_QPR_ProcessAnalyzer_Queries#Object-centric_filter_rules|object-centric filter rules Disabled flag]]. (B-08611)&lt;br /&gt;
*Implemented Entity Framework based database initialization and migrations. (B-08566)&lt;br /&gt;
*Added support for following Entity Framework database providers: SQL Server (full), Snowflake Hybrid Tables (experimental), PostgreSQL (experimental). (B-08581)&lt;br /&gt;
*Frontend components have been updated. (B-08597)&lt;br /&gt;
*Backend components have been updated. (B-08596)&lt;br /&gt;
*Translations have been updated for release 2025.2. (B-08607)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.1 (build 9124) (released 2025-01-23)==&lt;br /&gt;
&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_1.pdf QPR_ProcessAnalyzer_2025_1.pdf]&lt;br /&gt;
&lt;br /&gt;
===New features=== &lt;br /&gt;
*B-08526: Variations and other lists can be visualized with colors, and &amp;quot;List separator&amp;quot; field is available for dimensions and columns.&lt;br /&gt;
*B-08530: Charts can have a [[QPR_ProcessAnalyzer_Chart#Visual_Settings|description text]] which are shown in a dialog when pressing the info button.&lt;br /&gt;
*B-08546: Added [[SQL_Expressions#LLMComplete|LlmComplete]] function to access Snowflake Cortex large language models.&lt;br /&gt;
*B-08439: Added project settings [[QPR_ProcessAnalyzer_Project_Workspace#Project-level_Snowflake_Database_and_Schema|DatabaseNameInDataSource and SchemaNameInDataSource]] to define Snowflake database and schema.&lt;br /&gt;
*B-08531: Projects can be created in expression language using [[Generic_Functions_in_QPR_ProcessAnalyzer#CreateProject|CreateProject]] function.&lt;br /&gt;
*B-08387: Added backend support for object-centric model [[Filtering_in_QPR_ProcessAnalyzer_Queries#Object-centric_filter_rules|filtering for object attributes]].&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*D-14339: Week numbers showed incorrect year for last dates in the end of year.&lt;br /&gt;
*D-14323: Filtering with &amp;quot;Split data by filtering&amp;quot; dimension didn&#039;t work with exclude type of filter rules and when there were multiple filter rules.&lt;br /&gt;
*D-14346: Fixed issue where manual activation using activation utility didn&#039;t work.&lt;br /&gt;
*D-14326: Fixed issue where extra columns in objects table broke object-centric model.&lt;br /&gt;
*D-14306: Fixed issue when there were both TimeStamp and ToTimeStamp event data columns.&lt;br /&gt;
*D-14332: Flowchart event type and flow queries are now simultaneous which will improve performance.&lt;br /&gt;
*D-14331: Flowchart lost selection when flowchart used linked variables with array values.&lt;br /&gt;
*D-14299: Table text filters didn&#039;t work in Snowflake (starts with, ends with, contains).&lt;br /&gt;
*D-14338: Model.Modify function generated model json configuration that frontend wasn&#039;t incompatible with.&lt;br /&gt;
*D-14342: Flow step and Zoom settings control have same size and layout is aligned.&lt;br /&gt;
*D-14316: Occurrence impact on case duration measure didn&#039;t work with certain in-memory models.&lt;br /&gt;
*D-14327: AI Assistant had console error when pressing send button without text.&lt;br /&gt;
*D-14341: AI Assistant overlapped with BPMN editor in fullscreen mode.&lt;br /&gt;
*D-14321: Added error message for AI Assistant when trying to use it without model selected.&lt;br /&gt;
&lt;br /&gt;
===Other improvements=== &lt;br /&gt;
*B-08391: Datatable access has been optimized improving performance for object-centric models.&lt;br /&gt;
* B-08529: Added support for array type in stringified value format.&lt;br /&gt;
*B-08527: Improved SAP connector error handling and removed assumption for fixed dll file names.&lt;br /&gt;
*B-08552: Migrated rest of SQL queries into Entity Framework as preparation for storing configuration data to Snowflake hybrid tables.&lt;br /&gt;
*B-08544: Frontend components have been updated.&lt;br /&gt;
*B-08561: Updated translations for release 2025.1.&lt;br /&gt;
&lt;br /&gt;
==Old Releases==&lt;br /&gt;
See older releases in [[QPR ProcessAnalyzer Release Archive]]&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
[[Category: QPR ProcessAnalyzer]]&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&amp;diff=28093</id>
		<title>QPR ProcessAnalyzer Release Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&amp;diff=28093"/>
		<updated>2026-04-12T21:06:30Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: /* New features */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists all new features and fixed issues for each QPR ProcessAnalyzer release.&lt;br /&gt;
&lt;br /&gt;
==Next Release: QPR ProcessAnalyzer 2026.3 (planned release during week of April 6th)==&lt;br /&gt;
[[Next_Release_Roadmap|See roadmap for next release features and fixes]]&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
* QPR ProcessAnalyzer acts as MCP server where MCP tools are implemented using scripts. (B-09004)&lt;br /&gt;
* [[Object-centric_Process_Mining_Model#Configure_object-centric_model|Units for each object type]] can be specified in object-centric models. (B-08992)&lt;br /&gt;
* [[PA_Configuration_database_table#:~:text=DefaultColorPalette|Charts color palette]] can be changed globally to easily manage consistent visual layout. (B-08993)&lt;br /&gt;
* [[External_Content|External content component]] url supports tags refering to dashboard variables to show dynamically changing web page. (B-08998)&lt;br /&gt;
* [[QPR_ProcessAnalyzer_Project_Workspace#Exporting_Project|Project export and import]] using files support public filters stored in models. (B-09007)&lt;br /&gt;
* [[QPR_ProcessAnalyzer_KPI_Card|KPI Card]] shows null value label when data has no rows, and table and chart show &amp;quot;No data&amp;quot; message. (B-08999)&lt;br /&gt;
* [[QPR_MEA_Integration|QPR MEA web service]] operations can be called using QPR ProcessAnalyzer expression language. (B-09030)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
* Flowchart had flows missing if shown flows were beyond the top-500 flows. (D-14848)&lt;br /&gt;
* Expression filter rules with greater/less than criteria were incorrectly applied as equal filters when editing chart filters. (D-14852)&lt;br /&gt;
* Table column filter dialog was not entire visible in narrow table located in the bottom of screen. (D-14783)&lt;br /&gt;
* Opening Scripts tab in Workspace was slow when there were scripts with long script log. (D-14670)&lt;br /&gt;
* Fixed issue where object-centric model queries sometimes gave inconsistent results. (D-14854)&lt;br /&gt;
* Snowflake query gave &amp;quot;invalid identifier&amp;quot; error when there were two measures with same cases going though event measure filter. (D-14845)&lt;br /&gt;
* Filter rules drag-and-drop didn&#039;t work between expressions in the same chart. (D-14850)&lt;br /&gt;
* Better error message is shown when invalid value is specified to dashboard aspect ratio flex, chart margin, dashboard margin, external content border width, or external content border corner radius. (D-14805)&lt;br /&gt;
* Improved error message when object-centric model perspective doesn&#039;t have the object type correctly defined. (D-14795)&lt;br /&gt;
&lt;br /&gt;
===Other improvements===&lt;br /&gt;
* Frontend components have been updated. (B-09028)&lt;br /&gt;
* Backend components have been updated. (B-09027)&lt;br /&gt;
&lt;br /&gt;
==Current Release: Additional release for QPR ProcessAnalyzer 2026.2 (build 10910) (released date 16.3.2026)==&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
* Filters report in System reports shows also other users&#039; private filters for admins. (B-09017)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
* Filter rules were lost when saving a filter with &amp;quot;Cases with specific events&amp;quot;, &amp;quot;Cases starting with&amp;quot; or &amp;quot;Cases ending to&amp;quot; rules. (D-14847)&lt;br /&gt;
* Fixed issue where object-centric models sometimes gave &amp;quot;Object &amp;lt;cachetablename&amp;gt; does not exist or not authorized&amp;quot; error. (D-14797)&lt;br /&gt;
* ExtractSap function didn&#039;t work with QPR ScriptLauncher when using secret for storing SAP password. (D-14813)&lt;br /&gt;
* Variation stepper incorrectly skipped steps when going down when variation count is maximum. (D-14844)&lt;br /&gt;
* Improved error message when creating model from filter fails. (D-14811)&lt;br /&gt;
* System dashboard names were incorrectly translated twice. (D-14841)&lt;br /&gt;
* AI Assistant had one translation missing. (D-14840)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2026.2 (build 10897) (released date 2026-02-26)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2026_2.pdf QPR_ProcessAnalyzer_2026_2.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Snowflake user-defined functions (UDF) used by QPR ProcessAnalyzer have been updated to use Python 3.13. Some of the old versions of the functions use Python 3.9 which has been deprecated by Snowflake. Although the old versions are not anymore used by QPR ProcessAnalyzer, they are not automatically deleted and thus Snowflake may send notifications about existing deprecated functions. It&#039;s recommended to remove the old functions which are following:&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V2&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V3&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V4&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V5&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V6&lt;br /&gt;
* QPRPA_UDF_BPMN_CONFORMANCE_VIOLATIONS_FLOWS&lt;br /&gt;
* QPRPA_UDF_BPMN_CONFORMANCE_VIOLATIONS_FLOWS_V2&lt;br /&gt;
* QPRPA_UDF_BPMN_CONFORMANCE_VIOLATIONS_FLOWS_V3&lt;br /&gt;
* QPRPA_UDF_BPMN_IS_CONFORMANT&lt;br /&gt;
* QPRPA_UDF_BPMN_IS_CONFORMANT_V2&lt;br /&gt;
* QPRPA_UDF_BPMN_IS_CONFORMANT_V3&lt;br /&gt;
* QPRPA_UDTF_CLUSTER&lt;br /&gt;
* QPRPA_UDTF_CLUSTER_V2&lt;br /&gt;
* QPRPA_UDTF_CLUSTER_V3&lt;br /&gt;
* QPRPA_UDTF_CLUSTER_V4&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
* Fully conformant [[QPR_ProcessAnalyzer_BPMN_Editor#Auto-creating_BPMN_Diagram_from_Eventlog|BPMN diagrams]] can be created from eventlogs with proper layout and identifying exclusive and parallel gateways. (B-08900)&lt;br /&gt;
* [[Object-Centric_Flowchart|Object-centric flowchart]] flows visibility can be controlled with a stepper based on top variations, and start and end symbols can be hidden for each event type. (B-08987)&lt;br /&gt;
* Added preset for object-centric flowchart, and improved Process Discovery dashboard usage for object-centric models. (B-08863)&lt;br /&gt;
* Viewer users can [[Filtering_in_QPR_ProcessAnalyzer#Saving_filters|save private filters]] for personal use. (B-08920)&lt;br /&gt;
* [[Chart_On-screen_Settings|On-screen settings]] support static and dynamic case/event attribute values selection, and [[Chart_Linked_Settings|linked settings]] can bind to on-screen settings. (B-08814)&lt;br /&gt;
* [[AI_Root_Causes|AI root causes analysis]] related error situations are easier to resolve with easier to understand error messages. (B-08997)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
* Histogram chart did not show at all and gave a JavaScript error. (D-14801)&lt;br /&gt;
* When chart with multiple series was sorted by measure, some datapoints were not shown when visible X-axis was limited by zooming or Custom layout settings. (D-14793)&lt;br /&gt;
* Disabled filter rules were incorrectly applied for the shown items in the filter rule editing dialog. (D-14791)&lt;br /&gt;
* If there were more than one Range filter components in dashboard, periods menu incorrectly affected all of them. (D-14818)&lt;br /&gt;
* List of event types in object-centric flowchart settings didn&#039;t open if there were object types linked to none events. (D-14798)&lt;br /&gt;
* Snowflake flowchart root causes analysis gave &amp;quot;SQL compilation error&amp;quot; when run with case duration criteria. (D-14790)&lt;br /&gt;
* Term &amp;quot;Second&amp;quot; when meaning time unit was translated incorrectly in French. (D-14803)&lt;br /&gt;
* OpenTelemetry metrics were not sent to Prometheus correctly. (D-14804)&lt;br /&gt;
* Opening script editor by url didn&#039;t show project path and also javascript error appeared to console. (D-14794)&lt;br /&gt;
* Fixed issue where case attribute prediction failed when using more than one iteration. (D-14789)&lt;br /&gt;
* SQLDataFrame with several append operations had performance issue. (D-14772)&lt;br /&gt;
* Null coalescing operators didn&#039;t work correctly in chaining in expression language. (D-14762)&lt;br /&gt;
* Native app could not call procedure if project referred to other database and schema. (D-14749)&lt;br /&gt;
* Trying to create script with duplicate name gave unclear error: Cannot insert duplicate key row in object &#039;dbo.PA_SCRIPT&#039; with unique index &#039;PA_SCRIPT_UNIQUE_NAME_IN_PROJECT&#039;. (D-14784)&lt;br /&gt;
* BPMN editor popup menu was partly hidden behind other chart components. (D-14345)&lt;br /&gt;
* When going to context menu report from BPMN editor, &amp;quot;Operation was cancelled by a user&amp;quot; was given when query was in progress. (D-14807)&lt;br /&gt;
* BPMN editor tooltips measure descriptions didn&#039;t disappear at all. (D-14809)&lt;br /&gt;
* Presets benchmarking didn&#039;t work for models without case attributes. (D-14822)&lt;br /&gt;
* Object-centric filter rule editor gave javascript error when opened for case-centric model. (D-14799)&lt;br /&gt;
* Object-centric filter rule could incorrectly be dropped as root causes comparison rule. (D-14796)&lt;br /&gt;
* Localization missing for &amp;quot;Save as new filter&amp;quot; button. (D-14839)&lt;br /&gt;
&lt;br /&gt;
===Other improvements===&lt;br /&gt;
* SQL queries run in Snowflake have been further optimized. (B-08936)&lt;br /&gt;
* Snowflake stored procedures and user defined functions have been migrated to Python 3.13. (B-08984)&lt;br /&gt;
* Frontend components have been updated. (B-08991)&lt;br /&gt;
* Backend components have been updated. (B-08990)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2026.1 (build 10870) (released date 2026-01-19)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2026_1.pdf QPR_ProcessAnalyzer_2026_1.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
QPR ProcessAnalyzer Server and QPR ScriptLauncher are running on .NET 10, replacing the previous .NET 8 version. When updating to this release, make sure to install the .NET 10 Runtime ([[Updating_QPR_ProcessAnalyzer_Server|update instructions]]). While .NET 8 and .NET 10 can run side by side, .NET 8 does not need to be removed immediately. However, for security reasons, any unused .NET 8 installation should be uninstalled as soon as possible after the update.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Known issue: The histogram visualization doesn&#039;t work in this release. The issue will be fixed in the next release. Possible workaround is to use the column chart where to set no spacing between columns. This can be configured with the following [[QPR_ProcessAnalyzer_Chart#:~:text=Custom%20Layout|Custom Layout]] settings:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;plotOptions&amp;quot;: {&lt;br /&gt;
		&amp;quot;series&amp;quot;: {&lt;br /&gt;
			&amp;quot;pointPadding&amp;quot;: 0,&lt;br /&gt;
			&amp;quot;groupPadding&amp;quot;: 0&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*Object-centric models support versatile [[Filtering_in_QPR_ProcessAnalyzer|object-centric filters]] based on case-centric filter rules using perspective. (B-08595)&lt;br /&gt;
*[[AI_Root_Causes|AI Root Causes analysis]] is shown in a hierarchy for easier readability. (B-08921)&lt;br /&gt;
*[[Process_Flowchart|Case-centric flowchart]] performance has been improved by making all queries simultaneously. (B-08916)&lt;br /&gt;
* Object counts indicator is hidden for object-centric models when perspective is not set. (B-08825)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
* Filter to exclude case attribute values incorrectly excluded null values even if null wasn&#039;t selected. (D-14773)&lt;br /&gt;
*Prediction generated invalid models where case IDs in events datatable didn&#039;t exist in cases datatable. (D-14758)&lt;br /&gt;
* AI Root Causes presets didn&#039;t work with models without case attributes. (D-14759)&lt;br /&gt;
* Snowflake query with multiple columns with aggregations and Coalesce function gave &amp;quot;invalid identifier&amp;quot; error. (D-14763)&lt;br /&gt;
*Dropdown list to add business calendar holidays from other model shows empty items. (D-14786)&lt;br /&gt;
*In-memory Average function didn&#039;t work when aggregating dates using model&#039;s Attribute function. (D-14761)&lt;br /&gt;
*Sometimes opening models list gave error &amp;quot;User doesn&#039;t have permission GenericRead to model&amp;quot;. (D-14742)&lt;br /&gt;
&lt;br /&gt;
===Other improvements=== &lt;br /&gt;
*[[QPR_ProcessAnalyzer_Security_Hardening#Added_HTTP_Headers|Content-security-policy]] img-src blob: directive has been restored for Highcharts image export. (B-08904)&lt;br /&gt;
*Backend components have been updated [[Updating_QPR_ProcessAnalyzer_Server|including .NET 10]]. (B-08926)&lt;br /&gt;
*Frontend components have been updated. (B-08927)&lt;br /&gt;
&lt;br /&gt;
==Additional release for QPR ProcessAnalyzer 2025.7 (build 10845) (released 2025-12-11)==&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*QPR ProcessAnalyzer can be deployed on-premise using [[Deploy_QPR_ProcessAnalyzer_from_Container|Linux containers]]. (B-08915)&lt;br /&gt;
*Snowflake SQL queries have been simplified to improve performance, e.g., when quering flows. (B-08901)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues=== &lt;br /&gt;
*ODBC and Loading script models, and models with calculated attributes didn&#039;t allow to create or modify case and event attribute filters from header. (D-14751)&lt;br /&gt;
*Fixed incompatibility issue when using Keycloak as identity provider for SAML authentication. (D-14757)&lt;br /&gt;
*System report for users incorrectly listed some users with read-only permissions as Developers (issue with the EffectivePermissionTypesFor function). (D-14748)&lt;br /&gt;
*Referrer-Policy HTTP header was incorrectly set to &amp;quot;same-origins&amp;quot; causing browser console error in Windows deployments. (D-14736)&lt;br /&gt;
*Fixed issue where QPR ProcessAnalyzer request ID was not added to Snowflake data modification queries. (D-14728)&lt;br /&gt;
*Login request duration was incorrectly shown as zero or negative in System reports. (D-14737)&lt;br /&gt;
*In chart settings, some Snowflake measures with aggregations were missing possibility to define percentile value. (D-14276)&lt;br /&gt;
*Fixed issue where it was not possible to delete a model with same name in the same project during the same session. (D-14708)&lt;br /&gt;
*Script editor to specific script can now be opened with a direct url containing the script_editor parameter. (D-14745)&lt;br /&gt;
*Fixed issue were sometimes an incorrect error code was given for a cancelled query. (D-14755)&lt;br /&gt;
*Improved error message if model loading fails when loading script returns incorrect type of data. (D-14637)&lt;br /&gt;
*Fixed issue where variations query with sampling was slow for new models. (D-14729)&lt;br /&gt;
*Added tooltip to gantt chart&#039;s table layout header so that the header text can be fully seen. (D-13748)&lt;br /&gt;
*Switching between Snowflake and in-memory chart by adjusting chart configuration json caused some items in chart settings to appear twice. (D-14667)&lt;br /&gt;
*Selecting model in dashboard when previously there was no model selected and going back to Workspace, gave error message. (D-14735)&lt;br /&gt;
*Query Designer gave untranslated error message: &amp;quot;You don&#039;t have permissions to model ...&amp;quot;. (D-14727)&lt;br /&gt;
*Query Designer gave untranslated error message &amp;quot;Unable to use Snowflake tables as data source for in-memory query&amp;quot;. (D-14683)&lt;br /&gt;
*In Query Designer, table column menu gave JavaScript error for columns where first row was null. (D-14684)&lt;br /&gt;
*Query Designer incorrectly gave message &amp;quot;There are no columns in the data&amp;quot; when the data had no rows. (D-14692)&lt;br /&gt;
*Fixed issue in Manage Users dialog where row selections disappeared when resizing the dialog. (D-14647)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.7 (build 10821) (released 2025-11-13)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_7.pdf QPR_ProcessAnalyzer_2025_7.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Known issue: Creating case and event attribute filters in dashboards is not possible from the main header for the following types of in-memory models and attributes:&lt;br /&gt;
*Any attributes for [[QPR_ProcessAnalyzer_Model_Datasources#ODBC_Datasource|ODBC loaded models]]&lt;br /&gt;
*Any attributes for [[QPR_ProcessAnalyzer_Model_Datasources#Loading_Script|Loading script models]]&lt;br /&gt;
*Calculated attributes in any in-memory models.&lt;br /&gt;
&lt;br /&gt;
Workaround is to create the filter rule in a chart&#039;s settings and drag-and-drop it to the header. The issue has been fixed by the next release (D-14751). The issue does not concern Snowflake models.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features ===&lt;br /&gt;
*Presets added for [[AI_Root_Causes|AI Root Causes analysis]] based on Snowflake Top Insights which is a decision tree model finding combinations of root cause contributors. (B-08889)&lt;br /&gt;
*Added new [[Range_Filter|filter selector]] component to dashboards to easily create date and number range filters. (B-08877)&lt;br /&gt;
*Projects can be browsed in the [[Navigation_Menu|navigation menu]] to access all dashboards, and also organized the menu into two columns. (B-08708)&lt;br /&gt;
*When QPR ProcessAnalyzer is [[Embed_to_Website|embedded to a website]], SAML authentication is performed in a separate window for more robust operation. (B-08871)&lt;br /&gt;
*For more flexible options, [[AI_Agent|AI Agents]] runs the language model query using the Snowflake account where the selected model is located. (B-08860)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*If DefaultUiLanguage in PA_CONFIGURATION table was not defined, users who haven&#039;t changed language could not login. (D-14706)&lt;br /&gt;
*Improved performance in opening dashboard. (D-14705)&lt;br /&gt;
* Snowflake Native App didn&#039;t show the version number and build timestamp correctly. (D-14703)&lt;br /&gt;
*Snowflake Native App activation failed with a custom compute pool if container service was in the suspended state. (D-14722)&lt;br /&gt;
*Server stuck when trying to generate SQL for SqlDataFrame having multiple columns with the same name. (D-14730)&lt;br /&gt;
*In eventlog prediction, fixed issues preventing the usage of case attribute value prediction. (D-14702)&lt;br /&gt;
*Snowflake DurationBetweenDates function calculated incorrectly when used in a in divisor. (D-14723)&lt;br /&gt;
* Import now succeeds when importing Snowflake datatables refering to data without access. (D-14694)&lt;br /&gt;
*Fixed incorrect color in table column filters, and Workspace loading time has been improved. (D-14704)&lt;br /&gt;
* Fixed issue where dropdown list with projects showed &amp;quot;undefined&amp;quot; in place of project id. (D-14659)&lt;br /&gt;
*Fixed issue where specifying a secret name longer than 440 characters, prevented saving the secret and resulted in an error. (D-14674)&lt;br /&gt;
* SAML authentication failed when it needed to create a new user to QPR ProcessAnalyzer. (D-14717)&lt;br /&gt;
* Fixed issue where SQL dataframe queries didn&#039;t work if the root expression ended to a semicolon. (D-14714)&lt;br /&gt;
*Specific Snowflake query with a comparison criteria, AggregateFrom and GetValueFrom functions gave error about invalid identifier. (D-14718)&lt;br /&gt;
&lt;br /&gt;
===Other improvements=== &lt;br /&gt;
*[[QPR_ProcessAnalyzer_Security_Hardening#HTTP_Response_Headers|Content-Security-Policy HTTP header]] has been reduced to more secure by removing the script-src &#039;unsafe-eval&#039; and img-src &#039;blob&#039; directives. (B-08897)&lt;br /&gt;
*Added [[QPR_ProcessAnalyzer_Security_Hardening#HTTP_Response_Headers|security related HTTP headers]]: X-Permitted-Cross-Domain-Policies, Cross-Origin-Embedder-Policy, Cross-Origin-Opener-Policy, Cross-Origin-Resource-Policy, Referrer-Policy, and Permissions-Policy. (B-08879)&lt;br /&gt;
*Implemented backend support for Snowflake Top Insights for [[SqlDataFrame_in_Expression_Language#:~:text=TopInsights|AI root causes analysis]]. (B-08664)&lt;br /&gt;
*Implemented improved error handling when trying to save too long text to database. (B-08892)&lt;br /&gt;
*For more understandable error messages, error handling and error message generation have been refactored. (B-08754)&lt;br /&gt;
*Optimized database queries and reduced log writing. (B-08870)&lt;br /&gt;
*Frontend components have been updated. (B-08899)&lt;br /&gt;
*Backend components have been updated. (B-08898)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.6 (build 10690) (released 2025-10-01)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_6.pdf QPR_ProcessAnalyzer_2025_6.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Known issue: If the [[PA_Configuration_database_table#:~:text=DefaultUiLanguage|DefaultUiLanguage]] system configuration is not defined, users who haven&#039;t changed their own language, are unable to login. To prevent this problem, please ensure the DefaultUiLanguage is defined. The next release has fixed this issue (D-14706).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Content-Security-Policy (CSP) HTTP header has been updated to enhance security by implementing more restrictive settings. The following directives have been added:&lt;br /&gt;
*object-src &#039;none&#039;&lt;br /&gt;
*frame-ancestors &#039;self&#039;&lt;br /&gt;
*form-action &#039;none&#039;&lt;br /&gt;
*base-uri &#039;none&#039;&lt;br /&gt;
*worker-src blob:&lt;br /&gt;
&lt;br /&gt;
These new restrictions may affect usage that has previously been possible. For example, with the new settings, QPR ProcessAnalyzer can be embedded to a website only within the same origin. For detailed instructions on embedding QPR ProcessAnalyzer on a different website, please refer to [[Embed_to_Website|this quide]]. Additionally, for information on modifying the CSP settings, see documentation for [[QPR_ProcessAnalyzer_Security_Hardening#HTTP_Response_Headers|security hardening]].&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
In the QPR ProcessAnalyzer 2025.6 Native App, the release version number is not displayed correctly in the User Settings dialog. This omission does not have any other complications. QPR ProcessAnalyzer 2025.6 is the only release with this issue, making it possible to identify this release despite the missing version number. This issue is specific to the Native App only. The next release has fixed this issue (D-14703).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*[[User_Settings#Starting_dashboard|Starting dashboard]] after login can be defined for user groups, allowing to create customized starting pages for easy navigation. (B-08791)&lt;br /&gt;
*Snowflake [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|chart&#039;s event filters]] are now embedded to filters created from chart, to precisely follow chart calculation. (B-08845)&lt;br /&gt;
*Result data can be filtered in Snowflake charts using [[QPR_ProcessAnalyzer_Chart#:~:text=Result%20filtering%20expression|result filtering expression]] which works for any datasets. (B-08751)&lt;br /&gt;
*Filter rules order now stays the same when making filter selections and confirming filter. (B-08801)&lt;br /&gt;
*Added model setting [[QPR_ProcessAnalyzer_Project_Workspace#Hiding_Object_Count_Statistics|Show object count statistics]] to hide object counts information in dropdown lists to optimize performance. (B-08849)&lt;br /&gt;
*Added support for [[Chart_On-screen_Settings#:~:text=showStatistics|hiding statistics for on-screen setting]] dropdown lists to improve performance, and in addition the case ID is hidden Case/Event attribute profiling presets. (B-08840)&lt;br /&gt;
*Added following audit fields to users and groups: Created date, Created by, Last modified date, and Last modified by. (B-08792)&lt;br /&gt;
*Snowflake Native App: Added procedure to that [[QPR_ProcessAnalyzer_Native_App_in_Snowflake#Recover_administrator_access|creates administrator user to Native App]] if access to the app has been lost. Also, prevented user management operations that remove own access. (B-08733)&lt;br /&gt;
*Snowflake Native App: Added procedure to [[Change_Native_App_Compute_Pool_Size|change Native App compute pool size]]. Changed new Native Apps to use CPU_X64_S size compute pool, and improved Native App stability. (B-08859)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues=== &lt;br /&gt;
*Snowflake Cortex based AI Assistant didn&#039;t show the results table. (D-14643)&lt;br /&gt;
*When percent stacking is used, Y-axis values are now shown as percentages in data label and tooltip. (D-14633)&lt;br /&gt;
*Fixed issue where Label&amp;amp;Link component had sometimes unnecessary vertical scrollbar. (D-14685)&lt;br /&gt;
*Model validation showed incorrect error message for models with numeric duplicate case ID&#039;s. (D-14687)&lt;br /&gt;
*In Workspace, scripts &amp;quot;View current run log&amp;quot; dialog didn&#039;t update log correctly when new entries were added. (D-14662)&lt;br /&gt;
*Event type mapping in charts didn&#039;t work in object-centric models. (D-14620)&lt;br /&gt;
*Model generation didn&#039;t work as transformation step using _system.ML.ApplyTransformation function. (D-14654)&lt;br /&gt;
*Others aggregation has been removed from date type of dimensions because tables don&#039;t work with textual data in date columns. (D-14623)&lt;br /&gt;
*Fixed issue in AI Assistant where using both Snowflake Cortex and OpenAI modes caused error. (D-14646)&lt;br /&gt;
*In User Management Effective permissions table, column filter incorrectly showed &amp;quot;true&amp;quot; and &amp;quot;false&amp;quot; as options. (D-14639)&lt;br /&gt;
*Pivot table incorrectly showed &amp;quot;Numeric value is not recognized&amp;quot; error when Count or Unique count aggregations were used. (D-14559)&lt;br /&gt;
*Workspace buttons are now visible in small screens spanning to multiple lines. (D-14587)&lt;br /&gt;
*Added tooltip text to &amp;quot;Move to&amp;quot; submenu containing projects so that long project names can be seen. (D-14612)&lt;br /&gt;
*Translation was missing from error messages when deleting items from recycle bin. (D-14652)&lt;br /&gt;
*Fixed data type related issues with in-memory Floor, Ceiling and aggregation functions. (D-14622)&lt;br /&gt;
*Optimized resource loading by getting rid of unnecessary file assets/i18n/en_US.json. (D-14641)&lt;br /&gt;
*Fixed issue where opening script editor gave javascript error about content-security-policy violation. (D-14627)&lt;br /&gt;
*Fixed issue in charts showing datatable content had a strange error when datatable was not selected. (D-14650)&lt;br /&gt;
*Fixed incorrect data types in some project, user and group related measures. (D-14619)&lt;br /&gt;
* Fixed issue where moving expression scripts was not possible when SQL Scripting was not allowed. (D-14624)&lt;br /&gt;
*Deleting and renaming scripts were not available for expression scripts when SQL Scripting was not allowed. (D-14625)&lt;br /&gt;
*Improved documentation for situation when non-existing Snowflake warehouse is configured for a model. (D-14543)&lt;br /&gt;
*Project properties dialog shows a descriptive text when no secrets have been defined instead of an empty table. (D-14611)&lt;br /&gt;
* Improved messages and New project button visibility in Workspace top level when no projects are shown. (D-14609)&lt;br /&gt;
*Event preset gave error if enabling Apply with Chart Filters setting and trying to create filters. (D-14695)&lt;br /&gt;
&lt;br /&gt;
===Other improvements===&lt;br /&gt;
*Added QPR ProcessAnalyzer API request ID to Snowflake queries to easily find matching query in Snowflake query history. (B-08839)&lt;br /&gt;
*[[QPR_ProcessAnalyzer_Security_Hardening#Added_HTTP_Headers|Content Security Policy HTTP header]] includes now object-src, frame-ancestors, form-action, base-uri, and worker-src. (B-08794)&lt;br /&gt;
*Snowflake queries have been optimized by removing null and empty string checks from mapped columns as they are now handled by the model validation check. (B-08837)&lt;br /&gt;
*Added backend support for object-centric model filtering based on case-centric filter rules. (B-08836)&lt;br /&gt;
*Frontend components have been updated. (B-08851)&lt;br /&gt;
*Backend components have been updated. (B-08852)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.5 (build 10361) (released 2025-08-21)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_5.pdf QPR_ProcessAnalyzer_2025_5.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
When using Snowflake Cortex, the AI Assistant is not showing the results table in the assistant&#039;s response. This issue has been fixed by the next release.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===  &lt;br /&gt;
*[[Object-Centric_Flowchart|Object-centric flowchart]] can also use object-to-object relations to link events and objects simplifying event-to-object configuration. (B-08671)&lt;br /&gt;
*[[AI_Assistant_for_QPR_ProcessAnalyzer|AI Assistant]] can provide precise quantitative analysis by making queries to eventlog data (powered by Snowflake Cortex Analyst and Agents). (B-08652)&lt;br /&gt;
*[[Filtering_in_QPR_ProcessAnalyzer|Flows and variations can be filtered]] from any event attribute viewpoint in Snowflake. (B-08737)&lt;br /&gt;
* Added [[Project_Properties_Dialog|project properties dialog]] for viewing project information, changing Snowflake connection settings and project secrets. (B-08655)&lt;br /&gt;
*[[QPR_ProcessAnalyzer_Project_Workspace#Validating_Model|Model validity check]] easily detects technically invalid models and shows detailed reason for invalidity. (B-08624)&lt;br /&gt;
*Projects can be [[QPR_ProcessAnalyzer_Project_Workspace#Exporting_Project|exported]] to json files and imported as new projects. (B-08717)&lt;br /&gt;
*Action buttons can be added to dashboard by defining [[Label_and_Link|label component]] that can change dashboard variables and run scripts. (B-08694)&lt;br /&gt;
*Web user interface is available in [[Languages_and_Localization|Ukrainian language]]. (B-08734)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Fixed following error when performing client-side SAP import: Could not find a part of the path (QPR_ImportSource_Chunk_*.tmp). (D-14589)&lt;br /&gt;
*Fixed issue where ManageProjects permission was incorrectly required when running scripts using QPR ScriptLauncher non-legacy mode. (D-14562)&lt;br /&gt;
*Fixed following error when using SAP import from SQL script called from expression language called from SQL: The given key &#039;&#039; was not present in the dictionary. (D-14593)&lt;br /&gt;
*Some analyses didn&#039;t work, when case ID columns for cases and events datatables differed only in upper/lowercase letters. (D-14556)&lt;br /&gt;
*Business calendar didn&#039;t work for some measures/dimensions/columns and some had business calendar checkboxes missing. (D-14563)&lt;br /&gt;
*Prediction failed to following error: transformer_model_next_activity/event_year_input_embedding. (D-14551)&lt;br /&gt;
*Scripting now works correctly after rows from PA_OPERATION_STATUS table have been deleted. (D-14545)&lt;br /&gt;
*Fixed issue where case-centric flowchart was very slow for object-centric model. (D-14544)&lt;br /&gt;
*Prevented creating dashboards, models and scripts with duplicate names in the same project. (D-09480)&lt;br /&gt;
*KPI Card now shows line breaks correctly in textual values. (D-14546)&lt;br /&gt;
*Improved table Excel export for list data to show items with separator character instead of showing as JSON. (D-14479)&lt;br /&gt;
*Column showing non-conformance reason was incorrectly aligned to right. (D-14570)&lt;br /&gt;
*GetRelatedValueFrom function caused column name conflict when used multiple times in same query. (D-14591)&lt;br /&gt;
* Fixed issue where in-memory sorting for arrays gave &amp;quot;Error in sorting analysis result rows possibly due to multiple types of values ...&amp;quot;. (D-14592)&lt;br /&gt;
*Array type of values were shown incorrectly when used Last Row Aggregates Over-limit Rows setting. (D-14616)&lt;br /&gt;
*Fixed the &amp;quot;Most common&amp;quot; text aggregation sorting error for in-memory calculation. (D-14573)&lt;br /&gt;
*Snowflake model validation gave incorrect error message when mapped column didn&#039;t exist in datatable. (D-14565)&lt;br /&gt;
*Improved model validation to detect when connection string key for model or datatable does not exist. (D-14607)&lt;br /&gt;
* Model validation gave incorrect error when when events datatable case id mapping was missing. (D-14566)&lt;br /&gt;
*Model validation gave incorrect error message when cases and events datatables were in different datasources. (D-14567)&lt;br /&gt;
*Model validation gave incorrect error message when underlying Snowflake table didn&#039;t exist. (D-14568)&lt;br /&gt;
*Workspace Card/Table mode toggle buttons were not translated. (D-14547)&lt;br /&gt;
*Some invalid queries gave unexpected errors and strange outputs. (D-14569)&lt;br /&gt;
* Added translations to model notifications preview table headers. (D-14590)&lt;br /&gt;
* Added translations to access denied message for header object counts indicator. (D-13967)&lt;br /&gt;
* AI Assistant explaining charts speaks now user interface language. (D-14578)&lt;br /&gt;
* AI Agent prompt chart editor didn&#039;t show correctly if model was not selected. (D-14536)&lt;br /&gt;
*AI Assistant gave &amp;quot;Unsupported cache table type&amp;quot; error when trying to explain object-centric flowchart. (D-14477)&lt;br /&gt;
&lt;br /&gt;
===Other improvements ===&lt;br /&gt;
*When trying to open dashboard with an invalid model, the precise model validation error message is shown. (B-08629)&lt;br /&gt;
*Account locked message is now same as username/password incorrect to prevent account enumeration attack. (B-08740)&lt;br /&gt;
*Stringified value format supports also json objects. (B-08766)&lt;br /&gt;
*Event attribute used as event type can be defined for flow and variation filters in Snowflake models (backend support). (B-08705)&lt;br /&gt;
*Translations have been updated. (B-08757)&lt;br /&gt;
*Frontend components have been updated. (B-08760)&lt;br /&gt;
*Backend components have been updated. (B-08759)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.4 (build 9985) (released 2025-05-28)==&lt;br /&gt;
&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_4.pdf QPR_ProcessAnalyzer_2025_4.pdf]&lt;br /&gt;
&lt;br /&gt;
===New features ===&lt;br /&gt;
*Added new AI Agent presets analyzing current state and proposing improvements based on different viewpoints, such as Event and Case Counts, Automation, Bottlenecks, and Root Causes. (B-08710)&lt;br /&gt;
*Added a [[Filter_Selectors#Filter_selector|generic filtering component]] that can be configured for creating any type of filters for distinct values. (B-08654)&lt;br /&gt;
*Volume declining in measures due to case sampling can be compensated in chart and flowchart by using a [[Measure,_Dimension_and_Column_Settings#Statistical_calculations|Statistical calculation method]]. (B-08598)&lt;br /&gt;
*In object-centric models, Object ID, Event ID, Event timestamp, and Event type [[Object-centric_Process_Mining_Model#Object-centric_perspectives|attribute names]] are shown correctly. (B-08680)&lt;br /&gt;
*Snowflake native app has now [[QPR_ProcessAnalyzer_Native_App_in_Snowflake#User_access_to_application|application roles]] for user (for using app) and administrator (for managing app). (B-08660)&lt;br /&gt;
*For Snowflake native app, IMPORTED PRIVILEGES ON SNOWFLAKE DB privilege is removed and instead the [[QPR_ProcessAnalyzer_Native_App_in_Snowflake#Optional_privilege_for_AI_Agent|CORTEX_USER database role]] can be assigned. (B-08718)&lt;br /&gt;
*[[QPR_ProcessAnalyzer_Native_App_in_Snowflake#Logging|Native app logging]] has been improved and now sharing application logs with QPR is possible. (B-08661)&lt;br /&gt;
* Added [[DataFrame_in_Expression_Language#CsvToDataFrame|CsvToDataFrame]] function to expression language to convert textual CSV data into in-memory dataframe. (B-08246)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Fixed &amp;quot;Invalid identifier&amp;quot; error when opening attribute selection list for case attribute preset caused by object id columns which differed only by letter capitalization. (D-14539)&lt;br /&gt;
*When Image component is clicked in dashboard edit mode, the component is now selected instead of link followed. (D-14525)&lt;br /&gt;
*Filters created from dimensions having dimension-specific filter rules will now create expression filter rule where dimensions-specific filter is embedded, for accurately following the selection. (D-14499)&lt;br /&gt;
*Filtering variations or list of event attribute values didn&#039;t work in in-memory models. (D-14476)&lt;br /&gt;
*Fixed issue where AI Agent didn&#039;t update when dashboard variable changed used by prompt chart. (D-14537)&lt;br /&gt;
* Fixed issue where some statistical calculations inadvertently changed row order when applying in groups. (D-14495)&lt;br /&gt;
*In in-memory models, array type of data was not dimensioned correctly. (D-14518)&lt;br /&gt;
* AI Agent Process Variations preset gave &amp;quot;division by zero&amp;quot; error when there were zero cases. (D-14508)&lt;br /&gt;
*Table grouping header labels were not formatted correctly. (D-14514)&lt;br /&gt;
*Fixed Root causes analysis to work with object-centric models. (D-14515)&lt;br /&gt;
*Filtering by OcelObjectId didn&#039;t work when model didn&#039;t have object type table for perspective used in filter. (D-14522)&lt;br /&gt;
*Fixed Root causes analysis with weighting expression to work with object-centric models. (D-14517)&lt;br /&gt;
*Fixed issue where persisting query results where query is started from datatable having custom table name overwrote data in original table. (D-14528)&lt;br /&gt;
*Flowchart SVG export did not show start and end symbols. (D-12401)&lt;br /&gt;
*Fixed issue where join operation didn&#039;t find renamed columns in SqlDataFrames. (D-14512)&lt;br /&gt;
*Improved chart filtering button positions to work with small chart sizes. (D-14509)&lt;br /&gt;
*Datatable foreign key columns dictionary data type was incorrect preventing reading columns information. (D-14505)&lt;br /&gt;
*Workspace scripts editor allowed to change script code for viewer users (altough not save it). (D-14534)&lt;br /&gt;
* In chart custom sorting, trying to refer to measure that had None aggregation, caused SQL compilation error. (D-14526)&lt;br /&gt;
*Model validation check crashed when the datatables were in different datasources. (D-14502)&lt;br /&gt;
&lt;br /&gt;
===Other improvements=== &lt;br /&gt;
*Added expression language functions for using Snowflake Cortex Agents with Cortex Analyst access to query eventlogs. (B-08647)&lt;br /&gt;
*Projects can be export and imported in JSON format containing dashboards, models, datatables and scripts. (B-08613)&lt;br /&gt;
*Simplified object-centric model queries by accepting OcelObjectId as object attribute name in filters. (B-08702)&lt;br /&gt;
*Streamlined import API by removing importMode parameter and changing default fileType to CSV. (B-08704)&lt;br /&gt;
*Frontend components have been updated. (B-08695)&lt;br /&gt;
*Backend components has been updated. (B-08696)&lt;br /&gt;
&lt;br /&gt;
==Additional release for QPR ProcessAnalyzer 2025.3 (build 9805) (released 2025-04-30)==&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*Navigation menu is now displaying dashboards from open dashboard&#039;s project or from selected Workspace project (earlier dashboards were shown from the selected model&#039;s project). (B-08673)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues === &lt;br /&gt;
*Fixed issue where AI Agent made unnecessary queries when filtering dashboard, and also opening dashboard with lot of chart may have been slow. (D-14503)&lt;br /&gt;
*When datatable columns were modified, queries to the data may have given &amp;quot;Invalid identifier&amp;quot; error. (D-14507)&lt;br /&gt;
*Clustering analysis didn&#039;t work with object-centric models. (D-14486)&lt;br /&gt;
*When a new groups is added, it&#039;s selected by default in the Manage Users dialog. Also clicking a selected group does not deselect it. (D-14491)&lt;br /&gt;
*Deleting last group didn&#039;t remove the group from the list. (D-14504)&lt;br /&gt;
&lt;br /&gt;
==Additional release for QPR ProcessAnalyzer 2025.3 (build 9725) (released 2025-04-23)==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
There is an issue causing some dashboards having more than 50 charts to open slowly. The issue has been fixed in the next release by D-14503.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Fixed Issues=== &lt;br /&gt;
*Fixed issue where system stopped responding after opening Scripts tab several times (error in logs: Timeout expired prior to obtaining a connection from the pool). (D-14506)&lt;br /&gt;
*Fixed issue where the object-centric models object types tables didn&#039;t work without the timestamp column. (B-08683)&lt;br /&gt;
*Snowflake cache tables are now created after initiating calculation is completed to improve performance. (D-14460)&lt;br /&gt;
*Fixed issue in User Management where assigning role to project or adding user to group was not saved when there was a column filter. (D-14124)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.3 (build 9699) (released 2025-04-16)==&lt;br /&gt;
&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_3.pdf QPR_ProcessAnalyzer_2025_3.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
There is a potentially serious issue that can cause the system to stop responding, when opening the Scripts tab in the Workspace. The issue has been fixed in the next release (build 9725) by D-14506.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Object-centric model simplification in the story B-08667 (object attributes can only have a single value) doesn&#039;t work with this release. The issue has been fixed in the next release (build 9725) by B-08683.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*Enhanced [[AI Agent]] with UI for editing prompt datasets, and added checkbox to include other charts in dashboard to prompt. (B-08641)&lt;br /&gt;
*In [[Object-centric_Process_Mining_Model|object-centric models]], object-to-object relations are now followed by traversing once all object types. (B-08606)&lt;br /&gt;
*In object-centric models, event type and object type tables are not mandatory anymore, and common attributes can be specified in events and objects tables. (B-08663)&lt;br /&gt;
*Object-centric models support simplified structure where object attributes can only have a single value. (B-08667)&lt;br /&gt;
*Object relation steps setting can be empty to traverse all linked objects in the object-centric model. (B-08668)&lt;br /&gt;
*Snowflake Event Types preset has been improved by adding suggestion of desired and undesired activities based on frequency of occurrence. (B-08656)&lt;br /&gt;
* Added checkbox for [[Measure,_Dimension_and_Column_Settings#Advanced_settings|disabling filtering]] for individual dimensions or columns. (B-08589)&lt;br /&gt;
*Case and event attributes dropdown lists show number of unique values in Snowflake models (instead of attribute datatype as previously). (B-08316)&lt;br /&gt;
*[[SAML_2.0_Federated_Authentication|SAML authentication]] can now synchronize user groups from identity provider. (B-08612)&lt;br /&gt;
*Groups can be [[Manage_Users_and_Groups#Deleting_Group|deleted]] in user management. (B-08330)&lt;br /&gt;
*[[Storing_Secrets_for_Scripts|Secrets]] can be defines as global that can be used by all projects. To set global secrets, [[Generic_Functions_in_QPR_ProcessAnalyzer#SetSecret|SetSecret]] function works also in the generic context. (B-08599)&lt;br /&gt;
*Snowflake [[Clustering_Analysis|Clustering analysis]] shows now number of event occurrences as features describing clusters. (B-08353)&lt;br /&gt;
*Model validity check has been extended to find issues in the eventlog data for Snowflake case-centric models. (B-07910)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Fixed a potential issue which could have leaked database connections and caused connection pool starvation. (D-14414)&lt;br /&gt;
*Renewed self-signed certificate used by SAML 2.0 authentication with ten years of validity. (D-14424)&lt;br /&gt;
*Improved CallWebService function to send request body when using DELETE method. (D-14488)&lt;br /&gt;
* Login page now shows correct error message when there are serious system errors during login. (D-14480)&lt;br /&gt;
*&amp;quot;Datatable contents (in-memory)&amp;quot; option now works also with Snowflake datatables. (D-14391)&lt;br /&gt;
*Added maximum data size limitation to AI assistant to avoid error with large datasets. (D-14419)&lt;br /&gt;
*Day of the Year/Week/Month/Quater selection didn&#039;t work with specific event time in in-memory chart. (D-14421)&lt;br /&gt;
*KPI card now shows a scrollbar when content doesn&#039;t fit to the available space. (D-13428)&lt;br /&gt;
* Workspace projects hierarchy tooltips didn&#039;t show special characters correctly. (D-14430)&lt;br /&gt;
*BPMN editor crashed when creating filter from tasks giving following error: Cannot read properties of null (reading &#039;querySelector&#039;). (D-14399)&lt;br /&gt;
*Value expressions didn&#039;t work that are referred in dimension and containing aggregation. (D-13624)&lt;br /&gt;
* Fixed issue where object-centric flowchart filter selection gave error when case-centric model was selected. (D-14408)&lt;br /&gt;
*Fixed issue where query to non-existing model incorrectly returned &amp;quot;Sequence contains no elements&amp;quot;. (D-14402)&lt;br /&gt;
*Incorrect StringifiedValues in chart settings and expression filter rule caused UI to stuck. (D-14485)&lt;br /&gt;
*Table column filter value list didn&#039;t show the null value label correctly. (D-13844)&lt;br /&gt;
*&amp;quot;Visualize list items with colors&amp;quot; setting didn&#039;t work with the &amp;quot;Last Row Aggregates Over-limit Rows&amp;quot; setting. (D-14357)&lt;br /&gt;
*Made sure that failed queries are not added to model filter cache. (D-14484)&lt;br /&gt;
*Chart settings crashed when trying to use without model selected giving following error: Cannot read properties of undefined (reading &#039;injectValue&#039;). (D-14395)&lt;br /&gt;
*Fixed issue where chart settings opened on top of full screen BPMN editor. (D-14472)&lt;br /&gt;
*Show details button in some error messages didn&#039;t have any effect when pressed. (D-14490)&lt;br /&gt;
*Model validation message was incorrect for model where other datatable is Snowflake and other SQL Server. (D-14475)&lt;br /&gt;
&lt;br /&gt;
=== Other improvements=== &lt;br /&gt;
*Logging has been set to Warning level for Native App to avoid excessive number of log entries to Snowflake events table. (B-08687)&lt;br /&gt;
*Datatable duplication is now synchronous in Snowflake until 30 seconds to avoid showing the created duplicate datatable with zero rows while the operation is still in progress. (B-08634)&lt;br /&gt;
*Improved Snowflake cache table creation logic when there are multiple simultaneous queries. (B-08622)&lt;br /&gt;
*Refactored SQL Server operations to improve robustness and avoid leaking database connections. (B-08649)&lt;br /&gt;
*Frontend components have been updated. (B-08638)&lt;br /&gt;
* Backend components have been updated. (B-08639)&lt;br /&gt;
*Translations have been updated. (B-08640)&lt;br /&gt;
&lt;br /&gt;
== Additional release for QPR ProcessAnalyzer 2025.2 (build 9476) (released 2025-03-19)==&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Fixed issue where charts axis labels had unnecessary line breaks on spaces. (D-14413)&lt;br /&gt;
*Fixed issue where AI Agent and LLMComplete function didn&#039;t work in Native App. (D-14410)&lt;br /&gt;
*Fixed translations for Workspace Scripts tab column filter for Status and Result columns. (D-14393)&lt;br /&gt;
*Fixed issue where Volume Distribution of Flow Analyzed object type didn&#039;t work. (D-14390)&lt;br /&gt;
*Removed reference to fonts.googleapis.com for stylesheets to avoid content-security-policy error. (D-14373)&lt;br /&gt;
* Syncfusion dialog headers now show special characters correctly. (D-14407)&lt;br /&gt;
*Object attribute filter gave null reference error when object type didn&#039;t exist in model. (D-14379)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.2 (build 9410) (released 2025-03-05)==&lt;br /&gt;
&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_2.pdf QPR_ProcessAnalyzer_2025_2.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Detection of models with incomplete datasource configuration has been improved, and now models where the event timestamp column type is string, are not anymore considered valid models. Earlier the string type of data was accepted and converted into dates when model was loaded (for in-memory models) or in SQL queries (in Snowflake models).&lt;br /&gt;
&lt;br /&gt;
The following query can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] (with System administrator user) to list models where the events datatable timestamp column type is string:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Models.Where({&lt;br /&gt;
	let timestampColumn = _.Configuration?.TryGetValue(&amp;quot;Datasource&amp;quot;)?.TryGetValue(&amp;quot;Events&amp;quot;)?.TryGetValue(&amp;quot;Columns&amp;quot;)?.TryGetValue(&amp;quot;Timestamp&amp;quot;);&lt;br /&gt;
	return First(_.EventsDatatable?.Columns?.Where(Name==timestampColumn))?.Datatype == &amp;quot;String&amp;quot;;&lt;br /&gt;
}).(Name + &amp;quot; (id: &amp;quot; + Id + &amp;quot;)&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
For Snowflake dashboards, table actions to [[QPR_ProcessAnalyzer_Table#Table_actions|set dashboard variables]] now set the variable values in the [[Stringified_Value_Format|stringified format]] instead of as raw values. This makes the variables set by table actions compatible with the [[Chart_Linked_Settings|linked settings]] which also use the stringified format by default for the Snowflake models.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features=== &lt;br /&gt;
*Introduced [[AI Agent]] which is a new dashboard component showing LLM generated answers based on user prompt and input data. (B-08556)&lt;br /&gt;
*Added [[Filtering_in_QPR_ProcessAnalyzer_Queries#Object-centric_filter_rules|filtering by object attributes]] for object-centric models. Filters can be created from dialog or selecting items from charts. (B-08547)&lt;br /&gt;
*In object-centric models, object-to-object relations are followed only forward and backward directions. Additionally, there are performance improvements for object-centric models. (B-08577)&lt;br /&gt;
*Snowflake warehouse can be [[QPR_ProcessAnalyzer_Project_Workspace#Change_Snowflake_Warehouse_for_Model|specified for each model]] allowing to use optimal type of warehouse for different sizes of models. (B-08610)&lt;br /&gt;
*Home screen has been removed, and [[QPR_ProcessAnalyzer_Project_Workspace|Workspace]] has new card layout and other UX improvements. (B-08541)&lt;br /&gt;
*Added [[Filtering_in_QPR_ProcessAnalyzer#Saving_filters|filter description]] field to filter properties dialog. (B-08451)&lt;br /&gt;
*Removed event type existence check from charts, so that non-existing event types are allowed. (B-08585)&lt;br /&gt;
*Snowflake Native App configuration data can be [[QPR_ProcessAnalyzer_Native_App_in_Snowflake#Backup_configuration_data|backed up to a snapshot and restored]]. (B-08591)&lt;br /&gt;
*Improved detection of invalid models by adding [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#CheckModelValidity|CheckModelValidity]] function returning model validation errors. (B-08426)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Prevented following error in Snowflake dashboards: Object &amp;quot;qprpa_dt_cache_...&amp;quot; already exists when creating a cache table. (D-14348)&lt;br /&gt;
*In-memory chart &amp;quot;Cases filtered by attribute&amp;quot; didn&#039;t work for date type of attributes. (D-14387)&lt;br /&gt;
*Fixed issue where each dashboard element resize made element width or height increase when chart margin was more than zero. (D-14361)&lt;br /&gt;
*Chart related buttons are now hidden in datatable content preview. (D-14360)&lt;br /&gt;
*Fixed issue where gateway based data import didn&#039;t write SAP errors into script log. (D-14351)&lt;br /&gt;
*Snowflake chart gave error when &amp;quot;Last Row Aggregates Over-limit Rows&amp;quot; setting was used with list aggregation. (D-14352)&lt;br /&gt;
*&amp;quot;Users&amp;quot; system report performance has been improved by adding EffectivePermissionTypesFor function. (D-14266)&lt;br /&gt;
*Fixed issue where AI Assistant crashed when used with a model having ODBC or expression datasource. (D-14340)&lt;br /&gt;
*Fixed issue where AI Assistant explaining charts crashed when applying to Label component. (D-14344)&lt;br /&gt;
* Improved client-side import not to perform redundant datatable configuration data queries. (D-14347)&lt;br /&gt;
*Model was incorrectly identified as in-memory model when datatables were missing. (D-14325)&lt;br /&gt;
*Model default filter is now in use when model is opened from Workspace. (D-14376)&lt;br /&gt;
&lt;br /&gt;
===Other improvements===  &lt;br /&gt;
*Changed Snowflake charts to store [[QPR_ProcessAnalyzer_Table#Table_actions|variable change actions]] in stringified format to make them compatible with linked settings. (B-08587)&lt;br /&gt;
*Backend support for [[Filtering_in_QPR_ProcessAnalyzer_Queries#Object-centric_filter_rules|object-centric filter rules Disabled flag]]. (B-08611)&lt;br /&gt;
*Implemented Entity Framework based database initialization and migrations. (B-08566)&lt;br /&gt;
*Added support for following Entity Framework database providers: SQL Server (full), Snowflake Hybrid Tables (experimental), PostgreSQL (experimental). (B-08581)&lt;br /&gt;
*Frontend components have been updated. (B-08597)&lt;br /&gt;
*Backend components have been updated. (B-08596)&lt;br /&gt;
*Translations have been updated for release 2025.2. (B-08607)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.1 (build 9124) (released 2025-01-23)==&lt;br /&gt;
&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_1.pdf QPR_ProcessAnalyzer_2025_1.pdf]&lt;br /&gt;
&lt;br /&gt;
===New features=== &lt;br /&gt;
*B-08526: Variations and other lists can be visualized with colors, and &amp;quot;List separator&amp;quot; field is available for dimensions and columns.&lt;br /&gt;
*B-08530: Charts can have a [[QPR_ProcessAnalyzer_Chart#Visual_Settings|description text]] which are shown in a dialog when pressing the info button.&lt;br /&gt;
*B-08546: Added [[SQL_Expressions#LLMComplete|LlmComplete]] function to access Snowflake Cortex large language models.&lt;br /&gt;
*B-08439: Added project settings [[QPR_ProcessAnalyzer_Project_Workspace#Project-level_Snowflake_Database_and_Schema|DatabaseNameInDataSource and SchemaNameInDataSource]] to define Snowflake database and schema.&lt;br /&gt;
*B-08531: Projects can be created in expression language using [[Generic_Functions_in_QPR_ProcessAnalyzer#CreateProject|CreateProject]] function.&lt;br /&gt;
*B-08387: Added backend support for object-centric model [[Filtering_in_QPR_ProcessAnalyzer_Queries#Object-centric_filter_rules|filtering for object attributes]].&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*D-14339: Week numbers showed incorrect year for last dates in the end of year.&lt;br /&gt;
*D-14323: Filtering with &amp;quot;Split data by filtering&amp;quot; dimension didn&#039;t work with exclude type of filter rules and when there were multiple filter rules.&lt;br /&gt;
*D-14346: Fixed issue where manual activation using activation utility didn&#039;t work.&lt;br /&gt;
*D-14326: Fixed issue where extra columns in objects table broke object-centric model.&lt;br /&gt;
*D-14306: Fixed issue when there were both TimeStamp and ToTimeStamp event data columns.&lt;br /&gt;
*D-14332: Flowchart event type and flow queries are now simultaneous which will improve performance.&lt;br /&gt;
*D-14331: Flowchart lost selection when flowchart used linked variables with array values.&lt;br /&gt;
*D-14299: Table text filters didn&#039;t work in Snowflake (starts with, ends with, contains).&lt;br /&gt;
*D-14338: Model.Modify function generated model json configuration that frontend wasn&#039;t incompatible with.&lt;br /&gt;
*D-14342: Flow step and Zoom settings control have same size and layout is aligned.&lt;br /&gt;
*D-14316: Occurrence impact on case duration measure didn&#039;t work with certain in-memory models.&lt;br /&gt;
*D-14327: AI Assistant had console error when pressing send button without text.&lt;br /&gt;
*D-14341: AI Assistant overlapped with BPMN editor in fullscreen mode.&lt;br /&gt;
*D-14321: Added error message for AI Assistant when trying to use it without model selected.&lt;br /&gt;
&lt;br /&gt;
===Other improvements=== &lt;br /&gt;
*B-08391: Datatable access has been optimized improving performance for object-centric models.&lt;br /&gt;
* B-08529: Added support for array type in stringified value format.&lt;br /&gt;
*B-08527: Improved SAP connector error handling and removed assumption for fixed dll file names.&lt;br /&gt;
*B-08552: Migrated rest of SQL queries into Entity Framework as preparation for storing configuration data to Snowflake hybrid tables.&lt;br /&gt;
*B-08544: Frontend components have been updated.&lt;br /&gt;
*B-08561: Updated translations for release 2025.1.&lt;br /&gt;
&lt;br /&gt;
==Old Releases==&lt;br /&gt;
See older releases in [[QPR ProcessAnalyzer Release Archive]]&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
[[Category: QPR ProcessAnalyzer]]&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&amp;diff=28092</id>
		<title>QPR ProcessAnalyzer Release Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&amp;diff=28092"/>
		<updated>2026-04-12T21:05:48Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: /* Fixed issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists all new features and fixed issues for each QPR ProcessAnalyzer release.&lt;br /&gt;
&lt;br /&gt;
==Next Release: QPR ProcessAnalyzer 2026.3 (planned release during week of April 6th)==&lt;br /&gt;
[[Next_Release_Roadmap|See roadmap for next release features and fixes]]&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
* QPR ProcessAnalyzer acts as MCP server where MCP tools are implemented using scripts. (B-09004)&lt;br /&gt;
* [[Object-centric_Process_Mining_Model#Configure_object-centric_model|Units for each object type]] can be specified in object-centric models. (B-08992)&lt;br /&gt;
* [[PA_Configuration_database_table#:~:text=DefaultColorPalette|Charts color palette]] can be changed globally to easily manage consistent visual layout. (B-08993)&lt;br /&gt;
* [[External_Content|External content component]] url supports tags refering to dashboard variables to show dynamically changing web page. (B-08998)&lt;br /&gt;
* [[QPR_ProcessAnalyzer_Project_Workspace#Exporting_Project|Project export and import]] using files support public filters stored in models. (B-09007)&lt;br /&gt;
* [[QPR_ProcessAnalyzer_KPI_Card|KPI Card]] shows null value label when data has no rows, and table and chart show &amp;quot;No data&amp;quot; message. (B-08999)&lt;br /&gt;
* [[QPR_MEA_Integration|QPR MEA web service]] can be connected using expression language. (B-09030)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
* Flowchart had flows missing if shown flows were beyond the top-500 flows. (D-14848)&lt;br /&gt;
* Expression filter rules with greater/less than criteria were incorrectly applied as equal filters when editing chart filters. (D-14852)&lt;br /&gt;
* Table column filter dialog was not entire visible in narrow table located in the bottom of screen. (D-14783)&lt;br /&gt;
* Opening Scripts tab in Workspace was slow when there were scripts with long script log. (D-14670)&lt;br /&gt;
* Fixed issue where object-centric model queries sometimes gave inconsistent results. (D-14854)&lt;br /&gt;
* Snowflake query gave &amp;quot;invalid identifier&amp;quot; error when there were two measures with same cases going though event measure filter. (D-14845)&lt;br /&gt;
* Filter rules drag-and-drop didn&#039;t work between expressions in the same chart. (D-14850)&lt;br /&gt;
* Better error message is shown when invalid value is specified to dashboard aspect ratio flex, chart margin, dashboard margin, external content border width, or external content border corner radius. (D-14805)&lt;br /&gt;
* Improved error message when object-centric model perspective doesn&#039;t have the object type correctly defined. (D-14795)&lt;br /&gt;
&lt;br /&gt;
===Other improvements===&lt;br /&gt;
* Frontend components have been updated. (B-09028)&lt;br /&gt;
* Backend components have been updated. (B-09027)&lt;br /&gt;
&lt;br /&gt;
==Current Release: Additional release for QPR ProcessAnalyzer 2026.2 (build 10910) (released date 16.3.2026)==&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
* Filters report in System reports shows also other users&#039; private filters for admins. (B-09017)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
* Filter rules were lost when saving a filter with &amp;quot;Cases with specific events&amp;quot;, &amp;quot;Cases starting with&amp;quot; or &amp;quot;Cases ending to&amp;quot; rules. (D-14847)&lt;br /&gt;
* Fixed issue where object-centric models sometimes gave &amp;quot;Object &amp;lt;cachetablename&amp;gt; does not exist or not authorized&amp;quot; error. (D-14797)&lt;br /&gt;
* ExtractSap function didn&#039;t work with QPR ScriptLauncher when using secret for storing SAP password. (D-14813)&lt;br /&gt;
* Variation stepper incorrectly skipped steps when going down when variation count is maximum. (D-14844)&lt;br /&gt;
* Improved error message when creating model from filter fails. (D-14811)&lt;br /&gt;
* System dashboard names were incorrectly translated twice. (D-14841)&lt;br /&gt;
* AI Assistant had one translation missing. (D-14840)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2026.2 (build 10897) (released date 2026-02-26)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2026_2.pdf QPR_ProcessAnalyzer_2026_2.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Snowflake user-defined functions (UDF) used by QPR ProcessAnalyzer have been updated to use Python 3.13. Some of the old versions of the functions use Python 3.9 which has been deprecated by Snowflake. Although the old versions are not anymore used by QPR ProcessAnalyzer, they are not automatically deleted and thus Snowflake may send notifications about existing deprecated functions. It&#039;s recommended to remove the old functions which are following:&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V2&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V3&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V4&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V5&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V6&lt;br /&gt;
* QPRPA_UDF_BPMN_CONFORMANCE_VIOLATIONS_FLOWS&lt;br /&gt;
* QPRPA_UDF_BPMN_CONFORMANCE_VIOLATIONS_FLOWS_V2&lt;br /&gt;
* QPRPA_UDF_BPMN_CONFORMANCE_VIOLATIONS_FLOWS_V3&lt;br /&gt;
* QPRPA_UDF_BPMN_IS_CONFORMANT&lt;br /&gt;
* QPRPA_UDF_BPMN_IS_CONFORMANT_V2&lt;br /&gt;
* QPRPA_UDF_BPMN_IS_CONFORMANT_V3&lt;br /&gt;
* QPRPA_UDTF_CLUSTER&lt;br /&gt;
* QPRPA_UDTF_CLUSTER_V2&lt;br /&gt;
* QPRPA_UDTF_CLUSTER_V3&lt;br /&gt;
* QPRPA_UDTF_CLUSTER_V4&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
* Fully conformant [[QPR_ProcessAnalyzer_BPMN_Editor#Auto-creating_BPMN_Diagram_from_Eventlog|BPMN diagrams]] can be created from eventlogs with proper layout and identifying exclusive and parallel gateways. (B-08900)&lt;br /&gt;
* [[Object-Centric_Flowchart|Object-centric flowchart]] flows visibility can be controlled with a stepper based on top variations, and start and end symbols can be hidden for each event type. (B-08987)&lt;br /&gt;
* Added preset for object-centric flowchart, and improved Process Discovery dashboard usage for object-centric models. (B-08863)&lt;br /&gt;
* Viewer users can [[Filtering_in_QPR_ProcessAnalyzer#Saving_filters|save private filters]] for personal use. (B-08920)&lt;br /&gt;
* [[Chart_On-screen_Settings|On-screen settings]] support static and dynamic case/event attribute values selection, and [[Chart_Linked_Settings|linked settings]] can bind to on-screen settings. (B-08814)&lt;br /&gt;
* [[AI_Root_Causes|AI root causes analysis]] related error situations are easier to resolve with easier to understand error messages. (B-08997)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
* Histogram chart did not show at all and gave a JavaScript error. (D-14801)&lt;br /&gt;
* When chart with multiple series was sorted by measure, some datapoints were not shown when visible X-axis was limited by zooming or Custom layout settings. (D-14793)&lt;br /&gt;
* Disabled filter rules were incorrectly applied for the shown items in the filter rule editing dialog. (D-14791)&lt;br /&gt;
* If there were more than one Range filter components in dashboard, periods menu incorrectly affected all of them. (D-14818)&lt;br /&gt;
* List of event types in object-centric flowchart settings didn&#039;t open if there were object types linked to none events. (D-14798)&lt;br /&gt;
* Snowflake flowchart root causes analysis gave &amp;quot;SQL compilation error&amp;quot; when run with case duration criteria. (D-14790)&lt;br /&gt;
* Term &amp;quot;Second&amp;quot; when meaning time unit was translated incorrectly in French. (D-14803)&lt;br /&gt;
* OpenTelemetry metrics were not sent to Prometheus correctly. (D-14804)&lt;br /&gt;
* Opening script editor by url didn&#039;t show project path and also javascript error appeared to console. (D-14794)&lt;br /&gt;
* Fixed issue where case attribute prediction failed when using more than one iteration. (D-14789)&lt;br /&gt;
* SQLDataFrame with several append operations had performance issue. (D-14772)&lt;br /&gt;
* Null coalescing operators didn&#039;t work correctly in chaining in expression language. (D-14762)&lt;br /&gt;
* Native app could not call procedure if project referred to other database and schema. (D-14749)&lt;br /&gt;
* Trying to create script with duplicate name gave unclear error: Cannot insert duplicate key row in object &#039;dbo.PA_SCRIPT&#039; with unique index &#039;PA_SCRIPT_UNIQUE_NAME_IN_PROJECT&#039;. (D-14784)&lt;br /&gt;
* BPMN editor popup menu was partly hidden behind other chart components. (D-14345)&lt;br /&gt;
* When going to context menu report from BPMN editor, &amp;quot;Operation was cancelled by a user&amp;quot; was given when query was in progress. (D-14807)&lt;br /&gt;
* BPMN editor tooltips measure descriptions didn&#039;t disappear at all. (D-14809)&lt;br /&gt;
* Presets benchmarking didn&#039;t work for models without case attributes. (D-14822)&lt;br /&gt;
* Object-centric filter rule editor gave javascript error when opened for case-centric model. (D-14799)&lt;br /&gt;
* Object-centric filter rule could incorrectly be dropped as root causes comparison rule. (D-14796)&lt;br /&gt;
* Localization missing for &amp;quot;Save as new filter&amp;quot; button. (D-14839)&lt;br /&gt;
&lt;br /&gt;
===Other improvements===&lt;br /&gt;
* SQL queries run in Snowflake have been further optimized. (B-08936)&lt;br /&gt;
* Snowflake stored procedures and user defined functions have been migrated to Python 3.13. (B-08984)&lt;br /&gt;
* Frontend components have been updated. (B-08991)&lt;br /&gt;
* Backend components have been updated. (B-08990)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2026.1 (build 10870) (released date 2026-01-19)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2026_1.pdf QPR_ProcessAnalyzer_2026_1.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
QPR ProcessAnalyzer Server and QPR ScriptLauncher are running on .NET 10, replacing the previous .NET 8 version. When updating to this release, make sure to install the .NET 10 Runtime ([[Updating_QPR_ProcessAnalyzer_Server|update instructions]]). While .NET 8 and .NET 10 can run side by side, .NET 8 does not need to be removed immediately. However, for security reasons, any unused .NET 8 installation should be uninstalled as soon as possible after the update.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Known issue: The histogram visualization doesn&#039;t work in this release. The issue will be fixed in the next release. Possible workaround is to use the column chart where to set no spacing between columns. This can be configured with the following [[QPR_ProcessAnalyzer_Chart#:~:text=Custom%20Layout|Custom Layout]] settings:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;plotOptions&amp;quot;: {&lt;br /&gt;
		&amp;quot;series&amp;quot;: {&lt;br /&gt;
			&amp;quot;pointPadding&amp;quot;: 0,&lt;br /&gt;
			&amp;quot;groupPadding&amp;quot;: 0&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*Object-centric models support versatile [[Filtering_in_QPR_ProcessAnalyzer|object-centric filters]] based on case-centric filter rules using perspective. (B-08595)&lt;br /&gt;
*[[AI_Root_Causes|AI Root Causes analysis]] is shown in a hierarchy for easier readability. (B-08921)&lt;br /&gt;
*[[Process_Flowchart|Case-centric flowchart]] performance has been improved by making all queries simultaneously. (B-08916)&lt;br /&gt;
* Object counts indicator is hidden for object-centric models when perspective is not set. (B-08825)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
* Filter to exclude case attribute values incorrectly excluded null values even if null wasn&#039;t selected. (D-14773)&lt;br /&gt;
*Prediction generated invalid models where case IDs in events datatable didn&#039;t exist in cases datatable. (D-14758)&lt;br /&gt;
* AI Root Causes presets didn&#039;t work with models without case attributes. (D-14759)&lt;br /&gt;
* Snowflake query with multiple columns with aggregations and Coalesce function gave &amp;quot;invalid identifier&amp;quot; error. (D-14763)&lt;br /&gt;
*Dropdown list to add business calendar holidays from other model shows empty items. (D-14786)&lt;br /&gt;
*In-memory Average function didn&#039;t work when aggregating dates using model&#039;s Attribute function. (D-14761)&lt;br /&gt;
*Sometimes opening models list gave error &amp;quot;User doesn&#039;t have permission GenericRead to model&amp;quot;. (D-14742)&lt;br /&gt;
&lt;br /&gt;
===Other improvements=== &lt;br /&gt;
*[[QPR_ProcessAnalyzer_Security_Hardening#Added_HTTP_Headers|Content-security-policy]] img-src blob: directive has been restored for Highcharts image export. (B-08904)&lt;br /&gt;
*Backend components have been updated [[Updating_QPR_ProcessAnalyzer_Server|including .NET 10]]. (B-08926)&lt;br /&gt;
*Frontend components have been updated. (B-08927)&lt;br /&gt;
&lt;br /&gt;
==Additional release for QPR ProcessAnalyzer 2025.7 (build 10845) (released 2025-12-11)==&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*QPR ProcessAnalyzer can be deployed on-premise using [[Deploy_QPR_ProcessAnalyzer_from_Container|Linux containers]]. (B-08915)&lt;br /&gt;
*Snowflake SQL queries have been simplified to improve performance, e.g., when quering flows. (B-08901)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues=== &lt;br /&gt;
*ODBC and Loading script models, and models with calculated attributes didn&#039;t allow to create or modify case and event attribute filters from header. (D-14751)&lt;br /&gt;
*Fixed incompatibility issue when using Keycloak as identity provider for SAML authentication. (D-14757)&lt;br /&gt;
*System report for users incorrectly listed some users with read-only permissions as Developers (issue with the EffectivePermissionTypesFor function). (D-14748)&lt;br /&gt;
*Referrer-Policy HTTP header was incorrectly set to &amp;quot;same-origins&amp;quot; causing browser console error in Windows deployments. (D-14736)&lt;br /&gt;
*Fixed issue where QPR ProcessAnalyzer request ID was not added to Snowflake data modification queries. (D-14728)&lt;br /&gt;
*Login request duration was incorrectly shown as zero or negative in System reports. (D-14737)&lt;br /&gt;
*In chart settings, some Snowflake measures with aggregations were missing possibility to define percentile value. (D-14276)&lt;br /&gt;
*Fixed issue where it was not possible to delete a model with same name in the same project during the same session. (D-14708)&lt;br /&gt;
*Script editor to specific script can now be opened with a direct url containing the script_editor parameter. (D-14745)&lt;br /&gt;
*Fixed issue were sometimes an incorrect error code was given for a cancelled query. (D-14755)&lt;br /&gt;
*Improved error message if model loading fails when loading script returns incorrect type of data. (D-14637)&lt;br /&gt;
*Fixed issue where variations query with sampling was slow for new models. (D-14729)&lt;br /&gt;
*Added tooltip to gantt chart&#039;s table layout header so that the header text can be fully seen. (D-13748)&lt;br /&gt;
*Switching between Snowflake and in-memory chart by adjusting chart configuration json caused some items in chart settings to appear twice. (D-14667)&lt;br /&gt;
*Selecting model in dashboard when previously there was no model selected and going back to Workspace, gave error message. (D-14735)&lt;br /&gt;
*Query Designer gave untranslated error message: &amp;quot;You don&#039;t have permissions to model ...&amp;quot;. (D-14727)&lt;br /&gt;
*Query Designer gave untranslated error message &amp;quot;Unable to use Snowflake tables as data source for in-memory query&amp;quot;. (D-14683)&lt;br /&gt;
*In Query Designer, table column menu gave JavaScript error for columns where first row was null. (D-14684)&lt;br /&gt;
*Query Designer incorrectly gave message &amp;quot;There are no columns in the data&amp;quot; when the data had no rows. (D-14692)&lt;br /&gt;
*Fixed issue in Manage Users dialog where row selections disappeared when resizing the dialog. (D-14647)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.7 (build 10821) (released 2025-11-13)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_7.pdf QPR_ProcessAnalyzer_2025_7.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Known issue: Creating case and event attribute filters in dashboards is not possible from the main header for the following types of in-memory models and attributes:&lt;br /&gt;
*Any attributes for [[QPR_ProcessAnalyzer_Model_Datasources#ODBC_Datasource|ODBC loaded models]]&lt;br /&gt;
*Any attributes for [[QPR_ProcessAnalyzer_Model_Datasources#Loading_Script|Loading script models]]&lt;br /&gt;
*Calculated attributes in any in-memory models.&lt;br /&gt;
&lt;br /&gt;
Workaround is to create the filter rule in a chart&#039;s settings and drag-and-drop it to the header. The issue has been fixed by the next release (D-14751). The issue does not concern Snowflake models.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features ===&lt;br /&gt;
*Presets added for [[AI_Root_Causes|AI Root Causes analysis]] based on Snowflake Top Insights which is a decision tree model finding combinations of root cause contributors. (B-08889)&lt;br /&gt;
*Added new [[Range_Filter|filter selector]] component to dashboards to easily create date and number range filters. (B-08877)&lt;br /&gt;
*Projects can be browsed in the [[Navigation_Menu|navigation menu]] to access all dashboards, and also organized the menu into two columns. (B-08708)&lt;br /&gt;
*When QPR ProcessAnalyzer is [[Embed_to_Website|embedded to a website]], SAML authentication is performed in a separate window for more robust operation. (B-08871)&lt;br /&gt;
*For more flexible options, [[AI_Agent|AI Agents]] runs the language model query using the Snowflake account where the selected model is located. (B-08860)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*If DefaultUiLanguage in PA_CONFIGURATION table was not defined, users who haven&#039;t changed language could not login. (D-14706)&lt;br /&gt;
*Improved performance in opening dashboard. (D-14705)&lt;br /&gt;
* Snowflake Native App didn&#039;t show the version number and build timestamp correctly. (D-14703)&lt;br /&gt;
*Snowflake Native App activation failed with a custom compute pool if container service was in the suspended state. (D-14722)&lt;br /&gt;
*Server stuck when trying to generate SQL for SqlDataFrame having multiple columns with the same name. (D-14730)&lt;br /&gt;
*In eventlog prediction, fixed issues preventing the usage of case attribute value prediction. (D-14702)&lt;br /&gt;
*Snowflake DurationBetweenDates function calculated incorrectly when used in a in divisor. (D-14723)&lt;br /&gt;
* Import now succeeds when importing Snowflake datatables refering to data without access. (D-14694)&lt;br /&gt;
*Fixed incorrect color in table column filters, and Workspace loading time has been improved. (D-14704)&lt;br /&gt;
* Fixed issue where dropdown list with projects showed &amp;quot;undefined&amp;quot; in place of project id. (D-14659)&lt;br /&gt;
*Fixed issue where specifying a secret name longer than 440 characters, prevented saving the secret and resulted in an error. (D-14674)&lt;br /&gt;
* SAML authentication failed when it needed to create a new user to QPR ProcessAnalyzer. (D-14717)&lt;br /&gt;
* Fixed issue where SQL dataframe queries didn&#039;t work if the root expression ended to a semicolon. (D-14714)&lt;br /&gt;
*Specific Snowflake query with a comparison criteria, AggregateFrom and GetValueFrom functions gave error about invalid identifier. (D-14718)&lt;br /&gt;
&lt;br /&gt;
===Other improvements=== &lt;br /&gt;
*[[QPR_ProcessAnalyzer_Security_Hardening#HTTP_Response_Headers|Content-Security-Policy HTTP header]] has been reduced to more secure by removing the script-src &#039;unsafe-eval&#039; and img-src &#039;blob&#039; directives. (B-08897)&lt;br /&gt;
*Added [[QPR_ProcessAnalyzer_Security_Hardening#HTTP_Response_Headers|security related HTTP headers]]: X-Permitted-Cross-Domain-Policies, Cross-Origin-Embedder-Policy, Cross-Origin-Opener-Policy, Cross-Origin-Resource-Policy, Referrer-Policy, and Permissions-Policy. (B-08879)&lt;br /&gt;
*Implemented backend support for Snowflake Top Insights for [[SqlDataFrame_in_Expression_Language#:~:text=TopInsights|AI root causes analysis]]. (B-08664)&lt;br /&gt;
*Implemented improved error handling when trying to save too long text to database. (B-08892)&lt;br /&gt;
*For more understandable error messages, error handling and error message generation have been refactored. (B-08754)&lt;br /&gt;
*Optimized database queries and reduced log writing. (B-08870)&lt;br /&gt;
*Frontend components have been updated. (B-08899)&lt;br /&gt;
*Backend components have been updated. (B-08898)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.6 (build 10690) (released 2025-10-01)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_6.pdf QPR_ProcessAnalyzer_2025_6.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Known issue: If the [[PA_Configuration_database_table#:~:text=DefaultUiLanguage|DefaultUiLanguage]] system configuration is not defined, users who haven&#039;t changed their own language, are unable to login. To prevent this problem, please ensure the DefaultUiLanguage is defined. The next release has fixed this issue (D-14706).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Content-Security-Policy (CSP) HTTP header has been updated to enhance security by implementing more restrictive settings. The following directives have been added:&lt;br /&gt;
*object-src &#039;none&#039;&lt;br /&gt;
*frame-ancestors &#039;self&#039;&lt;br /&gt;
*form-action &#039;none&#039;&lt;br /&gt;
*base-uri &#039;none&#039;&lt;br /&gt;
*worker-src blob:&lt;br /&gt;
&lt;br /&gt;
These new restrictions may affect usage that has previously been possible. For example, with the new settings, QPR ProcessAnalyzer can be embedded to a website only within the same origin. For detailed instructions on embedding QPR ProcessAnalyzer on a different website, please refer to [[Embed_to_Website|this quide]]. Additionally, for information on modifying the CSP settings, see documentation for [[QPR_ProcessAnalyzer_Security_Hardening#HTTP_Response_Headers|security hardening]].&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
In the QPR ProcessAnalyzer 2025.6 Native App, the release version number is not displayed correctly in the User Settings dialog. This omission does not have any other complications. QPR ProcessAnalyzer 2025.6 is the only release with this issue, making it possible to identify this release despite the missing version number. This issue is specific to the Native App only. The next release has fixed this issue (D-14703).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*[[User_Settings#Starting_dashboard|Starting dashboard]] after login can be defined for user groups, allowing to create customized starting pages for easy navigation. (B-08791)&lt;br /&gt;
*Snowflake [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|chart&#039;s event filters]] are now embedded to filters created from chart, to precisely follow chart calculation. (B-08845)&lt;br /&gt;
*Result data can be filtered in Snowflake charts using [[QPR_ProcessAnalyzer_Chart#:~:text=Result%20filtering%20expression|result filtering expression]] which works for any datasets. (B-08751)&lt;br /&gt;
*Filter rules order now stays the same when making filter selections and confirming filter. (B-08801)&lt;br /&gt;
*Added model setting [[QPR_ProcessAnalyzer_Project_Workspace#Hiding_Object_Count_Statistics|Show object count statistics]] to hide object counts information in dropdown lists to optimize performance. (B-08849)&lt;br /&gt;
*Added support for [[Chart_On-screen_Settings#:~:text=showStatistics|hiding statistics for on-screen setting]] dropdown lists to improve performance, and in addition the case ID is hidden Case/Event attribute profiling presets. (B-08840)&lt;br /&gt;
*Added following audit fields to users and groups: Created date, Created by, Last modified date, and Last modified by. (B-08792)&lt;br /&gt;
*Snowflake Native App: Added procedure to that [[QPR_ProcessAnalyzer_Native_App_in_Snowflake#Recover_administrator_access|creates administrator user to Native App]] if access to the app has been lost. Also, prevented user management operations that remove own access. (B-08733)&lt;br /&gt;
*Snowflake Native App: Added procedure to [[Change_Native_App_Compute_Pool_Size|change Native App compute pool size]]. Changed new Native Apps to use CPU_X64_S size compute pool, and improved Native App stability. (B-08859)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues=== &lt;br /&gt;
*Snowflake Cortex based AI Assistant didn&#039;t show the results table. (D-14643)&lt;br /&gt;
*When percent stacking is used, Y-axis values are now shown as percentages in data label and tooltip. (D-14633)&lt;br /&gt;
*Fixed issue where Label&amp;amp;Link component had sometimes unnecessary vertical scrollbar. (D-14685)&lt;br /&gt;
*Model validation showed incorrect error message for models with numeric duplicate case ID&#039;s. (D-14687)&lt;br /&gt;
*In Workspace, scripts &amp;quot;View current run log&amp;quot; dialog didn&#039;t update log correctly when new entries were added. (D-14662)&lt;br /&gt;
*Event type mapping in charts didn&#039;t work in object-centric models. (D-14620)&lt;br /&gt;
*Model generation didn&#039;t work as transformation step using _system.ML.ApplyTransformation function. (D-14654)&lt;br /&gt;
*Others aggregation has been removed from date type of dimensions because tables don&#039;t work with textual data in date columns. (D-14623)&lt;br /&gt;
*Fixed issue in AI Assistant where using both Snowflake Cortex and OpenAI modes caused error. (D-14646)&lt;br /&gt;
*In User Management Effective permissions table, column filter incorrectly showed &amp;quot;true&amp;quot; and &amp;quot;false&amp;quot; as options. (D-14639)&lt;br /&gt;
*Pivot table incorrectly showed &amp;quot;Numeric value is not recognized&amp;quot; error when Count or Unique count aggregations were used. (D-14559)&lt;br /&gt;
*Workspace buttons are now visible in small screens spanning to multiple lines. (D-14587)&lt;br /&gt;
*Added tooltip text to &amp;quot;Move to&amp;quot; submenu containing projects so that long project names can be seen. (D-14612)&lt;br /&gt;
*Translation was missing from error messages when deleting items from recycle bin. (D-14652)&lt;br /&gt;
*Fixed data type related issues with in-memory Floor, Ceiling and aggregation functions. (D-14622)&lt;br /&gt;
*Optimized resource loading by getting rid of unnecessary file assets/i18n/en_US.json. (D-14641)&lt;br /&gt;
*Fixed issue where opening script editor gave javascript error about content-security-policy violation. (D-14627)&lt;br /&gt;
*Fixed issue in charts showing datatable content had a strange error when datatable was not selected. (D-14650)&lt;br /&gt;
*Fixed incorrect data types in some project, user and group related measures. (D-14619)&lt;br /&gt;
* Fixed issue where moving expression scripts was not possible when SQL Scripting was not allowed. (D-14624)&lt;br /&gt;
*Deleting and renaming scripts were not available for expression scripts when SQL Scripting was not allowed. (D-14625)&lt;br /&gt;
*Improved documentation for situation when non-existing Snowflake warehouse is configured for a model. (D-14543)&lt;br /&gt;
*Project properties dialog shows a descriptive text when no secrets have been defined instead of an empty table. (D-14611)&lt;br /&gt;
* Improved messages and New project button visibility in Workspace top level when no projects are shown. (D-14609)&lt;br /&gt;
*Event preset gave error if enabling Apply with Chart Filters setting and trying to create filters. (D-14695)&lt;br /&gt;
&lt;br /&gt;
===Other improvements===&lt;br /&gt;
*Added QPR ProcessAnalyzer API request ID to Snowflake queries to easily find matching query in Snowflake query history. (B-08839)&lt;br /&gt;
*[[QPR_ProcessAnalyzer_Security_Hardening#Added_HTTP_Headers|Content Security Policy HTTP header]] includes now object-src, frame-ancestors, form-action, base-uri, and worker-src. (B-08794)&lt;br /&gt;
*Snowflake queries have been optimized by removing null and empty string checks from mapped columns as they are now handled by the model validation check. (B-08837)&lt;br /&gt;
*Added backend support for object-centric model filtering based on case-centric filter rules. (B-08836)&lt;br /&gt;
*Frontend components have been updated. (B-08851)&lt;br /&gt;
*Backend components have been updated. (B-08852)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.5 (build 10361) (released 2025-08-21)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_5.pdf QPR_ProcessAnalyzer_2025_5.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
When using Snowflake Cortex, the AI Assistant is not showing the results table in the assistant&#039;s response. This issue has been fixed by the next release.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===  &lt;br /&gt;
*[[Object-Centric_Flowchart|Object-centric flowchart]] can also use object-to-object relations to link events and objects simplifying event-to-object configuration. (B-08671)&lt;br /&gt;
*[[AI_Assistant_for_QPR_ProcessAnalyzer|AI Assistant]] can provide precise quantitative analysis by making queries to eventlog data (powered by Snowflake Cortex Analyst and Agents). (B-08652)&lt;br /&gt;
*[[Filtering_in_QPR_ProcessAnalyzer|Flows and variations can be filtered]] from any event attribute viewpoint in Snowflake. (B-08737)&lt;br /&gt;
* Added [[Project_Properties_Dialog|project properties dialog]] for viewing project information, changing Snowflake connection settings and project secrets. (B-08655)&lt;br /&gt;
*[[QPR_ProcessAnalyzer_Project_Workspace#Validating_Model|Model validity check]] easily detects technically invalid models and shows detailed reason for invalidity. (B-08624)&lt;br /&gt;
*Projects can be [[QPR_ProcessAnalyzer_Project_Workspace#Exporting_Project|exported]] to json files and imported as new projects. (B-08717)&lt;br /&gt;
*Action buttons can be added to dashboard by defining [[Label_and_Link|label component]] that can change dashboard variables and run scripts. (B-08694)&lt;br /&gt;
*Web user interface is available in [[Languages_and_Localization|Ukrainian language]]. (B-08734)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Fixed following error when performing client-side SAP import: Could not find a part of the path (QPR_ImportSource_Chunk_*.tmp). (D-14589)&lt;br /&gt;
*Fixed issue where ManageProjects permission was incorrectly required when running scripts using QPR ScriptLauncher non-legacy mode. (D-14562)&lt;br /&gt;
*Fixed following error when using SAP import from SQL script called from expression language called from SQL: The given key &#039;&#039; was not present in the dictionary. (D-14593)&lt;br /&gt;
*Some analyses didn&#039;t work, when case ID columns for cases and events datatables differed only in upper/lowercase letters. (D-14556)&lt;br /&gt;
*Business calendar didn&#039;t work for some measures/dimensions/columns and some had business calendar checkboxes missing. (D-14563)&lt;br /&gt;
*Prediction failed to following error: transformer_model_next_activity/event_year_input_embedding. (D-14551)&lt;br /&gt;
*Scripting now works correctly after rows from PA_OPERATION_STATUS table have been deleted. (D-14545)&lt;br /&gt;
*Fixed issue where case-centric flowchart was very slow for object-centric model. (D-14544)&lt;br /&gt;
*Prevented creating dashboards, models and scripts with duplicate names in the same project. (D-09480)&lt;br /&gt;
*KPI Card now shows line breaks correctly in textual values. (D-14546)&lt;br /&gt;
*Improved table Excel export for list data to show items with separator character instead of showing as JSON. (D-14479)&lt;br /&gt;
*Column showing non-conformance reason was incorrectly aligned to right. (D-14570)&lt;br /&gt;
*GetRelatedValueFrom function caused column name conflict when used multiple times in same query. (D-14591)&lt;br /&gt;
* Fixed issue where in-memory sorting for arrays gave &amp;quot;Error in sorting analysis result rows possibly due to multiple types of values ...&amp;quot;. (D-14592)&lt;br /&gt;
*Array type of values were shown incorrectly when used Last Row Aggregates Over-limit Rows setting. (D-14616)&lt;br /&gt;
*Fixed the &amp;quot;Most common&amp;quot; text aggregation sorting error for in-memory calculation. (D-14573)&lt;br /&gt;
*Snowflake model validation gave incorrect error message when mapped column didn&#039;t exist in datatable. (D-14565)&lt;br /&gt;
*Improved model validation to detect when connection string key for model or datatable does not exist. (D-14607)&lt;br /&gt;
* Model validation gave incorrect error when when events datatable case id mapping was missing. (D-14566)&lt;br /&gt;
*Model validation gave incorrect error message when cases and events datatables were in different datasources. (D-14567)&lt;br /&gt;
*Model validation gave incorrect error message when underlying Snowflake table didn&#039;t exist. (D-14568)&lt;br /&gt;
*Workspace Card/Table mode toggle buttons were not translated. (D-14547)&lt;br /&gt;
*Some invalid queries gave unexpected errors and strange outputs. (D-14569)&lt;br /&gt;
* Added translations to model notifications preview table headers. (D-14590)&lt;br /&gt;
* Added translations to access denied message for header object counts indicator. (D-13967)&lt;br /&gt;
* AI Assistant explaining charts speaks now user interface language. (D-14578)&lt;br /&gt;
* AI Agent prompt chart editor didn&#039;t show correctly if model was not selected. (D-14536)&lt;br /&gt;
*AI Assistant gave &amp;quot;Unsupported cache table type&amp;quot; error when trying to explain object-centric flowchart. (D-14477)&lt;br /&gt;
&lt;br /&gt;
===Other improvements ===&lt;br /&gt;
*When trying to open dashboard with an invalid model, the precise model validation error message is shown. (B-08629)&lt;br /&gt;
*Account locked message is now same as username/password incorrect to prevent account enumeration attack. (B-08740)&lt;br /&gt;
*Stringified value format supports also json objects. (B-08766)&lt;br /&gt;
*Event attribute used as event type can be defined for flow and variation filters in Snowflake models (backend support). (B-08705)&lt;br /&gt;
*Translations have been updated. (B-08757)&lt;br /&gt;
*Frontend components have been updated. (B-08760)&lt;br /&gt;
*Backend components have been updated. (B-08759)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.4 (build 9985) (released 2025-05-28)==&lt;br /&gt;
&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_4.pdf QPR_ProcessAnalyzer_2025_4.pdf]&lt;br /&gt;
&lt;br /&gt;
===New features ===&lt;br /&gt;
*Added new AI Agent presets analyzing current state and proposing improvements based on different viewpoints, such as Event and Case Counts, Automation, Bottlenecks, and Root Causes. (B-08710)&lt;br /&gt;
*Added a [[Filter_Selectors#Filter_selector|generic filtering component]] that can be configured for creating any type of filters for distinct values. (B-08654)&lt;br /&gt;
*Volume declining in measures due to case sampling can be compensated in chart and flowchart by using a [[Measure,_Dimension_and_Column_Settings#Statistical_calculations|Statistical calculation method]]. (B-08598)&lt;br /&gt;
*In object-centric models, Object ID, Event ID, Event timestamp, and Event type [[Object-centric_Process_Mining_Model#Object-centric_perspectives|attribute names]] are shown correctly. (B-08680)&lt;br /&gt;
*Snowflake native app has now [[QPR_ProcessAnalyzer_Native_App_in_Snowflake#User_access_to_application|application roles]] for user (for using app) and administrator (for managing app). (B-08660)&lt;br /&gt;
*For Snowflake native app, IMPORTED PRIVILEGES ON SNOWFLAKE DB privilege is removed and instead the [[QPR_ProcessAnalyzer_Native_App_in_Snowflake#Optional_privilege_for_AI_Agent|CORTEX_USER database role]] can be assigned. (B-08718)&lt;br /&gt;
*[[QPR_ProcessAnalyzer_Native_App_in_Snowflake#Logging|Native app logging]] has been improved and now sharing application logs with QPR is possible. (B-08661)&lt;br /&gt;
* Added [[DataFrame_in_Expression_Language#CsvToDataFrame|CsvToDataFrame]] function to expression language to convert textual CSV data into in-memory dataframe. (B-08246)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Fixed &amp;quot;Invalid identifier&amp;quot; error when opening attribute selection list for case attribute preset caused by object id columns which differed only by letter capitalization. (D-14539)&lt;br /&gt;
*When Image component is clicked in dashboard edit mode, the component is now selected instead of link followed. (D-14525)&lt;br /&gt;
*Filters created from dimensions having dimension-specific filter rules will now create expression filter rule where dimensions-specific filter is embedded, for accurately following the selection. (D-14499)&lt;br /&gt;
*Filtering variations or list of event attribute values didn&#039;t work in in-memory models. (D-14476)&lt;br /&gt;
*Fixed issue where AI Agent didn&#039;t update when dashboard variable changed used by prompt chart. (D-14537)&lt;br /&gt;
* Fixed issue where some statistical calculations inadvertently changed row order when applying in groups. (D-14495)&lt;br /&gt;
*In in-memory models, array type of data was not dimensioned correctly. (D-14518)&lt;br /&gt;
* AI Agent Process Variations preset gave &amp;quot;division by zero&amp;quot; error when there were zero cases. (D-14508)&lt;br /&gt;
*Table grouping header labels were not formatted correctly. (D-14514)&lt;br /&gt;
*Fixed Root causes analysis to work with object-centric models. (D-14515)&lt;br /&gt;
*Filtering by OcelObjectId didn&#039;t work when model didn&#039;t have object type table for perspective used in filter. (D-14522)&lt;br /&gt;
*Fixed Root causes analysis with weighting expression to work with object-centric models. (D-14517)&lt;br /&gt;
*Fixed issue where persisting query results where query is started from datatable having custom table name overwrote data in original table. (D-14528)&lt;br /&gt;
*Flowchart SVG export did not show start and end symbols. (D-12401)&lt;br /&gt;
*Fixed issue where join operation didn&#039;t find renamed columns in SqlDataFrames. (D-14512)&lt;br /&gt;
*Improved chart filtering button positions to work with small chart sizes. (D-14509)&lt;br /&gt;
*Datatable foreign key columns dictionary data type was incorrect preventing reading columns information. (D-14505)&lt;br /&gt;
*Workspace scripts editor allowed to change script code for viewer users (altough not save it). (D-14534)&lt;br /&gt;
* In chart custom sorting, trying to refer to measure that had None aggregation, caused SQL compilation error. (D-14526)&lt;br /&gt;
*Model validation check crashed when the datatables were in different datasources. (D-14502)&lt;br /&gt;
&lt;br /&gt;
===Other improvements=== &lt;br /&gt;
*Added expression language functions for using Snowflake Cortex Agents with Cortex Analyst access to query eventlogs. (B-08647)&lt;br /&gt;
*Projects can be export and imported in JSON format containing dashboards, models, datatables and scripts. (B-08613)&lt;br /&gt;
*Simplified object-centric model queries by accepting OcelObjectId as object attribute name in filters. (B-08702)&lt;br /&gt;
*Streamlined import API by removing importMode parameter and changing default fileType to CSV. (B-08704)&lt;br /&gt;
*Frontend components have been updated. (B-08695)&lt;br /&gt;
*Backend components has been updated. (B-08696)&lt;br /&gt;
&lt;br /&gt;
==Additional release for QPR ProcessAnalyzer 2025.3 (build 9805) (released 2025-04-30)==&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*Navigation menu is now displaying dashboards from open dashboard&#039;s project or from selected Workspace project (earlier dashboards were shown from the selected model&#039;s project). (B-08673)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues === &lt;br /&gt;
*Fixed issue where AI Agent made unnecessary queries when filtering dashboard, and also opening dashboard with lot of chart may have been slow. (D-14503)&lt;br /&gt;
*When datatable columns were modified, queries to the data may have given &amp;quot;Invalid identifier&amp;quot; error. (D-14507)&lt;br /&gt;
*Clustering analysis didn&#039;t work with object-centric models. (D-14486)&lt;br /&gt;
*When a new groups is added, it&#039;s selected by default in the Manage Users dialog. Also clicking a selected group does not deselect it. (D-14491)&lt;br /&gt;
*Deleting last group didn&#039;t remove the group from the list. (D-14504)&lt;br /&gt;
&lt;br /&gt;
==Additional release for QPR ProcessAnalyzer 2025.3 (build 9725) (released 2025-04-23)==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
There is an issue causing some dashboards having more than 50 charts to open slowly. The issue has been fixed in the next release by D-14503.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Fixed Issues=== &lt;br /&gt;
*Fixed issue where system stopped responding after opening Scripts tab several times (error in logs: Timeout expired prior to obtaining a connection from the pool). (D-14506)&lt;br /&gt;
*Fixed issue where the object-centric models object types tables didn&#039;t work without the timestamp column. (B-08683)&lt;br /&gt;
*Snowflake cache tables are now created after initiating calculation is completed to improve performance. (D-14460)&lt;br /&gt;
*Fixed issue in User Management where assigning role to project or adding user to group was not saved when there was a column filter. (D-14124)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.3 (build 9699) (released 2025-04-16)==&lt;br /&gt;
&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_3.pdf QPR_ProcessAnalyzer_2025_3.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
There is a potentially serious issue that can cause the system to stop responding, when opening the Scripts tab in the Workspace. The issue has been fixed in the next release (build 9725) by D-14506.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Object-centric model simplification in the story B-08667 (object attributes can only have a single value) doesn&#039;t work with this release. The issue has been fixed in the next release (build 9725) by B-08683.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*Enhanced [[AI Agent]] with UI for editing prompt datasets, and added checkbox to include other charts in dashboard to prompt. (B-08641)&lt;br /&gt;
*In [[Object-centric_Process_Mining_Model|object-centric models]], object-to-object relations are now followed by traversing once all object types. (B-08606)&lt;br /&gt;
*In object-centric models, event type and object type tables are not mandatory anymore, and common attributes can be specified in events and objects tables. (B-08663)&lt;br /&gt;
*Object-centric models support simplified structure where object attributes can only have a single value. (B-08667)&lt;br /&gt;
*Object relation steps setting can be empty to traverse all linked objects in the object-centric model. (B-08668)&lt;br /&gt;
*Snowflake Event Types preset has been improved by adding suggestion of desired and undesired activities based on frequency of occurrence. (B-08656)&lt;br /&gt;
* Added checkbox for [[Measure,_Dimension_and_Column_Settings#Advanced_settings|disabling filtering]] for individual dimensions or columns. (B-08589)&lt;br /&gt;
*Case and event attributes dropdown lists show number of unique values in Snowflake models (instead of attribute datatype as previously). (B-08316)&lt;br /&gt;
*[[SAML_2.0_Federated_Authentication|SAML authentication]] can now synchronize user groups from identity provider. (B-08612)&lt;br /&gt;
*Groups can be [[Manage_Users_and_Groups#Deleting_Group|deleted]] in user management. (B-08330)&lt;br /&gt;
*[[Storing_Secrets_for_Scripts|Secrets]] can be defines as global that can be used by all projects. To set global secrets, [[Generic_Functions_in_QPR_ProcessAnalyzer#SetSecret|SetSecret]] function works also in the generic context. (B-08599)&lt;br /&gt;
*Snowflake [[Clustering_Analysis|Clustering analysis]] shows now number of event occurrences as features describing clusters. (B-08353)&lt;br /&gt;
*Model validity check has been extended to find issues in the eventlog data for Snowflake case-centric models. (B-07910)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Fixed a potential issue which could have leaked database connections and caused connection pool starvation. (D-14414)&lt;br /&gt;
*Renewed self-signed certificate used by SAML 2.0 authentication with ten years of validity. (D-14424)&lt;br /&gt;
*Improved CallWebService function to send request body when using DELETE method. (D-14488)&lt;br /&gt;
* Login page now shows correct error message when there are serious system errors during login. (D-14480)&lt;br /&gt;
*&amp;quot;Datatable contents (in-memory)&amp;quot; option now works also with Snowflake datatables. (D-14391)&lt;br /&gt;
*Added maximum data size limitation to AI assistant to avoid error with large datasets. (D-14419)&lt;br /&gt;
*Day of the Year/Week/Month/Quater selection didn&#039;t work with specific event time in in-memory chart. (D-14421)&lt;br /&gt;
*KPI card now shows a scrollbar when content doesn&#039;t fit to the available space. (D-13428)&lt;br /&gt;
* Workspace projects hierarchy tooltips didn&#039;t show special characters correctly. (D-14430)&lt;br /&gt;
*BPMN editor crashed when creating filter from tasks giving following error: Cannot read properties of null (reading &#039;querySelector&#039;). (D-14399)&lt;br /&gt;
*Value expressions didn&#039;t work that are referred in dimension and containing aggregation. (D-13624)&lt;br /&gt;
* Fixed issue where object-centric flowchart filter selection gave error when case-centric model was selected. (D-14408)&lt;br /&gt;
*Fixed issue where query to non-existing model incorrectly returned &amp;quot;Sequence contains no elements&amp;quot;. (D-14402)&lt;br /&gt;
*Incorrect StringifiedValues in chart settings and expression filter rule caused UI to stuck. (D-14485)&lt;br /&gt;
*Table column filter value list didn&#039;t show the null value label correctly. (D-13844)&lt;br /&gt;
*&amp;quot;Visualize list items with colors&amp;quot; setting didn&#039;t work with the &amp;quot;Last Row Aggregates Over-limit Rows&amp;quot; setting. (D-14357)&lt;br /&gt;
*Made sure that failed queries are not added to model filter cache. (D-14484)&lt;br /&gt;
*Chart settings crashed when trying to use without model selected giving following error: Cannot read properties of undefined (reading &#039;injectValue&#039;). (D-14395)&lt;br /&gt;
*Fixed issue where chart settings opened on top of full screen BPMN editor. (D-14472)&lt;br /&gt;
*Show details button in some error messages didn&#039;t have any effect when pressed. (D-14490)&lt;br /&gt;
*Model validation message was incorrect for model where other datatable is Snowflake and other SQL Server. (D-14475)&lt;br /&gt;
&lt;br /&gt;
=== Other improvements=== &lt;br /&gt;
*Logging has been set to Warning level for Native App to avoid excessive number of log entries to Snowflake events table. (B-08687)&lt;br /&gt;
*Datatable duplication is now synchronous in Snowflake until 30 seconds to avoid showing the created duplicate datatable with zero rows while the operation is still in progress. (B-08634)&lt;br /&gt;
*Improved Snowflake cache table creation logic when there are multiple simultaneous queries. (B-08622)&lt;br /&gt;
*Refactored SQL Server operations to improve robustness and avoid leaking database connections. (B-08649)&lt;br /&gt;
*Frontend components have been updated. (B-08638)&lt;br /&gt;
* Backend components have been updated. (B-08639)&lt;br /&gt;
*Translations have been updated. (B-08640)&lt;br /&gt;
&lt;br /&gt;
== Additional release for QPR ProcessAnalyzer 2025.2 (build 9476) (released 2025-03-19)==&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Fixed issue where charts axis labels had unnecessary line breaks on spaces. (D-14413)&lt;br /&gt;
*Fixed issue where AI Agent and LLMComplete function didn&#039;t work in Native App. (D-14410)&lt;br /&gt;
*Fixed translations for Workspace Scripts tab column filter for Status and Result columns. (D-14393)&lt;br /&gt;
*Fixed issue where Volume Distribution of Flow Analyzed object type didn&#039;t work. (D-14390)&lt;br /&gt;
*Removed reference to fonts.googleapis.com for stylesheets to avoid content-security-policy error. (D-14373)&lt;br /&gt;
* Syncfusion dialog headers now show special characters correctly. (D-14407)&lt;br /&gt;
*Object attribute filter gave null reference error when object type didn&#039;t exist in model. (D-14379)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.2 (build 9410) (released 2025-03-05)==&lt;br /&gt;
&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_2.pdf QPR_ProcessAnalyzer_2025_2.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Detection of models with incomplete datasource configuration has been improved, and now models where the event timestamp column type is string, are not anymore considered valid models. Earlier the string type of data was accepted and converted into dates when model was loaded (for in-memory models) or in SQL queries (in Snowflake models).&lt;br /&gt;
&lt;br /&gt;
The following query can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] (with System administrator user) to list models where the events datatable timestamp column type is string:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Models.Where({&lt;br /&gt;
	let timestampColumn = _.Configuration?.TryGetValue(&amp;quot;Datasource&amp;quot;)?.TryGetValue(&amp;quot;Events&amp;quot;)?.TryGetValue(&amp;quot;Columns&amp;quot;)?.TryGetValue(&amp;quot;Timestamp&amp;quot;);&lt;br /&gt;
	return First(_.EventsDatatable?.Columns?.Where(Name==timestampColumn))?.Datatype == &amp;quot;String&amp;quot;;&lt;br /&gt;
}).(Name + &amp;quot; (id: &amp;quot; + Id + &amp;quot;)&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
For Snowflake dashboards, table actions to [[QPR_ProcessAnalyzer_Table#Table_actions|set dashboard variables]] now set the variable values in the [[Stringified_Value_Format|stringified format]] instead of as raw values. This makes the variables set by table actions compatible with the [[Chart_Linked_Settings|linked settings]] which also use the stringified format by default for the Snowflake models.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features=== &lt;br /&gt;
*Introduced [[AI Agent]] which is a new dashboard component showing LLM generated answers based on user prompt and input data. (B-08556)&lt;br /&gt;
*Added [[Filtering_in_QPR_ProcessAnalyzer_Queries#Object-centric_filter_rules|filtering by object attributes]] for object-centric models. Filters can be created from dialog or selecting items from charts. (B-08547)&lt;br /&gt;
*In object-centric models, object-to-object relations are followed only forward and backward directions. Additionally, there are performance improvements for object-centric models. (B-08577)&lt;br /&gt;
*Snowflake warehouse can be [[QPR_ProcessAnalyzer_Project_Workspace#Change_Snowflake_Warehouse_for_Model|specified for each model]] allowing to use optimal type of warehouse for different sizes of models. (B-08610)&lt;br /&gt;
*Home screen has been removed, and [[QPR_ProcessAnalyzer_Project_Workspace|Workspace]] has new card layout and other UX improvements. (B-08541)&lt;br /&gt;
*Added [[Filtering_in_QPR_ProcessAnalyzer#Saving_filters|filter description]] field to filter properties dialog. (B-08451)&lt;br /&gt;
*Removed event type existence check from charts, so that non-existing event types are allowed. (B-08585)&lt;br /&gt;
*Snowflake Native App configuration data can be [[QPR_ProcessAnalyzer_Native_App_in_Snowflake#Backup_configuration_data|backed up to a snapshot and restored]]. (B-08591)&lt;br /&gt;
*Improved detection of invalid models by adding [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#CheckModelValidity|CheckModelValidity]] function returning model validation errors. (B-08426)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Prevented following error in Snowflake dashboards: Object &amp;quot;qprpa_dt_cache_...&amp;quot; already exists when creating a cache table. (D-14348)&lt;br /&gt;
*In-memory chart &amp;quot;Cases filtered by attribute&amp;quot; didn&#039;t work for date type of attributes. (D-14387)&lt;br /&gt;
*Fixed issue where each dashboard element resize made element width or height increase when chart margin was more than zero. (D-14361)&lt;br /&gt;
*Chart related buttons are now hidden in datatable content preview. (D-14360)&lt;br /&gt;
*Fixed issue where gateway based data import didn&#039;t write SAP errors into script log. (D-14351)&lt;br /&gt;
*Snowflake chart gave error when &amp;quot;Last Row Aggregates Over-limit Rows&amp;quot; setting was used with list aggregation. (D-14352)&lt;br /&gt;
*&amp;quot;Users&amp;quot; system report performance has been improved by adding EffectivePermissionTypesFor function. (D-14266)&lt;br /&gt;
*Fixed issue where AI Assistant crashed when used with a model having ODBC or expression datasource. (D-14340)&lt;br /&gt;
*Fixed issue where AI Assistant explaining charts crashed when applying to Label component. (D-14344)&lt;br /&gt;
* Improved client-side import not to perform redundant datatable configuration data queries. (D-14347)&lt;br /&gt;
*Model was incorrectly identified as in-memory model when datatables were missing. (D-14325)&lt;br /&gt;
*Model default filter is now in use when model is opened from Workspace. (D-14376)&lt;br /&gt;
&lt;br /&gt;
===Other improvements===  &lt;br /&gt;
*Changed Snowflake charts to store [[QPR_ProcessAnalyzer_Table#Table_actions|variable change actions]] in stringified format to make them compatible with linked settings. (B-08587)&lt;br /&gt;
*Backend support for [[Filtering_in_QPR_ProcessAnalyzer_Queries#Object-centric_filter_rules|object-centric filter rules Disabled flag]]. (B-08611)&lt;br /&gt;
*Implemented Entity Framework based database initialization and migrations. (B-08566)&lt;br /&gt;
*Added support for following Entity Framework database providers: SQL Server (full), Snowflake Hybrid Tables (experimental), PostgreSQL (experimental). (B-08581)&lt;br /&gt;
*Frontend components have been updated. (B-08597)&lt;br /&gt;
*Backend components have been updated. (B-08596)&lt;br /&gt;
*Translations have been updated for release 2025.2. (B-08607)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.1 (build 9124) (released 2025-01-23)==&lt;br /&gt;
&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_1.pdf QPR_ProcessAnalyzer_2025_1.pdf]&lt;br /&gt;
&lt;br /&gt;
===New features=== &lt;br /&gt;
*B-08526: Variations and other lists can be visualized with colors, and &amp;quot;List separator&amp;quot; field is available for dimensions and columns.&lt;br /&gt;
*B-08530: Charts can have a [[QPR_ProcessAnalyzer_Chart#Visual_Settings|description text]] which are shown in a dialog when pressing the info button.&lt;br /&gt;
*B-08546: Added [[SQL_Expressions#LLMComplete|LlmComplete]] function to access Snowflake Cortex large language models.&lt;br /&gt;
*B-08439: Added project settings [[QPR_ProcessAnalyzer_Project_Workspace#Project-level_Snowflake_Database_and_Schema|DatabaseNameInDataSource and SchemaNameInDataSource]] to define Snowflake database and schema.&lt;br /&gt;
*B-08531: Projects can be created in expression language using [[Generic_Functions_in_QPR_ProcessAnalyzer#CreateProject|CreateProject]] function.&lt;br /&gt;
*B-08387: Added backend support for object-centric model [[Filtering_in_QPR_ProcessAnalyzer_Queries#Object-centric_filter_rules|filtering for object attributes]].&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*D-14339: Week numbers showed incorrect year for last dates in the end of year.&lt;br /&gt;
*D-14323: Filtering with &amp;quot;Split data by filtering&amp;quot; dimension didn&#039;t work with exclude type of filter rules and when there were multiple filter rules.&lt;br /&gt;
*D-14346: Fixed issue where manual activation using activation utility didn&#039;t work.&lt;br /&gt;
*D-14326: Fixed issue where extra columns in objects table broke object-centric model.&lt;br /&gt;
*D-14306: Fixed issue when there were both TimeStamp and ToTimeStamp event data columns.&lt;br /&gt;
*D-14332: Flowchart event type and flow queries are now simultaneous which will improve performance.&lt;br /&gt;
*D-14331: Flowchart lost selection when flowchart used linked variables with array values.&lt;br /&gt;
*D-14299: Table text filters didn&#039;t work in Snowflake (starts with, ends with, contains).&lt;br /&gt;
*D-14338: Model.Modify function generated model json configuration that frontend wasn&#039;t incompatible with.&lt;br /&gt;
*D-14342: Flow step and Zoom settings control have same size and layout is aligned.&lt;br /&gt;
*D-14316: Occurrence impact on case duration measure didn&#039;t work with certain in-memory models.&lt;br /&gt;
*D-14327: AI Assistant had console error when pressing send button without text.&lt;br /&gt;
*D-14341: AI Assistant overlapped with BPMN editor in fullscreen mode.&lt;br /&gt;
*D-14321: Added error message for AI Assistant when trying to use it without model selected.&lt;br /&gt;
&lt;br /&gt;
===Other improvements=== &lt;br /&gt;
*B-08391: Datatable access has been optimized improving performance for object-centric models.&lt;br /&gt;
* B-08529: Added support for array type in stringified value format.&lt;br /&gt;
*B-08527: Improved SAP connector error handling and removed assumption for fixed dll file names.&lt;br /&gt;
*B-08552: Migrated rest of SQL queries into Entity Framework as preparation for storing configuration data to Snowflake hybrid tables.&lt;br /&gt;
*B-08544: Frontend components have been updated.&lt;br /&gt;
*B-08561: Updated translations for release 2025.1.&lt;br /&gt;
&lt;br /&gt;
==Old Releases==&lt;br /&gt;
See older releases in [[QPR ProcessAnalyzer Release Archive]]&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
[[Category: QPR ProcessAnalyzer]]&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&amp;diff=28091</id>
		<title>QPR ProcessAnalyzer Release Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&amp;diff=28091"/>
		<updated>2026-04-12T20:59:45Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: /* Next Release: QPR ProcessAnalyzer 2026.3 (planned release during week of April 6th) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists all new features and fixed issues for each QPR ProcessAnalyzer release.&lt;br /&gt;
&lt;br /&gt;
==Next Release: QPR ProcessAnalyzer 2026.3 (planned release during week of April 6th)==&lt;br /&gt;
[[Next_Release_Roadmap|See roadmap for next release features and fixes]]&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
* QPR ProcessAnalyzer acts as MCP server where MCP tools are implemented using scripts. (B-09004)&lt;br /&gt;
* [[Object-centric_Process_Mining_Model#Configure_object-centric_model|Units for each object type]] can be specified in object-centric models. (B-08992)&lt;br /&gt;
* [[PA_Configuration_database_table#:~:text=DefaultColorPalette|Charts color palette]] can be changed globally to easily manage consistent visual layout. (B-08993)&lt;br /&gt;
* [[External_Content|External content component]] url supports tags refering to dashboard variables to show dynamically changing web page. (B-08998)&lt;br /&gt;
* [[QPR_ProcessAnalyzer_Project_Workspace#Exporting_Project|Project export and import]] using files support public filters stored in models. (B-09007)&lt;br /&gt;
* [[QPR_ProcessAnalyzer_KPI_Card|KPI Card]] shows null value label when data has no rows, and table and chart show &amp;quot;No data&amp;quot; message. (B-08999)&lt;br /&gt;
* [[QPR_MEA_Integration|QPR MEA web service]] can be connected using expression language. (B-09030)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
* Expression filter rules with greater/less than criteria were incorrectly applied as equal filters when editing chart filters. (D-14852)&lt;br /&gt;
* Flowchart had flows missing if shown flows were beyond the top-500 flows. (D-14848)&lt;br /&gt;
* Table column filter dialog was not entire visible in narrow tables located in bottom of screen. (D-14783)&lt;br /&gt;
* Opening Scripts tab was slow when there were scripts with long log. (D-14670)&lt;br /&gt;
* Fixed issue where object-centric model queries sometimes gave inconsistent results. (D-14854)&lt;br /&gt;
* Snowflake query gave &amp;quot;invalid identifier&amp;quot; error when there were two measures with same cases going though event measure filter. (D-14845)&lt;br /&gt;
* Filter rules drag-and-drop didn&#039;t work between expressions in the same chart. (D-14850)&lt;br /&gt;
* Clear error message is shown when invalid value is specified to dashboard aspect ratio flex, chart margin, dashboard margin, external content border width, or external content border corner radius. (D-14805)&lt;br /&gt;
* Improved error message when object-centric model perspective doesn&#039;t have the object type correctly defined. (D-14795)&lt;br /&gt;
&lt;br /&gt;
===Other improvements===&lt;br /&gt;
* Frontend components have been updated. (B-09028)&lt;br /&gt;
* Backend components have been updated. (B-09027)&lt;br /&gt;
&lt;br /&gt;
==Current Release: Additional release for QPR ProcessAnalyzer 2026.2 (build 10910) (released date 16.3.2026)==&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
* Filters report in System reports shows also other users&#039; private filters for admins. (B-09017)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
* Filter rules were lost when saving a filter with &amp;quot;Cases with specific events&amp;quot;, &amp;quot;Cases starting with&amp;quot; or &amp;quot;Cases ending to&amp;quot; rules. (D-14847)&lt;br /&gt;
* Fixed issue where object-centric models sometimes gave &amp;quot;Object &amp;lt;cachetablename&amp;gt; does not exist or not authorized&amp;quot; error. (D-14797)&lt;br /&gt;
* ExtractSap function didn&#039;t work with QPR ScriptLauncher when using secret for storing SAP password. (D-14813)&lt;br /&gt;
* Variation stepper incorrectly skipped steps when going down when variation count is maximum. (D-14844)&lt;br /&gt;
* Improved error message when creating model from filter fails. (D-14811)&lt;br /&gt;
* System dashboard names were incorrectly translated twice. (D-14841)&lt;br /&gt;
* AI Assistant had one translation missing. (D-14840)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2026.2 (build 10897) (released date 2026-02-26)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2026_2.pdf QPR_ProcessAnalyzer_2026_2.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Snowflake user-defined functions (UDF) used by QPR ProcessAnalyzer have been updated to use Python 3.13. Some of the old versions of the functions use Python 3.9 which has been deprecated by Snowflake. Although the old versions are not anymore used by QPR ProcessAnalyzer, they are not automatically deleted and thus Snowflake may send notifications about existing deprecated functions. It&#039;s recommended to remove the old functions which are following:&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V2&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V3&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V4&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V5&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V6&lt;br /&gt;
* QPRPA_UDF_BPMN_CONFORMANCE_VIOLATIONS_FLOWS&lt;br /&gt;
* QPRPA_UDF_BPMN_CONFORMANCE_VIOLATIONS_FLOWS_V2&lt;br /&gt;
* QPRPA_UDF_BPMN_CONFORMANCE_VIOLATIONS_FLOWS_V3&lt;br /&gt;
* QPRPA_UDF_BPMN_IS_CONFORMANT&lt;br /&gt;
* QPRPA_UDF_BPMN_IS_CONFORMANT_V2&lt;br /&gt;
* QPRPA_UDF_BPMN_IS_CONFORMANT_V3&lt;br /&gt;
* QPRPA_UDTF_CLUSTER&lt;br /&gt;
* QPRPA_UDTF_CLUSTER_V2&lt;br /&gt;
* QPRPA_UDTF_CLUSTER_V3&lt;br /&gt;
* QPRPA_UDTF_CLUSTER_V4&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
* Fully conformant [[QPR_ProcessAnalyzer_BPMN_Editor#Auto-creating_BPMN_Diagram_from_Eventlog|BPMN diagrams]] can be created from eventlogs with proper layout and identifying exclusive and parallel gateways. (B-08900)&lt;br /&gt;
* [[Object-Centric_Flowchart|Object-centric flowchart]] flows visibility can be controlled with a stepper based on top variations, and start and end symbols can be hidden for each event type. (B-08987)&lt;br /&gt;
* Added preset for object-centric flowchart, and improved Process Discovery dashboard usage for object-centric models. (B-08863)&lt;br /&gt;
* Viewer users can [[Filtering_in_QPR_ProcessAnalyzer#Saving_filters|save private filters]] for personal use. (B-08920)&lt;br /&gt;
* [[Chart_On-screen_Settings|On-screen settings]] support static and dynamic case/event attribute values selection, and [[Chart_Linked_Settings|linked settings]] can bind to on-screen settings. (B-08814)&lt;br /&gt;
* [[AI_Root_Causes|AI root causes analysis]] related error situations are easier to resolve with easier to understand error messages. (B-08997)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
* Histogram chart did not show at all and gave a JavaScript error. (D-14801)&lt;br /&gt;
* When chart with multiple series was sorted by measure, some datapoints were not shown when visible X-axis was limited by zooming or Custom layout settings. (D-14793)&lt;br /&gt;
* Disabled filter rules were incorrectly applied for the shown items in the filter rule editing dialog. (D-14791)&lt;br /&gt;
* If there were more than one Range filter components in dashboard, periods menu incorrectly affected all of them. (D-14818)&lt;br /&gt;
* List of event types in object-centric flowchart settings didn&#039;t open if there were object types linked to none events. (D-14798)&lt;br /&gt;
* Snowflake flowchart root causes analysis gave &amp;quot;SQL compilation error&amp;quot; when run with case duration criteria. (D-14790)&lt;br /&gt;
* Term &amp;quot;Second&amp;quot; when meaning time unit was translated incorrectly in French. (D-14803)&lt;br /&gt;
* OpenTelemetry metrics were not sent to Prometheus correctly. (D-14804)&lt;br /&gt;
* Opening script editor by url didn&#039;t show project path and also javascript error appeared to console. (D-14794)&lt;br /&gt;
* Fixed issue where case attribute prediction failed when using more than one iteration. (D-14789)&lt;br /&gt;
* SQLDataFrame with several append operations had performance issue. (D-14772)&lt;br /&gt;
* Null coalescing operators didn&#039;t work correctly in chaining in expression language. (D-14762)&lt;br /&gt;
* Native app could not call procedure if project referred to other database and schema. (D-14749)&lt;br /&gt;
* Trying to create script with duplicate name gave unclear error: Cannot insert duplicate key row in object &#039;dbo.PA_SCRIPT&#039; with unique index &#039;PA_SCRIPT_UNIQUE_NAME_IN_PROJECT&#039;. (D-14784)&lt;br /&gt;
* BPMN editor popup menu was partly hidden behind other chart components. (D-14345)&lt;br /&gt;
* When going to context menu report from BPMN editor, &amp;quot;Operation was cancelled by a user&amp;quot; was given when query was in progress. (D-14807)&lt;br /&gt;
* BPMN editor tooltips measure descriptions didn&#039;t disappear at all. (D-14809)&lt;br /&gt;
* Presets benchmarking didn&#039;t work for models without case attributes. (D-14822)&lt;br /&gt;
* Object-centric filter rule editor gave javascript error when opened for case-centric model. (D-14799)&lt;br /&gt;
* Object-centric filter rule could incorrectly be dropped as root causes comparison rule. (D-14796)&lt;br /&gt;
* Localization missing for &amp;quot;Save as new filter&amp;quot; button. (D-14839)&lt;br /&gt;
&lt;br /&gt;
===Other improvements===&lt;br /&gt;
* SQL queries run in Snowflake have been further optimized. (B-08936)&lt;br /&gt;
* Snowflake stored procedures and user defined functions have been migrated to Python 3.13. (B-08984)&lt;br /&gt;
* Frontend components have been updated. (B-08991)&lt;br /&gt;
* Backend components have been updated. (B-08990)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2026.1 (build 10870) (released date 2026-01-19)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2026_1.pdf QPR_ProcessAnalyzer_2026_1.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
QPR ProcessAnalyzer Server and QPR ScriptLauncher are running on .NET 10, replacing the previous .NET 8 version. When updating to this release, make sure to install the .NET 10 Runtime ([[Updating_QPR_ProcessAnalyzer_Server|update instructions]]). While .NET 8 and .NET 10 can run side by side, .NET 8 does not need to be removed immediately. However, for security reasons, any unused .NET 8 installation should be uninstalled as soon as possible after the update.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Known issue: The histogram visualization doesn&#039;t work in this release. The issue will be fixed in the next release. Possible workaround is to use the column chart where to set no spacing between columns. This can be configured with the following [[QPR_ProcessAnalyzer_Chart#:~:text=Custom%20Layout|Custom Layout]] settings:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;plotOptions&amp;quot;: {&lt;br /&gt;
		&amp;quot;series&amp;quot;: {&lt;br /&gt;
			&amp;quot;pointPadding&amp;quot;: 0,&lt;br /&gt;
			&amp;quot;groupPadding&amp;quot;: 0&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*Object-centric models support versatile [[Filtering_in_QPR_ProcessAnalyzer|object-centric filters]] based on case-centric filter rules using perspective. (B-08595)&lt;br /&gt;
*[[AI_Root_Causes|AI Root Causes analysis]] is shown in a hierarchy for easier readability. (B-08921)&lt;br /&gt;
*[[Process_Flowchart|Case-centric flowchart]] performance has been improved by making all queries simultaneously. (B-08916)&lt;br /&gt;
* Object counts indicator is hidden for object-centric models when perspective is not set. (B-08825)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
* Filter to exclude case attribute values incorrectly excluded null values even if null wasn&#039;t selected. (D-14773)&lt;br /&gt;
*Prediction generated invalid models where case IDs in events datatable didn&#039;t exist in cases datatable. (D-14758)&lt;br /&gt;
* AI Root Causes presets didn&#039;t work with models without case attributes. (D-14759)&lt;br /&gt;
* Snowflake query with multiple columns with aggregations and Coalesce function gave &amp;quot;invalid identifier&amp;quot; error. (D-14763)&lt;br /&gt;
*Dropdown list to add business calendar holidays from other model shows empty items. (D-14786)&lt;br /&gt;
*In-memory Average function didn&#039;t work when aggregating dates using model&#039;s Attribute function. (D-14761)&lt;br /&gt;
*Sometimes opening models list gave error &amp;quot;User doesn&#039;t have permission GenericRead to model&amp;quot;. (D-14742)&lt;br /&gt;
&lt;br /&gt;
===Other improvements=== &lt;br /&gt;
*[[QPR_ProcessAnalyzer_Security_Hardening#Added_HTTP_Headers|Content-security-policy]] img-src blob: directive has been restored for Highcharts image export. (B-08904)&lt;br /&gt;
*Backend components have been updated [[Updating_QPR_ProcessAnalyzer_Server|including .NET 10]]. (B-08926)&lt;br /&gt;
*Frontend components have been updated. (B-08927)&lt;br /&gt;
&lt;br /&gt;
==Additional release for QPR ProcessAnalyzer 2025.7 (build 10845) (released 2025-12-11)==&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*QPR ProcessAnalyzer can be deployed on-premise using [[Deploy_QPR_ProcessAnalyzer_from_Container|Linux containers]]. (B-08915)&lt;br /&gt;
*Snowflake SQL queries have been simplified to improve performance, e.g., when quering flows. (B-08901)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues=== &lt;br /&gt;
*ODBC and Loading script models, and models with calculated attributes didn&#039;t allow to create or modify case and event attribute filters from header. (D-14751)&lt;br /&gt;
*Fixed incompatibility issue when using Keycloak as identity provider for SAML authentication. (D-14757)&lt;br /&gt;
*System report for users incorrectly listed some users with read-only permissions as Developers (issue with the EffectivePermissionTypesFor function). (D-14748)&lt;br /&gt;
*Referrer-Policy HTTP header was incorrectly set to &amp;quot;same-origins&amp;quot; causing browser console error in Windows deployments. (D-14736)&lt;br /&gt;
*Fixed issue where QPR ProcessAnalyzer request ID was not added to Snowflake data modification queries. (D-14728)&lt;br /&gt;
*Login request duration was incorrectly shown as zero or negative in System reports. (D-14737)&lt;br /&gt;
*In chart settings, some Snowflake measures with aggregations were missing possibility to define percentile value. (D-14276)&lt;br /&gt;
*Fixed issue where it was not possible to delete a model with same name in the same project during the same session. (D-14708)&lt;br /&gt;
*Script editor to specific script can now be opened with a direct url containing the script_editor parameter. (D-14745)&lt;br /&gt;
*Fixed issue were sometimes an incorrect error code was given for a cancelled query. (D-14755)&lt;br /&gt;
*Improved error message if model loading fails when loading script returns incorrect type of data. (D-14637)&lt;br /&gt;
*Fixed issue where variations query with sampling was slow for new models. (D-14729)&lt;br /&gt;
*Added tooltip to gantt chart&#039;s table layout header so that the header text can be fully seen. (D-13748)&lt;br /&gt;
*Switching between Snowflake and in-memory chart by adjusting chart configuration json caused some items in chart settings to appear twice. (D-14667)&lt;br /&gt;
*Selecting model in dashboard when previously there was no model selected and going back to Workspace, gave error message. (D-14735)&lt;br /&gt;
*Query Designer gave untranslated error message: &amp;quot;You don&#039;t have permissions to model ...&amp;quot;. (D-14727)&lt;br /&gt;
*Query Designer gave untranslated error message &amp;quot;Unable to use Snowflake tables as data source for in-memory query&amp;quot;. (D-14683)&lt;br /&gt;
*In Query Designer, table column menu gave JavaScript error for columns where first row was null. (D-14684)&lt;br /&gt;
*Query Designer incorrectly gave message &amp;quot;There are no columns in the data&amp;quot; when the data had no rows. (D-14692)&lt;br /&gt;
*Fixed issue in Manage Users dialog where row selections disappeared when resizing the dialog. (D-14647)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.7 (build 10821) (released 2025-11-13)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_7.pdf QPR_ProcessAnalyzer_2025_7.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Known issue: Creating case and event attribute filters in dashboards is not possible from the main header for the following types of in-memory models and attributes:&lt;br /&gt;
*Any attributes for [[QPR_ProcessAnalyzer_Model_Datasources#ODBC_Datasource|ODBC loaded models]]&lt;br /&gt;
*Any attributes for [[QPR_ProcessAnalyzer_Model_Datasources#Loading_Script|Loading script models]]&lt;br /&gt;
*Calculated attributes in any in-memory models.&lt;br /&gt;
&lt;br /&gt;
Workaround is to create the filter rule in a chart&#039;s settings and drag-and-drop it to the header. The issue has been fixed by the next release (D-14751). The issue does not concern Snowflake models.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features ===&lt;br /&gt;
*Presets added for [[AI_Root_Causes|AI Root Causes analysis]] based on Snowflake Top Insights which is a decision tree model finding combinations of root cause contributors. (B-08889)&lt;br /&gt;
*Added new [[Range_Filter|filter selector]] component to dashboards to easily create date and number range filters. (B-08877)&lt;br /&gt;
*Projects can be browsed in the [[Navigation_Menu|navigation menu]] to access all dashboards, and also organized the menu into two columns. (B-08708)&lt;br /&gt;
*When QPR ProcessAnalyzer is [[Embed_to_Website|embedded to a website]], SAML authentication is performed in a separate window for more robust operation. (B-08871)&lt;br /&gt;
*For more flexible options, [[AI_Agent|AI Agents]] runs the language model query using the Snowflake account where the selected model is located. (B-08860)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*If DefaultUiLanguage in PA_CONFIGURATION table was not defined, users who haven&#039;t changed language could not login. (D-14706)&lt;br /&gt;
*Improved performance in opening dashboard. (D-14705)&lt;br /&gt;
* Snowflake Native App didn&#039;t show the version number and build timestamp correctly. (D-14703)&lt;br /&gt;
*Snowflake Native App activation failed with a custom compute pool if container service was in the suspended state. (D-14722)&lt;br /&gt;
*Server stuck when trying to generate SQL for SqlDataFrame having multiple columns with the same name. (D-14730)&lt;br /&gt;
*In eventlog prediction, fixed issues preventing the usage of case attribute value prediction. (D-14702)&lt;br /&gt;
*Snowflake DurationBetweenDates function calculated incorrectly when used in a in divisor. (D-14723)&lt;br /&gt;
* Import now succeeds when importing Snowflake datatables refering to data without access. (D-14694)&lt;br /&gt;
*Fixed incorrect color in table column filters, and Workspace loading time has been improved. (D-14704)&lt;br /&gt;
* Fixed issue where dropdown list with projects showed &amp;quot;undefined&amp;quot; in place of project id. (D-14659)&lt;br /&gt;
*Fixed issue where specifying a secret name longer than 440 characters, prevented saving the secret and resulted in an error. (D-14674)&lt;br /&gt;
* SAML authentication failed when it needed to create a new user to QPR ProcessAnalyzer. (D-14717)&lt;br /&gt;
* Fixed issue where SQL dataframe queries didn&#039;t work if the root expression ended to a semicolon. (D-14714)&lt;br /&gt;
*Specific Snowflake query with a comparison criteria, AggregateFrom and GetValueFrom functions gave error about invalid identifier. (D-14718)&lt;br /&gt;
&lt;br /&gt;
===Other improvements=== &lt;br /&gt;
*[[QPR_ProcessAnalyzer_Security_Hardening#HTTP_Response_Headers|Content-Security-Policy HTTP header]] has been reduced to more secure by removing the script-src &#039;unsafe-eval&#039; and img-src &#039;blob&#039; directives. (B-08897)&lt;br /&gt;
*Added [[QPR_ProcessAnalyzer_Security_Hardening#HTTP_Response_Headers|security related HTTP headers]]: X-Permitted-Cross-Domain-Policies, Cross-Origin-Embedder-Policy, Cross-Origin-Opener-Policy, Cross-Origin-Resource-Policy, Referrer-Policy, and Permissions-Policy. (B-08879)&lt;br /&gt;
*Implemented backend support for Snowflake Top Insights for [[SqlDataFrame_in_Expression_Language#:~:text=TopInsights|AI root causes analysis]]. (B-08664)&lt;br /&gt;
*Implemented improved error handling when trying to save too long text to database. (B-08892)&lt;br /&gt;
*For more understandable error messages, error handling and error message generation have been refactored. (B-08754)&lt;br /&gt;
*Optimized database queries and reduced log writing. (B-08870)&lt;br /&gt;
*Frontend components have been updated. (B-08899)&lt;br /&gt;
*Backend components have been updated. (B-08898)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.6 (build 10690) (released 2025-10-01)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_6.pdf QPR_ProcessAnalyzer_2025_6.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Known issue: If the [[PA_Configuration_database_table#:~:text=DefaultUiLanguage|DefaultUiLanguage]] system configuration is not defined, users who haven&#039;t changed their own language, are unable to login. To prevent this problem, please ensure the DefaultUiLanguage is defined. The next release has fixed this issue (D-14706).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Content-Security-Policy (CSP) HTTP header has been updated to enhance security by implementing more restrictive settings. The following directives have been added:&lt;br /&gt;
*object-src &#039;none&#039;&lt;br /&gt;
*frame-ancestors &#039;self&#039;&lt;br /&gt;
*form-action &#039;none&#039;&lt;br /&gt;
*base-uri &#039;none&#039;&lt;br /&gt;
*worker-src blob:&lt;br /&gt;
&lt;br /&gt;
These new restrictions may affect usage that has previously been possible. For example, with the new settings, QPR ProcessAnalyzer can be embedded to a website only within the same origin. For detailed instructions on embedding QPR ProcessAnalyzer on a different website, please refer to [[Embed_to_Website|this quide]]. Additionally, for information on modifying the CSP settings, see documentation for [[QPR_ProcessAnalyzer_Security_Hardening#HTTP_Response_Headers|security hardening]].&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
In the QPR ProcessAnalyzer 2025.6 Native App, the release version number is not displayed correctly in the User Settings dialog. This omission does not have any other complications. QPR ProcessAnalyzer 2025.6 is the only release with this issue, making it possible to identify this release despite the missing version number. This issue is specific to the Native App only. The next release has fixed this issue (D-14703).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*[[User_Settings#Starting_dashboard|Starting dashboard]] after login can be defined for user groups, allowing to create customized starting pages for easy navigation. (B-08791)&lt;br /&gt;
*Snowflake [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|chart&#039;s event filters]] are now embedded to filters created from chart, to precisely follow chart calculation. (B-08845)&lt;br /&gt;
*Result data can be filtered in Snowflake charts using [[QPR_ProcessAnalyzer_Chart#:~:text=Result%20filtering%20expression|result filtering expression]] which works for any datasets. (B-08751)&lt;br /&gt;
*Filter rules order now stays the same when making filter selections and confirming filter. (B-08801)&lt;br /&gt;
*Added model setting [[QPR_ProcessAnalyzer_Project_Workspace#Hiding_Object_Count_Statistics|Show object count statistics]] to hide object counts information in dropdown lists to optimize performance. (B-08849)&lt;br /&gt;
*Added support for [[Chart_On-screen_Settings#:~:text=showStatistics|hiding statistics for on-screen setting]] dropdown lists to improve performance, and in addition the case ID is hidden Case/Event attribute profiling presets. (B-08840)&lt;br /&gt;
*Added following audit fields to users and groups: Created date, Created by, Last modified date, and Last modified by. (B-08792)&lt;br /&gt;
*Snowflake Native App: Added procedure to that [[QPR_ProcessAnalyzer_Native_App_in_Snowflake#Recover_administrator_access|creates administrator user to Native App]] if access to the app has been lost. Also, prevented user management operations that remove own access. (B-08733)&lt;br /&gt;
*Snowflake Native App: Added procedure to [[Change_Native_App_Compute_Pool_Size|change Native App compute pool size]]. Changed new Native Apps to use CPU_X64_S size compute pool, and improved Native App stability. (B-08859)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues=== &lt;br /&gt;
*Snowflake Cortex based AI Assistant didn&#039;t show the results table. (D-14643)&lt;br /&gt;
*When percent stacking is used, Y-axis values are now shown as percentages in data label and tooltip. (D-14633)&lt;br /&gt;
*Fixed issue where Label&amp;amp;Link component had sometimes unnecessary vertical scrollbar. (D-14685)&lt;br /&gt;
*Model validation showed incorrect error message for models with numeric duplicate case ID&#039;s. (D-14687)&lt;br /&gt;
*In Workspace, scripts &amp;quot;View current run log&amp;quot; dialog didn&#039;t update log correctly when new entries were added. (D-14662)&lt;br /&gt;
*Event type mapping in charts didn&#039;t work in object-centric models. (D-14620)&lt;br /&gt;
*Model generation didn&#039;t work as transformation step using _system.ML.ApplyTransformation function. (D-14654)&lt;br /&gt;
*Others aggregation has been removed from date type of dimensions because tables don&#039;t work with textual data in date columns. (D-14623)&lt;br /&gt;
*Fixed issue in AI Assistant where using both Snowflake Cortex and OpenAI modes caused error. (D-14646)&lt;br /&gt;
*In User Management Effective permissions table, column filter incorrectly showed &amp;quot;true&amp;quot; and &amp;quot;false&amp;quot; as options. (D-14639)&lt;br /&gt;
*Pivot table incorrectly showed &amp;quot;Numeric value is not recognized&amp;quot; error when Count or Unique count aggregations were used. (D-14559)&lt;br /&gt;
*Workspace buttons are now visible in small screens spanning to multiple lines. (D-14587)&lt;br /&gt;
*Added tooltip text to &amp;quot;Move to&amp;quot; submenu containing projects so that long project names can be seen. (D-14612)&lt;br /&gt;
*Translation was missing from error messages when deleting items from recycle bin. (D-14652)&lt;br /&gt;
*Fixed data type related issues with in-memory Floor, Ceiling and aggregation functions. (D-14622)&lt;br /&gt;
*Optimized resource loading by getting rid of unnecessary file assets/i18n/en_US.json. (D-14641)&lt;br /&gt;
*Fixed issue where opening script editor gave javascript error about content-security-policy violation. (D-14627)&lt;br /&gt;
*Fixed issue in charts showing datatable content had a strange error when datatable was not selected. (D-14650)&lt;br /&gt;
*Fixed incorrect data types in some project, user and group related measures. (D-14619)&lt;br /&gt;
* Fixed issue where moving expression scripts was not possible when SQL Scripting was not allowed. (D-14624)&lt;br /&gt;
*Deleting and renaming scripts were not available for expression scripts when SQL Scripting was not allowed. (D-14625)&lt;br /&gt;
*Improved documentation for situation when non-existing Snowflake warehouse is configured for a model. (D-14543)&lt;br /&gt;
*Project properties dialog shows a descriptive text when no secrets have been defined instead of an empty table. (D-14611)&lt;br /&gt;
* Improved messages and New project button visibility in Workspace top level when no projects are shown. (D-14609)&lt;br /&gt;
*Event preset gave error if enabling Apply with Chart Filters setting and trying to create filters. (D-14695)&lt;br /&gt;
&lt;br /&gt;
===Other improvements===&lt;br /&gt;
*Added QPR ProcessAnalyzer API request ID to Snowflake queries to easily find matching query in Snowflake query history. (B-08839)&lt;br /&gt;
*[[QPR_ProcessAnalyzer_Security_Hardening#Added_HTTP_Headers|Content Security Policy HTTP header]] includes now object-src, frame-ancestors, form-action, base-uri, and worker-src. (B-08794)&lt;br /&gt;
*Snowflake queries have been optimized by removing null and empty string checks from mapped columns as they are now handled by the model validation check. (B-08837)&lt;br /&gt;
*Added backend support for object-centric model filtering based on case-centric filter rules. (B-08836)&lt;br /&gt;
*Frontend components have been updated. (B-08851)&lt;br /&gt;
*Backend components have been updated. (B-08852)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.5 (build 10361) (released 2025-08-21)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_5.pdf QPR_ProcessAnalyzer_2025_5.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
When using Snowflake Cortex, the AI Assistant is not showing the results table in the assistant&#039;s response. This issue has been fixed by the next release.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===  &lt;br /&gt;
*[[Object-Centric_Flowchart|Object-centric flowchart]] can also use object-to-object relations to link events and objects simplifying event-to-object configuration. (B-08671)&lt;br /&gt;
*[[AI_Assistant_for_QPR_ProcessAnalyzer|AI Assistant]] can provide precise quantitative analysis by making queries to eventlog data (powered by Snowflake Cortex Analyst and Agents). (B-08652)&lt;br /&gt;
*[[Filtering_in_QPR_ProcessAnalyzer|Flows and variations can be filtered]] from any event attribute viewpoint in Snowflake. (B-08737)&lt;br /&gt;
* Added [[Project_Properties_Dialog|project properties dialog]] for viewing project information, changing Snowflake connection settings and project secrets. (B-08655)&lt;br /&gt;
*[[QPR_ProcessAnalyzer_Project_Workspace#Validating_Model|Model validity check]] easily detects technically invalid models and shows detailed reason for invalidity. (B-08624)&lt;br /&gt;
*Projects can be [[QPR_ProcessAnalyzer_Project_Workspace#Exporting_Project|exported]] to json files and imported as new projects. (B-08717)&lt;br /&gt;
*Action buttons can be added to dashboard by defining [[Label_and_Link|label component]] that can change dashboard variables and run scripts. (B-08694)&lt;br /&gt;
*Web user interface is available in [[Languages_and_Localization|Ukrainian language]]. (B-08734)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Fixed following error when performing client-side SAP import: Could not find a part of the path (QPR_ImportSource_Chunk_*.tmp). (D-14589)&lt;br /&gt;
*Fixed issue where ManageProjects permission was incorrectly required when running scripts using QPR ScriptLauncher non-legacy mode. (D-14562)&lt;br /&gt;
*Fixed following error when using SAP import from SQL script called from expression language called from SQL: The given key &#039;&#039; was not present in the dictionary. (D-14593)&lt;br /&gt;
*Some analyses didn&#039;t work, when case ID columns for cases and events datatables differed only in upper/lowercase letters. (D-14556)&lt;br /&gt;
*Business calendar didn&#039;t work for some measures/dimensions/columns and some had business calendar checkboxes missing. (D-14563)&lt;br /&gt;
*Prediction failed to following error: transformer_model_next_activity/event_year_input_embedding. (D-14551)&lt;br /&gt;
*Scripting now works correctly after rows from PA_OPERATION_STATUS table have been deleted. (D-14545)&lt;br /&gt;
*Fixed issue where case-centric flowchart was very slow for object-centric model. (D-14544)&lt;br /&gt;
*Prevented creating dashboards, models and scripts with duplicate names in the same project. (D-09480)&lt;br /&gt;
*KPI Card now shows line breaks correctly in textual values. (D-14546)&lt;br /&gt;
*Improved table Excel export for list data to show items with separator character instead of showing as JSON. (D-14479)&lt;br /&gt;
*Column showing non-conformance reason was incorrectly aligned to right. (D-14570)&lt;br /&gt;
*GetRelatedValueFrom function caused column name conflict when used multiple times in same query. (D-14591)&lt;br /&gt;
* Fixed issue where in-memory sorting for arrays gave &amp;quot;Error in sorting analysis result rows possibly due to multiple types of values ...&amp;quot;. (D-14592)&lt;br /&gt;
*Array type of values were shown incorrectly when used Last Row Aggregates Over-limit Rows setting. (D-14616)&lt;br /&gt;
*Fixed the &amp;quot;Most common&amp;quot; text aggregation sorting error for in-memory calculation. (D-14573)&lt;br /&gt;
*Snowflake model validation gave incorrect error message when mapped column didn&#039;t exist in datatable. (D-14565)&lt;br /&gt;
*Improved model validation to detect when connection string key for model or datatable does not exist. (D-14607)&lt;br /&gt;
* Model validation gave incorrect error when when events datatable case id mapping was missing. (D-14566)&lt;br /&gt;
*Model validation gave incorrect error message when cases and events datatables were in different datasources. (D-14567)&lt;br /&gt;
*Model validation gave incorrect error message when underlying Snowflake table didn&#039;t exist. (D-14568)&lt;br /&gt;
*Workspace Card/Table mode toggle buttons were not translated. (D-14547)&lt;br /&gt;
*Some invalid queries gave unexpected errors and strange outputs. (D-14569)&lt;br /&gt;
* Added translations to model notifications preview table headers. (D-14590)&lt;br /&gt;
* Added translations to access denied message for header object counts indicator. (D-13967)&lt;br /&gt;
* AI Assistant explaining charts speaks now user interface language. (D-14578)&lt;br /&gt;
* AI Agent prompt chart editor didn&#039;t show correctly if model was not selected. (D-14536)&lt;br /&gt;
*AI Assistant gave &amp;quot;Unsupported cache table type&amp;quot; error when trying to explain object-centric flowchart. (D-14477)&lt;br /&gt;
&lt;br /&gt;
===Other improvements ===&lt;br /&gt;
*When trying to open dashboard with an invalid model, the precise model validation error message is shown. (B-08629)&lt;br /&gt;
*Account locked message is now same as username/password incorrect to prevent account enumeration attack. (B-08740)&lt;br /&gt;
*Stringified value format supports also json objects. (B-08766)&lt;br /&gt;
*Event attribute used as event type can be defined for flow and variation filters in Snowflake models (backend support). (B-08705)&lt;br /&gt;
*Translations have been updated. (B-08757)&lt;br /&gt;
*Frontend components have been updated. (B-08760)&lt;br /&gt;
*Backend components have been updated. (B-08759)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.4 (build 9985) (released 2025-05-28)==&lt;br /&gt;
&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_4.pdf QPR_ProcessAnalyzer_2025_4.pdf]&lt;br /&gt;
&lt;br /&gt;
===New features ===&lt;br /&gt;
*Added new AI Agent presets analyzing current state and proposing improvements based on different viewpoints, such as Event and Case Counts, Automation, Bottlenecks, and Root Causes. (B-08710)&lt;br /&gt;
*Added a [[Filter_Selectors#Filter_selector|generic filtering component]] that can be configured for creating any type of filters for distinct values. (B-08654)&lt;br /&gt;
*Volume declining in measures due to case sampling can be compensated in chart and flowchart by using a [[Measure,_Dimension_and_Column_Settings#Statistical_calculations|Statistical calculation method]]. (B-08598)&lt;br /&gt;
*In object-centric models, Object ID, Event ID, Event timestamp, and Event type [[Object-centric_Process_Mining_Model#Object-centric_perspectives|attribute names]] are shown correctly. (B-08680)&lt;br /&gt;
*Snowflake native app has now [[QPR_ProcessAnalyzer_Native_App_in_Snowflake#User_access_to_application|application roles]] for user (for using app) and administrator (for managing app). (B-08660)&lt;br /&gt;
*For Snowflake native app, IMPORTED PRIVILEGES ON SNOWFLAKE DB privilege is removed and instead the [[QPR_ProcessAnalyzer_Native_App_in_Snowflake#Optional_privilege_for_AI_Agent|CORTEX_USER database role]] can be assigned. (B-08718)&lt;br /&gt;
*[[QPR_ProcessAnalyzer_Native_App_in_Snowflake#Logging|Native app logging]] has been improved and now sharing application logs with QPR is possible. (B-08661)&lt;br /&gt;
* Added [[DataFrame_in_Expression_Language#CsvToDataFrame|CsvToDataFrame]] function to expression language to convert textual CSV data into in-memory dataframe. (B-08246)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Fixed &amp;quot;Invalid identifier&amp;quot; error when opening attribute selection list for case attribute preset caused by object id columns which differed only by letter capitalization. (D-14539)&lt;br /&gt;
*When Image component is clicked in dashboard edit mode, the component is now selected instead of link followed. (D-14525)&lt;br /&gt;
*Filters created from dimensions having dimension-specific filter rules will now create expression filter rule where dimensions-specific filter is embedded, for accurately following the selection. (D-14499)&lt;br /&gt;
*Filtering variations or list of event attribute values didn&#039;t work in in-memory models. (D-14476)&lt;br /&gt;
*Fixed issue where AI Agent didn&#039;t update when dashboard variable changed used by prompt chart. (D-14537)&lt;br /&gt;
* Fixed issue where some statistical calculations inadvertently changed row order when applying in groups. (D-14495)&lt;br /&gt;
*In in-memory models, array type of data was not dimensioned correctly. (D-14518)&lt;br /&gt;
* AI Agent Process Variations preset gave &amp;quot;division by zero&amp;quot; error when there were zero cases. (D-14508)&lt;br /&gt;
*Table grouping header labels were not formatted correctly. (D-14514)&lt;br /&gt;
*Fixed Root causes analysis to work with object-centric models. (D-14515)&lt;br /&gt;
*Filtering by OcelObjectId didn&#039;t work when model didn&#039;t have object type table for perspective used in filter. (D-14522)&lt;br /&gt;
*Fixed Root causes analysis with weighting expression to work with object-centric models. (D-14517)&lt;br /&gt;
*Fixed issue where persisting query results where query is started from datatable having custom table name overwrote data in original table. (D-14528)&lt;br /&gt;
*Flowchart SVG export did not show start and end symbols. (D-12401)&lt;br /&gt;
*Fixed issue where join operation didn&#039;t find renamed columns in SqlDataFrames. (D-14512)&lt;br /&gt;
*Improved chart filtering button positions to work with small chart sizes. (D-14509)&lt;br /&gt;
*Datatable foreign key columns dictionary data type was incorrect preventing reading columns information. (D-14505)&lt;br /&gt;
*Workspace scripts editor allowed to change script code for viewer users (altough not save it). (D-14534)&lt;br /&gt;
* In chart custom sorting, trying to refer to measure that had None aggregation, caused SQL compilation error. (D-14526)&lt;br /&gt;
*Model validation check crashed when the datatables were in different datasources. (D-14502)&lt;br /&gt;
&lt;br /&gt;
===Other improvements=== &lt;br /&gt;
*Added expression language functions for using Snowflake Cortex Agents with Cortex Analyst access to query eventlogs. (B-08647)&lt;br /&gt;
*Projects can be export and imported in JSON format containing dashboards, models, datatables and scripts. (B-08613)&lt;br /&gt;
*Simplified object-centric model queries by accepting OcelObjectId as object attribute name in filters. (B-08702)&lt;br /&gt;
*Streamlined import API by removing importMode parameter and changing default fileType to CSV. (B-08704)&lt;br /&gt;
*Frontend components have been updated. (B-08695)&lt;br /&gt;
*Backend components has been updated. (B-08696)&lt;br /&gt;
&lt;br /&gt;
==Additional release for QPR ProcessAnalyzer 2025.3 (build 9805) (released 2025-04-30)==&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*Navigation menu is now displaying dashboards from open dashboard&#039;s project or from selected Workspace project (earlier dashboards were shown from the selected model&#039;s project). (B-08673)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues === &lt;br /&gt;
*Fixed issue where AI Agent made unnecessary queries when filtering dashboard, and also opening dashboard with lot of chart may have been slow. (D-14503)&lt;br /&gt;
*When datatable columns were modified, queries to the data may have given &amp;quot;Invalid identifier&amp;quot; error. (D-14507)&lt;br /&gt;
*Clustering analysis didn&#039;t work with object-centric models. (D-14486)&lt;br /&gt;
*When a new groups is added, it&#039;s selected by default in the Manage Users dialog. Also clicking a selected group does not deselect it. (D-14491)&lt;br /&gt;
*Deleting last group didn&#039;t remove the group from the list. (D-14504)&lt;br /&gt;
&lt;br /&gt;
==Additional release for QPR ProcessAnalyzer 2025.3 (build 9725) (released 2025-04-23)==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
There is an issue causing some dashboards having more than 50 charts to open slowly. The issue has been fixed in the next release by D-14503.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Fixed Issues=== &lt;br /&gt;
*Fixed issue where system stopped responding after opening Scripts tab several times (error in logs: Timeout expired prior to obtaining a connection from the pool). (D-14506)&lt;br /&gt;
*Fixed issue where the object-centric models object types tables didn&#039;t work without the timestamp column. (B-08683)&lt;br /&gt;
*Snowflake cache tables are now created after initiating calculation is completed to improve performance. (D-14460)&lt;br /&gt;
*Fixed issue in User Management where assigning role to project or adding user to group was not saved when there was a column filter. (D-14124)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.3 (build 9699) (released 2025-04-16)==&lt;br /&gt;
&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_3.pdf QPR_ProcessAnalyzer_2025_3.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
There is a potentially serious issue that can cause the system to stop responding, when opening the Scripts tab in the Workspace. The issue has been fixed in the next release (build 9725) by D-14506.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Object-centric model simplification in the story B-08667 (object attributes can only have a single value) doesn&#039;t work with this release. The issue has been fixed in the next release (build 9725) by B-08683.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*Enhanced [[AI Agent]] with UI for editing prompt datasets, and added checkbox to include other charts in dashboard to prompt. (B-08641)&lt;br /&gt;
*In [[Object-centric_Process_Mining_Model|object-centric models]], object-to-object relations are now followed by traversing once all object types. (B-08606)&lt;br /&gt;
*In object-centric models, event type and object type tables are not mandatory anymore, and common attributes can be specified in events and objects tables. (B-08663)&lt;br /&gt;
*Object-centric models support simplified structure where object attributes can only have a single value. (B-08667)&lt;br /&gt;
*Object relation steps setting can be empty to traverse all linked objects in the object-centric model. (B-08668)&lt;br /&gt;
*Snowflake Event Types preset has been improved by adding suggestion of desired and undesired activities based on frequency of occurrence. (B-08656)&lt;br /&gt;
* Added checkbox for [[Measure,_Dimension_and_Column_Settings#Advanced_settings|disabling filtering]] for individual dimensions or columns. (B-08589)&lt;br /&gt;
*Case and event attributes dropdown lists show number of unique values in Snowflake models (instead of attribute datatype as previously). (B-08316)&lt;br /&gt;
*[[SAML_2.0_Federated_Authentication|SAML authentication]] can now synchronize user groups from identity provider. (B-08612)&lt;br /&gt;
*Groups can be [[Manage_Users_and_Groups#Deleting_Group|deleted]] in user management. (B-08330)&lt;br /&gt;
*[[Storing_Secrets_for_Scripts|Secrets]] can be defines as global that can be used by all projects. To set global secrets, [[Generic_Functions_in_QPR_ProcessAnalyzer#SetSecret|SetSecret]] function works also in the generic context. (B-08599)&lt;br /&gt;
*Snowflake [[Clustering_Analysis|Clustering analysis]] shows now number of event occurrences as features describing clusters. (B-08353)&lt;br /&gt;
*Model validity check has been extended to find issues in the eventlog data for Snowflake case-centric models. (B-07910)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Fixed a potential issue which could have leaked database connections and caused connection pool starvation. (D-14414)&lt;br /&gt;
*Renewed self-signed certificate used by SAML 2.0 authentication with ten years of validity. (D-14424)&lt;br /&gt;
*Improved CallWebService function to send request body when using DELETE method. (D-14488)&lt;br /&gt;
* Login page now shows correct error message when there are serious system errors during login. (D-14480)&lt;br /&gt;
*&amp;quot;Datatable contents (in-memory)&amp;quot; option now works also with Snowflake datatables. (D-14391)&lt;br /&gt;
*Added maximum data size limitation to AI assistant to avoid error with large datasets. (D-14419)&lt;br /&gt;
*Day of the Year/Week/Month/Quater selection didn&#039;t work with specific event time in in-memory chart. (D-14421)&lt;br /&gt;
*KPI card now shows a scrollbar when content doesn&#039;t fit to the available space. (D-13428)&lt;br /&gt;
* Workspace projects hierarchy tooltips didn&#039;t show special characters correctly. (D-14430)&lt;br /&gt;
*BPMN editor crashed when creating filter from tasks giving following error: Cannot read properties of null (reading &#039;querySelector&#039;). (D-14399)&lt;br /&gt;
*Value expressions didn&#039;t work that are referred in dimension and containing aggregation. (D-13624)&lt;br /&gt;
* Fixed issue where object-centric flowchart filter selection gave error when case-centric model was selected. (D-14408)&lt;br /&gt;
*Fixed issue where query to non-existing model incorrectly returned &amp;quot;Sequence contains no elements&amp;quot;. (D-14402)&lt;br /&gt;
*Incorrect StringifiedValues in chart settings and expression filter rule caused UI to stuck. (D-14485)&lt;br /&gt;
*Table column filter value list didn&#039;t show the null value label correctly. (D-13844)&lt;br /&gt;
*&amp;quot;Visualize list items with colors&amp;quot; setting didn&#039;t work with the &amp;quot;Last Row Aggregates Over-limit Rows&amp;quot; setting. (D-14357)&lt;br /&gt;
*Made sure that failed queries are not added to model filter cache. (D-14484)&lt;br /&gt;
*Chart settings crashed when trying to use without model selected giving following error: Cannot read properties of undefined (reading &#039;injectValue&#039;). (D-14395)&lt;br /&gt;
*Fixed issue where chart settings opened on top of full screen BPMN editor. (D-14472)&lt;br /&gt;
*Show details button in some error messages didn&#039;t have any effect when pressed. (D-14490)&lt;br /&gt;
*Model validation message was incorrect for model where other datatable is Snowflake and other SQL Server. (D-14475)&lt;br /&gt;
&lt;br /&gt;
=== Other improvements=== &lt;br /&gt;
*Logging has been set to Warning level for Native App to avoid excessive number of log entries to Snowflake events table. (B-08687)&lt;br /&gt;
*Datatable duplication is now synchronous in Snowflake until 30 seconds to avoid showing the created duplicate datatable with zero rows while the operation is still in progress. (B-08634)&lt;br /&gt;
*Improved Snowflake cache table creation logic when there are multiple simultaneous queries. (B-08622)&lt;br /&gt;
*Refactored SQL Server operations to improve robustness and avoid leaking database connections. (B-08649)&lt;br /&gt;
*Frontend components have been updated. (B-08638)&lt;br /&gt;
* Backend components have been updated. (B-08639)&lt;br /&gt;
*Translations have been updated. (B-08640)&lt;br /&gt;
&lt;br /&gt;
== Additional release for QPR ProcessAnalyzer 2025.2 (build 9476) (released 2025-03-19)==&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Fixed issue where charts axis labels had unnecessary line breaks on spaces. (D-14413)&lt;br /&gt;
*Fixed issue where AI Agent and LLMComplete function didn&#039;t work in Native App. (D-14410)&lt;br /&gt;
*Fixed translations for Workspace Scripts tab column filter for Status and Result columns. (D-14393)&lt;br /&gt;
*Fixed issue where Volume Distribution of Flow Analyzed object type didn&#039;t work. (D-14390)&lt;br /&gt;
*Removed reference to fonts.googleapis.com for stylesheets to avoid content-security-policy error. (D-14373)&lt;br /&gt;
* Syncfusion dialog headers now show special characters correctly. (D-14407)&lt;br /&gt;
*Object attribute filter gave null reference error when object type didn&#039;t exist in model. (D-14379)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.2 (build 9410) (released 2025-03-05)==&lt;br /&gt;
&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_2.pdf QPR_ProcessAnalyzer_2025_2.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Detection of models with incomplete datasource configuration has been improved, and now models where the event timestamp column type is string, are not anymore considered valid models. Earlier the string type of data was accepted and converted into dates when model was loaded (for in-memory models) or in SQL queries (in Snowflake models).&lt;br /&gt;
&lt;br /&gt;
The following query can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] (with System administrator user) to list models where the events datatable timestamp column type is string:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Models.Where({&lt;br /&gt;
	let timestampColumn = _.Configuration?.TryGetValue(&amp;quot;Datasource&amp;quot;)?.TryGetValue(&amp;quot;Events&amp;quot;)?.TryGetValue(&amp;quot;Columns&amp;quot;)?.TryGetValue(&amp;quot;Timestamp&amp;quot;);&lt;br /&gt;
	return First(_.EventsDatatable?.Columns?.Where(Name==timestampColumn))?.Datatype == &amp;quot;String&amp;quot;;&lt;br /&gt;
}).(Name + &amp;quot; (id: &amp;quot; + Id + &amp;quot;)&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
For Snowflake dashboards, table actions to [[QPR_ProcessAnalyzer_Table#Table_actions|set dashboard variables]] now set the variable values in the [[Stringified_Value_Format|stringified format]] instead of as raw values. This makes the variables set by table actions compatible with the [[Chart_Linked_Settings|linked settings]] which also use the stringified format by default for the Snowflake models.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features=== &lt;br /&gt;
*Introduced [[AI Agent]] which is a new dashboard component showing LLM generated answers based on user prompt and input data. (B-08556)&lt;br /&gt;
*Added [[Filtering_in_QPR_ProcessAnalyzer_Queries#Object-centric_filter_rules|filtering by object attributes]] for object-centric models. Filters can be created from dialog or selecting items from charts. (B-08547)&lt;br /&gt;
*In object-centric models, object-to-object relations are followed only forward and backward directions. Additionally, there are performance improvements for object-centric models. (B-08577)&lt;br /&gt;
*Snowflake warehouse can be [[QPR_ProcessAnalyzer_Project_Workspace#Change_Snowflake_Warehouse_for_Model|specified for each model]] allowing to use optimal type of warehouse for different sizes of models. (B-08610)&lt;br /&gt;
*Home screen has been removed, and [[QPR_ProcessAnalyzer_Project_Workspace|Workspace]] has new card layout and other UX improvements. (B-08541)&lt;br /&gt;
*Added [[Filtering_in_QPR_ProcessAnalyzer#Saving_filters|filter description]] field to filter properties dialog. (B-08451)&lt;br /&gt;
*Removed event type existence check from charts, so that non-existing event types are allowed. (B-08585)&lt;br /&gt;
*Snowflake Native App configuration data can be [[QPR_ProcessAnalyzer_Native_App_in_Snowflake#Backup_configuration_data|backed up to a snapshot and restored]]. (B-08591)&lt;br /&gt;
*Improved detection of invalid models by adding [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#CheckModelValidity|CheckModelValidity]] function returning model validation errors. (B-08426)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Prevented following error in Snowflake dashboards: Object &amp;quot;qprpa_dt_cache_...&amp;quot; already exists when creating a cache table. (D-14348)&lt;br /&gt;
*In-memory chart &amp;quot;Cases filtered by attribute&amp;quot; didn&#039;t work for date type of attributes. (D-14387)&lt;br /&gt;
*Fixed issue where each dashboard element resize made element width or height increase when chart margin was more than zero. (D-14361)&lt;br /&gt;
*Chart related buttons are now hidden in datatable content preview. (D-14360)&lt;br /&gt;
*Fixed issue where gateway based data import didn&#039;t write SAP errors into script log. (D-14351)&lt;br /&gt;
*Snowflake chart gave error when &amp;quot;Last Row Aggregates Over-limit Rows&amp;quot; setting was used with list aggregation. (D-14352)&lt;br /&gt;
*&amp;quot;Users&amp;quot; system report performance has been improved by adding EffectivePermissionTypesFor function. (D-14266)&lt;br /&gt;
*Fixed issue where AI Assistant crashed when used with a model having ODBC or expression datasource. (D-14340)&lt;br /&gt;
*Fixed issue where AI Assistant explaining charts crashed when applying to Label component. (D-14344)&lt;br /&gt;
* Improved client-side import not to perform redundant datatable configuration data queries. (D-14347)&lt;br /&gt;
*Model was incorrectly identified as in-memory model when datatables were missing. (D-14325)&lt;br /&gt;
*Model default filter is now in use when model is opened from Workspace. (D-14376)&lt;br /&gt;
&lt;br /&gt;
===Other improvements===  &lt;br /&gt;
*Changed Snowflake charts to store [[QPR_ProcessAnalyzer_Table#Table_actions|variable change actions]] in stringified format to make them compatible with linked settings. (B-08587)&lt;br /&gt;
*Backend support for [[Filtering_in_QPR_ProcessAnalyzer_Queries#Object-centric_filter_rules|object-centric filter rules Disabled flag]]. (B-08611)&lt;br /&gt;
*Implemented Entity Framework based database initialization and migrations. (B-08566)&lt;br /&gt;
*Added support for following Entity Framework database providers: SQL Server (full), Snowflake Hybrid Tables (experimental), PostgreSQL (experimental). (B-08581)&lt;br /&gt;
*Frontend components have been updated. (B-08597)&lt;br /&gt;
*Backend components have been updated. (B-08596)&lt;br /&gt;
*Translations have been updated for release 2025.2. (B-08607)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.1 (build 9124) (released 2025-01-23)==&lt;br /&gt;
&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_1.pdf QPR_ProcessAnalyzer_2025_1.pdf]&lt;br /&gt;
&lt;br /&gt;
===New features=== &lt;br /&gt;
*B-08526: Variations and other lists can be visualized with colors, and &amp;quot;List separator&amp;quot; field is available for dimensions and columns.&lt;br /&gt;
*B-08530: Charts can have a [[QPR_ProcessAnalyzer_Chart#Visual_Settings|description text]] which are shown in a dialog when pressing the info button.&lt;br /&gt;
*B-08546: Added [[SQL_Expressions#LLMComplete|LlmComplete]] function to access Snowflake Cortex large language models.&lt;br /&gt;
*B-08439: Added project settings [[QPR_ProcessAnalyzer_Project_Workspace#Project-level_Snowflake_Database_and_Schema|DatabaseNameInDataSource and SchemaNameInDataSource]] to define Snowflake database and schema.&lt;br /&gt;
*B-08531: Projects can be created in expression language using [[Generic_Functions_in_QPR_ProcessAnalyzer#CreateProject|CreateProject]] function.&lt;br /&gt;
*B-08387: Added backend support for object-centric model [[Filtering_in_QPR_ProcessAnalyzer_Queries#Object-centric_filter_rules|filtering for object attributes]].&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*D-14339: Week numbers showed incorrect year for last dates in the end of year.&lt;br /&gt;
*D-14323: Filtering with &amp;quot;Split data by filtering&amp;quot; dimension didn&#039;t work with exclude type of filter rules and when there were multiple filter rules.&lt;br /&gt;
*D-14346: Fixed issue where manual activation using activation utility didn&#039;t work.&lt;br /&gt;
*D-14326: Fixed issue where extra columns in objects table broke object-centric model.&lt;br /&gt;
*D-14306: Fixed issue when there were both TimeStamp and ToTimeStamp event data columns.&lt;br /&gt;
*D-14332: Flowchart event type and flow queries are now simultaneous which will improve performance.&lt;br /&gt;
*D-14331: Flowchart lost selection when flowchart used linked variables with array values.&lt;br /&gt;
*D-14299: Table text filters didn&#039;t work in Snowflake (starts with, ends with, contains).&lt;br /&gt;
*D-14338: Model.Modify function generated model json configuration that frontend wasn&#039;t incompatible with.&lt;br /&gt;
*D-14342: Flow step and Zoom settings control have same size and layout is aligned.&lt;br /&gt;
*D-14316: Occurrence impact on case duration measure didn&#039;t work with certain in-memory models.&lt;br /&gt;
*D-14327: AI Assistant had console error when pressing send button without text.&lt;br /&gt;
*D-14341: AI Assistant overlapped with BPMN editor in fullscreen mode.&lt;br /&gt;
*D-14321: Added error message for AI Assistant when trying to use it without model selected.&lt;br /&gt;
&lt;br /&gt;
===Other improvements=== &lt;br /&gt;
*B-08391: Datatable access has been optimized improving performance for object-centric models.&lt;br /&gt;
* B-08529: Added support for array type in stringified value format.&lt;br /&gt;
*B-08527: Improved SAP connector error handling and removed assumption for fixed dll file names.&lt;br /&gt;
*B-08552: Migrated rest of SQL queries into Entity Framework as preparation for storing configuration data to Snowflake hybrid tables.&lt;br /&gt;
*B-08544: Frontend components have been updated.&lt;br /&gt;
*B-08561: Updated translations for release 2025.1.&lt;br /&gt;
&lt;br /&gt;
==Old Releases==&lt;br /&gt;
See older releases in [[QPR ProcessAnalyzer Release Archive]]&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
[[Category: QPR ProcessAnalyzer]]&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=Next_Release_Roadmap&amp;diff=28090</id>
		<title>Next Release Roadmap</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=Next_Release_Roadmap&amp;diff=28090"/>
		<updated>2026-04-12T20:58:59Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--10931--&amp;gt;&lt;br /&gt;
This page contains preliminary information about new features and fixed issues in the next release.&lt;br /&gt;
&lt;br /&gt;
==New features in next release==&lt;br /&gt;
* Units can be specified for object counts for each object types in object-centric models. (&#039;&#039;B-08992&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
==Features under work==&lt;br /&gt;
* Data models with datatables and relations can be visualized and modified with ER diagrams. (&#039;&#039;B-09023&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Note: Features and fixes currently under work are not necessarily targeting to the next release.&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=Next_Release_Roadmap&amp;diff=28089</id>
		<title>Next Release Roadmap</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=Next_Release_Roadmap&amp;diff=28089"/>
		<updated>2026-04-12T20:58:54Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--10931--&amp;gt;&lt;br /&gt;
This page contains preliminary information about new features and fixed issues in the next release.&lt;br /&gt;
&lt;br /&gt;
==New features in next release==&lt;br /&gt;
* Connection to MEA using expression language. (&#039;&#039;B-09030&#039;&#039;)&lt;br /&gt;
* QPR ProcessAnalyzer acts as MCP server where MCP tools are implemented using scripts. (&#039;&#039;B-09004&#039;&#039;)&lt;br /&gt;
* Frontend components have been updated. (&#039;&#039;B-09028&#039;&#039;)&lt;br /&gt;
* Units can be specified for object counts for each object types in object-centric models. (&#039;&#039;B-08992&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
==Issues fixed in next release==&lt;br /&gt;
* Reduced project properties dialog minimum height to fit for smaller screens. (&#039;&#039;D-14834&#039;&#039;)&lt;br /&gt;
* Table column filter is not entire visible in narrow tables located in bottom of screen. (&#039;&#039;D-14783&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
==Features under work==&lt;br /&gt;
* Data models with datatables and relations can be visualized and modified with ER diagrams. (&#039;&#039;B-09023&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Note: Features and fixes currently under work are not necessarily targeting to the next release.&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=Next_Release_Roadmap&amp;diff=28088</id>
		<title>Next Release Roadmap</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=Next_Release_Roadmap&amp;diff=28088"/>
		<updated>2026-04-10T11:56:46Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--10926--&amp;gt;&lt;br /&gt;
This page contains preliminary information about new features and fixed issues in the next release.&lt;br /&gt;
&lt;br /&gt;
==New features in next release==&lt;br /&gt;
* Connection to MEA using expression language. (&#039;&#039;B-09030&#039;&#039;)&lt;br /&gt;
* QPR ProcessAnalyzer acts as MCP server where MCP tools are implemented using scripts. (&#039;&#039;B-09004&#039;&#039;)&lt;br /&gt;
* Frontend components have been updated. (&#039;&#039;B-09028&#039;&#039;)&lt;br /&gt;
* Units can be specified for object counts for each object types in object-centric models. (&#039;&#039;B-08992&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
==Issues fixed in next release==&lt;br /&gt;
* Reduced project properties dialog minimum height to fit for smaller screens. (&#039;&#039;D-14834&#039;&#039;)&lt;br /&gt;
* Table column filter is not entire visible in narrow tables located in bottom of screen. (&#039;&#039;D-14783&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
==Features under work==&lt;br /&gt;
* Data models with datatables and relations can be visualized and modified with ER diagrams. (&#039;&#039;B-09023&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Note: Features and fixes currently under work are not necessarily targeting to the next release.&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=QPR_MEA_Integration&amp;diff=28087</id>
		<title>QPR MEA Integration</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=QPR_MEA_Integration&amp;diff=28087"/>
		<updated>2026-04-09T22:31:23Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: /* QueryObjects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;QPR ProcessAnalyzer is able to connect to a QPR MEA (QPR Suite) instance and call its Web Service operations. To use the MEA connection, the following steps are required:&lt;br /&gt;
# Create a connection string and store it as a secret.&lt;br /&gt;
# Create a connection object.&lt;br /&gt;
# Call web service operations using the connection object.&lt;br /&gt;
&lt;br /&gt;
QPR MEA Web Service documentation: https://kb.qpr.com/qpr2025-1/qpr_web_service.html.&lt;br /&gt;
&lt;br /&gt;
== MEA Connection String ==&lt;br /&gt;
To connect to QPR MEA, the MEA connection string needs to be created and stored as a [[Storing_Secrets_for_Scripts|secret]].&lt;br /&gt;
&lt;br /&gt;
The MEA connection string is a json object with following properties:&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039;: URL of the QPR MEA Web Service endpoint.&lt;br /&gt;
* &#039;&#039;&#039;logOnName&#039;&#039;&#039;: Log on name of the user who will access the QPR MEA Web Service.&lt;br /&gt;
* &#039;&#039;&#039;password&#039;&#039;&#039;: User&#039;s password in QPR MEA.&lt;br /&gt;
&lt;br /&gt;
Example connection string:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ &amp;quot;url&amp;quot;: &amp;quot;https://&amp;lt;hostname&amp;gt;/QPR/Portal/QPR.Isapi.dll/wsforward/MainService.svc/webHttp&amp;quot;, &amp;quot;logOnName&amp;quot;: &amp;quot;MyUser&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;MyPassword&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example to store secret:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).SetSecret(&amp;quot;QprMea&amp;quot;, &amp;quot;MeaConnection&amp;quot;, `{ &amp;quot;url&amp;quot;: &amp;quot;https://&amp;lt;hostname&amp;gt;/QPR/Portal/QPR.Isapi.dll/wsforward/MainService.svc/webHttp&amp;quot;, &amp;quot;logOnName&amp;quot;: &amp;quot;MyUser&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;MyPassword&amp;quot; }`);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MEA Web Service Operations ==&lt;br /&gt;
&lt;br /&gt;
=== QueryObjects ===&lt;br /&gt;
Calls QueryObjects and returns query results as a hierarchical dictionary. More information: https://kb.qpr.com/qpr2025-1/queryobjects.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;Query&#039;&#039;&#039; (String): Actual query. See https://kb.qpr.com/qpr2025-1/query_syntax.html.&lt;br /&gt;
* &#039;&#039;&#039;Attributes&#039;&#039;&#039; (String): Comma-separated list of attributes that are included in the results. See https://kb.qpr.com/qpr2025-1/supported_parameters.html.&lt;br /&gt;
* &#039;&#039;&#039;Criteria&#039;&#039;&#039; (String): Results filtering criteria. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=globalparameters.&lt;br /&gt;
* &#039;&#039;&#039;Sort By&#039;&#039;&#039; (String): Comma-separated list of attributes for sorting results.&lt;br /&gt;
* &#039;&#039;&#039;Options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Return name and typename of all the subprocesses in a model whose name contains text &amp;quot;Account&amp;quot;. Results are ordered by name and only at most three results are returned.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .QueryObjects(&lt;br /&gt;
    &amp;quot;[PG.1374444994].Subprocess&amp;quot;,&lt;br /&gt;
    &amp;quot;name, typename&amp;quot;,&lt;br /&gt;
    `Find(&amp;quot;Account&amp;quot;, Name)`,&lt;br /&gt;
    &amp;quot;name&amp;quot;,&lt;br /&gt;
    &amp;quot;MaxCount=3&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CreateObject ===&lt;br /&gt;
Calls CreateObject and returns the MEA ID of the created object. More information: https://kb.qpr.com/qpr2025-1/createobject2.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;Namespace ID&#039;&#039;&#039; (String): MEA ID of the namespace into which the object is to be created.&lt;br /&gt;
* &#039;&#039;&#039;Object type name&#039;&#039;&#039; (String): Defines type of the new object.&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039; (String): Defines name for the new object.&lt;br /&gt;
* &#039;&#039;&#039;Parent IDs&#039;&#039;&#039; (String or String*): MEA ID of parent object. If array is given, every array element specifies one ID.&lt;br /&gt;
* &#039;&#039;&#039;Attributes&#039;&#039;&#039; (Dictionary): Key/value pairs of &amp;lt;attribute&amp;gt;/&amp;lt;attribute value&amp;gt; to be set for the created object.&lt;br /&gt;
* &#039;&#039;&#039;Options&#039;&#039;&#039; (String): Optional options for the operation. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Connect to the configured QPR MEA and create a new top-level comment action.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .CreateObject(&amp;quot;PO&amp;quot;, &amp;quot;Comment&amp;quot;, &amp;quot;Test comment&amp;quot;, &amp;quot;&amp;quot;, #{&amp;quot;description&amp;quot;: &amp;quot;Test comment description&amp;quot;});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DeleteObject ===&lt;br /&gt;
Calls DeleteObject. More information: https://kb.qpr.com/qpr2025-1/deleteobject2.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;Object IDs&#039;&#039;&#039; (String or String*): One or more MEA IDs of objects to be deleted. If array is given, every array element specifies one ID of object to be deleted.&lt;br /&gt;
* &#039;&#039;&#039;Options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Connect to the configured QPR MEA and delete an object. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .DeleteObject(&amp;quot;PO.0.985518423&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GetAttribute ===&lt;br /&gt;
Calls GetAttribute and returns the value of given object attribute as a string. More information: https://kb.qpr.com/qpr2025-1/getattributeasstring.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;Object ID&#039;&#039;&#039; (String):  MEA ID of an object from which the attribute is fetched.&lt;br /&gt;
* &#039;&#039;&#039;Attribute&#039;&#039;&#039; (String): Name of the attribute that is queried. See https://kb.qpr.com/qpr2025-1/supported_parameters.html.&lt;br /&gt;
* &#039;&#039;&#039;Options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Returns the name of an object.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .GetAttribute(&lt;br /&gt;
    &amp;quot;[PG.785401983.683494101]&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SetAttribute ===&lt;br /&gt;
Calls SetAttribute to set an attribute value. More information: https://kb.qpr.com/qpr2025-1/setattribute.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;Object IDs&#039;&#039;&#039; (String or String*): MEA ID of an object from which the attribute is fetched. If array is given, every array element specifies one ID.&lt;br /&gt;
* &#039;&#039;&#039;Attribute&#039;&#039;&#039; (String): Name of the attribute that is queried. See https://kb.qpr.com/qpr2025-1/supported_parameters.html.&lt;br /&gt;
* &#039;&#039;&#039;Value&#039;&#039;&#039; (String): Value to be set for given attribute.&lt;br /&gt;
* &#039;&#039;&#039;Options&#039;&#039;&#039;:  Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Change the name of a user to &amp;quot;ChangedUser&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .SetAttribute(&lt;br /&gt;
    &amp;quot;[UM.0.123]&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;,&lt;br /&gt;
    &amp;quot;ChangedUser&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=QPR_MEA_Integration&amp;diff=28086</id>
		<title>QPR MEA Integration</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=QPR_MEA_Integration&amp;diff=28086"/>
		<updated>2026-04-09T22:30:04Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: /* MEA Web Service Operations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;QPR ProcessAnalyzer is able to connect to a QPR MEA (QPR Suite) instance and call its Web Service operations. To use the MEA connection, the following steps are required:&lt;br /&gt;
# Create a connection string and store it as a secret.&lt;br /&gt;
# Create a connection object.&lt;br /&gt;
# Call web service operations using the connection object.&lt;br /&gt;
&lt;br /&gt;
QPR MEA Web Service documentation: https://kb.qpr.com/qpr2025-1/qpr_web_service.html.&lt;br /&gt;
&lt;br /&gt;
== MEA Connection String ==&lt;br /&gt;
To connect to QPR MEA, the MEA connection string needs to be created and stored as a [[Storing_Secrets_for_Scripts|secret]].&lt;br /&gt;
&lt;br /&gt;
The MEA connection string is a json object with following properties:&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039;: URL of the QPR MEA Web Service endpoint.&lt;br /&gt;
* &#039;&#039;&#039;logOnName&#039;&#039;&#039;: Log on name of the user who will access the QPR MEA Web Service.&lt;br /&gt;
* &#039;&#039;&#039;password&#039;&#039;&#039;: User&#039;s password in QPR MEA.&lt;br /&gt;
&lt;br /&gt;
Example connection string:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ &amp;quot;url&amp;quot;: &amp;quot;https://&amp;lt;hostname&amp;gt;/QPR/Portal/QPR.Isapi.dll/wsforward/MainService.svc/webHttp&amp;quot;, &amp;quot;logOnName&amp;quot;: &amp;quot;MyUser&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;MyPassword&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example to store secret:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).SetSecret(&amp;quot;QprMea&amp;quot;, &amp;quot;MeaConnection&amp;quot;, `{ &amp;quot;url&amp;quot;: &amp;quot;https://&amp;lt;hostname&amp;gt;/QPR/Portal/QPR.Isapi.dll/wsforward/MainService.svc/webHttp&amp;quot;, &amp;quot;logOnName&amp;quot;: &amp;quot;MyUser&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;MyPassword&amp;quot; }`);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MEA Web Service Operations ==&lt;br /&gt;
&lt;br /&gt;
=== QueryObjects ===&lt;br /&gt;
Calls QueryObjects and returns query results as a hierarchical dictionary. More information: https://kb.qpr.com/qpr2025-1/queryobjects.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;Query&#039;&#039;&#039; (String): The actual query. See https://kb.qpr.com/qpr2025-1/query_syntax.html.&lt;br /&gt;
* &#039;&#039;&#039;Attributes&#039;&#039;&#039; (String): Comma-separated list of attributes that are included in the results. See https://kb.qpr.com/qpr2025-1/supported_parameters.html.&lt;br /&gt;
* &#039;&#039;&#039;Criteria&#039;&#039;&#039; (String): Criteria used to filter the results by. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=globalparameters.&lt;br /&gt;
* &#039;&#039;&#039;Sort By&#039;&#039;&#039; (String): Comma-separated list of attributes to sort the results by.&lt;br /&gt;
* &#039;&#039;&#039;Options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Return name and typename of all the subprocesses in a model whose name contains text &amp;quot;Account&amp;quot;. Results are ordered by name and only at most three results are returned.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .QueryObjects(&lt;br /&gt;
    &amp;quot;[PG.1374444994].Subprocess&amp;quot;,&lt;br /&gt;
    &amp;quot;name, typename&amp;quot;,&lt;br /&gt;
    `Find(&amp;quot;Account&amp;quot;, Name)`,&lt;br /&gt;
    &amp;quot;name&amp;quot;,&lt;br /&gt;
    &amp;quot;MaxCount=3&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CreateObject ===&lt;br /&gt;
Calls CreateObject and returns the MEA ID of the created object. More information: https://kb.qpr.com/qpr2025-1/createobject2.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;Namespace ID&#039;&#039;&#039; (String): MEA ID of the namespace into which the object is to be created.&lt;br /&gt;
* &#039;&#039;&#039;Object type name&#039;&#039;&#039; (String): Defines type of the new object.&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039; (String): Defines name for the new object.&lt;br /&gt;
* &#039;&#039;&#039;Parent IDs&#039;&#039;&#039; (String or String*): MEA ID of parent object. If array is given, every array element specifies one ID.&lt;br /&gt;
* &#039;&#039;&#039;Attributes&#039;&#039;&#039; (Dictionary): Key/value pairs of &amp;lt;attribute&amp;gt;/&amp;lt;attribute value&amp;gt; to be set for the created object.&lt;br /&gt;
* &#039;&#039;&#039;Options&#039;&#039;&#039; (String): Optional options for the operation. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Connect to the configured QPR MEA and create a new top-level comment action.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .CreateObject(&amp;quot;PO&amp;quot;, &amp;quot;Comment&amp;quot;, &amp;quot;Test comment&amp;quot;, &amp;quot;&amp;quot;, #{&amp;quot;description&amp;quot;: &amp;quot;Test comment description&amp;quot;});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DeleteObject ===&lt;br /&gt;
Calls DeleteObject. More information: https://kb.qpr.com/qpr2025-1/deleteobject2.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;Object IDs&#039;&#039;&#039; (String or String*): One or more MEA IDs of objects to be deleted. If array is given, every array element specifies one ID of object to be deleted.&lt;br /&gt;
* &#039;&#039;&#039;Options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Connect to the configured QPR MEA and delete an object. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .DeleteObject(&amp;quot;PO.0.985518423&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GetAttribute ===&lt;br /&gt;
Calls GetAttribute and returns the value of given object attribute as a string. More information: https://kb.qpr.com/qpr2025-1/getattributeasstring.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;Object ID&#039;&#039;&#039; (String):  MEA ID of an object from which the attribute is fetched.&lt;br /&gt;
* &#039;&#039;&#039;Attribute&#039;&#039;&#039; (String): Name of the attribute that is queried. See https://kb.qpr.com/qpr2025-1/supported_parameters.html.&lt;br /&gt;
* &#039;&#039;&#039;Options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Returns the name of an object.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .GetAttribute(&lt;br /&gt;
    &amp;quot;[PG.785401983.683494101]&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SetAttribute ===&lt;br /&gt;
Calls SetAttribute to set an attribute value. More information: https://kb.qpr.com/qpr2025-1/setattribute.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;Object IDs&#039;&#039;&#039; (String or String*): MEA ID of an object from which the attribute is fetched. If array is given, every array element specifies one ID.&lt;br /&gt;
* &#039;&#039;&#039;Attribute&#039;&#039;&#039; (String): Name of the attribute that is queried. See https://kb.qpr.com/qpr2025-1/supported_parameters.html.&lt;br /&gt;
* &#039;&#039;&#039;Value&#039;&#039;&#039; (String): Value to be set for given attribute.&lt;br /&gt;
* &#039;&#039;&#039;Options&#039;&#039;&#039;:  Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Change the name of a user to &amp;quot;ChangedUser&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .SetAttribute(&lt;br /&gt;
    &amp;quot;[UM.0.123]&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;,&lt;br /&gt;
    &amp;quot;ChangedUser&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=QPR_MEA_Integration&amp;diff=28085</id>
		<title>QPR MEA Integration</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=QPR_MEA_Integration&amp;diff=28085"/>
		<updated>2026-04-09T22:29:36Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;QPR ProcessAnalyzer is able to connect to a QPR MEA (QPR Suite) instance and call its Web Service operations. To use the MEA connection, the following steps are required:&lt;br /&gt;
# Create a connection string and store it as a secret.&lt;br /&gt;
# Create a connection object.&lt;br /&gt;
# Call web service operations using the connection object.&lt;br /&gt;
&lt;br /&gt;
QPR MEA Web Service documentation: https://kb.qpr.com/qpr2025-1/qpr_web_service.html.&lt;br /&gt;
&lt;br /&gt;
== MEA Connection String ==&lt;br /&gt;
To connect to QPR MEA, the MEA connection string needs to be created and stored as a [[Storing_Secrets_for_Scripts|secret]].&lt;br /&gt;
&lt;br /&gt;
The MEA connection string is a json object with following properties:&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039;: URL of the QPR MEA Web Service endpoint.&lt;br /&gt;
* &#039;&#039;&#039;logOnName&#039;&#039;&#039;: Log on name of the user who will access the QPR MEA Web Service.&lt;br /&gt;
* &#039;&#039;&#039;password&#039;&#039;&#039;: User&#039;s password in QPR MEA.&lt;br /&gt;
&lt;br /&gt;
Example connection string:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ &amp;quot;url&amp;quot;: &amp;quot;https://&amp;lt;hostname&amp;gt;/QPR/Portal/QPR.Isapi.dll/wsforward/MainService.svc/webHttp&amp;quot;, &amp;quot;logOnName&amp;quot;: &amp;quot;MyUser&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;MyPassword&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example to store secret:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).SetSecret(&amp;quot;QprMea&amp;quot;, &amp;quot;MeaConnection&amp;quot;, `{ &amp;quot;url&amp;quot;: &amp;quot;https://&amp;lt;hostname&amp;gt;/QPR/Portal/QPR.Isapi.dll/wsforward/MainService.svc/webHttp&amp;quot;, &amp;quot;logOnName&amp;quot;: &amp;quot;MyUser&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;MyPassword&amp;quot; }`);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MEA Web Service Operations ==&lt;br /&gt;
&lt;br /&gt;
=== QueryObjects ===&lt;br /&gt;
Calls QueryObjects and returns query results as a hierarchical dictionary following the hierarchy of ResultSet object returned by QPR MEA. More information: https://kb.qpr.com/qpr2025-1/queryobjects.html&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;Query&#039;&#039;&#039; (String): The actual query. See https://kb.qpr.com/qpr2025-1/query_syntax.html.&lt;br /&gt;
* &#039;&#039;&#039;Attributes&#039;&#039;&#039; (String): Comma-separated list of attributes that are included in the results. See https://kb.qpr.com/qpr2025-1/supported_parameters.html.&lt;br /&gt;
* &#039;&#039;&#039;Criteria&#039;&#039;&#039; (String): Criteria used to filter the results by. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=globalparameters.&lt;br /&gt;
* &#039;&#039;&#039;Sort By&#039;&#039;&#039; (String): Comma-separated list of attributes to sort the results by.&lt;br /&gt;
* &#039;&#039;&#039;Options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Return name and typename of all the subprocesses in a model whose name contains text &amp;quot;Account&amp;quot;. Results are ordered by name and only at most three results are returned.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .QueryObjects(&lt;br /&gt;
    &amp;quot;[PG.1374444994].Subprocess&amp;quot;,&lt;br /&gt;
    &amp;quot;name, typename&amp;quot;,&lt;br /&gt;
    `Find(&amp;quot;Account&amp;quot;, Name)`,&lt;br /&gt;
    &amp;quot;name&amp;quot;,&lt;br /&gt;
    &amp;quot;MaxCount=3&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CreateObject ===&lt;br /&gt;
Calls CreateObject and returns the MEA ID of the created object. More information: https://kb.qpr.com/qpr2025-1/createobject2.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;Namespace ID&#039;&#039;&#039; (String): MEA ID of the namespace into which the object is to be created.&lt;br /&gt;
* &#039;&#039;&#039;Object type name&#039;&#039;&#039; (String): Defines type of the new object.&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039; (String): Defines name for the new object.&lt;br /&gt;
* &#039;&#039;&#039;Parent IDs&#039;&#039;&#039; (String or String*): MEA ID of parent object. If array is given, every array element specifies one ID.&lt;br /&gt;
* &#039;&#039;&#039;Attributes&#039;&#039;&#039; (Dictionary): Key/value pairs of &amp;lt;attribute&amp;gt;/&amp;lt;attribute value&amp;gt; to be set for the created object.&lt;br /&gt;
* &#039;&#039;&#039;Options&#039;&#039;&#039; (String): Optional options for the operation. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Connect to the configured QPR MEA and create a new top-level comment action.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .CreateObject(&amp;quot;PO&amp;quot;, &amp;quot;Comment&amp;quot;, &amp;quot;Test comment&amp;quot;, &amp;quot;&amp;quot;, #{&amp;quot;description&amp;quot;: &amp;quot;Test comment description&amp;quot;});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DeleteObject ===&lt;br /&gt;
Calls DeleteObject. More information: https://kb.qpr.com/qpr2025-1/deleteobject2.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;Object IDs&#039;&#039;&#039; (String or String*): One or more MEA IDs of objects to be deleted. If array is given, every array element specifies one ID of object to be deleted.&lt;br /&gt;
* &#039;&#039;&#039;Options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Connect to the configured QPR MEA and delete an object. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .DeleteObject(&amp;quot;PO.0.985518423&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GetAttribute ===&lt;br /&gt;
Calls GetAttribute and returns the value of given object attribute as a string. More information: https://kb.qpr.com/qpr2025-1/getattributeasstring.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;Object ID&#039;&#039;&#039; (String):  MEA ID of an object from which the attribute is fetched.&lt;br /&gt;
* &#039;&#039;&#039;Attribute&#039;&#039;&#039; (String): Name of the attribute that is queried. See https://kb.qpr.com/qpr2025-1/supported_parameters.html.&lt;br /&gt;
* &#039;&#039;&#039;Options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Returns the name of an object.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .GetAttribute(&lt;br /&gt;
    &amp;quot;[PG.785401983.683494101]&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SetAttribute ===&lt;br /&gt;
Calls SetAttribute to set an attribute value. More information: https://kb.qpr.com/qpr2025-1/setattribute.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;Object IDs&#039;&#039;&#039; (String or String*): MEA ID of an object from which the attribute is fetched. If array is given, every array element specifies one ID.&lt;br /&gt;
* &#039;&#039;&#039;Attribute&#039;&#039;&#039; (String): Name of the attribute that is queried. See https://kb.qpr.com/qpr2025-1/supported_parameters.html.&lt;br /&gt;
* &#039;&#039;&#039;Value&#039;&#039;&#039; (String): Value to be set for given attribute.&lt;br /&gt;
* &#039;&#039;&#039;Options&#039;&#039;&#039;:  Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Change the name of a user to &amp;quot;ChangedUser&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .SetAttribute(&lt;br /&gt;
    &amp;quot;[UM.0.123]&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;,&lt;br /&gt;
    &amp;quot;ChangedUser&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=QPR_MEA_Integration&amp;diff=28078</id>
		<title>QPR MEA Integration</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=QPR_MEA_Integration&amp;diff=28078"/>
		<updated>2026-04-09T12:59:17Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: /* MEA Connection String */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;QPR ProcessAnalyzer is able to connect to a QPR MEA (QPR Suite) instance and call its Web Service operations. To use the MEA connection, the following steps are required:&lt;br /&gt;
# Create a connection string and store it as a secret.&lt;br /&gt;
# Create a connection object.&lt;br /&gt;
# Call web service operations using the connection object.&lt;br /&gt;
&lt;br /&gt;
QPR MEA Web Service documentation: https://kb.qpr.com/qpr2025-1/qpr_web_service.html.&lt;br /&gt;
&lt;br /&gt;
== MEA Connection String ==&lt;br /&gt;
To connect to QPR MEA, the MEA connection string needs to be created and stored as a [[Storing_Secrets_for_Scripts|secret]].&lt;br /&gt;
&lt;br /&gt;
The MEA connection string is a json object with following properties:&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039;: URL of the QPR MEA Web Service endpoint.&lt;br /&gt;
* &#039;&#039;&#039;logOnName&#039;&#039;&#039;: Log on name of the user who will access the QPR MEA Web Service.&lt;br /&gt;
* &#039;&#039;&#039;password&#039;&#039;&#039;: User&#039;s password in QPR MEA.&lt;br /&gt;
&lt;br /&gt;
Example connection string:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ &amp;quot;url&amp;quot;: &amp;quot;https://&amp;lt;hostname&amp;gt;/QPR/Portal/QPR.Isapi.dll/wsforward/MainService.svc/webHttp&amp;quot;, &amp;quot;logOnName&amp;quot;: &amp;quot;MyUser&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;MyPassword&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example to store secret:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).SetSecret(&amp;quot;QprMea&amp;quot;, &amp;quot;MeaConnection&amp;quot;, `{ &amp;quot;url&amp;quot;: &amp;quot;https://&amp;lt;hostname&amp;gt;/QPR/Portal/QPR.Isapi.dll/wsforward/MainService.svc/webHttp&amp;quot;, &amp;quot;logOnName&amp;quot;: &amp;quot;MyUser&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;MyPassword&amp;quot; }`);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MEA Web Service Operations ==&lt;br /&gt;
&lt;br /&gt;
=== QueryObjects ===&lt;br /&gt;
Calls QueryObjects and returns query results as a hierarchical dictionary following the hierarchy of ResultSet object returned by QPR MEA. More information: https://kb.qpr.com/qpr2025-1/queryobjects.html&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;query&#039;&#039;&#039; (String): The actual query. See https://kb.qpr.com/qpr2025-1/query_syntax.html.&lt;br /&gt;
* &#039;&#039;&#039;attributes&#039;&#039;&#039; (String): Comma-separated list of attributes that are included in the results. See https://kb.qpr.com/qpr2025-1/supported_parameters.html.&lt;br /&gt;
* &#039;&#039;&#039;criteria&#039;&#039;&#039; (String): Criteria used to filter the results by. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=globalparameters.&lt;br /&gt;
* &#039;&#039;&#039;sortBy&#039;&#039;&#039; (String): Comma-separated list of attributes to sort the results by.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Return name and typename of all the subprocesses in a model whose name contains text &amp;quot;Account&amp;quot;. Results are ordered by name and only at most three results are returned.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .QueryObjects(&lt;br /&gt;
    &amp;quot;[PG.1374444994].Subprocess&amp;quot;,&lt;br /&gt;
    &amp;quot;name, typename&amp;quot;,&lt;br /&gt;
    `Find(&amp;quot;Account&amp;quot;, Name)`,&lt;br /&gt;
    &amp;quot;name&amp;quot;,&lt;br /&gt;
    &amp;quot;MaxCount=3&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CreateObject ===&lt;br /&gt;
Calls CreateObject and returns the MEA ID of the created object. More information: https://kb.qpr.com/qpr2025-1/createobject2.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;namespaceId&#039;&#039;&#039; (String): MEA ID of the namespace into which the object is to be created.&lt;br /&gt;
* &#039;&#039;&#039;objectTypeName&#039;&#039;&#039; (String): Defines type of the new object.&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; (String): Defines name for the new object.&lt;br /&gt;
* &#039;&#039;&#039;parentIds&#039;&#039;&#039; (String or String*): MEA ID of parent object. If array is given, every array element specifies one ID.&lt;br /&gt;
* &#039;&#039;&#039;attributes&#039;&#039;&#039; (Dictionary): Key/value pairs of &amp;lt;attribute&amp;gt;/&amp;lt;attribute value&amp;gt; to be set for the created object.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the operation. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Connect to the configured QPR MEA and create a new top-level comment action.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .CreateObject(&amp;quot;PO&amp;quot;, &amp;quot;Comment&amp;quot;, &amp;quot;Test comment&amp;quot;, &amp;quot;&amp;quot;, #{&amp;quot;description&amp;quot;: &amp;quot;Test comment description&amp;quot;});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DeleteObject ===&lt;br /&gt;
Calls DeleteObject. More information: https://kb.qpr.com/qpr2025-1/deleteobject2.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;objectIds&#039;&#039;&#039; (String or String*): One or more MEA IDs of objects to be deleted. If array is given, every array element specifies one ID of object to be deleted.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Connect to the configured QPR MEA and delete an object. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .DeleteObject(&amp;quot;PO.0.985518423&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GetAttribute ===&lt;br /&gt;
Calls GetAttribute and returns the value of given object attribute as a string. More information: https://kb.qpr.com/qpr2025-1/getattributeasstring.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;objectId&#039;&#039;&#039; (String):  MEA ID of an object from which the attribute is fetched.&lt;br /&gt;
* &#039;&#039;&#039;attribute&#039;&#039;&#039; (String): Name of the attribute that is queried. See https://kb.qpr.com/qpr2025-1/supported_parameters.html.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Returns the name of an object.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .GetAttribute(&lt;br /&gt;
    &amp;quot;[PG.785401983.683494101]&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SetAttribute ===&lt;br /&gt;
Calls SetAttribute to set an attribute value. More information: https://kb.qpr.com/qpr2025-1/setattribute.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;objectIds&#039;&#039;&#039; (String or String*): MEA ID of an object from which the attribute is fetched. If array is given, every array element specifies one ID.&lt;br /&gt;
* &#039;&#039;&#039;attribute&#039;&#039;&#039; (String): Name of the attribute that is queried. See https://kb.qpr.com/qpr2025-1/supported_parameters.html.&lt;br /&gt;
* &#039;&#039;&#039;value&#039;&#039;&#039; (String): Value to be set for given attribute.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039;:  Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Change the name of a user to &amp;quot;ChangedUser&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .SetAttribute(&lt;br /&gt;
    &amp;quot;[UM.0.123]&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;,&lt;br /&gt;
    &amp;quot;ChangedUser&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=QPR_MEA_Integration&amp;diff=28077</id>
		<title>QPR MEA Integration</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=QPR_MEA_Integration&amp;diff=28077"/>
		<updated>2026-04-09T12:58:17Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: /* MEA Web Service Operations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;QPR ProcessAnalyzer is able to connect to a QPR MEA (QPR Suite) instance and call its Web Service operations. To use the MEA connection, the following steps are required:&lt;br /&gt;
# Create a connection string and store it as a secret.&lt;br /&gt;
# Create a connection object.&lt;br /&gt;
# Call web service operations using the connection object.&lt;br /&gt;
&lt;br /&gt;
QPR MEA Web Service documentation: https://kb.qpr.com/qpr2025-1/qpr_web_service.html.&lt;br /&gt;
&lt;br /&gt;
== MEA Connection String ==&lt;br /&gt;
To connect to QPR MEA, the MEA connection string needs to be created and stored as a [[Storing_Secrets_for_Scripts|secret]].&lt;br /&gt;
&lt;br /&gt;
The MEA connection string is a json object with following properties:&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039;: URL of the QPR MEA Web Service endpoint.&lt;br /&gt;
* &#039;&#039;&#039;logOnName&#039;&#039;&#039;: Log on name of the user who will access the QPR MEA Web Service.&lt;br /&gt;
* &#039;&#039;&#039;password&#039;&#039;&#039;: User&#039;s password in QPR MEA.&lt;br /&gt;
&lt;br /&gt;
Example connection string:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ &amp;quot;url&amp;quot;: &amp;quot;https://&amp;lt;hostname&amp;gt;/QPR/Portal/QPR.Isapi.dll/wsforward/MainService.svc/webHttp&amp;quot;, &amp;quot;logOnName&amp;quot;: &amp;quot;MyUser&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;MyPassword&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example to store the secret:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).SetSecret(&amp;quot;QprMea&amp;quot;, &amp;quot;MeaConnection&amp;quot;, `{ &amp;quot;url&amp;quot;: &amp;quot;https://&amp;lt;hostname&amp;gt;/QPR/Portal/QPR.Isapi.dll/wsforward/MainService.svc/webHttp&amp;quot;, &amp;quot;logOnName&amp;quot;: &amp;quot;MyUser&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;MyPassword&amp;quot; }`);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MEA Web Service Operations ==&lt;br /&gt;
&lt;br /&gt;
=== QueryObjects ===&lt;br /&gt;
Calls QueryObjects and returns query results as a hierarchical dictionary following the hierarchy of ResultSet object returned by QPR MEA. More information: https://kb.qpr.com/qpr2025-1/queryobjects.html&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;query&#039;&#039;&#039; (String): The actual query. See https://kb.qpr.com/qpr2025-1/query_syntax.html.&lt;br /&gt;
* &#039;&#039;&#039;attributes&#039;&#039;&#039; (String): Comma-separated list of attributes that are included in the results. See https://kb.qpr.com/qpr2025-1/supported_parameters.html.&lt;br /&gt;
* &#039;&#039;&#039;criteria&#039;&#039;&#039; (String): Criteria used to filter the results by. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=globalparameters.&lt;br /&gt;
* &#039;&#039;&#039;sortBy&#039;&#039;&#039; (String): Comma-separated list of attributes to sort the results by.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Return name and typename of all the subprocesses in a model whose name contains text &amp;quot;Account&amp;quot;. Results are ordered by name and only at most three results are returned.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .QueryObjects(&lt;br /&gt;
    &amp;quot;[PG.1374444994].Subprocess&amp;quot;,&lt;br /&gt;
    &amp;quot;name, typename&amp;quot;,&lt;br /&gt;
    `Find(&amp;quot;Account&amp;quot;, Name)`,&lt;br /&gt;
    &amp;quot;name&amp;quot;,&lt;br /&gt;
    &amp;quot;MaxCount=3&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CreateObject ===&lt;br /&gt;
Calls CreateObject and returns the MEA ID of the created object. More information: https://kb.qpr.com/qpr2025-1/createobject2.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;namespaceId&#039;&#039;&#039; (String): MEA ID of the namespace into which the object is to be created.&lt;br /&gt;
* &#039;&#039;&#039;objectTypeName&#039;&#039;&#039; (String): Defines type of the new object.&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; (String): Defines name for the new object.&lt;br /&gt;
* &#039;&#039;&#039;parentIds&#039;&#039;&#039; (String or String*): MEA ID of parent object. If array is given, every array element specifies one ID.&lt;br /&gt;
* &#039;&#039;&#039;attributes&#039;&#039;&#039; (Dictionary): Key/value pairs of &amp;lt;attribute&amp;gt;/&amp;lt;attribute value&amp;gt; to be set for the created object.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the operation. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Connect to the configured QPR MEA and create a new top-level comment action.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .CreateObject(&amp;quot;PO&amp;quot;, &amp;quot;Comment&amp;quot;, &amp;quot;Test comment&amp;quot;, &amp;quot;&amp;quot;, #{&amp;quot;description&amp;quot;: &amp;quot;Test comment description&amp;quot;});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DeleteObject ===&lt;br /&gt;
Calls DeleteObject. More information: https://kb.qpr.com/qpr2025-1/deleteobject2.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;objectIds&#039;&#039;&#039; (String or String*): One or more MEA IDs of objects to be deleted. If array is given, every array element specifies one ID of object to be deleted.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Connect to the configured QPR MEA and delete an object. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .DeleteObject(&amp;quot;PO.0.985518423&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GetAttribute ===&lt;br /&gt;
Calls GetAttribute and returns the value of given object attribute as a string. More information: https://kb.qpr.com/qpr2025-1/getattributeasstring.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;objectId&#039;&#039;&#039; (String):  MEA ID of an object from which the attribute is fetched.&lt;br /&gt;
* &#039;&#039;&#039;attribute&#039;&#039;&#039; (String): Name of the attribute that is queried. See https://kb.qpr.com/qpr2025-1/supported_parameters.html.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Returns the name of an object.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .GetAttribute(&lt;br /&gt;
    &amp;quot;[PG.785401983.683494101]&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SetAttribute ===&lt;br /&gt;
Calls SetAttribute to set an attribute value. More information: https://kb.qpr.com/qpr2025-1/setattribute.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;objectIds&#039;&#039;&#039; (String or String*): MEA ID of an object from which the attribute is fetched. If array is given, every array element specifies one ID.&lt;br /&gt;
* &#039;&#039;&#039;attribute&#039;&#039;&#039; (String): Name of the attribute that is queried. See https://kb.qpr.com/qpr2025-1/supported_parameters.html.&lt;br /&gt;
* &#039;&#039;&#039;value&#039;&#039;&#039; (String): Value to be set for given attribute.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039;:  Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Change the name of a user to &amp;quot;ChangedUser&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .SetAttribute(&lt;br /&gt;
    &amp;quot;[UM.0.123]&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;,&lt;br /&gt;
    &amp;quot;ChangedUser&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=Next_Release_Roadmap&amp;diff=28054</id>
		<title>Next Release Roadmap</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=Next_Release_Roadmap&amp;diff=28054"/>
		<updated>2026-04-09T08:51:30Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--10926--&amp;gt;&lt;br /&gt;
This page contains preliminary information about new features and fixed issues in the next release.&lt;br /&gt;
&lt;br /&gt;
==New features in next release==&lt;br /&gt;
* Connection to MEA using expression language. (&#039;&#039;B-09030&#039;&#039;)&lt;br /&gt;
* Units can be specified for object counts for each object types in object-centric models. (&#039;&#039;B-08992&#039;&#039;)&lt;br /&gt;
* QPR ProcessAnalyzer acts as MCP server where MCP tools are implemented using scripts. (&#039;&#039;B-09004&#039;&#039;)&lt;br /&gt;
* Frontend components have been updated. (&#039;&#039;B-09028&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
==Issues fixed in next release==&lt;br /&gt;
* Table column filter is not entire visible in narrow tables located in bottom of screen. (&#039;&#039;D-14783&#039;&#039;)&lt;br /&gt;
* The project properties dialog has a minimum height which is too big. (&#039;&#039;D-14834&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
==Features under work==&lt;br /&gt;
* Data models with datatables and relations can be visualized and modified with ER diagrams. (&#039;&#039;B-09023&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Note: Features and fixes currently under work are not necessarily targeting to the next release.&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=QPR_MEA_Integration&amp;diff=28053</id>
		<title>QPR MEA Integration</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=QPR_MEA_Integration&amp;diff=28053"/>
		<updated>2026-04-09T08:50:19Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;QPR ProcessAnalyzer is able to connect to a QPR MEA (QPR Suite) instance and call its Web Service operations. To use the MEA connection, the following steps are required:&lt;br /&gt;
# Create a connection string and store it as a secret.&lt;br /&gt;
# Create a connection object.&lt;br /&gt;
# Call web service operations using the connection object.&lt;br /&gt;
&lt;br /&gt;
QPR MEA Web Service documentation: https://kb.qpr.com/qpr2025-1/qpr_web_service.html.&lt;br /&gt;
&lt;br /&gt;
== MEA Connection String ==&lt;br /&gt;
To connect to QPR MEA, the MEA connection string needs to be created and stored as a [[Storing_Secrets_for_Scripts|secret]].&lt;br /&gt;
&lt;br /&gt;
The MEA connection string is a json object with following properties:&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039;: URL of the QPR MEA Web Service endpoint.&lt;br /&gt;
* &#039;&#039;&#039;logOnName&#039;&#039;&#039;: Log on name of the user who will access the QPR MEA Web Service.&lt;br /&gt;
* &#039;&#039;&#039;password&#039;&#039;&#039;: User&#039;s password in QPR MEA.&lt;br /&gt;
&lt;br /&gt;
Example connection string:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ &amp;quot;url&amp;quot;: &amp;quot;https://&amp;lt;hostname&amp;gt;/QPR/Portal/QPR.Isapi.dll/wsforward/MainService.svc/webHttp&amp;quot;, &amp;quot;logOnName&amp;quot;: &amp;quot;MyUser&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;MyPassword&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example to store the secret:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).SetSecret(&amp;quot;QprMea&amp;quot;, &amp;quot;MeaConnection&amp;quot;, `{ &amp;quot;url&amp;quot;: &amp;quot;https://&amp;lt;hostname&amp;gt;/QPR/Portal/QPR.Isapi.dll/wsforward/MainService.svc/webHttp&amp;quot;, &amp;quot;logOnName&amp;quot;: &amp;quot;MyUser&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;MyPassword&amp;quot; }`);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MEA Web Service Operations ==&lt;br /&gt;
=== CreateObject ===&lt;br /&gt;
Calls CreateObject and returns the MEA ID of the created object. More information: https://kb.qpr.com/qpr2025-1/createobject2.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;namespaceId&#039;&#039;&#039; (String): MEA ID of the namespace into which the object is to be created.&lt;br /&gt;
* &#039;&#039;&#039;objectTypeName&#039;&#039;&#039; (String): Defines type of the new object.&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; (String): Defines name for the new object.&lt;br /&gt;
* &#039;&#039;&#039;parentIds&#039;&#039;&#039; (String or String*): MEA ID of parent object. If array is given, every array element specifies one ID.&lt;br /&gt;
* &#039;&#039;&#039;attributes&#039;&#039;&#039; (Dictionary): Key/value pairs of &amp;lt;attribute&amp;gt;/&amp;lt;attribute value&amp;gt; to be set for the created object.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the operation. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Connect to the configured QPR MEA and create a new top-level comment action.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .CreateObject(&amp;quot;PO&amp;quot;, &amp;quot;Comment&amp;quot;, &amp;quot;Test comment&amp;quot;, &amp;quot;&amp;quot;, #{&amp;quot;description&amp;quot;: &amp;quot;Test comment description&amp;quot;});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===DeleteObject ===&lt;br /&gt;
Calls DeleteObject. More information: https://kb.qpr.com/qpr2025-1/deleteobject2.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;objectIds&#039;&#039;&#039; (String or String*): One or more MEA IDs of objects to be deleted. If array is given, every array element specifies one ID of object to be deleted.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Connect to the configured QPR MEA and delete an object. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .DeleteObject(&amp;quot;PO.0.985518423&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GetAttribute ===&lt;br /&gt;
Calls GetAttribute and returns the value of given object attribute as a string. More information: https://kb.qpr.com/qpr2025-1/getattributeasstring.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;objectId&#039;&#039;&#039; (String):  MEA ID of an object from which the attribute is fetched.&lt;br /&gt;
* &#039;&#039;&#039;attribute&#039;&#039;&#039; (String): Name of the attribute that is queried. See https://kb.qpr.com/qpr2025-1/supported_parameters.html.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Returns the name of an object.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .GetAttribute(&lt;br /&gt;
    &amp;quot;[PG.785401983.683494101]&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== QueryObjects ===&lt;br /&gt;
Calls QueryObjects and returns query results as a hierarchical dictionary following the hierarchy of ResultSet object returned by QPR MEA. More information: https://kb.qpr.com/qpr2025-1/queryobjects.html&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;query&#039;&#039;&#039; (String): The actual query. See https://kb.qpr.com/qpr2025-1/query_syntax.html.&lt;br /&gt;
* &#039;&#039;&#039;attributes&#039;&#039;&#039; (String): Comma-separated list of attributes that are included in the results. See https://kb.qpr.com/qpr2025-1/supported_parameters.html.&lt;br /&gt;
* &#039;&#039;&#039;criteria&#039;&#039;&#039; (String): Criteria used to filter the results by. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=globalparameters.&lt;br /&gt;
* &#039;&#039;&#039;sortBy&#039;&#039;&#039; (String): Comma-separated list of attributes to sort the results by.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Return name and typename of all the subprocesses in a model whose name contains text &amp;quot;Account&amp;quot;. Results are ordered by name and only at most three results are returned.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .QueryObjects(&lt;br /&gt;
    &amp;quot;[PG.1374444994].Subprocess&amp;quot;,&lt;br /&gt;
    &amp;quot;name, typename&amp;quot;,&lt;br /&gt;
    `Find(&amp;quot;Account&amp;quot;, Name)`,&lt;br /&gt;
    &amp;quot;name&amp;quot;,&lt;br /&gt;
    &amp;quot;MaxCount=3&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SetAttribute ===&lt;br /&gt;
Calls SetAttribute to set an attribute value. More information: https://kb.qpr.com/qpr2025-1/setattribute.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;objectIds&#039;&#039;&#039; (String or String*): MEA ID of an object from which the attribute is fetched. If array is given, every array element specifies one ID.&lt;br /&gt;
* &#039;&#039;&#039;attribute&#039;&#039;&#039; (String): Name of the attribute that is queried. See https://kb.qpr.com/qpr2025-1/supported_parameters.html.&lt;br /&gt;
* &#039;&#039;&#039;value&#039;&#039;&#039; (String): Value to be set for given attribute.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039;:  Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Change the name of a user to &amp;quot;ChangedUser&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .SetAttribute(&lt;br /&gt;
    &amp;quot;[UM.0.123]&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;,&lt;br /&gt;
    &amp;quot;ChangedUser&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=QPR_MEA_Integration&amp;diff=28052</id>
		<title>QPR MEA Integration</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=QPR_MEA_Integration&amp;diff=28052"/>
		<updated>2026-04-09T08:49:41Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;QPR ProcessAnalyzer is able to connect to a QPR MEA (QPR Suite) instance and call its Web Service operations. To use the MEA connection, the following steps are required:&lt;br /&gt;
# Create connection string and store the secret.&lt;br /&gt;
# Create connection object.&lt;br /&gt;
# Call web service operations using the connection object.&lt;br /&gt;
&lt;br /&gt;
QPR MEA Web Service documentation: https://kb.qpr.com/qpr2025-1/qpr_web_service.html.&lt;br /&gt;
&lt;br /&gt;
== MEA Connection String ==&lt;br /&gt;
To connect to QPR MEA, the MEA connection string needs to be created and stored as a [[Storing_Secrets_for_Scripts|secret]].&lt;br /&gt;
&lt;br /&gt;
The MEA connection string is a json object with following properties:&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039;: URL of the QPR MEA Web Service endpoint.&lt;br /&gt;
* &#039;&#039;&#039;logOnName&#039;&#039;&#039;: Log on name of the user who will access the QPR MEA Web Service.&lt;br /&gt;
* &#039;&#039;&#039;password&#039;&#039;&#039;: User&#039;s password in QPR MEA.&lt;br /&gt;
&lt;br /&gt;
Example connection string:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ &amp;quot;url&amp;quot;: &amp;quot;https://&amp;lt;hostname&amp;gt;/QPR/Portal/QPR.Isapi.dll/wsforward/MainService.svc/webHttp&amp;quot;, &amp;quot;logOnName&amp;quot;: &amp;quot;MyUser&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;MyPassword&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example to store the secret:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).SetSecret(&amp;quot;QprMea&amp;quot;, &amp;quot;MeaConnection&amp;quot;, `{ &amp;quot;url&amp;quot;: &amp;quot;https://&amp;lt;hostname&amp;gt;/QPR/Portal/QPR.Isapi.dll/wsforward/MainService.svc/webHttp&amp;quot;, &amp;quot;logOnName&amp;quot;: &amp;quot;MyUser&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;MyPassword&amp;quot; }`);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MEA Web Service Operations ==&lt;br /&gt;
=== CreateObject ===&lt;br /&gt;
Calls CreateObject and returns the MEA ID of the created object. More information: https://kb.qpr.com/qpr2025-1/createobject2.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;namespaceId&#039;&#039;&#039; (String): MEA ID of the namespace into which the object is to be created.&lt;br /&gt;
* &#039;&#039;&#039;objectTypeName&#039;&#039;&#039; (String): Defines type of the new object.&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; (String): Defines name for the new object.&lt;br /&gt;
* &#039;&#039;&#039;parentIds&#039;&#039;&#039; (String or String*): MEA ID of parent object. If array is given, every array element specifies one ID.&lt;br /&gt;
* &#039;&#039;&#039;attributes&#039;&#039;&#039; (Dictionary): Key/value pairs of &amp;lt;attribute&amp;gt;/&amp;lt;attribute value&amp;gt; to be set for the created object.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the operation. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Connect to the configured QPR MEA and create a new top-level comment action.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .CreateObject(&amp;quot;PO&amp;quot;, &amp;quot;Comment&amp;quot;, &amp;quot;Test comment&amp;quot;, &amp;quot;&amp;quot;, #{&amp;quot;description&amp;quot;: &amp;quot;Test comment description&amp;quot;});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===DeleteObject ===&lt;br /&gt;
Calls DeleteObject. More information: https://kb.qpr.com/qpr2025-1/deleteobject2.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;objectIds&#039;&#039;&#039; (String or String*): One or more MEA IDs of objects to be deleted. If array is given, every array element specifies one ID of object to be deleted.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Connect to the configured QPR MEA and delete an object. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .DeleteObject(&amp;quot;PO.0.985518423&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GetAttribute ===&lt;br /&gt;
Calls GetAttribute and returns the value of given object attribute as a string. More information: https://kb.qpr.com/qpr2025-1/getattributeasstring.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;objectId&#039;&#039;&#039; (String):  MEA ID of an object from which the attribute is fetched.&lt;br /&gt;
* &#039;&#039;&#039;attribute&#039;&#039;&#039; (String): Name of the attribute that is queried. See https://kb.qpr.com/qpr2025-1/supported_parameters.html.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Returns the name of an object.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .GetAttribute(&lt;br /&gt;
    &amp;quot;[PG.785401983.683494101]&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== QueryObjects ===&lt;br /&gt;
Calls QueryObjects and returns query results as a hierarchical dictionary following the hierarchy of ResultSet object returned by QPR MEA. More information: https://kb.qpr.com/qpr2025-1/queryobjects.html&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;query&#039;&#039;&#039; (String): The actual query. See https://kb.qpr.com/qpr2025-1/query_syntax.html.&lt;br /&gt;
* &#039;&#039;&#039;attributes&#039;&#039;&#039; (String): Comma-separated list of attributes that are included in the results. See https://kb.qpr.com/qpr2025-1/supported_parameters.html.&lt;br /&gt;
* &#039;&#039;&#039;criteria&#039;&#039;&#039; (String): Criteria used to filter the results by. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=globalparameters.&lt;br /&gt;
* &#039;&#039;&#039;sortBy&#039;&#039;&#039; (String): Comma-separated list of attributes to sort the results by.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Return name and typename of all the subprocesses in a model whose name contains text &amp;quot;Account&amp;quot;. Results are ordered by name and only at most three results are returned.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .QueryObjects(&lt;br /&gt;
    &amp;quot;[PG.1374444994].Subprocess&amp;quot;,&lt;br /&gt;
    &amp;quot;name, typename&amp;quot;,&lt;br /&gt;
    `Find(&amp;quot;Account&amp;quot;, Name)`,&lt;br /&gt;
    &amp;quot;name&amp;quot;,&lt;br /&gt;
    &amp;quot;MaxCount=3&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SetAttribute ===&lt;br /&gt;
Calls SetAttribute to set an attribute value. More information: https://kb.qpr.com/qpr2025-1/setattribute.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;objectIds&#039;&#039;&#039; (String or String*): MEA ID of an object from which the attribute is fetched. If array is given, every array element specifies one ID.&lt;br /&gt;
* &#039;&#039;&#039;attribute&#039;&#039;&#039; (String): Name of the attribute that is queried. See https://kb.qpr.com/qpr2025-1/supported_parameters.html.&lt;br /&gt;
* &#039;&#039;&#039;value&#039;&#039;&#039; (String): Value to be set for given attribute.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039;:  Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Change the name of a user to &amp;quot;ChangedUser&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .SetAttribute(&lt;br /&gt;
    &amp;quot;[UM.0.123]&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;,&lt;br /&gt;
    &amp;quot;ChangedUser&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=QPR_MEA_Integration&amp;diff=28051</id>
		<title>QPR MEA Integration</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=QPR_MEA_Integration&amp;diff=28051"/>
		<updated>2026-04-09T08:49:26Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;QPR ProcessAnalyzer is able to connect to a QPR MEA (QPR Suite) instance and call its Web Service operations. QPR MEA Web Service documentation: https://kb.qpr.com/qpr2025-1/qpr_web_service.html.&lt;br /&gt;
&lt;br /&gt;
To use the MEA connection, the following steps are required:&lt;br /&gt;
# Create connection string and store the secret.&lt;br /&gt;
# Create connection object.&lt;br /&gt;
# Call web service operations using the connection object.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MEA Connection String ==&lt;br /&gt;
To connect to QPR MEA, the MEA connection string needs to be created and stored as a [[Storing_Secrets_for_Scripts|secret]].&lt;br /&gt;
&lt;br /&gt;
The MEA connection string is a json object with following properties:&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039;: URL of the QPR MEA Web Service endpoint.&lt;br /&gt;
* &#039;&#039;&#039;logOnName&#039;&#039;&#039;: Log on name of the user who will access the QPR MEA Web Service.&lt;br /&gt;
* &#039;&#039;&#039;password&#039;&#039;&#039;: User&#039;s password in QPR MEA.&lt;br /&gt;
&lt;br /&gt;
Example connection string:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ &amp;quot;url&amp;quot;: &amp;quot;https://&amp;lt;hostname&amp;gt;/QPR/Portal/QPR.Isapi.dll/wsforward/MainService.svc/webHttp&amp;quot;, &amp;quot;logOnName&amp;quot;: &amp;quot;MyUser&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;MyPassword&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example to store the secret:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).SetSecret(&amp;quot;QprMea&amp;quot;, &amp;quot;MeaConnection&amp;quot;, `{ &amp;quot;url&amp;quot;: &amp;quot;https://&amp;lt;hostname&amp;gt;/QPR/Portal/QPR.Isapi.dll/wsforward/MainService.svc/webHttp&amp;quot;, &amp;quot;logOnName&amp;quot;: &amp;quot;MyUser&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;MyPassword&amp;quot; }`);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MEA Web Service Operations ==&lt;br /&gt;
=== CreateObject ===&lt;br /&gt;
Calls CreateObject and returns the MEA ID of the created object. More information: https://kb.qpr.com/qpr2025-1/createobject2.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;namespaceId&#039;&#039;&#039; (String): MEA ID of the namespace into which the object is to be created.&lt;br /&gt;
* &#039;&#039;&#039;objectTypeName&#039;&#039;&#039; (String): Defines type of the new object.&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; (String): Defines name for the new object.&lt;br /&gt;
* &#039;&#039;&#039;parentIds&#039;&#039;&#039; (String or String*): MEA ID of parent object. If array is given, every array element specifies one ID.&lt;br /&gt;
* &#039;&#039;&#039;attributes&#039;&#039;&#039; (Dictionary): Key/value pairs of &amp;lt;attribute&amp;gt;/&amp;lt;attribute value&amp;gt; to be set for the created object.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the operation. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Connect to the configured QPR MEA and create a new top-level comment action.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .CreateObject(&amp;quot;PO&amp;quot;, &amp;quot;Comment&amp;quot;, &amp;quot;Test comment&amp;quot;, &amp;quot;&amp;quot;, #{&amp;quot;description&amp;quot;: &amp;quot;Test comment description&amp;quot;});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===DeleteObject ===&lt;br /&gt;
Calls DeleteObject. More information: https://kb.qpr.com/qpr2025-1/deleteobject2.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;objectIds&#039;&#039;&#039; (String or String*): One or more MEA IDs of objects to be deleted. If array is given, every array element specifies one ID of object to be deleted.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Connect to the configured QPR MEA and delete an object. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .DeleteObject(&amp;quot;PO.0.985518423&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GetAttribute ===&lt;br /&gt;
Calls GetAttribute and returns the value of given object attribute as a string. More information: https://kb.qpr.com/qpr2025-1/getattributeasstring.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;objectId&#039;&#039;&#039; (String):  MEA ID of an object from which the attribute is fetched.&lt;br /&gt;
* &#039;&#039;&#039;attribute&#039;&#039;&#039; (String): Name of the attribute that is queried. See https://kb.qpr.com/qpr2025-1/supported_parameters.html.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Returns the name of an object.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .GetAttribute(&lt;br /&gt;
    &amp;quot;[PG.785401983.683494101]&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== QueryObjects ===&lt;br /&gt;
Calls QueryObjects and returns query results as a hierarchical dictionary following the hierarchy of ResultSet object returned by QPR MEA. More information: https://kb.qpr.com/qpr2025-1/queryobjects.html&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;query&#039;&#039;&#039; (String): The actual query. See https://kb.qpr.com/qpr2025-1/query_syntax.html.&lt;br /&gt;
* &#039;&#039;&#039;attributes&#039;&#039;&#039; (String): Comma-separated list of attributes that are included in the results. See https://kb.qpr.com/qpr2025-1/supported_parameters.html.&lt;br /&gt;
* &#039;&#039;&#039;criteria&#039;&#039;&#039; (String): Criteria used to filter the results by. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=globalparameters.&lt;br /&gt;
* &#039;&#039;&#039;sortBy&#039;&#039;&#039; (String): Comma-separated list of attributes to sort the results by.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Return name and typename of all the subprocesses in a model whose name contains text &amp;quot;Account&amp;quot;. Results are ordered by name and only at most three results are returned.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .QueryObjects(&lt;br /&gt;
    &amp;quot;[PG.1374444994].Subprocess&amp;quot;,&lt;br /&gt;
    &amp;quot;name, typename&amp;quot;,&lt;br /&gt;
    `Find(&amp;quot;Account&amp;quot;, Name)`,&lt;br /&gt;
    &amp;quot;name&amp;quot;,&lt;br /&gt;
    &amp;quot;MaxCount=3&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SetAttribute ===&lt;br /&gt;
Calls SetAttribute to set an attribute value. More information: https://kb.qpr.com/qpr2025-1/setattribute.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;objectIds&#039;&#039;&#039; (String or String*): MEA ID of an object from which the attribute is fetched. If array is given, every array element specifies one ID.&lt;br /&gt;
* &#039;&#039;&#039;attribute&#039;&#039;&#039; (String): Name of the attribute that is queried. See https://kb.qpr.com/qpr2025-1/supported_parameters.html.&lt;br /&gt;
* &#039;&#039;&#039;value&#039;&#039;&#039; (String): Value to be set for given attribute.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039;:  Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Change the name of a user to &amp;quot;ChangedUser&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .SetAttribute(&lt;br /&gt;
    &amp;quot;[UM.0.123]&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;,&lt;br /&gt;
    &amp;quot;ChangedUser&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=QPR_MEA_Integration&amp;diff=28050</id>
		<title>QPR MEA Integration</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=QPR_MEA_Integration&amp;diff=28050"/>
		<updated>2026-04-09T08:49:20Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;QPR ProcessAnalyzer is able to connect to a QPR MEA (QPR Suite) instance and call its Web Service operations. QPR MEA Web Service documentation: https://kb.qpr.com/qpr2025-1/qpr_web_service.html.&lt;br /&gt;
&lt;br /&gt;
To use the MEA connection, the following steps are required:&lt;br /&gt;
# Create connection string and store the secret.&lt;br /&gt;
# Create connection object.&lt;br /&gt;
# Call web service operations using the connection object.&lt;br /&gt;
&lt;br /&gt;
== MEA Connection String ==&lt;br /&gt;
To connect to QPR MEA, the MEA connection string needs to be created and stored as a [[Storing_Secrets_for_Scripts|secret]].&lt;br /&gt;
&lt;br /&gt;
The MEA connection string is a json object with following properties:&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039;: URL of the QPR MEA Web Service endpoint.&lt;br /&gt;
* &#039;&#039;&#039;logOnName&#039;&#039;&#039;: Log on name of the user who will access the QPR MEA Web Service.&lt;br /&gt;
* &#039;&#039;&#039;password&#039;&#039;&#039;: User&#039;s password in QPR MEA.&lt;br /&gt;
&lt;br /&gt;
Example connection string:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ &amp;quot;url&amp;quot;: &amp;quot;https://&amp;lt;hostname&amp;gt;/QPR/Portal/QPR.Isapi.dll/wsforward/MainService.svc/webHttp&amp;quot;, &amp;quot;logOnName&amp;quot;: &amp;quot;MyUser&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;MyPassword&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example to store the secret:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).SetSecret(&amp;quot;QprMea&amp;quot;, &amp;quot;MeaConnection&amp;quot;, `{ &amp;quot;url&amp;quot;: &amp;quot;https://&amp;lt;hostname&amp;gt;/QPR/Portal/QPR.Isapi.dll/wsforward/MainService.svc/webHttp&amp;quot;, &amp;quot;logOnName&amp;quot;: &amp;quot;MyUser&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;MyPassword&amp;quot; }`);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MEA Web Service Operations ==&lt;br /&gt;
=== CreateObject ===&lt;br /&gt;
Calls CreateObject and returns the MEA ID of the created object. More information: https://kb.qpr.com/qpr2025-1/createobject2.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;namespaceId&#039;&#039;&#039; (String): MEA ID of the namespace into which the object is to be created.&lt;br /&gt;
* &#039;&#039;&#039;objectTypeName&#039;&#039;&#039; (String): Defines type of the new object.&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; (String): Defines name for the new object.&lt;br /&gt;
* &#039;&#039;&#039;parentIds&#039;&#039;&#039; (String or String*): MEA ID of parent object. If array is given, every array element specifies one ID.&lt;br /&gt;
* &#039;&#039;&#039;attributes&#039;&#039;&#039; (Dictionary): Key/value pairs of &amp;lt;attribute&amp;gt;/&amp;lt;attribute value&amp;gt; to be set for the created object.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the operation. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Connect to the configured QPR MEA and create a new top-level comment action.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .CreateObject(&amp;quot;PO&amp;quot;, &amp;quot;Comment&amp;quot;, &amp;quot;Test comment&amp;quot;, &amp;quot;&amp;quot;, #{&amp;quot;description&amp;quot;: &amp;quot;Test comment description&amp;quot;});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===DeleteObject ===&lt;br /&gt;
Calls DeleteObject. More information: https://kb.qpr.com/qpr2025-1/deleteobject2.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;objectIds&#039;&#039;&#039; (String or String*): One or more MEA IDs of objects to be deleted. If array is given, every array element specifies one ID of object to be deleted.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Connect to the configured QPR MEA and delete an object. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .DeleteObject(&amp;quot;PO.0.985518423&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GetAttribute ===&lt;br /&gt;
Calls GetAttribute and returns the value of given object attribute as a string. More information: https://kb.qpr.com/qpr2025-1/getattributeasstring.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;objectId&#039;&#039;&#039; (String):  MEA ID of an object from which the attribute is fetched.&lt;br /&gt;
* &#039;&#039;&#039;attribute&#039;&#039;&#039; (String): Name of the attribute that is queried. See https://kb.qpr.com/qpr2025-1/supported_parameters.html.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Returns the name of an object.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .GetAttribute(&lt;br /&gt;
    &amp;quot;[PG.785401983.683494101]&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== QueryObjects ===&lt;br /&gt;
Calls QueryObjects and returns query results as a hierarchical dictionary following the hierarchy of ResultSet object returned by QPR MEA. More information: https://kb.qpr.com/qpr2025-1/queryobjects.html&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;query&#039;&#039;&#039; (String): The actual query. See https://kb.qpr.com/qpr2025-1/query_syntax.html.&lt;br /&gt;
* &#039;&#039;&#039;attributes&#039;&#039;&#039; (String): Comma-separated list of attributes that are included in the results. See https://kb.qpr.com/qpr2025-1/supported_parameters.html.&lt;br /&gt;
* &#039;&#039;&#039;criteria&#039;&#039;&#039; (String): Criteria used to filter the results by. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=globalparameters.&lt;br /&gt;
* &#039;&#039;&#039;sortBy&#039;&#039;&#039; (String): Comma-separated list of attributes to sort the results by.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Return name and typename of all the subprocesses in a model whose name contains text &amp;quot;Account&amp;quot;. Results are ordered by name and only at most three results are returned.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .QueryObjects(&lt;br /&gt;
    &amp;quot;[PG.1374444994].Subprocess&amp;quot;,&lt;br /&gt;
    &amp;quot;name, typename&amp;quot;,&lt;br /&gt;
    `Find(&amp;quot;Account&amp;quot;, Name)`,&lt;br /&gt;
    &amp;quot;name&amp;quot;,&lt;br /&gt;
    &amp;quot;MaxCount=3&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SetAttribute ===&lt;br /&gt;
Calls SetAttribute to set an attribute value. More information: https://kb.qpr.com/qpr2025-1/setattribute.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;objectIds&#039;&#039;&#039; (String or String*): MEA ID of an object from which the attribute is fetched. If array is given, every array element specifies one ID.&lt;br /&gt;
* &#039;&#039;&#039;attribute&#039;&#039;&#039; (String): Name of the attribute that is queried. See https://kb.qpr.com/qpr2025-1/supported_parameters.html.&lt;br /&gt;
* &#039;&#039;&#039;value&#039;&#039;&#039; (String): Value to be set for given attribute.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039;:  Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Change the name of a user to &amp;quot;ChangedUser&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .SetAttribute(&lt;br /&gt;
    &amp;quot;[UM.0.123]&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;,&lt;br /&gt;
    &amp;quot;ChangedUser&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=QPR_MEA_Integration&amp;diff=28049</id>
		<title>QPR MEA Integration</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=QPR_MEA_Integration&amp;diff=28049"/>
		<updated>2026-04-09T08:48:44Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;QPR ProcessAnalyzer is able to connect to a QPR MEA (QPR Suite) instance and call Web Service operations. QPR MEA Web Service documentation: https://kb.qpr.com/qpr2025-1/qpr_web_service.html.&lt;br /&gt;
&lt;br /&gt;
== Use MEA Connection ==&lt;br /&gt;
To use the MEA connection, the following steps are required:&lt;br /&gt;
# Create connection string and store the secret.&lt;br /&gt;
# Create connection object.&lt;br /&gt;
# Call web service operations using the connection object.&lt;br /&gt;
&lt;br /&gt;
== MEA Connection String ==&lt;br /&gt;
To connect to QPR MEA, the MEA connection string needs to be created and stored as a [[Storing_Secrets_for_Scripts|secret]].&lt;br /&gt;
&lt;br /&gt;
The MEA connection string is a json object with following properties:&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039;: URL of the QPR MEA Web Service endpoint.&lt;br /&gt;
* &#039;&#039;&#039;logOnName&#039;&#039;&#039;: Log on name of the user who will access the QPR MEA Web Service.&lt;br /&gt;
* &#039;&#039;&#039;password&#039;&#039;&#039;: User&#039;s password in QPR MEA.&lt;br /&gt;
&lt;br /&gt;
Example connection string:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ &amp;quot;url&amp;quot;: &amp;quot;https://&amp;lt;hostname&amp;gt;/QPR/Portal/QPR.Isapi.dll/wsforward/MainService.svc/webHttp&amp;quot;, &amp;quot;logOnName&amp;quot;: &amp;quot;MyUser&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;MyPassword&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example to store the secret:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).SetSecret(&amp;quot;QprMea&amp;quot;, &amp;quot;MeaConnection&amp;quot;, `{ &amp;quot;url&amp;quot;: &amp;quot;https://&amp;lt;hostname&amp;gt;/QPR/Portal/QPR.Isapi.dll/wsforward/MainService.svc/webHttp&amp;quot;, &amp;quot;logOnName&amp;quot;: &amp;quot;MyUser&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;MyPassword&amp;quot; }`);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MEA Web Service Operations ==&lt;br /&gt;
=== CreateObject ===&lt;br /&gt;
Calls CreateObject and returns the MEA ID of the created object. More information: https://kb.qpr.com/qpr2025-1/createobject2.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;namespaceId&#039;&#039;&#039; (String): MEA ID of the namespace into which the object is to be created.&lt;br /&gt;
* &#039;&#039;&#039;objectTypeName&#039;&#039;&#039; (String): Defines type of the new object.&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; (String): Defines name for the new object.&lt;br /&gt;
* &#039;&#039;&#039;parentIds&#039;&#039;&#039; (String or String*): MEA ID of parent object. If array is given, every array element specifies one ID.&lt;br /&gt;
* &#039;&#039;&#039;attributes&#039;&#039;&#039; (Dictionary): Key/value pairs of &amp;lt;attribute&amp;gt;/&amp;lt;attribute value&amp;gt; to be set for the created object.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the operation. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Connect to the configured QPR MEA and create a new top-level comment action.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .CreateObject(&amp;quot;PO&amp;quot;, &amp;quot;Comment&amp;quot;, &amp;quot;Test comment&amp;quot;, &amp;quot;&amp;quot;, #{&amp;quot;description&amp;quot;: &amp;quot;Test comment description&amp;quot;});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===DeleteObject ===&lt;br /&gt;
Calls DeleteObject. More information: https://kb.qpr.com/qpr2025-1/deleteobject2.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;objectIds&#039;&#039;&#039; (String or String*): One or more MEA IDs of objects to be deleted. If array is given, every array element specifies one ID of object to be deleted.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Connect to the configured QPR MEA and delete an object. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .DeleteObject(&amp;quot;PO.0.985518423&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GetAttribute ===&lt;br /&gt;
Calls GetAttribute and returns the value of given object attribute as a string. More information: https://kb.qpr.com/qpr2025-1/getattributeasstring.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;objectId&#039;&#039;&#039; (String):  MEA ID of an object from which the attribute is fetched.&lt;br /&gt;
* &#039;&#039;&#039;attribute&#039;&#039;&#039; (String): Name of the attribute that is queried. See https://kb.qpr.com/qpr2025-1/supported_parameters.html.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Returns the name of an object.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .GetAttribute(&lt;br /&gt;
    &amp;quot;[PG.785401983.683494101]&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== QueryObjects ===&lt;br /&gt;
Calls QueryObjects and returns query results as a hierarchical dictionary following the hierarchy of ResultSet object returned by QPR MEA. More information: https://kb.qpr.com/qpr2025-1/queryobjects.html&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;query&#039;&#039;&#039; (String): The actual query. See https://kb.qpr.com/qpr2025-1/query_syntax.html.&lt;br /&gt;
* &#039;&#039;&#039;attributes&#039;&#039;&#039; (String): Comma-separated list of attributes that are included in the results. See https://kb.qpr.com/qpr2025-1/supported_parameters.html.&lt;br /&gt;
* &#039;&#039;&#039;criteria&#039;&#039;&#039; (String): Criteria used to filter the results by. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=globalparameters.&lt;br /&gt;
* &#039;&#039;&#039;sortBy&#039;&#039;&#039; (String): Comma-separated list of attributes to sort the results by.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Return name and typename of all the subprocesses in a model whose name contains text &amp;quot;Account&amp;quot;. Results are ordered by name and only at most three results are returned.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .QueryObjects(&lt;br /&gt;
    &amp;quot;[PG.1374444994].Subprocess&amp;quot;,&lt;br /&gt;
    &amp;quot;name, typename&amp;quot;,&lt;br /&gt;
    `Find(&amp;quot;Account&amp;quot;, Name)`,&lt;br /&gt;
    &amp;quot;name&amp;quot;,&lt;br /&gt;
    &amp;quot;MaxCount=3&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SetAttribute ===&lt;br /&gt;
Calls SetAttribute to set an attribute value. More information: https://kb.qpr.com/qpr2025-1/setattribute.html.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;objectIds&#039;&#039;&#039; (String or String*): MEA ID of an object from which the attribute is fetched. If array is given, every array element specifies one ID.&lt;br /&gt;
* &#039;&#039;&#039;attribute&#039;&#039;&#039; (String): Name of the attribute that is queried. See https://kb.qpr.com/qpr2025-1/supported_parameters.html.&lt;br /&gt;
* &#039;&#039;&#039;value&#039;&#039;&#039; (String): Value to be set for given attribute.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039;:  Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Change the name of a user to &amp;quot;ChangedUser&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .SetAttribute(&lt;br /&gt;
    &amp;quot;[UM.0.123]&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;,&lt;br /&gt;
    &amp;quot;ChangedUser&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=QPR_MEA_Integration&amp;diff=28048</id>
		<title>QPR MEA Integration</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=QPR_MEA_Integration&amp;diff=28048"/>
		<updated>2026-04-09T08:38:35Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: /* MEA Connection String */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;QPR ProcessAnalyzer is able to connect to a QPR MEA (QPR Suite) instance and call Web Service operations. QPR MEA Web Service documentation: https://kb.qpr.com/qpr2025-1/qpr_web_service.html.&lt;br /&gt;
&lt;br /&gt;
== MEA Connection String ==&lt;br /&gt;
To connect to QPR MEA, the MEA connection string needs to be created and stored as a [[Storing_Secrets_for_Scripts|secret]].&lt;br /&gt;
&lt;br /&gt;
The MEA connection string is a json object with following properties:&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039;: URL to the webHttp endpoint of the QPR MEA Web Service to be connected to.&lt;br /&gt;
* &#039;&#039;&#039;logOnName&#039;&#039;&#039;: Log on name of the user who will access the QPR MEA Web Service.&lt;br /&gt;
* &#039;&#039;&#039;password&#039;&#039;&#039;: User&#039;s password in QPR MEA.&lt;br /&gt;
&lt;br /&gt;
Example connection string:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ &amp;quot;url&amp;quot;: &amp;quot;https://&amp;lt;hostname&amp;gt;/QPR/Portal/QPR.Isapi.dll/wsforward/MainService.svc/webHttp&amp;quot;, &amp;quot;logOnName&amp;quot;: &amp;quot;MyUser&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;MyPassword&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example to store the secret:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).SetSecret(&amp;quot;QprMea&amp;quot;, &amp;quot;MyConnection&amp;quot;, `{ &amp;quot;url&amp;quot;: &amp;quot;https://&amp;lt;hostname&amp;gt;/QPR/Portal/QPR.Isapi.dll/wsforward/MainService.svc/webHttp&amp;quot;, &amp;quot;logOnName&amp;quot;: &amp;quot;MyUser&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;MyPassword&amp;quot; }`);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Operations ==&lt;br /&gt;
=== CreateObject ===&lt;br /&gt;
Performs CreateObject function call (https://kb.qpr.com/qpr2025-1/createobject2.html), and returns the MEA ID of the created object.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;namespaceId&#039;&#039;&#039; (String): MEA ID of the namespace into which the object is to be created.&lt;br /&gt;
* &#039;&#039;&#039;objectTypeName&#039;&#039;&#039; (String): Defines the type of the new object.&lt;br /&gt;
* &#039;&#039;&#039; name&#039;&#039;&#039; (String): Defines name for the new object.&lt;br /&gt;
* &#039;&#039;&#039;parentIds&#039;&#039;&#039; (String or String*): MEA ID of parent object. If array is given, every array element specifies one ID.&lt;br /&gt;
* &#039;&#039;&#039;attributes&#039;&#039;&#039; (Dictionary): Key/value pairs of &amp;amp;lt;attribute&amp;amp;gt;/&amp;amp;lt;attribute value&amp;amp;gt; to be set for the created object.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options&lt;br /&gt;
&lt;br /&gt;
Example: Connects to the configured QPR MEA and creates a new top-level comment-action.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .CreateObject(&amp;quot;PO&amp;quot;, &amp;quot;Comment&amp;quot;, &amp;quot;Test comment&amp;quot;, &amp;quot;&amp;quot;, #{&amp;quot;description&amp;quot;: &amp;quot;Test comment description&amp;quot;});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===DeleteObject ===&lt;br /&gt;
Performs DeleteObject function call (https://kb.qpr.com/qpr2025-1/deleteobject2.html) and returns _empty.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;objectIds&#039;&#039;&#039; (String or String*): One or more MEA IDs of objects to be deleted. If array is given, every array element specifies one ID of object to be deleted.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .DeleteObject(&amp;quot;PO.0.985518423&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Connects to the configured QPR MEA and deletes object with ID PO.0.985518423.&lt;br /&gt;
&lt;br /&gt;
=== GetAttribute ===&lt;br /&gt;
Performs GetAttributeAsString function call (https://kb.qpr.com/qpr2025-1/getattributeasstring.html), and returns the value of given object&#039;s attribute as a string.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;objectId&#039;&#039;&#039; (String):  MEA ID of an object from which the attribute is fetched.&lt;br /&gt;
* &#039;&#039;&#039;attribute&#039;&#039;&#039; (String): Name of the attribute that is queried. See [supported attributes](https://kb.qpr.com/qpr2025-1/supported_parameters.html).&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the query. See (https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Connects to the configured QPR MEA and returns the name of object identified by MEA object ID: PG.785401983.683494101.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .GetAttribute(&lt;br /&gt;
    &amp;quot;[PG.785401983.683494101]&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== QueryObjects ===&lt;br /&gt;
Performs QueryObjects function call (https://kb.qpr.com/qpr2025-1/queryobjects.html), and returns the result of the query as a hierarchical dictionary object (#48320#) following the hierarchy of ResultSet-object returned by QPR MEA.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;query&#039;&#039;&#039; (String): The actual query. For more information, see the [query syntax documentation](https://kb.qpr.com/qpr2025-1/query_syntax.html)&lt;br /&gt;
* &#039;&#039;&#039;attributes&#039;&#039;&#039; (String): Comma-separated list of attributes that are included in the results.&lt;br /&gt;
      2. See [supported attributes](https://kb.qpr.com/qpr2025-1/supported_parameters.html).&lt;br /&gt;
* &#039;&#039;&#039;criteria&#039;&#039;&#039; (String): Criteria used to filter the results by.&lt;br /&gt;
      2. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=globalparameters.&lt;br /&gt;
* &#039;&#039;&#039;sortBy&#039;&#039;&#039; (String): Comma-separated list of attributes to sort the results by.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Connects to the configured QPR MEA and returns name and typename of all the subprocesses in model identified by MEA object id PG.1374444994 whose name contains text &amp;quot;Account&amp;quot;. Results are ordered by name and only at most three results are returned.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .QueryObjects(&lt;br /&gt;
    &amp;quot;[PG.1374444994].Subprocess&amp;quot;,&lt;br /&gt;
    &amp;quot;name, typename&amp;quot;,&lt;br /&gt;
    `Find(&amp;quot;Account&amp;quot;, Name)`,&lt;br /&gt;
    &amp;quot;name&amp;quot;,&lt;br /&gt;
    &amp;quot;MaxCount=3&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SetAttribute ===&lt;br /&gt;
Performs SetAttribute (https://kb.qpr.com/qpr2025-1/setattribute.html) function call to set an attribute value.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;objectIds&#039;&#039;&#039; (String or String*): MEA ID of an object from which the attribute is fetched. If array is given, every array element specifies one ID.&lt;br /&gt;
* &#039;&#039;&#039;attribute&#039;&#039;&#039; (String): Name of the attribute that is queried. See [supported attributes](https://kb.qpr.com/qpr2025-1/supported_parameters.html). Attribute must be writeable.&lt;br /&gt;
* &#039;&#039;&#039;value&#039;&#039;&#039; (String): Value to be set for given object&#039;s attribute.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039;:  Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Connects to the configured QPR MEA and changes the name of the user identified by MEA object ID: UM.0.123 to &amp;quot;ChangedUser&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .SetAttribute(&lt;br /&gt;
    &amp;quot;[UM.0.123]&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;,&lt;br /&gt;
    &amp;quot;ChangedUser&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=QPR_MEA_Integration&amp;diff=28047</id>
		<title>QPR MEA Integration</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=QPR_MEA_Integration&amp;diff=28047"/>
		<updated>2026-04-09T08:33:54Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;QPR ProcessAnalyzer is able to connect to a QPR MEA (QPR Suite) instance and call Web Service operations. QPR MEA Web Service documentation: https://kb.qpr.com/qpr2025-1/qpr_web_service.html.&lt;br /&gt;
&lt;br /&gt;
== MEA Connection String ==&lt;br /&gt;
To connect to QPR MEA, a MEA connection string needs to be created and stored as a [[Storing_Secrets_for_Scripts|secret]].&lt;br /&gt;
&lt;br /&gt;
The MEA connection string is a json object with following properties:&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039;: URL to the webHttp endpoint of the QPR MEA Web Service to be connected to.&lt;br /&gt;
* &#039;&#039;&#039;logOnName&#039;&#039;&#039;: Log on name of the user who will access the QPR MEA Web Service.&lt;br /&gt;
* &#039;&#039;&#039;password&#039;&#039;&#039;: User&#039;s password in QPR MEA.&lt;br /&gt;
&lt;br /&gt;
Example connection string:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ &amp;quot;url&amp;quot;: &amp;quot;https://&amp;lt;hostname&amp;gt;/QPR/Portal/QPR.Isapi.dll/wsforward/MainService.svc/webHttp&amp;quot;, &amp;quot;logOnName&amp;quot;: &amp;quot;MyUser&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;MyPassword&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Operations ==&lt;br /&gt;
=== CreateObject ===&lt;br /&gt;
Performs CreateObject function call (https://kb.qpr.com/qpr2025-1/createobject2.html), and returns the MEA ID of the created object.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;namespaceId&#039;&#039;&#039; (String): MEA ID of the namespace into which the object is to be created.&lt;br /&gt;
* &#039;&#039;&#039;objectTypeName&#039;&#039;&#039; (String): Defines the type of the new object.&lt;br /&gt;
* &#039;&#039;&#039; name&#039;&#039;&#039; (String): Defines name for the new object.&lt;br /&gt;
* &#039;&#039;&#039;parentIds&#039;&#039;&#039; (String or String*): MEA ID of parent object. If array is given, every array element specifies one ID.&lt;br /&gt;
* &#039;&#039;&#039;attributes&#039;&#039;&#039; (Dictionary): Key/value pairs of &amp;amp;lt;attribute&amp;amp;gt;/&amp;amp;lt;attribute value&amp;amp;gt; to be set for the created object.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options&lt;br /&gt;
&lt;br /&gt;
Example: Connects to the configured QPR MEA and creates a new top-level comment-action.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .CreateObject(&amp;quot;PO&amp;quot;, &amp;quot;Comment&amp;quot;, &amp;quot;Test comment&amp;quot;, &amp;quot;&amp;quot;, #{&amp;quot;description&amp;quot;: &amp;quot;Test comment description&amp;quot;});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===DeleteObject ===&lt;br /&gt;
Performs DeleteObject function call (https://kb.qpr.com/qpr2025-1/deleteobject2.html) and returns _empty.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;objectIds&#039;&#039;&#039; (String or String*): One or more MEA IDs of objects to be deleted. If array is given, every array element specifies one ID of object to be deleted.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .DeleteObject(&amp;quot;PO.0.985518423&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Connects to the configured QPR MEA and deletes object with ID PO.0.985518423.&lt;br /&gt;
&lt;br /&gt;
=== GetAttribute ===&lt;br /&gt;
Performs GetAttributeAsString function call (https://kb.qpr.com/qpr2025-1/getattributeasstring.html), and returns the value of given object&#039;s attribute as a string.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;objectId&#039;&#039;&#039; (String):  MEA ID of an object from which the attribute is fetched.&lt;br /&gt;
* &#039;&#039;&#039;attribute&#039;&#039;&#039; (String): Name of the attribute that is queried. See [supported attributes](https://kb.qpr.com/qpr2025-1/supported_parameters.html).&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the query. See (https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Connects to the configured QPR MEA and returns the name of object identified by MEA object ID: PG.785401983.683494101.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .GetAttribute(&lt;br /&gt;
    &amp;quot;[PG.785401983.683494101]&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== QueryObjects ===&lt;br /&gt;
Performs QueryObjects function call (https://kb.qpr.com/qpr2025-1/queryobjects.html), and returns the result of the query as a hierarchical dictionary object (#48320#) following the hierarchy of ResultSet-object returned by QPR MEA.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;query&#039;&#039;&#039; (String): The actual query. For more information, see the [query syntax documentation](https://kb.qpr.com/qpr2025-1/query_syntax.html)&lt;br /&gt;
* &#039;&#039;&#039;attributes&#039;&#039;&#039; (String): Comma-separated list of attributes that are included in the results.&lt;br /&gt;
      2. See [supported attributes](https://kb.qpr.com/qpr2025-1/supported_parameters.html).&lt;br /&gt;
* &#039;&#039;&#039;criteria&#039;&#039;&#039; (String): Criteria used to filter the results by.&lt;br /&gt;
      2. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=globalparameters.&lt;br /&gt;
* &#039;&#039;&#039;sortBy&#039;&#039;&#039; (String): Comma-separated list of attributes to sort the results by.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Connects to the configured QPR MEA and returns name and typename of all the subprocesses in model identified by MEA object id PG.1374444994 whose name contains text &amp;quot;Account&amp;quot;. Results are ordered by name and only at most three results are returned.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .QueryObjects(&lt;br /&gt;
    &amp;quot;[PG.1374444994].Subprocess&amp;quot;,&lt;br /&gt;
    &amp;quot;name, typename&amp;quot;,&lt;br /&gt;
    `Find(&amp;quot;Account&amp;quot;, Name)`,&lt;br /&gt;
    &amp;quot;name&amp;quot;,&lt;br /&gt;
    &amp;quot;MaxCount=3&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SetAttribute ===&lt;br /&gt;
Performs SetAttribute (https://kb.qpr.com/qpr2025-1/setattribute.html) function call to set an attribute value.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;objectIds&#039;&#039;&#039; (String or String*): MEA ID of an object from which the attribute is fetched. If array is given, every array element specifies one ID.&lt;br /&gt;
* &#039;&#039;&#039;attribute&#039;&#039;&#039; (String): Name of the attribute that is queried. See [supported attributes](https://kb.qpr.com/qpr2025-1/supported_parameters.html). Attribute must be writeable.&lt;br /&gt;
* &#039;&#039;&#039;value&#039;&#039;&#039; (String): Value to be set for given object&#039;s attribute.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039;:  Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Connects to the configured QPR MEA and changes the name of the user identified by MEA object ID: UM.0.123 to &amp;quot;ChangedUser&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .SetAttribute(&lt;br /&gt;
    &amp;quot;[UM.0.123]&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;,&lt;br /&gt;
    &amp;quot;ChangedUser&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=Storing_Secrets_for_Scripts&amp;diff=28046</id>
		<title>Storing Secrets for Scripts</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=Storing_Secrets_for_Scripts&amp;diff=28046"/>
		<updated>2026-04-09T08:29:33Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: /* Using secrets */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Secrets provide a method to store passwords and other confidential data in QPR ProcessAnalyzer, and use them without being able to see the stored secret values. For example in scripts, SAP, Salesforce and ODBC passwords can be stored as secrets, which can be referred by their names in the script commands.&lt;br /&gt;
&lt;br /&gt;
There are project-specific and global secrets. To use a secret, the user needs to have &#039;&#039;GenericRead&#039;&#039; permission to the project (or global &#039;&#039;GenericRead&#039;&#039; to use global secrets). To define a secret, the &#039;&#039;ManageProject&#039;&#039; permission to the project is needed (or global &#039;&#039;ManageProject&#039;&#039; to define global secrets). If both a global and a project-specific secret with the same name and type are set, the project-specific secret will be used in that project, and thus the global secret is unavailable for that project.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Setting secrets ==&lt;br /&gt;
Secrets can be set by calling the [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#SetSecret|SetSecret]] function for the project, or the corresponding generic context [[Generic_Functions_in_QPR_ProcessAnalyzer#SetSecret|SetSecret]] function. Project secrets can also be defined in the [[Project_Properties_Dialog#Secrets|Project Properties Dialog]].&lt;br /&gt;
&lt;br /&gt;
Example: Set a project secret (for project id 1):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).SetSecret(&amp;quot;sap&amp;quot;, &amp;quot;SapAdminPassword&amp;quot;, &amp;quot;I l0ve 5AP!&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Set a global secret:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SetSecret(&amp;quot;sap&amp;quot;, &amp;quot;SapReaderPassword&amp;quot;, &amp;quot;I l0ve 5AP!&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Listing secrets ==&lt;br /&gt;
To list all secrets in the project, use the [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Project|Secrets]] property for the project. For the global secrets, there is the corresponding global [[Generic_Properties_in_Expression_Language#Secrets|Secrets]] property. Note that the secret value cannot be retrieved even by system administrators.&lt;br /&gt;
&lt;br /&gt;
Example: List project secrets (for project id 1):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ToJson(ProjectById(1).Secrets);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: List global secrets:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ToJson(Secrets);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Using secrets ==&lt;br /&gt;
Secrets can be used in the following commands:&lt;br /&gt;
* [[SQL Scripting Commands|SQL scripting commands]]: ImportOdbcQuery, ImportSalesforceQuery and ImportSapQuery&lt;br /&gt;
* [[QPR_ProcessAnalyzer_Model_Datasources#Loading_Data_from_ODBC_Datasource|ODBC datasources of model]]&lt;br /&gt;
* [[DataFrame_in_Expression_Language#ImportOdbcSecure|ImportODBCSecure]] function (expression language)&lt;br /&gt;
* [[Generic_Functions_in_QPR_ProcessAnalyzer#CreateSnowflakeConnection|CreateSnowflakeConnection]] function expression language&lt;br /&gt;
* [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Project#:~:text=CreateMeaConnection|CreateMeaConnection]] function in expression language&lt;br /&gt;
&lt;br /&gt;
Note: Currently [[SQL Scripting Commands#--.23ImportSqlQuery|ImportSqlQuery]] and [[SQL Scripting Commands#--.23ImportOleDbQuery|ImportOleDbQuery]] don&#039;t support secrets.&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Wiki&amp;diff=28045</id>
		<title>QPR ProcessAnalyzer Wiki</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Wiki&amp;diff=28045"/>
		<updated>2026-04-09T08:26:37Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: /* Expression Language Reference */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;downloadButton&amp;quot; style=&amp;quot;width:190px;float:right;margin: 3px 12px 0px 15px;&amp;quot;&amp;gt;[[Online_Learning_Platform|Online Learning&amp;lt;br /&amp;gt;Platform]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Welcome to QPR ProcessAnalyzer Wiki! QPR ProcessAnalyzer is a software for turning event and transactional data into visual process analysis and intelligence. Topics in this documentation are divided based on user roles for process analysts, developers and administrators.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;height:5px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
== For Process Analysts ==&lt;br /&gt;
This section contains information how to get started with QPR ProcessAnalyzer and how to create your first dashboards! This section also describes how to use filters and how to make different kinds of analyses with QPR ProcessAnalyzer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex;flex-wrap: wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex: 1 0 210px;border:1px solid #dfdfdf;padding:0 1em 1em 1.5em;background-color:#F7FAFC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
=== Getting Started ===&lt;br /&gt;
* [[Getting Started with QPR ProcessAnalyzer]]&lt;br /&gt;
* [[Log_in_QPR_ProcessAnalyzer|Log in QPR ProcessAnalyzer]]&lt;br /&gt;
* [[QPR_ProcessAnalyzer_Native_App_in_Snowflake|Snowflake Native App]]&lt;br /&gt;
* [[Introduction to Process Mining|Introduction to Process Mining]]&lt;br /&gt;
* [[Process_Mining_Concepts|Process Mining Concepts]]&lt;br /&gt;
* [[Navigation_Menu|Navigation Menu]]&lt;br /&gt;
* [[User Settings|User Settings]] and [[Languages and Localization|Language Settings]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex: 1 0 210px;border:1px solid #dfdfdf;padding:0 1em 1em 1.5em;background-color:#F7FAFC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Working with Dashboards ===&lt;br /&gt;
* [[QPR_ProcessAnalyzer_Project_Workspace|Project Workspace]]: [[QPR_ProcessAnalyzer_Project_Workspace#Projects|Projects]], [[QPR_ProcessAnalyzer_Project_Workspace#Dashboards|Dashboards]], [[QPR_ProcessAnalyzer_Project_Workspace#Models|Models]], [[QPR_ProcessAnalyzer_Project_Workspace#Datatables|Datatables]], [[Managing_Scripts|Scripts]], [[QPR_ProcessAnalyzer_Project_Workspace#Recycle_Bin|Recycle Bin]]&lt;br /&gt;
* [[Filtering_in_QPR_ProcessAnalyzer|Using Filters]]&lt;br /&gt;
* [[QPR ProcessAnalyzer Dashboard Designer|Creating Dashboards]]&lt;br /&gt;
* [[AI Assistant for QPR ProcessAnalyzer|AI Assistant]] (powered by OpenAI GPT)&lt;br /&gt;
* [[Dashboard Variables|Dynamic Variables in Dashboards]]&lt;br /&gt;
* [[Business Calendar|Business Calendar to Calculate Durations]]&lt;br /&gt;
* [[Best Practices for Designing Dashboards|Best Practices for Designing Dashboards]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex: 1 0 370px;border:1px solid #dfdfdf;padding:0 1em 1em 1.5em;background-color:#F7FAFC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Analyses and Visualizations ===&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[Process Flowchart|Case-Centric Flowchart]]&lt;br /&gt;
* [[Object-Centric_Flowchart|Object-Centric Flowchart]]&lt;br /&gt;
* [[QPR ProcessAnalyzer Chart|Chart]] / [[Snowflake Chart|Snowflake Chart]]&lt;br /&gt;
** [[QPR ProcessAnalyzer Graph Charts|Graph charts]]&lt;br /&gt;
** [[QPR_ProcessAnalyzer_Table|Table]]&lt;br /&gt;
** [[QPR_ProcessAnalyzer_Pivot_Table|Pivot Table]]&lt;br /&gt;
** [[QPR_ProcessAnalyzer_KPI_Card|KPI Card]]&lt;br /&gt;
** [[Gantt_Chart|Gantt Chart]]&lt;br /&gt;
** [[Sankey_Chart|Sankey Chart]]&lt;br /&gt;
** [[Measure,_Dimension_and_Column_Settings|Measure Settings]]&lt;br /&gt;
** [[Chart_On-screen_Settings|On-screen Settings]]&lt;br /&gt;
** [[Chart_Linked_Settings|Linked Settings]]&lt;br /&gt;
** [[Actions_to_Run_Script_in_Table|Run Script Actions]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[AI_Agent|AI Agent]]&lt;br /&gt;
* [[AI Root Causes|AI Root Causes Analysis]] / [[Root Causes|Classic Root Causes Analysis]]&lt;br /&gt;
* [[Clustering Analysis|Clustering Analysis]]&lt;br /&gt;
* [[Conformance Analysis|Conformance Analysis]]&lt;br /&gt;
* [[Design Diagram|Design Diagram]] / [[QPR ProcessAnalyzer BPMN Editor|BPMN Editor]]&lt;br /&gt;
* [[Label and Link]]&lt;br /&gt;
* [[Image|Image]]&lt;br /&gt;
* [[Range_Filter|Range Filter Selector]] (for dates and numbers)&lt;br /&gt;
* [[Filter_Selectors|Dimension Filter Selectors]]&lt;br /&gt;
* [[Dropdown_List_Selector|Dropdown List Selector]]&lt;br /&gt;
* [[External_Content|Embedded webpage]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== For Citizen Developers ==&lt;br /&gt;
This section describes how to build ETL scripts that transform the source data into process mining models. There is also a detailed description how the process mining models can be configured so that they are optimal for the desired analyses. Finally, there is reference documentation for all expression language related functionality, that can be used both when writing custom KPI&#039;s in dashboards and in the ETL scripts.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex;flex-wrap: wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex: 1 0 370px;border:1px solid #dfdfdf;padding:0 1em 1em 1.5em;background-color:#F7FAFC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
=== Expression Language Reference ===&lt;br /&gt;
* [[SQL_Expressions|SQL Expressions for Snowflake]]&lt;br /&gt;
* In-memory expressions: [[QPR_ProcessAnalyzer_Expressions|Basic Syntax and Operations]] / [[Generic Functions in QPR ProcessAnalyzer|Generic Functions]]&lt;br /&gt;
* [[Generic_Objects_in_Expression_Language|Generic types]] ([[Generic_Properties_in_Expression_Language|Generic Properties]], [[Generic_Objects_in_Expression_Language#Array|Array]], [[Generic_Objects_in_Expression_Language#DateTime|DateTime]], [[Generic_Objects_in_Expression_Language#String|String]], [[Generic_Objects_in_Expression_Language#Timespan|Timespan]],  [[Generic_Objects_in_Expression_Language#Dictionary|Dictionary]])&lt;br /&gt;
* [[Process_Mining_Objects_in_Expression_Language|In-memory models API]] ([[Process_Mining_Objects_in_Expression_Language#AttributeType|AttributeType]], [[Process_Mining_Objects_in_Expression_Language#Case|Case]], [[Process_Mining_Objects_in_Expression_Language#Event|Event]], [[Process_Mining_Objects_in_Expression_Language#EventLog|EventLog]], [[Process_Mining_Objects_in_Expression_Language#EventType|EventType]], [[Process_Mining_Objects_in_Expression_Language#Flow|Flow]], [[Process_Mining_Objects_in_Expression_Language#FlowOccurrence|FlowOccurrence]], [[Process_Mining_Objects_in_Expression_Language#Variation|Variation]])&lt;br /&gt;
* Configuration objects ([[Dashboard_in_Expression_Language|Dashboard]], [[Datatable_in_Expression_Language|Datatable]], [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Model|Model]], [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Filter|Filter]], [[Diagram_in_Expression_Language|Diagram]], [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Script|Script]], [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Project|Project]], [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#User.2FGroup|User/Group]])&lt;br /&gt;
* Tabular data ([[DataFrame in Expression Language|DataFrame]], [[SqlDataFrame in Expression Language|SqlDataFrame]],  [[DataFlow_in_Expression_Language|DataFlow]])&lt;br /&gt;
* [[Machine_Learning_Functions_in_Expression_Language|Machine Learning API]] / [[Conformance_Checking|Conformance Checking]] / [[QPR_MEA_Integration|QPR MEA Integration]]&lt;br /&gt;
* [[Filtering_in_QPR_ProcessAnalyzer_Queries|Filter Rules JSON]]&lt;br /&gt;
* [[System Library]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex: 1 0 250px;border:1px solid #dfdfdf;padding:0 1em 1em 1.5em;background-color:#F7FAFC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create Process Mining Models ===&lt;br /&gt;
* [[Creating Process Mining Model|Walkthrough: Creating Process Mining Model]]&lt;br /&gt;
* [[Exporting_and_Importing_Data_in_QPR_ProcessAnalyzer|Importing Data from CSV, XES and PACM files]]&lt;br /&gt;
* [[Object-centric_Process_Mining_Model|Object-centric Process Mining (OCPM)]]&lt;br /&gt;
* [[Create_Object-centric_Model_from_Relational_Schema|Create OCPM Model from Relational Schema]]&lt;br /&gt;
* [[Event Ordering for Identical Timestamps|Event Ordering for Identical Timestamps]]&lt;br /&gt;
* [[Managing Time Zones and Local Time|Time Zones and Local Time]]&lt;br /&gt;
* [[Best_Practices_for_Designing_Models|Best Practices for Designing Models]]&lt;br /&gt;
* [[Decide_Case_ID_Data_Type|Decide Case ID Data Type]]&lt;br /&gt;
* [[Create_Predicted_Eventlog|Create Predicted Eventlog]]&lt;br /&gt;
* [[Create Simulated Eventlog]]&lt;br /&gt;
==== For In-memory Models ====&lt;br /&gt;
* [[Calculated Attributes in QPR ProcessAnalyzer|Calculated Case and Event Attributes]]&lt;br /&gt;
* [[Email Notifications|Email Notifications]]&lt;br /&gt;
* [[QPR ProcessAnalyzer Model Datasources|Model datasources]] ([[QPR ProcessAnalyzer Model Datasources#Loading Data from Datatables|Datatable]], [[QPR ProcessAnalyzer Model Datasources#Loading Script|Loading Script]], [[QPR ProcessAnalyzer Model Datasources#ODBC_Datasource|ODBC]])&lt;br /&gt;
* [[Case Level Permissions|Case Level Permissions]]&lt;br /&gt;
* [[Automatic Model Loading on Server Startup|Keeping Models Always Available]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex: 1 0 250px;border:1px solid #dfdfdf;padding:0 1em 1em 1.5em;background-color:#F7FAFC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Data Integrations and Connectors ===&lt;br /&gt;
* [[Managing Scripts|Managing Scripts in Workspace]]&lt;br /&gt;
* [[Datatable_Properties_Dialog|Managing Datatables in Workspace]]&lt;br /&gt;
* [[SQL Scripting for ETL|Writing SQL Scripts]]&lt;br /&gt;
* [[SQL Scripting Commands|SQL Scripting Commands Reference]]&lt;br /&gt;
* [[Storing Secrets for Scripts|Storing Secrets]]&lt;br /&gt;
* [[QPR ProcessAnalyzer ScriptLauncher|Installing and using QPR ScriptLauncher]]&lt;br /&gt;
* [[Importing_Data_from_SAP|How to Import Data from SAP]]&lt;br /&gt;
* [[Anonymize data|Anonymize data]]&lt;br /&gt;
* [[Expression Script Examples|Expression Script Examples]]&lt;br /&gt;
* [[QPR ProcessAnalyzer API|QPR ProcessAnalyzer REST API]]&lt;br /&gt;
* [[Sample Eventlog Files|Sample Eventlogs]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== For System Administrators ==&lt;br /&gt;
This section starts with the planning of QPR ProcessAnalyzer installation. After all requirements have been fulfilled, you can continue with the installation and configuration of QPR ProcessAnalyzer. Finally, learn how to manage users and perform other administrative tasks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex;flex-wrap: wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex: 1 0 290px;border:1px solid #dfdfdf;padding:0 1em 1em 1.5em;background-color:#F7FAFC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
=== Planning Installation ===&lt;br /&gt;
* [[QPR ProcessAnalyzer System Requirements|System Requirements]]&lt;br /&gt;
* [[QPR ProcessAnalyzer System Architecture|System Architecture]]&lt;br /&gt;
* [[User Session Management|User Session Management]]&lt;br /&gt;
* [[QPR_ProcessAnalyzer_Downloads|Downloads Page]]&lt;br /&gt;
* [[QPR ProcessAnalyzer Release Notes|QPR ProcessAnalyzer Release Notes]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex: 1 0 290px;border:1px solid #dfdfdf;padding:0 1em 1em 1.5em;background-color:#F7FAFC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing and Configuring ===&lt;br /&gt;
* [[Deploy_QPR_ProcessAnalyzer_from_Container|Container Deployment]]&lt;br /&gt;
* [[Installing QPR ProcessAnalyzer Server on Windows|Install on Windows]] (or [[Updating_QPR_ProcessAnalyzer_Server|Update]])&lt;br /&gt;
* [[Snowflake_Connection_Configuration|Connect to Snowflake]]&lt;br /&gt;
* [[SAML_2.0_Federated_Authentication|SAML 2.0 Authentication]]&lt;br /&gt;
* [[QPR ProcessAnalyzer Security Hardening|Security Hardening]]&lt;br /&gt;
* [[Setting_up_Scripting_Sandbox|Setting up SQL Scripting Sandbox]]&lt;br /&gt;
* [[Activate_QPR_ProcessAnalyzer_using_ActivationUtility|Activation without Internet Connection]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex: 1 0 290px;border:1px solid #dfdfdf;padding:0 1em 1em 1.5em;background-color:#F7FAFC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Administrating System ===&lt;br /&gt;
* [[Roles and Permissions|User Roles and Permissions]]&lt;br /&gt;
* [[Manage Users and Groups|Managing Users]]&lt;br /&gt;
* [[PA_Configuration_database_table|Configurations in database]]&lt;br /&gt;
* [[Server_settings_in_appsettings.json|Configurations in appsettings.json file]]&lt;br /&gt;
* [[Server_settings_in_log4net.config|Configurations in log4net.config file]]&lt;br /&gt;
* [[QPR ProcessAnalyzer Logs|Logs for Audit and Troubleshooting]]&lt;br /&gt;
* [[Embed_to_Website|Embed to Website]]&lt;br /&gt;
* [[In-memory_Models_Management|In-memory Models Management]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Agreements ==&lt;br /&gt;
See the [[QPR General Terms and Conditions]] and [[QPR SaaS Terms and Conditions]].&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Objects_in_Expression_Language&amp;diff=28044</id>
		<title>QPR ProcessAnalyzer Objects in Expression Language</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Objects_in_Expression_Language&amp;diff=28044"/>
		<updated>2026-04-09T08:21:34Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Filter==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Filter properties&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||CreatedBy (User)&lt;br /&gt;
||Returns the user who created the filter.&lt;br /&gt;
|-&lt;br /&gt;
||CreatedDate (DateTime)&lt;br /&gt;
||Returns date when the filter created date.&lt;br /&gt;
|-&lt;br /&gt;
||Description (String)&lt;br /&gt;
||Returns description of the filter.&lt;br /&gt;
|-&lt;br /&gt;
||Id (Integer)&lt;br /&gt;
||Returns id of the filter.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedBy (User)&lt;br /&gt;
||Returns user who modified the filter.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedDate (DateTime)&lt;br /&gt;
||Returns date when the filter last modified.&lt;br /&gt;
|-&lt;br /&gt;
||Model&lt;br /&gt;
||Returns model where the filter belongs to.&lt;br /&gt;
|-&lt;br /&gt;
||ModelId (Integer)&lt;br /&gt;
||Returns model where the filter belongs to.&lt;br /&gt;
|-&lt;br /&gt;
||Name (String)&lt;br /&gt;
||Returns the name of the filter.&lt;br /&gt;
|-&lt;br /&gt;
||Project&lt;br /&gt;
||Returns project where the filter belongs to.&lt;br /&gt;
|-&lt;br /&gt;
||ProjectId (Integer)&lt;br /&gt;
||Returns project id where the filter belongs to.&lt;br /&gt;
|-&lt;br /&gt;
||PublishMode (String)&lt;br /&gt;
||Returns publish mode of the filter, one of the following: &#039;&#039;&#039;Private&#039;&#039;&#039;, &#039;&#039;&#039;Public&#039;&#039;&#039;, or &#039;&#039;&#039;Default&#039;&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
||Rules (Dictionary)&lt;br /&gt;
||Returns a dictionary containing the filter rules in the filter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Filter functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||DeletePermanently&lt;br /&gt;
||(none)&lt;br /&gt;
||&lt;br /&gt;
Deletes the filter permanently. To delete own filters, the &#039;&#039;&#039;Filtering&#039;&#039;&#039; permission is needed, and to delete any filters the &#039;&#039;&#039;ManageViews&#039;&#039;&#039; permission is needed.&lt;br /&gt;
|-&lt;br /&gt;
||Modify&lt;br /&gt;
||Dictionary&lt;br /&gt;
||&lt;br /&gt;
Modifies filter properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: &#039;&#039;Name&#039;&#039;, &#039;&#039;Description&#039;&#039;, &#039;&#039;PublishMode&#039;&#039;, and &#039;&#039;Rules&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The function returns the updated filter object. Requires &#039;&#039;GenericWrite&#039;&#039; permission for the Project and global &#039;&#039;CreateModel&#039;&#039; permission.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FilterById(1)&lt;br /&gt;
	.Modify(#{&lt;br /&gt;
		&amp;quot;Name&amp;quot;: &amp;quot;My filter&amp;quot;,&lt;br /&gt;
		&amp;quot;Description&amp;quot;: &amp;quot;My description&amp;quot;,&lt;br /&gt;
		&amp;quot;PublishMode&amp;quot;: &amp;quot;Public&amp;quot;,&lt;br /&gt;
		&amp;quot;Rules&amp;quot;: #{&lt;br /&gt;
			&amp;quot;Items&amp;quot;: [&lt;br /&gt;
				#{&lt;br /&gt;
					&amp;quot;Type&amp;quot;: &amp;quot;IncludeCases&amp;quot;,&lt;br /&gt;
					&amp;quot;Items&amp;quot;: [&lt;br /&gt;
						#{&lt;br /&gt;
							&amp;quot;Type&amp;quot;: &amp;quot;CaseAttributeValue&amp;quot;,&lt;br /&gt;
							&amp;quot;Attribute&amp;quot;: &amp;quot;Account Manager&amp;quot;,&lt;br /&gt;
							&amp;quot;StringifiedValues&amp;quot;: [&lt;br /&gt;
								&amp;quot;0Mary Wilson&amp;quot;&lt;br /&gt;
							]&lt;br /&gt;
						}&lt;br /&gt;
					]&lt;br /&gt;
				}&lt;br /&gt;
			]&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Function to get filter id:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||FilterById&lt;br /&gt;
||&lt;br /&gt;
* Filter id (Integer)&lt;br /&gt;
||&lt;br /&gt;
Returns Filter object corresponding to the provided filter id.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Model==&lt;br /&gt;
Notes:&lt;br /&gt;
* For in-memory models that are offline, the object counts represent the situation when the model was last time online (loaded into the memory). &#039;&#039;null&#039;&#039; is returned if the model has never been loaded into the memory.&lt;br /&gt;
* If [[Case_Level_Permissions|Case permissions]] are used for the model, and user doesn&#039;t have &#039;&#039;&#039;GenericWrite&#039;&#039;&#039; permission for the model, &#039;&#039;null&#039;&#039; is returned for data security reasons. Users that have the &#039;&#039;&#039;GenericWrite&#039;&#039;&#039; permission, see null when the model is offline, and when online, they see counts where the case level permissions settings are applied.&lt;br /&gt;
* Properties &#039;&#039;CaseAttributes&#039;&#039;, &#039;&#039;EventAttributes&#039;&#039; and &#039;&#039;Eventlog&#039;&#039; 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.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Model properties&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||AllFilters (Filter*)&lt;br /&gt;
||Returns an array of all [[#Filter|filters]] in the model where the user has access to. In addition to the &#039;&#039;Filters&#039;&#039; property, &#039;&#039;AllFilters&#039;&#039; also returns private filters of other users. The &#039;&#039;ManageViews&#039;&#039; permission is required to use this property.&lt;br /&gt;
|-&lt;br /&gt;
||Calendars (BusinessCalendar*)&lt;br /&gt;
||&lt;br /&gt;
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.&lt;br /&gt;
|-&lt;br /&gt;
||CaseAttributes (AttributeType*)&lt;br /&gt;
||[[#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&#039;s loaded when this property is used.&lt;br /&gt;
|-&lt;br /&gt;
||CasesDatatable (Datatable)&lt;br /&gt;
||Returns the Datatable the model uses as a datasource for cases. Returns &#039;&#039;null&#039;&#039; if the cases Datatable is not defined or if model uses other than the Datatable datasource.&lt;br /&gt;
|-&lt;br /&gt;
||Configuration (Dictionary)&lt;br /&gt;
||Returns the Model configuration as dictionary. Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(123).Configuration.DataSource.Events.DataTableName&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||ConfigurationJson (String)&lt;br /&gt;
||Returns the Model configuration as JSON string.&lt;br /&gt;
|-&lt;br /&gt;
||CreatedBy (User)&lt;br /&gt;
||User who created the model.&lt;br /&gt;
|-&lt;br /&gt;
||CreatedDate (DateTime)&lt;br /&gt;
||Timestamp when the model was created.&lt;br /&gt;
|-&lt;br /&gt;
||DefaultCalendar (BusinessCalendar)&lt;br /&gt;
||Returns the default [[Business_Calendar|business calendar]] of the Model. Returns &#039;&#039;null&#039;&#039;, 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.&lt;br /&gt;
|-&lt;br /&gt;
||DefaultFilter (Filter)&lt;br /&gt;
||Default filter of the model. Returns &#039;&#039;null&#039;&#039; if the model does not have a default filter.&lt;br /&gt;
|-&lt;br /&gt;
||DefaultFilterId (Integer)&lt;br /&gt;
||Default filter id of the model. Returns &#039;&#039;null&#039;&#039; if the model does not have a default filter.&lt;br /&gt;
|-&lt;br /&gt;
||Description (String)&lt;br /&gt;
||Model description. The model description may contain line breaks.&lt;br /&gt;
|-&lt;br /&gt;
||DeletedDate (DateTime)&lt;br /&gt;
||Timestamp when Model was deleted (moved to the recycle bin).&lt;br /&gt;
|-&lt;br /&gt;
||DeletedBy (User)&lt;br /&gt;
||User how deleted the Model.&lt;br /&gt;
|-&lt;br /&gt;
||Diagrams (Diagram*)&lt;br /&gt;
||Returns an array of all [[Diagram_in_Expression_Language|diagrams]] in the model.&lt;br /&gt;
|-&lt;br /&gt;
||EstimatedMemory (Integer)&lt;br /&gt;
||Returns an estimation of how much memory in bytes the model requires.&lt;br /&gt;
|-&lt;br /&gt;
||EventsDatatable (Datatable)&lt;br /&gt;
||Returns the Datatable the model uses as a datasource for events. Returns &#039;&#039;null&#039;&#039; if the events Datatable is not defined or if model uses other than the Datatable datasource.&lt;br /&gt;
|-&lt;br /&gt;
||EventAttributes (AttributeType*)&lt;br /&gt;
||[[#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&#039;s loaded when this property is used.&lt;br /&gt;
|-&lt;br /&gt;
||EventLog (EventLog)&lt;br /&gt;
||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&#039;s loaded when this property is used.&lt;br /&gt;
|-&lt;br /&gt;
||Filters (Filter*)&lt;br /&gt;
||Returns an array of all public [[#Filter|filters]], the default filter (if any) and the user&#039;s own private filters in the model. Note that the other users&#039;s private filters are not returned even for administrators.&lt;br /&gt;
|-&lt;br /&gt;
||Id (Integer)&lt;br /&gt;
||Model Id. Model Id is generated by QPR ProcessAnalyzer when the model is created.&lt;br /&gt;
|-&lt;br /&gt;
||IsValidInMemoryModel (boolean)&lt;br /&gt;
||Returns &#039;&#039;true&#039;&#039; if all the following conditions are met:&lt;br /&gt;
* CheckModelValidity function doesn&#039;t return any issues (because invalid models are assumed to be Snowflake models).&lt;br /&gt;
* Model is not an object-centric model.&lt;br /&gt;
* Data source of the model is &#039;&#039;ODBC&#039;&#039; or &#039;&#039;Expression&#039;&#039;, or the referred datatable has &#039;&#039;DataSourceType&#039;&#039; either &#039;&#039;Local&#039;&#039; or &#039;&#039;SqlServer&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedBy (User)&lt;br /&gt;
||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.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedDate (DateTime)&lt;br /&gt;
||Timestamp when the model was modified the last time.&lt;br /&gt;
|-&lt;br /&gt;
||Name (String)&lt;br /&gt;
||Model name.&lt;br /&gt;
|-&lt;br /&gt;
||NCache (Integer)&lt;br /&gt;
||Number of objects related to the model when the model is loaded into the memory.&lt;br /&gt;
|-&lt;br /&gt;
||NCaseAttributes (Integer)&lt;br /&gt;
||Number of [[#AttributeType|CaseAttributes]] in model. Works only for in-memory models.&lt;br /&gt;
|-&lt;br /&gt;
||NCases (Integer)&lt;br /&gt;
||Number of [[#Case|Cases]] in the model. Works only for in-memory models.&lt;br /&gt;
|-&lt;br /&gt;
||NEventAttributes (Integer)&lt;br /&gt;
||Number of [[#AttributeType|EventAttributes]] in model. Works only for in-memory models.&lt;br /&gt;
|-&lt;br /&gt;
||NEvents (Integer)&lt;br /&gt;
||Number of [[#Event|Events]] in model. Works only for in-memory models.&lt;br /&gt;
|-&lt;br /&gt;
||NEventTypes (Integer)&lt;br /&gt;
||Number of [[#EventType|EventTypes]] in the model. Works only for in-memory models.&lt;br /&gt;
|-&lt;br /&gt;
||Project (Project)&lt;br /&gt;
||[[#Project|Project]] where the model belongs to.&lt;br /&gt;
|-&lt;br /&gt;
||ProjectId (Integer)&lt;br /&gt;
||[[#Project|Project]] id where the model belongs to.&lt;br /&gt;
|-&lt;br /&gt;
||Status (String)&lt;br /&gt;
||&lt;br /&gt;
Memory availability status of the model. There are the following statuses:&lt;br /&gt;
* &#039;&#039;&#039;Loading&#039;&#039;&#039;: The model is currently loading into the memory. When the loading is ready, the status changes to &#039;&#039;online&#039;&#039;. If the loading fails, the status changes to &#039;&#039;offline&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Offline&#039;&#039;&#039;: 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).&lt;br /&gt;
* &#039;&#039;&#039;Online&#039;&#039;&#039;: The model is in the memory and ready for analysis calculation. If the model is dropped from the memory, its status changes to &#039;&#039;offline&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
||UsedDatatables (Datatable*)&lt;br /&gt;
||Returns all datatables the model uses as a datasource.&lt;br /&gt;
&lt;br /&gt;
Example: List datatables used by a model:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
StringJoin(&amp;quot;, &amp;quot;, OrderByValue(ModelById(1).UsedDataTables.Name))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Model functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||CalendarByName (BusinessCalendar)&lt;br /&gt;
||&lt;br /&gt;
name (String)&lt;br /&gt;
||&lt;br /&gt;
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 &#039;&#039;null&#039;&#039;, if a calendar with the provided name is not stored to the model.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(123).CalendarByName(&amp;quot;MyCalendar&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||CreateDiagram (Diagram)&lt;br /&gt;
||Parameters dictionary&lt;br /&gt;
||&lt;br /&gt;
Creates a [[Diagram_in_Expression_Language|diagram]] to the model. Parameters is a dictionary containing diagram properties. Following properties are available:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039; (string): Diagram name that distinguishes diagrams in a model.&lt;br /&gt;
* &#039;&#039;&#039;Description&#039;&#039;&#039; (string): Diagram description text.&lt;br /&gt;
* &#039;&#039;&#039;Content&#039;&#039;&#039; (dictionary): Diagram content as dictionary.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(1)&lt;br /&gt;
  .CreateDiagram(#{&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;My diagram&amp;quot;,&lt;br /&gt;
    &amp;quot;Description&amp;quot;: &amp;quot;This is my new diagram&amp;quot;,&lt;br /&gt;
    &amp;quot;Content&amp;quot;: #{ ... },&lt;br /&gt;
  })&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||CreateFilter (Filter)&lt;br /&gt;
||Parameters dictionary&lt;br /&gt;
||Creates a filter to a model. Requires &#039;&#039;GenericWrite&#039;&#039; permission for the project and global &#039;&#039;CreateModel&#039;&#039; permission. If a filter with that name already exists in the model, an exception is thrown.&lt;br /&gt;
The parameters dictionary may have the following properties:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039;: Name of the filter. This property is mandatory.&lt;br /&gt;
* &#039;&#039;&#039;Description&#039;&#039;&#039;: Description of the filter. This property is optional.&lt;br /&gt;
* &#039;&#039;&#039;Rules&#039;&#039;&#039;: Filter rules for the filter defined as a dictionary according to the [[Filtering_in_QPR_ProcessAnalyzer_Queries|filter json format]]. This property is mandatory.&lt;br /&gt;
* &#039;&#039;&#039;PublishMode&#039;&#039;&#039;: Publish mode of the filter which is one of the following: &#039;&#039;Private&#039;&#039;, &#039;&#039;Public&#039;&#039; or &#039;&#039;Default&#039;&#039;. This property is optional, and the default value is &#039;&#039;Private&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let newFilter = modelById(1).CreateFilter(#{    &lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My Filter&amp;quot;,&lt;br /&gt;
  &amp;quot;Rules&amp;quot;: #{&lt;br /&gt;
    &amp;quot;Items&amp;quot;: [#{&lt;br /&gt;
      &amp;quot;Type&amp;quot;: &amp;quot;IncludeCases&amp;quot;,&lt;br /&gt;
      &amp;quot;Items&amp;quot;: [#{&lt;br /&gt;
        &amp;quot;Type&amp;quot;: &amp;quot;CaseAttributeValue&amp;quot;,&lt;br /&gt;
        &amp;quot;Attribute&amp;quot;: &amp;quot;Account Manager&amp;quot;,&lt;br /&gt;
        &amp;quot;StringifiedValues&amp;quot;: [ &amp;quot;0Robert Miller&amp;quot; ]&lt;br /&gt;
      }]&lt;br /&gt;
    }]&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;PublishMode&amp;quot;: &amp;quot;Public&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||DeletePermanently&lt;br /&gt;
||(none)&lt;br /&gt;
||Deletes the Model permanently. The model doesn&#039;t need to be in the recycle bin to be able to delete it permanently.&lt;br /&gt;
|-&lt;br /&gt;
||Modify (Model)&lt;br /&gt;
||Dictionary&lt;br /&gt;
||&lt;br /&gt;
Modifies model properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: &#039;&#039;Name&#039;&#039;, &#039;&#039;Description&#039;&#039;, &#039;&#039;ProjectId&#039;&#039;, and &#039;&#039;Configuration&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The function returns the updated model object. Requires the &#039;&#039;GenericWrite&#039;&#039; permission for the project and the global &#039;&#039;CreateModel&#039;&#039; permission.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(1)&lt;br /&gt;
	.Modify(#{&lt;br /&gt;
		&amp;quot;Name&amp;quot;: &amp;quot;My model&amp;quot;,&lt;br /&gt;
		&amp;quot;Description&amp;quot;: &amp;quot;My description&amp;quot;,&lt;br /&gt;
		&amp;quot;ProjectId&amp;quot;: 2,&lt;br /&gt;
		&amp;quot;Configuration&amp;quot;: #{&lt;br /&gt;
			&amp;quot;DataSource&amp;quot;: #{&lt;br /&gt;
				&amp;quot;Cases&amp;quot;: #{&lt;br /&gt;
					&amp;quot;DataSourceType&amp;quot;: &amp;quot;datatable&amp;quot;,&lt;br /&gt;
					&amp;quot;DataTableName&amp;quot;: &amp;quot;My cases datatable&amp;quot;,&lt;br /&gt;
					&amp;quot;Columns&amp;quot;: #{&lt;br /&gt;
						&amp;quot;CaseId&amp;quot;: &amp;quot;Case Name&amp;quot;&lt;br /&gt;
					}&lt;br /&gt;
				},&lt;br /&gt;
				&amp;quot;Events&amp;quot;: #{&lt;br /&gt;
					&amp;quot;DataSourceType&amp;quot;: &amp;quot;datatable&amp;quot;,&lt;br /&gt;
					&amp;quot;DataTableName&amp;quot;: &amp;quot;My events datatable&amp;quot;,&lt;br /&gt;
					&amp;quot;Columns&amp;quot;: #{&lt;br /&gt;
						&amp;quot;CaseId&amp;quot;: &amp;quot;Case Name&amp;quot;,&lt;br /&gt;
						&amp;quot;EventType&amp;quot;: &amp;quot;Event Type&amp;quot;,&lt;br /&gt;
						&amp;quot;Timestamp&amp;quot;: &amp;quot;Start Time&amp;quot;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||ResetModelCache&lt;br /&gt;
||(none)&lt;br /&gt;
||&lt;br /&gt;
Synchronously clears all cached model data. For a Snowflake model, deletes all cache tables related to the model from Snowflake. For an in-memory model, drops the model from the memory and also drops all other model related caches from the memory. &lt;br /&gt;
|-&lt;br /&gt;
||ResetPreprocessings&lt;br /&gt;
||(none)&lt;br /&gt;
||&lt;br /&gt;
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.&lt;br /&gt;
|-&lt;br /&gt;
||Restore&lt;br /&gt;
||(none)&lt;br /&gt;
||Restores the Model from the recycle bin back to the original location.&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;ToSqlDataFrame&amp;quot;&amp;gt;ToSqlDataFrame&amp;lt;/span&amp;gt;&lt;br /&gt;
||In-memory dataframe&lt;br /&gt;
||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.&lt;br /&gt;
&lt;br /&gt;
Example: Select matching cases from events data using in-memory dataframe:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let model = ModelById(1);&lt;br /&gt;
let dfEvents = model.EventsDatatable.SqlDataFrame;&lt;br /&gt;
let inMemoryDf = ToDataFrame(&lt;br /&gt;
  [[&amp;quot;1&amp;quot;], [&amp;quot;2&amp;quot;], [&amp;quot;3&amp;quot;]],&lt;br /&gt;
  [#{&amp;quot;Name&amp;quot;: &amp;quot;id&amp;quot;, &amp;quot;DataType&amp;quot;: &amp;quot;String&amp;quot;}]&lt;br /&gt;
);&lt;br /&gt;
model.ToSqlDataFrame(inMemoryDf)&lt;br /&gt;
  .Join(dfEvents, [&amp;quot;id&amp;quot;: &amp;quot;CaseId&amp;quot;])&lt;br /&gt;
  .SelectDistinct([&amp;quot;CaseId&amp;quot;])&lt;br /&gt;
  .Collect();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;TriggerNotifications&amp;quot;&amp;gt;TriggerNotifications&amp;lt;/span&amp;gt; (Boolean)&lt;br /&gt;
||Notification names (String*)&lt;br /&gt;
||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.&lt;br /&gt;
&lt;br /&gt;
The function return &#039;&#039;true&#039;&#039; if any notification were triggered, otherwise &#039;&#039;false&#039;&#039;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(123).TriggerNotifications([&amp;quot;Notification 1&amp;quot;, &amp;quot;Notification 2&amp;quot;]);&lt;br /&gt;
Triggers notifications Notification 1 and Notification 2 in model id 123.&lt;br /&gt;
&lt;br /&gt;
ModelById(123).TriggerNotifications();&lt;br /&gt;
Triggers all notifications in model id 123.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;CheckModelValidity&amp;quot;&amp;gt;CheckModelValidity&amp;lt;/span&amp;gt; (Object array)&lt;br /&gt;
||CheckData field in dictionary&lt;br /&gt;
||Checks the model validity and returns found issues. The returned data is an array of objects where each object represents one validity error and contains the following properties:&lt;br /&gt;
* &#039;&#039;&#039;IssueType&#039;&#039;&#039; (String): Specifies the issue type.&lt;br /&gt;
* &#039;&#039;&#039;ContextType&#039;&#039;&#039; (String): Context in which the issue was found, and it can be &#039;&#039;&#039;EventDataSource&#039;&#039;&#039;, &#039;&#039;&#039;CaseDataSource&#039;&#039;&#039;, &#039;&#039;&#039;OcelDataSource&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Details&#039;&#039;&#039; (Dictionary): Additional details which depend on the type of the issue.&lt;br /&gt;
&lt;br /&gt;
There are two types of checks available (based on whether the &#039;&#039;&#039;CheckData&#039;&#039;&#039; parameter is defined):&lt;br /&gt;
* &#039;&#039;Lightweight check&#039;&#039;: The check is based on only the configuration data stored in QPR ProcessAnalyzer. This check is very quick and does not require running queries in datasource (e.g., in Snowflake).&lt;br /&gt;
* &#039;&#039;Full check&#039;&#039;: The check is comprehensive and it&#039;s able to detect any validity issues the model may have. The full check requires running queries to the actual data which makes the check slower, and in case of Snowflake, it uses the Snowflake warehouse to run the queries.&lt;br /&gt;
&lt;br /&gt;
The lightweight check is performed automatically by the [[QPR_ProcessAnalyzer_Project_Workspace|Workspace]], so if there are any validity issues that the lightweight check can detect, the Workspace notifies about them immediately. If there are any problems with the model calculation results, it might be a good idea to run the full validity check to confirm whether the problems are due to the model being invalid.&lt;br /&gt;
&lt;br /&gt;
Example: Lightweight check:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ToJson(ModelById(1).CheckModelValidity())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Full check:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ToJson(ModelById(1).CheckModelValidity(#{ &amp;quot;CheckData&amp;quot;: true }))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||CortexAgentsQuery&lt;br /&gt;
||&lt;br /&gt;
||Creates a Snowflake Cortex semantic model (see &#039;&#039;GetSemanticModel&#039;&#039; function) for the process mining model and makes a natural language query on it using Snowflake Cortex Agents. More information: https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents. &lt;br /&gt;
&lt;br /&gt;
There are the following parameters:&lt;br /&gt;
# &#039;&#039;&#039;Parameters&#039;&#039;&#039;: Dictionary parameters given to the Cortex Agents REST API query (https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-rest-api). There is a special handling for the following parameters:&lt;br /&gt;
#* &#039;&#039;&#039;model&#039;&#039;&#039;: If not defined, uses the default Cortex Agents model name configured into the database, or if that is not defined, uses &amp;quot;llama3.1-70b&amp;quot;.&lt;br /&gt;
#* &#039;&#039;&#039;_tools&#039;&#039;&#039;: Additional tool_spec of type &amp;quot;cortex_analyst_text_to_sql&amp;quot; will be added to this value with a reference to the generated semantic model.&lt;br /&gt;
#* &#039;&#039;&#039;_tool_resources&#039;&#039;&#039;: Generated semantic model is added as an additional resource.&lt;br /&gt;
# &#039;&#039;&#039;Filter configuration&#039;&#039;&#039;: Can be a string containing filter JSON or a dictionary containing the filter configuration. The semantic model is created for the filtered eventlog. If not defined, the entire model eventlog will be used.&lt;br /&gt;
# &#039;&#039;&#039;Event column role nappings&#039;&#039;&#039;: Mappings to apply for event columns. If not defined, default column mappings are used.&lt;br /&gt;
# &#039;&#039;&#039;Case column role mappings&#039;&#039;&#039;: Mappings to apply for case columns. If not defined, default column mappings are used.&lt;br /&gt;
&lt;br /&gt;
The function returns a dictionary with the following keys:&lt;br /&gt;
# &#039;&#039;&#039;Response&#039;&#039;&#039;: Actual response as a dictionary returned by the Cortex Agents.&lt;br /&gt;
# &#039;&#039;&#039;Response items&#039;&#039;&#039;: Contains processed response consisting of an array of objects having the following properties:&lt;br /&gt;
#* &#039;&#039;&#039;Text&#039;&#039;&#039;: Textual response.&lt;br /&gt;
#* &#039;&#039;&#039;Sql&#039;&#039;&#039;: Response SQL query string. Not mandatory.&lt;br /&gt;
#* &#039;&#039;&#039;SqlDataFrame&#039;&#039;&#039;: SqlDataFrame created for the SQL query in the Sql property. Only present if Sql is present.&lt;br /&gt;
|-&lt;br /&gt;
||GetSemanticModel&lt;br /&gt;
||&lt;br /&gt;
||Creates a Snowflake Cortex Analyst semantic model for the process mining model and returns it as a dictionary. More information: https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-analyst/semantic-model-spec.&lt;br /&gt;
&lt;br /&gt;
There are the following parameters:&lt;br /&gt;
# &#039;&#039;&#039;Filter configuration&#039;&#039;&#039;: Can be a string containing filter JSON or a dictionary containing the filter. The semantic model is created for the filtered eventlog. If not defined, the entire model eventlog will be used.&lt;br /&gt;
# &#039;&#039;&#039;Event column role mappings&#039;&#039;&#039;: Mappings to apply for event columns. If not defined, default column mappings are used.&lt;br /&gt;
# &#039;&#039;&#039;Case column role mappings&#039;&#039;&#039;: Mappings to apply for case columns. If not defined, default column mappings are used.&lt;br /&gt;
&lt;br /&gt;
Examples: Returns a semantic model without any filtering applied.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(1).GetSemanticModel();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Function to get Model by model id:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||ModelById&lt;br /&gt;
||&lt;br /&gt;
* Model id (Integer)&lt;br /&gt;
||&lt;br /&gt;
Returns [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Model|Model]] object corresponding to the provided model id.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Object-centric model==&lt;br /&gt;
Object-centric models additionally have the following properties and functions.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Object-Centric model properties&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||IsOcelModel (boolean)&lt;br /&gt;
||Returns &#039;&#039;true&#039;&#039; when the model is an OCEL model.&lt;br /&gt;
|-&lt;br /&gt;
||OcelEvents (Datatable)&lt;br /&gt;
||Datatable containing event data for the OCEL model. Value &#039;&#039;null&#039;&#039; is returned if event datatable has not been configured for the model. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
|-&lt;br /&gt;
||OcelEventToObject (Datatable)&lt;br /&gt;
||Datatable containing event-to-object relations data for the OCEL model. Value &#039;&#039;null&#039;&#039; is returned if event-to-object relation datatable has not been configured for the model. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
|-&lt;br /&gt;
||OcelEventTypes (Dictionary)&lt;br /&gt;
||Returns a dictionary containing event type names as keys and the datatables holding event data for that event type in this OCEL model as value. An empty array is returned if event types datatable has not been configured for the model. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
&lt;br /&gt;
Example: Get datatable for &amp;quot;Create order&amp;quot; events:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(1).OcelEventTypes.Get(&amp;quot;Create order&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||OcelObjects (Datatable)&lt;br /&gt;
||Datatable containing objects data for the OCEL model. Value &#039;&#039;null&#039;&#039; is returned if object datatable has not been configured for the model. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
|-&lt;br /&gt;
||OcelObjectToObject (Datatable)&lt;br /&gt;
||Datatable containing object-to-object relations data for the OCEL model. Value &#039;&#039;null&#039;&#039; is returned if object-to-object relation datatable has not been configured for the model. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
|-&lt;br /&gt;
||OcelObjectTypes (Dictionary)&lt;br /&gt;
||Returns a dictionary containing object type names as keys and the datatables holding data for that object type in this OCEL model as value. An empty array is returned if object types have not been configured for this model. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Object-centric model functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||OcelEventType&lt;br /&gt;
||Event type name (String)&lt;br /&gt;
||&lt;br /&gt;
Datatable containing event type attributes of given event type in this OCEL model. Value &#039;&#039;null&#039;&#039; is returned if a datatable is not configured for this model for given event type. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
&lt;br /&gt;
Example: Get datatable for &amp;quot;Create order&amp;quot; events:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(1).OcelEventType(&amp;quot;Create order&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||OcelObjectType&lt;br /&gt;
||Object type name (String)&lt;br /&gt;
||Datatable containing object type attributes of given object type in this OCEL model. Value &#039;&#039;null&#039;&#039; is returned if a datatable is not configured for this model for given object type. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
|-&lt;br /&gt;
||OcelObjectTypeConfiguration&lt;br /&gt;
||Object type name (String)&lt;br /&gt;
||Returns a matching configuration object with the following properties:&amp;lt;br&amp;gt;&lt;br /&gt;
# Datatable: name of the datatable&lt;br /&gt;
# Unit: unit label for object type items&lt;br /&gt;
&#039;&#039;Null&#039;&#039; is returned if the given object type is not found in the model configuration.  &lt;br /&gt;
If the object type name is not specified or &#039;&#039;null&#039;&#039;, the function returns a dictionary containing configurations for all defined object types.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Project properties&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||CreatedBy (User)&lt;br /&gt;
||User who created the Project.&lt;br /&gt;
|-&lt;br /&gt;
||CreatedDate (DateTime)&lt;br /&gt;
||Timestamp when the Project was created.&lt;br /&gt;
|-&lt;br /&gt;
||Configuration (Dictionary)&lt;br /&gt;
||Project settings as Dictionary object. See example in &#039;&#039;ConfigurationJson&#039;&#039; property.&lt;br /&gt;
|-&lt;br /&gt;
||ConfigurationJson (String)&lt;br /&gt;
||Project settings as json string.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;DefaultLocationInDataSource&amp;quot;: {&lt;br /&gt;
    &amp;quot;Database&amp;quot;: &amp;quot;MyDatabase&amp;quot;,&lt;br /&gt;
    &amp;quot;Schema&amp;quot;: &amp;quot;MySchema&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;ConnectionStringKeys&amp;quot;: {&lt;br /&gt;
    &amp;quot;Snowflake&amp;quot;: &amp;quot;MyKey1&amp;quot;,&lt;br /&gt;
    &amp;quot;SqlServer&amp;quot;: &amp;quot;MyKey2&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||Dashboards (Dashboard*)&lt;br /&gt;
||Returns all [[Dashboard_in_Expression_Language|dashboards]] in the project.&lt;br /&gt;
|-&lt;br /&gt;
||Datatables (Datatable*)&lt;br /&gt;
||Returns all Datatables in the project.&lt;br /&gt;
|-&lt;br /&gt;
||DeletedDate (DateTime)&lt;br /&gt;
||Timestamp when the Project was deleted (moved to the recycle bin).&lt;br /&gt;
|-&lt;br /&gt;
||Description (String)&lt;br /&gt;
||Project description. The project description may contain line breaks.&lt;br /&gt;
|-&lt;br /&gt;
||DeletedBy (User)&lt;br /&gt;
||User who deleted the Project (moved to the recycle bin).&lt;br /&gt;
|-&lt;br /&gt;
||Id (Integer)&lt;br /&gt;
||Id of the Project.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedBy (User)&lt;br /&gt;
||User who last modified the Project.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedDate (DateTime)&lt;br /&gt;
||Timestamp when the Project was last modified (refers to the project name, description and parent, not the contents of the project).&lt;br /&gt;
|-&lt;br /&gt;
||Name (String)&lt;br /&gt;
||Name of the Project.&lt;br /&gt;
|-&lt;br /&gt;
||Models (Model*)&lt;br /&gt;
||Models that are in the Project.&lt;br /&gt;
|-&lt;br /&gt;
||Parent (Project)&lt;br /&gt;
||Parent project, i.e. a Project where the Project is located in the hierarchy of Projects. Returns &#039;&#039;null&#039;&#039; for root level Projects. Throws an error if user doesn&#039;t have access to the parent project.&lt;br /&gt;
|-&lt;br /&gt;
||ParentProjectId (Integer)&lt;br /&gt;
||Parent project id. Returns &#039;&#039;null&#039;&#039; for root level Projects. The parent project id is returned even if user doesn&#039;t have access to the parent project.&lt;br /&gt;
|-&lt;br /&gt;
||Scripts (Script*)&lt;br /&gt;
||Scripts that are in the Project.&lt;br /&gt;
|-&lt;br /&gt;
||Secrets (Dictionary*)&lt;br /&gt;
||Returns array of all [[Storing_Secrets_for_Scripts|secrets]] in the project as Dictionary with following properties:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039; (string): Name of the secret.&lt;br /&gt;
* &#039;&#039;&#039;Type&#039;&#039;&#039; (string): Type of the secret which is one of the following: &amp;quot;odbc&amp;quot;, &amp;quot;sap&amp;quot;, &amp;quot;salesforce&amp;quot;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Project functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||CreateDashboard (Dashboard)&lt;br /&gt;
||Parameters dictionary&lt;br /&gt;
||Creates a dashboard to the project. &#039;&#039;EditDashboards&#039;&#039; permission to the project is required. The parameter is dictionary with following supported dashboard properties:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039; (String): Name of the dashboard.&lt;br /&gt;
* &#039;&#039;&#039;Identifier&#039;&#039;&#039; (String): Identifier of the dashboard.&lt;br /&gt;
* &#039;&#039;&#039;Description&#039;&#039;&#039; (String): Description of the dashboard.&lt;br /&gt;
* &#039;&#039;&#039;Content&#039;&#039;&#039; (Dictionary): Content of the dashboard.&lt;br /&gt;
&lt;br /&gt;
Example: Create empty dashboard.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1)&lt;br /&gt;
  .CreateDashboard(#{&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;My dashboard&amp;quot;,&lt;br /&gt;
    &amp;quot;Identifier&amp;quot;: &amp;quot;MyDashboard&amp;quot;&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Create dashboard with a chart.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1)&lt;br /&gt;
  .CreateDashboard(#{&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;My dashboard&amp;quot;,&lt;br /&gt;
    &amp;quot;Content&amp;quot;: #{&lt;br /&gt;
      &amp;quot;version&amp;quot;: 4,&lt;br /&gt;
      &amp;quot;typeName&amp;quot;: &amp;quot;View&amp;quot;,&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;My dashboard&amp;quot;,&lt;br /&gt;
      &amp;quot;subElements&amp;quot;: [&lt;br /&gt;
        #{&lt;br /&gt;
          &amp;quot;position&amp;quot;: #{&lt;br /&gt;
            &amp;quot;x&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;y&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;width&amp;quot;: 0.5,&lt;br /&gt;
            &amp;quot;height&amp;quot;: 0.5,&lt;br /&gt;
            &amp;quot;zOrder&amp;quot;: 0&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;element&amp;quot;: #{&lt;br /&gt;
            &amp;quot;typeName&amp;quot;: &amp;quot;Chart&amp;quot;,&lt;br /&gt;
            &amp;quot;configuration&amp;quot;: #{&lt;br /&gt;
              &amp;quot;root&amp;quot;: #{&lt;br /&gt;
                &amp;quot;expressionType&amp;quot;: &amp;quot;Cases&amp;quot;,&lt;br /&gt;
                &amp;quot;expressionParameters&amp;quot;: #{}&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;measures&amp;quot;: [#{&lt;br /&gt;
                &amp;quot;expressionType&amp;quot;: &amp;quot;Count&amp;quot;,&lt;br /&gt;
                &amp;quot;expressionParameters&amp;quot;: #{}&lt;br /&gt;
              }]&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;CreateDatatable&amp;quot;&amp;gt;CreateDatatable&amp;lt;/span&amp;gt; (Datatable)&lt;br /&gt;
||&lt;br /&gt;
* Parameters dictionary&lt;br /&gt;
||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:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039; (string): Name of the datatable. This parameter is mandatory.&lt;br /&gt;
* &#039;&#039;&#039;Description&#039;&#039;&#039; (string): Description for the datatable. This parameter is optional.&lt;br /&gt;
* &#039;&#039;&#039;NameInDataSource&#039;&#039;&#039; (string): Table name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.&lt;br /&gt;
* &#039;&#039;&#039;SchemaNameInDataSource&#039;&#039;&#039; (string): Schema name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.&lt;br /&gt;
* &#039;&#039;&#039;DatabaseNameInDataSource&#039;&#039;&#039; (string): Database name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.&lt;br /&gt;
* &#039;&#039;&#039;Type&#039;&#039;&#039; (string): Defines where the data for the datatable is located. Available values are &#039;&#039;&#039;Snowflake&#039;&#039;&#039;, &#039;&#039;&#039;SqlServer&#039;&#039;&#039;, and &#039;&#039;&#039;Local&#039;&#039;&#039;.  This parameter is optional and default value is defined by the [[PA_Configuration_database_table#General_Settings|DefaultDataSource]] setting.&lt;br /&gt;
* &#039;&#039;&#039;Connection&#039;&#039;&#039;: Connection object for the datatable. This parameter is optional.&lt;br /&gt;
&lt;br /&gt;
Example: Create a new datatable:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).CreateDatatable(#{&lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My datatable&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Create Snowflake datatable linked to a custom table:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).CreateDatatable(#{&lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My datatable&amp;quot;,&lt;br /&gt;
  &amp;quot;Description&amp;quot;: &amp;quot;My description&amp;quot;,&lt;br /&gt;
  &amp;quot;NameInDataSource&amp;quot;: &amp;quot;MyTable&amp;quot;,&lt;br /&gt;
  &amp;quot;SchemaNameInDataSource&amp;quot;: &amp;quot;MySchema&amp;quot;,&lt;br /&gt;
  &amp;quot;DatabaseNameInDataSource&amp;quot;: &amp;quot;MyDatabase&amp;quot;,&lt;br /&gt;
  &amp;quot;Type&amp;quot;: &amp;quot;Snowflake&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Create Snowflake datatable where connection string is stored as a [[Storing_Secrets_for_Scripts|secret]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).CreateDatatable(#{&lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My datatable&amp;quot;,&lt;br /&gt;
  &amp;quot;Type&amp;quot;: &amp;quot;Snowflake&amp;quot;,&lt;br /&gt;
  &amp;quot;Connection&amp;quot;: ProjectById(1).CreateSnowflakeConnection(#{ &amp;quot;OdbcConnectionStringKey&amp;quot;: &amp;quot;MyKey&amp;quot; })&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||CreateMeaConnection&lt;br /&gt;
||&lt;br /&gt;
||&lt;br /&gt;
Creates an object representing connection to QPR MEA (QPR Suite) Web Service. The function parameter is a dictionary containing the property &#039;&#039;&#039;ConnectionStringKey&#039;&#039;&#039; which defines the MEA connection string secret name in the same project. When the connection object has been created, MEA Web Service [[QPR_MEA_Integration|queries and other operations]] can be executed using it.&lt;br /&gt;
&lt;br /&gt;
Example: create connection:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let connection = ProjectByName(&amp;quot;MyProject&amp;quot;).CreateMeaConnection( #{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MyMeaConnection&amp;quot;} );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: use connection:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let results = connection.QueryObjects(&amp;quot;[PG.785401983.683494101]&amp;quot;, &amp;quot;name, typename&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||CreateModel (Model)&lt;br /&gt;
||&lt;br /&gt;
* Parameters dictionary&lt;br /&gt;
||Creates a model to a project. Requires &#039;&#039;GenericWrite&#039;&#039; permission for the Project and global &#039;&#039;CreateModel&#039;&#039; permission. If a model with that name already exists, an exception is thrown.&lt;br /&gt;
&lt;br /&gt;
Parameters dictionary has the following properties:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039;: Name of the model. This property is mandatory.&lt;br /&gt;
* &#039;&#039;&#039;Description&#039;&#039;&#039;: Description of the model. This property is optional.&lt;br /&gt;
* &#039;&#039;&#039;Configuration&#039;&#039;&#039;: Configuration dictionary for the model. This property is technically optional, but a working model requires at least datasource settings to be defined.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).CreateModel(#{    &lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My model&amp;quot;,&lt;br /&gt;
  &amp;quot;Description&amp;quot;: &amp;quot;My description&amp;quot;,&lt;br /&gt;
  &amp;quot;Configuration&amp;quot;: #{&lt;br /&gt;
    &amp;quot;DataSource&amp;quot;: #{&lt;br /&gt;
      &amp;quot;Cases&amp;quot;: #{&lt;br /&gt;
        &amp;quot;DataSourceType&amp;quot;: &amp;quot;datatable&amp;quot;,&lt;br /&gt;
        &amp;quot;DataTableName&amp;quot;: &amp;quot;My cases datatable&amp;quot;,&lt;br /&gt;
        &amp;quot;Columns&amp;quot;: #{&lt;br /&gt;
          &amp;quot;CaseId&amp;quot;: &amp;quot;Case Name&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;Events&amp;quot;: #{&lt;br /&gt;
        &amp;quot;DataSourceType&amp;quot;: &amp;quot;datatable&amp;quot;,&lt;br /&gt;
        &amp;quot;DataTableName&amp;quot;: &amp;quot;My events datatable&amp;quot;,&lt;br /&gt;
        &amp;quot;Columns&amp;quot;: #{&lt;br /&gt;
           &amp;quot;CaseId&amp;quot;: &amp;quot;Case Name&amp;quot;,&lt;br /&gt;
           &amp;quot;EventType&amp;quot;: &amp;quot;Event Type&amp;quot;,&lt;br /&gt;
           &amp;quot;Timestamp&amp;quot;: &amp;quot;Start Time&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;CreateProject&amp;quot;&amp;gt;CreateProject&amp;lt;/span&amp;gt; (Project)&lt;br /&gt;
||&lt;br /&gt;
* Parameters dictionary&lt;br /&gt;
||Create a project as a sub-project of the context project. Returns the created project. Requires the &#039;&#039;ManageProject&#039;&#039; permission.&lt;br /&gt;
&lt;br /&gt;
Parameters dictionary has the following properties:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039; (string): Name of the project. This property is required.&lt;br /&gt;
* &#039;&#039;&#039;Description&#039;&#039;&#039; (string): Description of the project.&lt;br /&gt;
* &#039;&#039;&#039;ParentProjectId&#039;&#039;&#039; (integer): Id of the parent project where the new project is created. This parameter is usually not needed because the parent project is the context project. The CreateProject function is also available in the generic context where the &#039;&#039;ParentProjectId&#039;&#039; parameter is needed to create sub-projects.&lt;br /&gt;
* &#039;&#039;&#039;DatabaseNameInDataSource&#039;&#039;&#039; (string): Snowflake database the project is linked to. Data for the datatables in this project will be located in this database.&lt;br /&gt;
* &#039;&#039;&#039;SchemaNameInDataSource&#039;&#039;&#039; (string): Snowflake schema the project is linked to. Data for the datatables in this project will be located in this schema. If the schema is defined, also the &#039;&#039;DatabaseNameInDataSource&#039;&#039; needs to be defined.&lt;br /&gt;
* &#039;&#039;&#039;SnowflakeConnectionStringKey&#039;&#039;&#039; (string): Snowflake connection string key to be used for the datatables in this project. &lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).CreateProject(#{&lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My project&amp;quot;, &lt;br /&gt;
  &amp;quot;Description&amp;quot;: &amp;quot;My description&amp;quot;, &lt;br /&gt;
  &amp;quot;DatabaseNameInDataSource&amp;quot;: &amp;quot;My database&amp;quot;, &lt;br /&gt;
  &amp;quot;SchemaNameInDataSource&amp;quot;: &amp;quot;My schema&amp;quot; &lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||DatatableByName (Datatable)&lt;br /&gt;
||Datatable name (String)&lt;br /&gt;
||&lt;br /&gt;
Returns Datatable by its name located in the project. Returns null, if Datatable with that name does not exist in the project.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(123).DatatableByName(&amp;quot;MyDatatable1&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Get datatable by name, and create it if it doesn&#039;t exist:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let project = ProjectById(123);&lt;br /&gt;
let datatableName = &amp;quot;MyDatatable1&amp;quot;;&lt;br /&gt;
let datatable = project.DatatableByName(datatableName);&lt;br /&gt;
if (datatable == null) {&lt;br /&gt;
  datatable = project.CreateDatatable(datatableName);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||DeletePermanently&lt;br /&gt;
||(none)&lt;br /&gt;
||Deletes the Project permanently. Note that the Project doesn&#039;t need to be in the recycle bin to be able to delete it permanently.&lt;br /&gt;
|-&lt;br /&gt;
||Export (String)&lt;br /&gt;
||(none)&lt;br /&gt;
||Exports the project and its content to a json string. The json format is described in [[Projects Export File Format]].&lt;br /&gt;
&lt;br /&gt;
Example: Export project id 1 to json data:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).Export();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||Import&lt;br /&gt;
||JSON string&lt;br /&gt;
||Creates one or several projects from a json string. The project(s) are created as child projects of the context project. The json format is described in [[Projects Export File Format]]. The function returns the created project objects. In case the project names already exist, the import operation automatically adjusts the names to be unique.&lt;br /&gt;
&lt;br /&gt;
Example: Create project from json data (as child of project id 1):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let jsonData = `{ &amp;quot;Projects&amp;quot;: [ { &amp;quot;Name&amp;quot;: &amp;quot;My project&amp;quot; } ] }`;&lt;br /&gt;
let result = ProjectById(1).Import(jsonData);&lt;br /&gt;
let createdProjectId = result[&amp;quot;Projects&amp;quot;][0].Id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||Restore&lt;br /&gt;
||(none)&lt;br /&gt;
||Restores the Project from the recycle bin back to the original location.&lt;br /&gt;
|-&lt;br /&gt;
||ModelByName (Model)&lt;br /&gt;
||Model name (String)&lt;br /&gt;
||&lt;br /&gt;
Returns Model by its name located in the project. Returns null, if Model with that name does not exist in the project.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(123).ModelByName(&amp;quot;My Model 1&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;ModifyProject&amp;quot;&amp;gt;Modify&amp;lt;/span&amp;gt; (Project)&lt;br /&gt;
||Dictionary of settings to change&lt;br /&gt;
||&lt;br /&gt;
Change project settings. Following settings are supported:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039; (String): Name of the project.&lt;br /&gt;
* &#039;&#039;&#039;Description&#039;&#039;&#039; (String): Description text of the project.&lt;br /&gt;
* &#039;&#039;&#039;ParentProjectId&#039;&#039;&#039; (Integer): Parent project id. Changing this effectively moves the project into different parent project.&lt;br /&gt;
* &#039;&#039;&#039;DatabaseNameInDataSource&#039;&#039;&#039;: Name of the Snowflake database where the project&#039;s datatables are located. The database needs to exist in the same Snowflake account configured in the Snowflake connection string. When defining this setting, define also the &#039;&#039;SchemaNameInDataSource&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;SchemaNameInDataSource&#039;&#039;&#039;: Name of the Snowflake schema where the project&#039;s datatables are located. The schema needs to exist in the same Snowflake account configured in the Snowflake connection string. When defining this setting, define also the &#039;&#039;DatabaseNameInDataSource&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;SnowflakeConnectionStringKey&#039;&#039;&#039; (String): Snowflake connection string key for the project. Snowflake datatables in the project will use connection string behind this key (unless specified by the datatatable).&lt;br /&gt;
* &#039;&#039;&#039;SqlServerConnectionStringKey&#039;&#039;&#039; (String): SQL Server connection string key. SQL Server datatables in the project will use connection string behind this key (unless specified by the datatatable).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ManageProject&#039;&#039; permission is needed to change project properties.&lt;br /&gt;
&lt;br /&gt;
Example: Change project name and move project into other parent project:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1)&lt;br /&gt;
  .Modify(#{&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;Project 1&amp;quot;&lt;br /&gt;
    &amp;quot;ParentProjectId&amp;quot;: 2&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Set Snowflake connection string key for the project:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1)&lt;br /&gt;
  .Modify(#{&lt;br /&gt;
    &amp;quot;SnowflakeConnectionStringKey&amp;quot;: &amp;quot;MyKey1&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||ScriptByName (Script)&lt;br /&gt;
||Script name (String)&lt;br /&gt;
||&lt;br /&gt;
Returns Script by its name located in the project. Returns null, if Script with that name does not exist in the project.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(123).ScriptByName(&amp;quot;MyScript1&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;SetSecret&amp;quot;&amp;gt;SetSecret&amp;lt;/span&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
# Secret type (string)&lt;br /&gt;
# Secret name (string)&lt;br /&gt;
# Secret value (string)&lt;br /&gt;
||Sets or adds a [[Storing_Secrets_for_Scripts|secret]] for the project. Setting the secret value to &#039;&#039;null&#039;&#039; 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 &#039;&#039;ManageProject&#039;&#039; permission.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
# &#039;&#039;&#039;Type&#039;&#039;&#039; (string): Secret type which is one of the following:&lt;br /&gt;
#* &amp;quot;externaldatatableconnection&amp;quot;: Snowflake ODBC connection string for datatables.&lt;br /&gt;
#* &amp;quot;odbc&amp;quot;: ODBC connection string (e.g., to extract data in scripts, or load an in-memory model).&lt;br /&gt;
#* &amp;quot;oledb&amp;quot;: OleDB connection string (e.g., to extract data in scripts, or load an in-memory model).&lt;br /&gt;
#* &amp;quot;sap&amp;quot;: SAP password.&lt;br /&gt;
#* &amp;quot;salesforce&amp;quot;: Salesforce password.&lt;br /&gt;
#* &amp;quot;sql&amp;quot;: SQL Server connection string.&lt;br /&gt;
#* &amp;quot;qprmea&amp;quot;: QPR MEA connection string.&lt;br /&gt;
# &#039;&#039;&#039;Name&#039;&#039;&#039; (string): Secret name, used to refer to the secret in the commands.&lt;br /&gt;
# &#039;&#039;&#039;Value&#039;&#039;&#039; (string): Secret value which contains the confidential information.&lt;br /&gt;
&lt;br /&gt;
Example: Set SAP password:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).SetSecret(&amp;quot;sap&amp;quot;, &amp;quot;MySapPassword&amp;quot;, &amp;quot;I l0ve 5AP!&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Remove SAP password:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).SetSecret(&amp;quot;sap&amp;quot;, &amp;quot;MySapPassword&amp;quot;, null);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Functions to get project:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||ProjectById&lt;br /&gt;
||Project id (Integer)&lt;br /&gt;
||&lt;br /&gt;
Returns project object corresponding to the provided project id.&lt;br /&gt;
|-&lt;br /&gt;
||ProjectByName&lt;br /&gt;
||Project name (String)&lt;br /&gt;
||&lt;br /&gt;
Returns project object by given project name. If there is no such project or user doesn&#039;t have access to it, &#039;&#039;null&#039;&#039; value is returned. If there are multiple projects with the same name, one of them is returned.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let project = ProjectByName(&amp;quot;My Project&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Functions to create project:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;CreateProject&amp;quot;&amp;gt;CreateProject&amp;lt;/span&amp;gt; (Project)&lt;br /&gt;
||Parameters dictionary&lt;br /&gt;
||Create a project. This is a similar function as the [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#CreateProject|CreateProject function]] in the project context. This function in the generic context is needed to create root-level projects (which don&#039;t have parent project).&lt;br /&gt;
&lt;br /&gt;
Example: create a root project:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CreateProject(#{&lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My project&amp;quot;&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: create a sub-project:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CreateProject(#{&lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My project&amp;quot;&lt;br /&gt;
  &amp;quot;ParentProjectId&amp;quot;: 1&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;Import&amp;quot;&amp;gt;Import&amp;lt;/span&amp;gt; (Project*)&lt;br /&gt;
||JSON string&lt;br /&gt;
||Creates one or several projects from a json string. The project(s) are created as the root level projects. The json format is described in [[Projects Export File Format]]. The function returns the created project objects. In case the project names already exist, the import operation automatically adjusts the names to be unique.&lt;br /&gt;
&lt;br /&gt;
Example: Create a root level project from json data:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let jsonData = `{ &amp;quot;Projects&amp;quot;: [ { &amp;quot;Name&amp;quot;: &amp;quot;My project&amp;quot; } ] }`;&lt;br /&gt;
let result = Import(jsonData);&lt;br /&gt;
let createdProjectId = result[&amp;quot;Projects&amp;quot;][0].Id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Script ==&lt;br /&gt;
Scripts are entities that contain executable code, that can be run. Usually scripts contains ETL routines but also other kind of tasks are possible.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Script properties&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||Code (String)&lt;br /&gt;
||Script code.&lt;br /&gt;
|-&lt;br /&gt;
||CreatedBy (User)&lt;br /&gt;
||User who created the Script.&lt;br /&gt;
|-&lt;br /&gt;
||CreatedDate (DateTime)&lt;br /&gt;
||Timestamp when the Script was created.&lt;br /&gt;
|-&lt;br /&gt;
||CurrentRunStart (DateTime)&lt;br /&gt;
||Timestamp of the current run start. Null if the script is currently not running.&lt;br /&gt;
|-&lt;br /&gt;
||Description (String)&lt;br /&gt;
||Description of the Script.&lt;br /&gt;
|-&lt;br /&gt;
||Id (Integer)&lt;br /&gt;
||Id of the Script.&lt;br /&gt;
|-&lt;br /&gt;
||Language (String)&lt;br /&gt;
||Either of the following scripting language: &#039;&#039;&#039;Expression&#039;&#039;&#039; or &#039;&#039;&#039;SQL&#039;&#039;&#039;. 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).&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedBy (User)&lt;br /&gt;
||User who last modified the Script.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedDate (DateTime)&lt;br /&gt;
||Timestamp when the Script was last modified.&lt;br /&gt;
|-&lt;br /&gt;
||LastRunEnd (DateTime)&lt;br /&gt;
||Timestamp of the last completed script run end (either successful completion or failure). Null if the Script hasn&#039;t been run yet.&lt;br /&gt;
|-&lt;br /&gt;
||LastRunResult (String)&lt;br /&gt;
||Result of the last run. Options are:&lt;br /&gt;
* &#039;&#039;&#039;Completed&#039;&#039;&#039;: The last run was completed successfully.&lt;br /&gt;
* &#039;&#039;&#039;Failed&#039;&#039;&#039;: An error occurred during the last run, so likely the script did not complete as intended.&lt;br /&gt;
* &#039;&#039;&#039;Aborted&#039;&#039;&#039;: Script run was manually stopped prematurely by a user, so the script did not proceeded in the end.&lt;br /&gt;
&lt;br /&gt;
Null if the Script hasn&#039;t been run yet.&lt;br /&gt;
|-&lt;br /&gt;
||LastRunStart (DateTime)&lt;br /&gt;
||Timestamp of the last completed script run start time. Null if the Script hasn&#039;t been run yet.&lt;br /&gt;
|-&lt;br /&gt;
||Name (String)&lt;br /&gt;
||Name of the Script.&lt;br /&gt;
|-&lt;br /&gt;
||OperationId (Integer)&lt;br /&gt;
||Id of the operation which runs the Script. Null if the script is currently not running.&lt;br /&gt;
|-&lt;br /&gt;
||Project (Project)&lt;br /&gt;
||Project where the Script is located. Null if the script is in the global context.&lt;br /&gt;
|-&lt;br /&gt;
||ProjectId (Integer)&lt;br /&gt;
||Id of the project where the Script is located. Null if the script is in the global context.&lt;br /&gt;
|-&lt;br /&gt;
||Status (String)&lt;br /&gt;
||Current status of the script. Options are:&lt;br /&gt;
* &#039;&#039;&#039;Ready&#039;&#039;&#039;: Script is not running. In this status, the script can be started (changing the status to &#039;&#039;Running&#039;&#039;).&lt;br /&gt;
* &#039;&#039;&#039;Running&#039;&#039;&#039;: Script is running. In this status, the script can be stopped (changing the status to &#039;&#039;Stopping&#039;&#039;). Calling stop just requests a script to stop, and the actual stopping occurs some time later.&lt;br /&gt;
* &#039;&#039;&#039;Stopping&#039;&#039;&#039;: Script has been requested to be stopped, but it&#039;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 &#039;&#039;Ready&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Script functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||Run (Object)&lt;br /&gt;
||Dictionary of parameters&lt;br /&gt;
||&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
For SQL scripts, the passed parameters are available in the script as variables in format &#039;&#039;&#039;@_parameter_&amp;lt;ParameterName&amp;gt;&#039;&#039;&#039; where &amp;lt;ParameterName&amp;gt; is the name of the parameter, e.g. &#039;&#039;parameter_myParameter1&#039;&#039;. Only string type of parameters can be used, so any other type of data in parameter values is converted into strings.&lt;br /&gt;
&lt;br /&gt;
The return value of the script is returned by the Run function. Expression scripts return a value with the &#039;&#039;return&#039;&#039; 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 &#039;&#039;_empty&#039;&#039;. 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 &#039;&#039;--#ShowReport&#039;&#039; command or the &#039;&#039;Show&#039;&#039; parameter).&lt;br /&gt;
&lt;br /&gt;
When a script is called using the Run function, the called script status does not change, because it&#039;s the parent script that is &#039;&#039;Running&#039;&#039;. Also the called script log is not filled, but instead the logging goes to the calling script.&lt;br /&gt;
&lt;br /&gt;
It&#039;s possible to call a script using the Run function several times simultaneously.&lt;br /&gt;
&lt;br /&gt;
If there is an error when running the called script, the Run function throws the error to the calling script.&lt;br /&gt;
&lt;br /&gt;
Scripts are run in the script entity context, so for example the following properties are available:&lt;br /&gt;
* Id: Script id&lt;br /&gt;
* Name: Script name&lt;br /&gt;
* Project.Id: Project id where the script is located&lt;br /&gt;
* Project.Name: Name of the project where the script is located&lt;br /&gt;
&lt;br /&gt;
Example: Following script (id 123) raises a specified number to a specified power:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
return Pow(numberToRaise, exponent);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The script can be called as follows (returning 16):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let runResult = ScriptById(123).Run(#{&lt;br /&gt;
  &amp;quot;numberToRaise&amp;quot;: 4,&lt;br /&gt;
  &amp;quot;exponent&amp;quot;: 2&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;Start&amp;quot;&amp;gt;Start&amp;lt;/span&amp;gt;&lt;br /&gt;
||Dictionary of parameters&lt;br /&gt;
||Starts the script. The function call doesn&#039;t wait for the script run to complete (i.e., asynchronous behavior) which is same as starting the script in the [[Managing_Scripts#Starting_Script|Workspace]].&lt;br /&gt;
&lt;br /&gt;
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 &#039;&#039;null&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Example: Start script (without parameters) and store the script run id:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let runId = ScriptById(1).Start();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Start script with passing parameters:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ScriptById(1).Start(#{&lt;br /&gt;
  &amp;quot;variable1&amp;quot;: &amp;quot;val1&amp;quot;,&lt;br /&gt;
  &amp;quot;variable2&amp;quot;: 5&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||Stop&lt;br /&gt;
||&lt;br /&gt;
||Stops the script. The operation doesn&#039;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.&lt;br /&gt;
&lt;br /&gt;
Return value is the script run id (integer) if the script was running. If the script isn&#039;t running, the return value is &#039;&#039;null&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let runId = ScriptById(1).Stop();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Function to get a script by the script id:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||ScriptById&lt;br /&gt;
||&lt;br /&gt;
* Script id (Integer)&lt;br /&gt;
||&lt;br /&gt;
Returns Script object corresponding to the given script id. If script with the given id doesn&#039;t exist or user doesn&#039;t have permissions to it, an error is given.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== User/Group ==&lt;br /&gt;
User objects represents users and user groups. Note that some properties can only be used for users and some for groups.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;User/group properties&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||CreatedBy (User)&lt;br /&gt;
||Returns the user who created the user.&lt;br /&gt;
|-&lt;br /&gt;
||CreatedDate (DateTime)&lt;br /&gt;
||Returns the date when the user was created.&lt;br /&gt;
|-&lt;br /&gt;
||DefaultDashboard (String)&lt;br /&gt;
||Returns the configured [[User_Settings#Starting_dashboard|starting dashboard]] (&amp;quot;default dashboard&amp;quot;) identifier for a group (for users, the starting dashboard cannot be configured). The starting dashboard is automatically opened when a user logs in.&lt;br /&gt;
|-&lt;br /&gt;
||Description (String)&lt;br /&gt;
||Description of the user.&lt;br /&gt;
|-&lt;br /&gt;
||EffectiveDefaultDashboard (String)&lt;br /&gt;
||Returns the [[User_Settings#Starting_dashboard|starting dashboard]] of a user. Value &#039;&#039;null&#039;&#039; means that the user doesn&#039;t have a starting dashboard. The starting dashboard comes from the user&#039;s groups. If multiple of user&#039;s groups have the starting dashboard defined, the user&#039;s starting dashboard will be taken from a group having alphabetically the first name.&lt;br /&gt;
|-&lt;br /&gt;
||Email (String)&lt;br /&gt;
||Email address of the user.&lt;br /&gt;
|-&lt;br /&gt;
||FullName (String)&lt;br /&gt;
||Full name of the user or group name.&lt;br /&gt;
|-&lt;br /&gt;
||GlobalPermissions (String*)&lt;br /&gt;
||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.&lt;br /&gt;
|-&lt;br /&gt;
||GroupMemberNames (String*)&lt;br /&gt;
||Array of names of members of a user group. This property is available for groups.&lt;br /&gt;
|-&lt;br /&gt;
||GroupMembers (User*)&lt;br /&gt;
||Array of members of a user group. This property is available for groups.&lt;br /&gt;
|-&lt;br /&gt;
||GroupNames (String*)&lt;br /&gt;
||Array of names of user groups the user belongs to. This property is available for users.&lt;br /&gt;
|-&lt;br /&gt;
||Groups (User*)&lt;br /&gt;
||Array of user groups the user belongs to. This property is available for users.&lt;br /&gt;
|-&lt;br /&gt;
||HasPassword (Boolean)&lt;br /&gt;
||Returns true if user has a password defined in QPR ProcessAnalyzer and thus user can authenticate using the password. If user doesn&#039;t have a password, the SAML authentication is the only way to log in. &#039;&#039;ManageUsers&#039;&#039; permission is needed to access this property for other users.&lt;br /&gt;
|-&lt;br /&gt;
||Id (Integer)&lt;br /&gt;
||Id of the user, which is unique for every user.&lt;br /&gt;
|-&lt;br /&gt;
||IsActive (Boolean)&lt;br /&gt;
||Returns true only if the user is active (not disabled).&lt;br /&gt;
|-&lt;br /&gt;
||IsGroup (Boolean)&lt;br /&gt;
||Returns true if the user is a user group.&lt;br /&gt;
|-&lt;br /&gt;
||IsLocked (Boolean)&lt;br /&gt;
||Returns true if user account is currently [[User_Session_Management#Preventing_password_guessing_attacks|locked]]. &#039;&#039;ManageUsers&#039;&#039; permission is needed to access this property.&lt;br /&gt;
|-&lt;br /&gt;
||LastLockedDate (DateTime)&lt;br /&gt;
||Returns date when user account was locked the last time. Returns &#039;&#039;null&#039;&#039; if the user account has never been locked. &#039;&#039;ManageUsers&#039;&#039; permission is needed to access this property.&lt;br /&gt;
|-&lt;br /&gt;
||LastLoginDate (DateTime)&lt;br /&gt;
||Returns date when the user made last successful login. &#039;&#039;ManageUsers&#039;&#039; permission is needed to access this property for other users.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedBy (User)&lt;br /&gt;
||Returns the user who last modified this user.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedDate (DateTime)&lt;br /&gt;
||Returns the date when the user was last modified.&lt;br /&gt;
|-&lt;br /&gt;
||Name (String)&lt;br /&gt;
||Login name of the user or group.&lt;br /&gt;
|-&lt;br /&gt;
||Roles (Object**)&lt;br /&gt;
||&lt;br /&gt;
Returns all roles of the user (both global and project roles) as a nested array structure.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ToJson(Users.Where(name == &amp;quot;qpr&amp;quot;).Roles)&lt;br /&gt;
Returns (for example):&lt;br /&gt;
[&lt;br /&gt;
  [{&amp;quot;calcId&amp;quot;: &amp;quot;Project:1&amp;quot;}, &amp;quot;Administrator&amp;quot;],&lt;br /&gt;
  [{&amp;quot;calcId&amp;quot;: &amp;quot;Project:2&amp;quot;}, &amp;quot;Analyzer&amp;quot;],&lt;br /&gt;
  [{&amp;quot;calcId&amp;quot;: &amp;quot;Project:3&amp;quot;}, &amp;quot;Viewer&amp;quot;],&lt;br /&gt;
  [null, &amp;quot;RunScripts&amp;quot;],&lt;br /&gt;
  [null, &amp;quot;Administrator&amp;quot;]&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;User/group functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||EffectivePermissionsFor (String Array)&lt;br /&gt;
||&lt;br /&gt;
* Project to get permissions&lt;br /&gt;
||&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Permissions for the EffectivePermissionsFor function are as follows:&lt;br /&gt;
* All users can query their own permissions&lt;br /&gt;
* To get permissions for any user, the user needs to have [[Roles_and_Permissions|ManageUsers permission]].&lt;br /&gt;
&lt;br /&gt;
Note that &#039;&#039;inactive&#039;&#039; users don&#039;t have any effective permissions, so the EffectivePermissionsFor function does not return any permissions for those users.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
UserById(1).EffectivePermissionsFor(ModelById(2).Project)&lt;br /&gt;
Returns (for example): [&amp;quot;EditDashboards&amp;quot;, &amp;quot;Filtering&amp;quot;, &amp;quot;GenericRead&amp;quot;]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||GetAttribute&lt;br /&gt;
||&lt;br /&gt;
||&lt;br /&gt;
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&#039;t exist, null is returned.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
# &#039;&#039;&#039;Attribute name&#039;&#039;&#039; (String): Name of the attribute.&lt;br /&gt;
# &#039;&#039;&#039;Attribute context&#039;&#039;&#039; (Project/Model/Dashboard): Optional context object the attribute is linked to.&lt;br /&gt;
&lt;br /&gt;
Users have permissions to get attributes for themselves, and also (administrator) users with global &#039;&#039;ManageUsers&#039;&#039; permission can get attributes for all users. In addition, if using the context object, the &#039;&#039;GenericRead&#039;&#039; permission is required for the context object.&lt;br /&gt;
&lt;br /&gt;
Example: Get user attribute MyDataValue for myself:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CurrentUser&lt;br /&gt;
  .GetAttribute(&amp;quot;MyDataValue&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Get user attribute MyDataValue for user John:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Users&lt;br /&gt;
  .Where(Name==&amp;quot;John&amp;quot;)&lt;br /&gt;
  .GetAttribute(&amp;quot;MyDataValue&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Get user attribute MyDataValue for user 1 related to dashboard id 1:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
UserById(1)&lt;br /&gt;
  .GetAttribute(&amp;quot;MyDataValue&amp;quot;, DashboardById(1));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||SetAttribute&lt;br /&gt;
||&lt;br /&gt;
||&lt;br /&gt;
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 &#039;&#039;null&#039;&#039;, the user attribute is removed. Required permissions are same as in the GetAttribute function.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
# &#039;&#039;&#039;Attribute name&#039;&#039;&#039; (String): Name of the attribute.&lt;br /&gt;
# &#039;&#039;&#039;Attribute value&#039;&#039;&#039; (String/Integer/Float/DateTime): Attribute value to be stored.&lt;br /&gt;
# &#039;&#039;&#039;Attribute context&#039;&#039;&#039; (Project/Model/Dashboard): Optional context object the attribute value is linked to.&lt;br /&gt;
&lt;br /&gt;
Example: Set user attribute MyDataValue for myself:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CurrentUser&lt;br /&gt;
  .SetAttribute(&amp;quot;MyDataValue &amp;quot;, &amp;quot;value&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Set value 123 as user attribute MyDataValue for user John:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Users&lt;br /&gt;
  .Where(Name==&amp;quot;John&amp;quot;)&lt;br /&gt;
  .SetAttribute(&amp;quot;MyDataValue&amp;quot;, 123);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Set current time as user attribute MyDataValue for user 1 related to dashboard id 1:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
UserById(1)&lt;br /&gt;
  .GetAttribute(&amp;quot;MyDataValue&amp;quot;, Now, DashboardById(1));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Function to get User by user id:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||UserById (User)&lt;br /&gt;
||&lt;br /&gt;
* User id (Integer)&lt;br /&gt;
||&lt;br /&gt;
Returns User object that has the provided user id. Also groups can be queried with this function. Returns an access denied error if the user with given id does not exist or the current user does not have access to it.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Objects_in_Expression_Language&amp;diff=28040</id>
		<title>QPR ProcessAnalyzer Objects in Expression Language</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Objects_in_Expression_Language&amp;diff=28040"/>
		<updated>2026-04-08T23:21:12Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: /* Project */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Filter==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Filter properties&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||CreatedBy (User)&lt;br /&gt;
||Returns the user who created the filter.&lt;br /&gt;
|-&lt;br /&gt;
||CreatedDate (DateTime)&lt;br /&gt;
||Returns date when the filter created date.&lt;br /&gt;
|-&lt;br /&gt;
||Description (String)&lt;br /&gt;
||Returns description of the filter.&lt;br /&gt;
|-&lt;br /&gt;
||Id (Integer)&lt;br /&gt;
||Returns id of the filter.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedBy (User)&lt;br /&gt;
||Returns user who modified the filter.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedDate (DateTime)&lt;br /&gt;
||Returns date when the filter last modified.&lt;br /&gt;
|-&lt;br /&gt;
||Model&lt;br /&gt;
||Returns model where the filter belongs to.&lt;br /&gt;
|-&lt;br /&gt;
||ModelId (Integer)&lt;br /&gt;
||Returns model where the filter belongs to.&lt;br /&gt;
|-&lt;br /&gt;
||Name (String)&lt;br /&gt;
||Returns the name of the filter.&lt;br /&gt;
|-&lt;br /&gt;
||Project&lt;br /&gt;
||Returns project where the filter belongs to.&lt;br /&gt;
|-&lt;br /&gt;
||ProjectId (Integer)&lt;br /&gt;
||Returns project id where the filter belongs to.&lt;br /&gt;
|-&lt;br /&gt;
||PublishMode (String)&lt;br /&gt;
||Returns publish mode of the filter, one of the following: &#039;&#039;&#039;Private&#039;&#039;&#039;, &#039;&#039;&#039;Public&#039;&#039;&#039;, or &#039;&#039;&#039;Default&#039;&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
||Rules (Dictionary)&lt;br /&gt;
||Returns a dictionary containing the filter rules in the filter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Filter functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||DeletePermanently&lt;br /&gt;
||(none)&lt;br /&gt;
||&lt;br /&gt;
Deletes the filter permanently. To delete own filters, the &#039;&#039;&#039;Filtering&#039;&#039;&#039; permission is needed, and to delete any filters the &#039;&#039;&#039;ManageViews&#039;&#039;&#039; permission is needed.&lt;br /&gt;
|-&lt;br /&gt;
||Modify&lt;br /&gt;
||Dictionary&lt;br /&gt;
||&lt;br /&gt;
Modifies filter properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: &#039;&#039;Name&#039;&#039;, &#039;&#039;Description&#039;&#039;, &#039;&#039;PublishMode&#039;&#039;, and &#039;&#039;Rules&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The function returns the updated filter object. Requires &#039;&#039;GenericWrite&#039;&#039; permission for the Project and global &#039;&#039;CreateModel&#039;&#039; permission.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FilterById(1)&lt;br /&gt;
	.Modify(#{&lt;br /&gt;
		&amp;quot;Name&amp;quot;: &amp;quot;My filter&amp;quot;,&lt;br /&gt;
		&amp;quot;Description&amp;quot;: &amp;quot;My description&amp;quot;,&lt;br /&gt;
		&amp;quot;PublishMode&amp;quot;: &amp;quot;Public&amp;quot;,&lt;br /&gt;
		&amp;quot;Rules&amp;quot;: #{&lt;br /&gt;
			&amp;quot;Items&amp;quot;: [&lt;br /&gt;
				#{&lt;br /&gt;
					&amp;quot;Type&amp;quot;: &amp;quot;IncludeCases&amp;quot;,&lt;br /&gt;
					&amp;quot;Items&amp;quot;: [&lt;br /&gt;
						#{&lt;br /&gt;
							&amp;quot;Type&amp;quot;: &amp;quot;CaseAttributeValue&amp;quot;,&lt;br /&gt;
							&amp;quot;Attribute&amp;quot;: &amp;quot;Account Manager&amp;quot;,&lt;br /&gt;
							&amp;quot;StringifiedValues&amp;quot;: [&lt;br /&gt;
								&amp;quot;0Mary Wilson&amp;quot;&lt;br /&gt;
							]&lt;br /&gt;
						}&lt;br /&gt;
					]&lt;br /&gt;
				}&lt;br /&gt;
			]&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Function to get filter id:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||FilterById&lt;br /&gt;
||&lt;br /&gt;
* Filter id (Integer)&lt;br /&gt;
||&lt;br /&gt;
Returns Filter object corresponding to the provided filter id.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Model==&lt;br /&gt;
Notes:&lt;br /&gt;
* For in-memory models that are offline, the object counts represent the situation when the model was last time online (loaded into the memory). &#039;&#039;null&#039;&#039; is returned if the model has never been loaded into the memory.&lt;br /&gt;
* If [[Case_Level_Permissions|Case permissions]] are used for the model, and user doesn&#039;t have &#039;&#039;&#039;GenericWrite&#039;&#039;&#039; permission for the model, &#039;&#039;null&#039;&#039; is returned for data security reasons. Users that have the &#039;&#039;&#039;GenericWrite&#039;&#039;&#039; permission, see null when the model is offline, and when online, they see counts where the case level permissions settings are applied.&lt;br /&gt;
* Properties &#039;&#039;CaseAttributes&#039;&#039;, &#039;&#039;EventAttributes&#039;&#039; and &#039;&#039;Eventlog&#039;&#039; 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.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Model properties&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||AllFilters (Filter*)&lt;br /&gt;
||Returns an array of all [[#Filter|filters]] in the model where the user has access to. In addition to the &#039;&#039;Filters&#039;&#039; property, &#039;&#039;AllFilters&#039;&#039; also returns private filters of other users. The &#039;&#039;ManageViews&#039;&#039; permission is required to use this property.&lt;br /&gt;
|-&lt;br /&gt;
||Calendars (BusinessCalendar*)&lt;br /&gt;
||&lt;br /&gt;
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.&lt;br /&gt;
|-&lt;br /&gt;
||CaseAttributes (AttributeType*)&lt;br /&gt;
||[[#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&#039;s loaded when this property is used.&lt;br /&gt;
|-&lt;br /&gt;
||CasesDatatable (Datatable)&lt;br /&gt;
||Returns the Datatable the model uses as a datasource for cases. Returns &#039;&#039;null&#039;&#039; if the cases Datatable is not defined or if model uses other than the Datatable datasource.&lt;br /&gt;
|-&lt;br /&gt;
||Configuration (Dictionary)&lt;br /&gt;
||Returns the Model configuration as dictionary. Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(123).Configuration.DataSource.Events.DataTableName&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||ConfigurationJson (String)&lt;br /&gt;
||Returns the Model configuration as JSON string.&lt;br /&gt;
|-&lt;br /&gt;
||CreatedBy (User)&lt;br /&gt;
||User who created the model.&lt;br /&gt;
|-&lt;br /&gt;
||CreatedDate (DateTime)&lt;br /&gt;
||Timestamp when the model was created.&lt;br /&gt;
|-&lt;br /&gt;
||DefaultCalendar (BusinessCalendar)&lt;br /&gt;
||Returns the default [[Business_Calendar|business calendar]] of the Model. Returns &#039;&#039;null&#039;&#039;, 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.&lt;br /&gt;
|-&lt;br /&gt;
||DefaultFilter (Filter)&lt;br /&gt;
||Default filter of the model. Returns &#039;&#039;null&#039;&#039; if the model does not have a default filter.&lt;br /&gt;
|-&lt;br /&gt;
||DefaultFilterId (Integer)&lt;br /&gt;
||Default filter id of the model. Returns &#039;&#039;null&#039;&#039; if the model does not have a default filter.&lt;br /&gt;
|-&lt;br /&gt;
||Description (String)&lt;br /&gt;
||Model description. The model description may contain line breaks.&lt;br /&gt;
|-&lt;br /&gt;
||DeletedDate (DateTime)&lt;br /&gt;
||Timestamp when Model was deleted (moved to the recycle bin).&lt;br /&gt;
|-&lt;br /&gt;
||DeletedBy (User)&lt;br /&gt;
||User how deleted the Model.&lt;br /&gt;
|-&lt;br /&gt;
||Diagrams (Diagram*)&lt;br /&gt;
||Returns an array of all [[Diagram_in_Expression_Language|diagrams]] in the model.&lt;br /&gt;
|-&lt;br /&gt;
||EstimatedMemory (Integer)&lt;br /&gt;
||Returns an estimation of how much memory in bytes the model requires.&lt;br /&gt;
|-&lt;br /&gt;
||EventsDatatable (Datatable)&lt;br /&gt;
||Returns the Datatable the model uses as a datasource for events. Returns &#039;&#039;null&#039;&#039; if the events Datatable is not defined or if model uses other than the Datatable datasource.&lt;br /&gt;
|-&lt;br /&gt;
||EventAttributes (AttributeType*)&lt;br /&gt;
||[[#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&#039;s loaded when this property is used.&lt;br /&gt;
|-&lt;br /&gt;
||EventLog (EventLog)&lt;br /&gt;
||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&#039;s loaded when this property is used.&lt;br /&gt;
|-&lt;br /&gt;
||Filters (Filter*)&lt;br /&gt;
||Returns an array of all public [[#Filter|filters]], the default filter (if any) and the user&#039;s own private filters in the model. Note that the other users&#039;s private filters are not returned even for administrators.&lt;br /&gt;
|-&lt;br /&gt;
||Id (Integer)&lt;br /&gt;
||Model Id. Model Id is generated by QPR ProcessAnalyzer when the model is created.&lt;br /&gt;
|-&lt;br /&gt;
||IsValidInMemoryModel (boolean)&lt;br /&gt;
||Returns &#039;&#039;true&#039;&#039; if all the following conditions are met:&lt;br /&gt;
* CheckModelValidity function doesn&#039;t return any issues (because invalid models are assumed to be Snowflake models).&lt;br /&gt;
* Model is not an object-centric model.&lt;br /&gt;
* Data source of the model is &#039;&#039;ODBC&#039;&#039; or &#039;&#039;Expression&#039;&#039;, or the referred datatable has &#039;&#039;DataSourceType&#039;&#039; either &#039;&#039;Local&#039;&#039; or &#039;&#039;SqlServer&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedBy (User)&lt;br /&gt;
||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.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedDate (DateTime)&lt;br /&gt;
||Timestamp when the model was modified the last time.&lt;br /&gt;
|-&lt;br /&gt;
||Name (String)&lt;br /&gt;
||Model name.&lt;br /&gt;
|-&lt;br /&gt;
||NCache (Integer)&lt;br /&gt;
||Number of objects related to the model when the model is loaded into the memory.&lt;br /&gt;
|-&lt;br /&gt;
||NCaseAttributes (Integer)&lt;br /&gt;
||Number of [[#AttributeType|CaseAttributes]] in model. Works only for in-memory models.&lt;br /&gt;
|-&lt;br /&gt;
||NCases (Integer)&lt;br /&gt;
||Number of [[#Case|Cases]] in the model. Works only for in-memory models.&lt;br /&gt;
|-&lt;br /&gt;
||NEventAttributes (Integer)&lt;br /&gt;
||Number of [[#AttributeType|EventAttributes]] in model. Works only for in-memory models.&lt;br /&gt;
|-&lt;br /&gt;
||NEvents (Integer)&lt;br /&gt;
||Number of [[#Event|Events]] in model. Works only for in-memory models.&lt;br /&gt;
|-&lt;br /&gt;
||NEventTypes (Integer)&lt;br /&gt;
||Number of [[#EventType|EventTypes]] in the model. Works only for in-memory models.&lt;br /&gt;
|-&lt;br /&gt;
||Project (Project)&lt;br /&gt;
||[[#Project|Project]] where the model belongs to.&lt;br /&gt;
|-&lt;br /&gt;
||ProjectId (Integer)&lt;br /&gt;
||[[#Project|Project]] id where the model belongs to.&lt;br /&gt;
|-&lt;br /&gt;
||Status (String)&lt;br /&gt;
||&lt;br /&gt;
Memory availability status of the model. There are the following statuses:&lt;br /&gt;
* &#039;&#039;&#039;Loading&#039;&#039;&#039;: The model is currently loading into the memory. When the loading is ready, the status changes to &#039;&#039;online&#039;&#039;. If the loading fails, the status changes to &#039;&#039;offline&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Offline&#039;&#039;&#039;: 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).&lt;br /&gt;
* &#039;&#039;&#039;Online&#039;&#039;&#039;: The model is in the memory and ready for analysis calculation. If the model is dropped from the memory, its status changes to &#039;&#039;offline&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
||UsedDatatables (Datatable*)&lt;br /&gt;
||Returns all datatables the model uses as a datasource.&lt;br /&gt;
&lt;br /&gt;
Example: List datatables used by a model:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
StringJoin(&amp;quot;, &amp;quot;, OrderByValue(ModelById(1).UsedDataTables.Name))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Model functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||CalendarByName (BusinessCalendar)&lt;br /&gt;
||&lt;br /&gt;
name (String)&lt;br /&gt;
||&lt;br /&gt;
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 &#039;&#039;null&#039;&#039;, if a calendar with the provided name is not stored to the model.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(123).CalendarByName(&amp;quot;MyCalendar&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||CreateDiagram (Diagram)&lt;br /&gt;
||Parameters dictionary&lt;br /&gt;
||&lt;br /&gt;
Creates a [[Diagram_in_Expression_Language|diagram]] to the model. Parameters is a dictionary containing diagram properties. Following properties are available:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039; (string): Diagram name that distinguishes diagrams in a model.&lt;br /&gt;
* &#039;&#039;&#039;Description&#039;&#039;&#039; (string): Diagram description text.&lt;br /&gt;
* &#039;&#039;&#039;Content&#039;&#039;&#039; (dictionary): Diagram content as dictionary.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(1)&lt;br /&gt;
  .CreateDiagram(#{&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;My diagram&amp;quot;,&lt;br /&gt;
    &amp;quot;Description&amp;quot;: &amp;quot;This is my new diagram&amp;quot;,&lt;br /&gt;
    &amp;quot;Content&amp;quot;: #{ ... },&lt;br /&gt;
  })&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||CreateFilter (Filter)&lt;br /&gt;
||Parameters dictionary&lt;br /&gt;
||Creates a filter to a model. Requires &#039;&#039;GenericWrite&#039;&#039; permission for the project and global &#039;&#039;CreateModel&#039;&#039; permission. If a filter with that name already exists in the model, an exception is thrown.&lt;br /&gt;
The parameters dictionary may have the following properties:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039;: Name of the filter. This property is mandatory.&lt;br /&gt;
* &#039;&#039;&#039;Description&#039;&#039;&#039;: Description of the filter. This property is optional.&lt;br /&gt;
* &#039;&#039;&#039;Rules&#039;&#039;&#039;: Filter rules for the filter defined as a dictionary according to the [[Filtering_in_QPR_ProcessAnalyzer_Queries|filter json format]]. This property is mandatory.&lt;br /&gt;
* &#039;&#039;&#039;PublishMode&#039;&#039;&#039;: Publish mode of the filter which is one of the following: &#039;&#039;Private&#039;&#039;, &#039;&#039;Public&#039;&#039; or &#039;&#039;Default&#039;&#039;. This property is optional, and the default value is &#039;&#039;Private&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let newFilter = modelById(1).CreateFilter(#{    &lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My Filter&amp;quot;,&lt;br /&gt;
  &amp;quot;Rules&amp;quot;: #{&lt;br /&gt;
    &amp;quot;Items&amp;quot;: [#{&lt;br /&gt;
      &amp;quot;Type&amp;quot;: &amp;quot;IncludeCases&amp;quot;,&lt;br /&gt;
      &amp;quot;Items&amp;quot;: [#{&lt;br /&gt;
        &amp;quot;Type&amp;quot;: &amp;quot;CaseAttributeValue&amp;quot;,&lt;br /&gt;
        &amp;quot;Attribute&amp;quot;: &amp;quot;Account Manager&amp;quot;,&lt;br /&gt;
        &amp;quot;StringifiedValues&amp;quot;: [ &amp;quot;0Robert Miller&amp;quot; ]&lt;br /&gt;
      }]&lt;br /&gt;
    }]&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;PublishMode&amp;quot;: &amp;quot;Public&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||DeletePermanently&lt;br /&gt;
||(none)&lt;br /&gt;
||Deletes the Model permanently. The model doesn&#039;t need to be in the recycle bin to be able to delete it permanently.&lt;br /&gt;
|-&lt;br /&gt;
||Modify (Model)&lt;br /&gt;
||Dictionary&lt;br /&gt;
||&lt;br /&gt;
Modifies model properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: &#039;&#039;Name&#039;&#039;, &#039;&#039;Description&#039;&#039;, &#039;&#039;ProjectId&#039;&#039;, and &#039;&#039;Configuration&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The function returns the updated model object. Requires the &#039;&#039;GenericWrite&#039;&#039; permission for the project and the global &#039;&#039;CreateModel&#039;&#039; permission.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(1)&lt;br /&gt;
	.Modify(#{&lt;br /&gt;
		&amp;quot;Name&amp;quot;: &amp;quot;My model&amp;quot;,&lt;br /&gt;
		&amp;quot;Description&amp;quot;: &amp;quot;My description&amp;quot;,&lt;br /&gt;
		&amp;quot;ProjectId&amp;quot;: 2,&lt;br /&gt;
		&amp;quot;Configuration&amp;quot;: #{&lt;br /&gt;
			&amp;quot;DataSource&amp;quot;: #{&lt;br /&gt;
				&amp;quot;Cases&amp;quot;: #{&lt;br /&gt;
					&amp;quot;DataSourceType&amp;quot;: &amp;quot;datatable&amp;quot;,&lt;br /&gt;
					&amp;quot;DataTableName&amp;quot;: &amp;quot;My cases datatable&amp;quot;,&lt;br /&gt;
					&amp;quot;Columns&amp;quot;: #{&lt;br /&gt;
						&amp;quot;CaseId&amp;quot;: &amp;quot;Case Name&amp;quot;&lt;br /&gt;
					}&lt;br /&gt;
				},&lt;br /&gt;
				&amp;quot;Events&amp;quot;: #{&lt;br /&gt;
					&amp;quot;DataSourceType&amp;quot;: &amp;quot;datatable&amp;quot;,&lt;br /&gt;
					&amp;quot;DataTableName&amp;quot;: &amp;quot;My events datatable&amp;quot;,&lt;br /&gt;
					&amp;quot;Columns&amp;quot;: #{&lt;br /&gt;
						&amp;quot;CaseId&amp;quot;: &amp;quot;Case Name&amp;quot;,&lt;br /&gt;
						&amp;quot;EventType&amp;quot;: &amp;quot;Event Type&amp;quot;,&lt;br /&gt;
						&amp;quot;Timestamp&amp;quot;: &amp;quot;Start Time&amp;quot;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||ResetModelCache&lt;br /&gt;
||(none)&lt;br /&gt;
||&lt;br /&gt;
Synchronously clears all cached model data. For a Snowflake model, deletes all cache tables related to the model from Snowflake. For an in-memory model, drops the model from the memory and also drops all other model related caches from the memory. &lt;br /&gt;
|-&lt;br /&gt;
||ResetPreprocessings&lt;br /&gt;
||(none)&lt;br /&gt;
||&lt;br /&gt;
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.&lt;br /&gt;
|-&lt;br /&gt;
||Restore&lt;br /&gt;
||(none)&lt;br /&gt;
||Restores the Model from the recycle bin back to the original location.&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;ToSqlDataFrame&amp;quot;&amp;gt;ToSqlDataFrame&amp;lt;/span&amp;gt;&lt;br /&gt;
||In-memory dataframe&lt;br /&gt;
||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.&lt;br /&gt;
&lt;br /&gt;
Example: Select matching cases from events data using in-memory dataframe:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let model = ModelById(1);&lt;br /&gt;
let dfEvents = model.EventsDatatable.SqlDataFrame;&lt;br /&gt;
let inMemoryDf = ToDataFrame(&lt;br /&gt;
  [[&amp;quot;1&amp;quot;], [&amp;quot;2&amp;quot;], [&amp;quot;3&amp;quot;]],&lt;br /&gt;
  [#{&amp;quot;Name&amp;quot;: &amp;quot;id&amp;quot;, &amp;quot;DataType&amp;quot;: &amp;quot;String&amp;quot;}]&lt;br /&gt;
);&lt;br /&gt;
model.ToSqlDataFrame(inMemoryDf)&lt;br /&gt;
  .Join(dfEvents, [&amp;quot;id&amp;quot;: &amp;quot;CaseId&amp;quot;])&lt;br /&gt;
  .SelectDistinct([&amp;quot;CaseId&amp;quot;])&lt;br /&gt;
  .Collect();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;TriggerNotifications&amp;quot;&amp;gt;TriggerNotifications&amp;lt;/span&amp;gt; (Boolean)&lt;br /&gt;
||Notification names (String*)&lt;br /&gt;
||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.&lt;br /&gt;
&lt;br /&gt;
The function return &#039;&#039;true&#039;&#039; if any notification were triggered, otherwise &#039;&#039;false&#039;&#039;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(123).TriggerNotifications([&amp;quot;Notification 1&amp;quot;, &amp;quot;Notification 2&amp;quot;]);&lt;br /&gt;
Triggers notifications Notification 1 and Notification 2 in model id 123.&lt;br /&gt;
&lt;br /&gt;
ModelById(123).TriggerNotifications();&lt;br /&gt;
Triggers all notifications in model id 123.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;CheckModelValidity&amp;quot;&amp;gt;CheckModelValidity&amp;lt;/span&amp;gt; (Object array)&lt;br /&gt;
||CheckData field in dictionary&lt;br /&gt;
||Checks the model validity and returns found issues. The returned data is an array of objects where each object represents one validity error and contains the following properties:&lt;br /&gt;
* &#039;&#039;&#039;IssueType&#039;&#039;&#039; (String): Specifies the issue type.&lt;br /&gt;
* &#039;&#039;&#039;ContextType&#039;&#039;&#039; (String): Context in which the issue was found, and it can be &#039;&#039;&#039;EventDataSource&#039;&#039;&#039;, &#039;&#039;&#039;CaseDataSource&#039;&#039;&#039;, &#039;&#039;&#039;OcelDataSource&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Details&#039;&#039;&#039; (Dictionary): Additional details which depend on the type of the issue.&lt;br /&gt;
&lt;br /&gt;
There are two types of checks available (based on whether the &#039;&#039;&#039;CheckData&#039;&#039;&#039; parameter is defined):&lt;br /&gt;
* &#039;&#039;Lightweight check&#039;&#039;: The check is based on only the configuration data stored in QPR ProcessAnalyzer. This check is very quick and does not require running queries in datasource (e.g., in Snowflake).&lt;br /&gt;
* &#039;&#039;Full check&#039;&#039;: The check is comprehensive and it&#039;s able to detect any validity issues the model may have. The full check requires running queries to the actual data which makes the check slower, and in case of Snowflake, it uses the Snowflake warehouse to run the queries.&lt;br /&gt;
&lt;br /&gt;
The lightweight check is performed automatically by the [[QPR_ProcessAnalyzer_Project_Workspace|Workspace]], so if there are any validity issues that the lightweight check can detect, the Workspace notifies about them immediately. If there are any problems with the model calculation results, it might be a good idea to run the full validity check to confirm whether the problems are due to the model being invalid.&lt;br /&gt;
&lt;br /&gt;
Example: Lightweight check:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ToJson(ModelById(1).CheckModelValidity())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Full check:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ToJson(ModelById(1).CheckModelValidity(#{ &amp;quot;CheckData&amp;quot;: true }))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||CortexAgentsQuery&lt;br /&gt;
||&lt;br /&gt;
||Creates a Snowflake Cortex semantic model (see &#039;&#039;GetSemanticModel&#039;&#039; function) for the process mining model and makes a natural language query on it using Snowflake Cortex Agents. More information: https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents. &lt;br /&gt;
&lt;br /&gt;
There are the following parameters:&lt;br /&gt;
# &#039;&#039;&#039;Parameters&#039;&#039;&#039;: Dictionary parameters given to the Cortex Agents REST API query (https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-rest-api). There is a special handling for the following parameters:&lt;br /&gt;
#* &#039;&#039;&#039;model&#039;&#039;&#039;: If not defined, uses the default Cortex Agents model name configured into the database, or if that is not defined, uses &amp;quot;llama3.1-70b&amp;quot;.&lt;br /&gt;
#* &#039;&#039;&#039;_tools&#039;&#039;&#039;: Additional tool_spec of type &amp;quot;cortex_analyst_text_to_sql&amp;quot; will be added to this value with a reference to the generated semantic model.&lt;br /&gt;
#* &#039;&#039;&#039;_tool_resources&#039;&#039;&#039;: Generated semantic model is added as an additional resource.&lt;br /&gt;
# &#039;&#039;&#039;Filter configuration&#039;&#039;&#039;: Can be a string containing filter JSON or a dictionary containing the filter configuration. The semantic model is created for the filtered eventlog. If not defined, the entire model eventlog will be used.&lt;br /&gt;
# &#039;&#039;&#039;Event column role nappings&#039;&#039;&#039;: Mappings to apply for event columns. If not defined, default column mappings are used.&lt;br /&gt;
# &#039;&#039;&#039;Case column role mappings&#039;&#039;&#039;: Mappings to apply for case columns. If not defined, default column mappings are used.&lt;br /&gt;
&lt;br /&gt;
The function returns a dictionary with the following keys:&lt;br /&gt;
# &#039;&#039;&#039;Response&#039;&#039;&#039;: Actual response as a dictionary returned by the Cortex Agents.&lt;br /&gt;
# &#039;&#039;&#039;Response items&#039;&#039;&#039;: Contains processed response consisting of an array of objects having the following properties:&lt;br /&gt;
#* &#039;&#039;&#039;Text&#039;&#039;&#039;: Textual response.&lt;br /&gt;
#* &#039;&#039;&#039;Sql&#039;&#039;&#039;: Response SQL query string. Not mandatory.&lt;br /&gt;
#* &#039;&#039;&#039;SqlDataFrame&#039;&#039;&#039;: SqlDataFrame created for the SQL query in the Sql property. Only present if Sql is present.&lt;br /&gt;
|-&lt;br /&gt;
||GetSemanticModel&lt;br /&gt;
||&lt;br /&gt;
||Creates a Snowflake Cortex Analyst semantic model for the process mining model and returns it as a dictionary. More information: https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-analyst/semantic-model-spec.&lt;br /&gt;
&lt;br /&gt;
There are the following parameters:&lt;br /&gt;
# &#039;&#039;&#039;Filter configuration&#039;&#039;&#039;: Can be a string containing filter JSON or a dictionary containing the filter. The semantic model is created for the filtered eventlog. If not defined, the entire model eventlog will be used.&lt;br /&gt;
# &#039;&#039;&#039;Event column role mappings&#039;&#039;&#039;: Mappings to apply for event columns. If not defined, default column mappings are used.&lt;br /&gt;
# &#039;&#039;&#039;Case column role mappings&#039;&#039;&#039;: Mappings to apply for case columns. If not defined, default column mappings are used.&lt;br /&gt;
&lt;br /&gt;
Examples: Returns a semantic model without any filtering applied.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(1).GetSemanticModel();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Function to get Model by model id:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||ModelById&lt;br /&gt;
||&lt;br /&gt;
* Model id (Integer)&lt;br /&gt;
||&lt;br /&gt;
Returns [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Model|Model]] object corresponding to the provided model id.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Object-centric model==&lt;br /&gt;
Object-centric models additionally have the following properties and functions.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Object-Centric model properties&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||IsOcelModel (boolean)&lt;br /&gt;
||Returns &#039;&#039;true&#039;&#039; when the model is an OCEL model.&lt;br /&gt;
|-&lt;br /&gt;
||OcelEvents (Datatable)&lt;br /&gt;
||Datatable containing event data for the OCEL model. Value &#039;&#039;null&#039;&#039; is returned if event datatable has not been configured for the model. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
|-&lt;br /&gt;
||OcelEventToObject (Datatable)&lt;br /&gt;
||Datatable containing event-to-object relations data for the OCEL model. Value &#039;&#039;null&#039;&#039; is returned if event-to-object relation datatable has not been configured for the model. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
|-&lt;br /&gt;
||OcelEventTypes (Dictionary)&lt;br /&gt;
||Returns a dictionary containing event type names as keys and the datatables holding event data for that event type in this OCEL model as value. An empty array is returned if event types datatable has not been configured for the model. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
&lt;br /&gt;
Example: Get datatable for &amp;quot;Create order&amp;quot; events:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(1).OcelEventTypes.Get(&amp;quot;Create order&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||OcelObjects (Datatable)&lt;br /&gt;
||Datatable containing objects data for the OCEL model. Value &#039;&#039;null&#039;&#039; is returned if object datatable has not been configured for the model. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
|-&lt;br /&gt;
||OcelObjectToObject (Datatable)&lt;br /&gt;
||Datatable containing object-to-object relations data for the OCEL model. Value &#039;&#039;null&#039;&#039; is returned if object-to-object relation datatable has not been configured for the model. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
|-&lt;br /&gt;
||OcelObjectTypes (Dictionary)&lt;br /&gt;
||Returns a dictionary containing object type names as keys and the datatables holding data for that object type in this OCEL model as value. An empty array is returned if object types have not been configured for this model. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Object-centric model functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||OcelEventType&lt;br /&gt;
||Event type name (String)&lt;br /&gt;
||&lt;br /&gt;
Datatable containing event type attributes of given event type in this OCEL model. Value &#039;&#039;null&#039;&#039; is returned if a datatable is not configured for this model for given event type. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
&lt;br /&gt;
Example: Get datatable for &amp;quot;Create order&amp;quot; events:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(1).OcelEventType(&amp;quot;Create order&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||OcelObjectType&lt;br /&gt;
||Object type name (String)&lt;br /&gt;
||Datatable containing object type attributes of given object type in this OCEL model. Value &#039;&#039;null&#039;&#039; is returned if a datatable is not configured for this model for given object type. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
|-&lt;br /&gt;
||OcelObjectTypeConfiguration&lt;br /&gt;
||Object type name (String)&lt;br /&gt;
||Returns a matching configuration object with the following properties:&amp;lt;br&amp;gt;&lt;br /&gt;
# Datatable: name of the datatable&lt;br /&gt;
# Unit: unit label for object type items&lt;br /&gt;
&#039;&#039;Null&#039;&#039; is returned if the given object type is not found in the model configuration.  &lt;br /&gt;
If the object type name is not specified or &#039;&#039;null&#039;&#039;, the function returns a dictionary containing configurations for all defined object types.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Project properties&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||CreatedBy (User)&lt;br /&gt;
||User who created the Project.&lt;br /&gt;
|-&lt;br /&gt;
||CreatedDate (DateTime)&lt;br /&gt;
||Timestamp when the Project was created.&lt;br /&gt;
|-&lt;br /&gt;
||Configuration (Dictionary)&lt;br /&gt;
||Project settings as Dictionary object. See example in &#039;&#039;ConfigurationJson&#039;&#039; property.&lt;br /&gt;
|-&lt;br /&gt;
||ConfigurationJson (String)&lt;br /&gt;
||Project settings as json string.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;DefaultLocationInDataSource&amp;quot;: {&lt;br /&gt;
    &amp;quot;Database&amp;quot;: &amp;quot;MyDatabase&amp;quot;,&lt;br /&gt;
    &amp;quot;Schema&amp;quot;: &amp;quot;MySchema&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;ConnectionStringKeys&amp;quot;: {&lt;br /&gt;
    &amp;quot;Snowflake&amp;quot;: &amp;quot;MyKey1&amp;quot;,&lt;br /&gt;
    &amp;quot;SqlServer&amp;quot;: &amp;quot;MyKey2&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||Dashboards (Dashboard*)&lt;br /&gt;
||Returns all [[Dashboard_in_Expression_Language|dashboards]] in the project.&lt;br /&gt;
|-&lt;br /&gt;
||Datatables (Datatable*)&lt;br /&gt;
||Returns all Datatables in the project.&lt;br /&gt;
|-&lt;br /&gt;
||DeletedDate (DateTime)&lt;br /&gt;
||Timestamp when the Project was deleted (moved to the recycle bin).&lt;br /&gt;
|-&lt;br /&gt;
||Description (String)&lt;br /&gt;
||Project description. The project description may contain line breaks.&lt;br /&gt;
|-&lt;br /&gt;
||DeletedBy (User)&lt;br /&gt;
||User who deleted the Project (moved to the recycle bin).&lt;br /&gt;
|-&lt;br /&gt;
||Id (Integer)&lt;br /&gt;
||Id of the Project.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedBy (User)&lt;br /&gt;
||User who last modified the Project.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedDate (DateTime)&lt;br /&gt;
||Timestamp when the Project was last modified (refers to the project name, description and parent, not the contents of the project).&lt;br /&gt;
|-&lt;br /&gt;
||Name (String)&lt;br /&gt;
||Name of the Project.&lt;br /&gt;
|-&lt;br /&gt;
||Models (Model*)&lt;br /&gt;
||Models that are in the Project.&lt;br /&gt;
|-&lt;br /&gt;
||Parent (Project)&lt;br /&gt;
||Parent project, i.e. a Project where the Project is located in the hierarchy of Projects. Returns &#039;&#039;null&#039;&#039; for root level Projects. Throws an error if user doesn&#039;t have access to the parent project.&lt;br /&gt;
|-&lt;br /&gt;
||ParentProjectId (Integer)&lt;br /&gt;
||Parent project id. Returns &#039;&#039;null&#039;&#039; for root level Projects. The parent project id is returned even if user doesn&#039;t have access to the parent project.&lt;br /&gt;
|-&lt;br /&gt;
||Scripts (Script*)&lt;br /&gt;
||Scripts that are in the Project.&lt;br /&gt;
|-&lt;br /&gt;
||Secrets (Dictionary*)&lt;br /&gt;
||Returns array of all [[Storing_Secrets_for_Scripts|secrets]] in the project as Dictionary with following properties:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039; (string): Name of the secret.&lt;br /&gt;
* &#039;&#039;&#039;Type&#039;&#039;&#039; (string): Type of the secret which is one of the following: &amp;quot;odbc&amp;quot;, &amp;quot;sap&amp;quot;, &amp;quot;salesforce&amp;quot;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Project functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||CreateDashboard (Dashboard)&lt;br /&gt;
||Parameters dictionary&lt;br /&gt;
||Creates a dashboard to the project. &#039;&#039;EditDashboards&#039;&#039; permission to the project is required. The parameter is dictionary with following supported dashboard properties:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039; (String): Name of the dashboard.&lt;br /&gt;
* &#039;&#039;&#039;Identifier&#039;&#039;&#039; (String): Identifier of the dashboard.&lt;br /&gt;
* &#039;&#039;&#039;Description&#039;&#039;&#039; (String): Description of the dashboard.&lt;br /&gt;
* &#039;&#039;&#039;Content&#039;&#039;&#039; (Dictionary): Content of the dashboard.&lt;br /&gt;
&lt;br /&gt;
Example: Create empty dashboard.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1)&lt;br /&gt;
  .CreateDashboard(#{&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;My dashboard&amp;quot;,&lt;br /&gt;
    &amp;quot;Identifier&amp;quot;: &amp;quot;MyDashboard&amp;quot;&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Create dashboard with a chart.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1)&lt;br /&gt;
  .CreateDashboard(#{&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;My dashboard&amp;quot;,&lt;br /&gt;
    &amp;quot;Content&amp;quot;: #{&lt;br /&gt;
      &amp;quot;version&amp;quot;: 4,&lt;br /&gt;
      &amp;quot;typeName&amp;quot;: &amp;quot;View&amp;quot;,&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;My dashboard&amp;quot;,&lt;br /&gt;
      &amp;quot;subElements&amp;quot;: [&lt;br /&gt;
        #{&lt;br /&gt;
          &amp;quot;position&amp;quot;: #{&lt;br /&gt;
            &amp;quot;x&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;y&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;width&amp;quot;: 0.5,&lt;br /&gt;
            &amp;quot;height&amp;quot;: 0.5,&lt;br /&gt;
            &amp;quot;zOrder&amp;quot;: 0&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;element&amp;quot;: #{&lt;br /&gt;
            &amp;quot;typeName&amp;quot;: &amp;quot;Chart&amp;quot;,&lt;br /&gt;
            &amp;quot;configuration&amp;quot;: #{&lt;br /&gt;
              &amp;quot;root&amp;quot;: #{&lt;br /&gt;
                &amp;quot;expressionType&amp;quot;: &amp;quot;Cases&amp;quot;,&lt;br /&gt;
                &amp;quot;expressionParameters&amp;quot;: #{}&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;measures&amp;quot;: [#{&lt;br /&gt;
                &amp;quot;expressionType&amp;quot;: &amp;quot;Count&amp;quot;,&lt;br /&gt;
                &amp;quot;expressionParameters&amp;quot;: #{}&lt;br /&gt;
              }]&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;CreateDatatable&amp;quot;&amp;gt;CreateDatatable&amp;lt;/span&amp;gt; (Datatable)&lt;br /&gt;
||&lt;br /&gt;
* Parameters dictionary&lt;br /&gt;
||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:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039; (string): Name of the datatable. This parameter is mandatory.&lt;br /&gt;
* &#039;&#039;&#039;Description&#039;&#039;&#039; (string): Description for the datatable. This parameter is optional.&lt;br /&gt;
* &#039;&#039;&#039;NameInDataSource&#039;&#039;&#039; (string): Table name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.&lt;br /&gt;
* &#039;&#039;&#039;SchemaNameInDataSource&#039;&#039;&#039; (string): Schema name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.&lt;br /&gt;
* &#039;&#039;&#039;DatabaseNameInDataSource&#039;&#039;&#039; (string): Database name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.&lt;br /&gt;
* &#039;&#039;&#039;Type&#039;&#039;&#039; (string): Defines where the data for the datatable is located. Available values are &#039;&#039;&#039;Snowflake&#039;&#039;&#039;, &#039;&#039;&#039;SqlServer&#039;&#039;&#039;, and &#039;&#039;&#039;Local&#039;&#039;&#039;.  This parameter is optional and default value is defined by the [[PA_Configuration_database_table#General_Settings|DefaultDataSource]] setting.&lt;br /&gt;
* &#039;&#039;&#039;Connection&#039;&#039;&#039;: Connection object for the datatable. This parameter is optional.&lt;br /&gt;
&lt;br /&gt;
Example: Create a new datatable:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).CreateDatatable(#{&lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My datatable&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Create Snowflake datatable linked to a custom table:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).CreateDatatable(#{&lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My datatable&amp;quot;,&lt;br /&gt;
  &amp;quot;Description&amp;quot;: &amp;quot;My description&amp;quot;,&lt;br /&gt;
  &amp;quot;NameInDataSource&amp;quot;: &amp;quot;MyTable&amp;quot;,&lt;br /&gt;
  &amp;quot;SchemaNameInDataSource&amp;quot;: &amp;quot;MySchema&amp;quot;,&lt;br /&gt;
  &amp;quot;DatabaseNameInDataSource&amp;quot;: &amp;quot;MyDatabase&amp;quot;,&lt;br /&gt;
  &amp;quot;Type&amp;quot;: &amp;quot;Snowflake&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Create Snowflake datatable where connection string is stored as a [[Storing_Secrets_for_Scripts|secret]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).CreateDatatable(#{&lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My datatable&amp;quot;,&lt;br /&gt;
  &amp;quot;Type&amp;quot;: &amp;quot;Snowflake&amp;quot;,&lt;br /&gt;
  &amp;quot;Connection&amp;quot;: ProjectById(1).CreateSnowflakeConnection(#{ &amp;quot;OdbcConnectionStringKey&amp;quot;: &amp;quot;MyKey&amp;quot; })&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||CreateMeaConnection&lt;br /&gt;
||&lt;br /&gt;
||&lt;br /&gt;
Creates an object representing connection to QPR MEA (QPR Suite) Web Service. The parameter is a dictionary supporting parameter &#039;&#039;&#039;ConnectionStringKey&#039;&#039;&#039; which defines the MEA connection string secret name in the same project.&lt;br /&gt;
&lt;br /&gt;
Example: create connection:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let connection = ProjectByName(&amp;quot;MyProject&amp;quot;).CreateMeaConnection( #{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MyMeaConnection&amp;quot;} );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: [[QPR_MEA_Integration|use connection]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let results = connection.QueryObjects(&amp;quot;[PG.785401983.683494101]&amp;quot;, &amp;quot;name, typename&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||CreateModel (Model)&lt;br /&gt;
||&lt;br /&gt;
* Parameters dictionary&lt;br /&gt;
||Creates a model to a project. Requires &#039;&#039;GenericWrite&#039;&#039; permission for the Project and global &#039;&#039;CreateModel&#039;&#039; permission. If a model with that name already exists, an exception is thrown.&lt;br /&gt;
&lt;br /&gt;
Parameters dictionary has the following properties:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039;: Name of the model. This property is mandatory.&lt;br /&gt;
* &#039;&#039;&#039;Description&#039;&#039;&#039;: Description of the model. This property is optional.&lt;br /&gt;
* &#039;&#039;&#039;Configuration&#039;&#039;&#039;: Configuration dictionary for the model. This property is technically optional, but a working model requires at least datasource settings to be defined.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).CreateModel(#{    &lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My model&amp;quot;,&lt;br /&gt;
  &amp;quot;Description&amp;quot;: &amp;quot;My description&amp;quot;,&lt;br /&gt;
  &amp;quot;Configuration&amp;quot;: #{&lt;br /&gt;
    &amp;quot;DataSource&amp;quot;: #{&lt;br /&gt;
      &amp;quot;Cases&amp;quot;: #{&lt;br /&gt;
        &amp;quot;DataSourceType&amp;quot;: &amp;quot;datatable&amp;quot;,&lt;br /&gt;
        &amp;quot;DataTableName&amp;quot;: &amp;quot;My cases datatable&amp;quot;,&lt;br /&gt;
        &amp;quot;Columns&amp;quot;: #{&lt;br /&gt;
          &amp;quot;CaseId&amp;quot;: &amp;quot;Case Name&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;Events&amp;quot;: #{&lt;br /&gt;
        &amp;quot;DataSourceType&amp;quot;: &amp;quot;datatable&amp;quot;,&lt;br /&gt;
        &amp;quot;DataTableName&amp;quot;: &amp;quot;My events datatable&amp;quot;,&lt;br /&gt;
        &amp;quot;Columns&amp;quot;: #{&lt;br /&gt;
           &amp;quot;CaseId&amp;quot;: &amp;quot;Case Name&amp;quot;,&lt;br /&gt;
           &amp;quot;EventType&amp;quot;: &amp;quot;Event Type&amp;quot;,&lt;br /&gt;
           &amp;quot;Timestamp&amp;quot;: &amp;quot;Start Time&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;CreateProject&amp;quot;&amp;gt;CreateProject&amp;lt;/span&amp;gt; (Project)&lt;br /&gt;
||&lt;br /&gt;
* Parameters dictionary&lt;br /&gt;
||Create a project as a sub-project of the context project. Returns the created project. Requires the &#039;&#039;ManageProject&#039;&#039; permission.&lt;br /&gt;
&lt;br /&gt;
Parameters dictionary has the following properties:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039; (string): Name of the project. This property is required.&lt;br /&gt;
* &#039;&#039;&#039;Description&#039;&#039;&#039; (string): Description of the project.&lt;br /&gt;
* &#039;&#039;&#039;ParentProjectId&#039;&#039;&#039; (integer): Id of the parent project where the new project is created. This parameter is usually not needed because the parent project is the context project. The CreateProject function is also available in the generic context where the &#039;&#039;ParentProjectId&#039;&#039; parameter is needed to create sub-projects.&lt;br /&gt;
* &#039;&#039;&#039;DatabaseNameInDataSource&#039;&#039;&#039; (string): Snowflake database the project is linked to. Data for the datatables in this project will be located in this database.&lt;br /&gt;
* &#039;&#039;&#039;SchemaNameInDataSource&#039;&#039;&#039; (string): Snowflake schema the project is linked to. Data for the datatables in this project will be located in this schema. If the schema is defined, also the &#039;&#039;DatabaseNameInDataSource&#039;&#039; needs to be defined.&lt;br /&gt;
* &#039;&#039;&#039;SnowflakeConnectionStringKey&#039;&#039;&#039; (string): Snowflake connection string key to be used for the datatables in this project. &lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).CreateProject(#{&lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My project&amp;quot;, &lt;br /&gt;
  &amp;quot;Description&amp;quot;: &amp;quot;My description&amp;quot;, &lt;br /&gt;
  &amp;quot;DatabaseNameInDataSource&amp;quot;: &amp;quot;My database&amp;quot;, &lt;br /&gt;
  &amp;quot;SchemaNameInDataSource&amp;quot;: &amp;quot;My schema&amp;quot; &lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||DatatableByName (Datatable)&lt;br /&gt;
||Datatable name (String)&lt;br /&gt;
||&lt;br /&gt;
Returns Datatable by its name located in the project. Returns null, if Datatable with that name does not exist in the project.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(123).DatatableByName(&amp;quot;MyDatatable1&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Get datatable by name, and create it if it doesn&#039;t exist:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let project = ProjectById(123);&lt;br /&gt;
let datatableName = &amp;quot;MyDatatable1&amp;quot;;&lt;br /&gt;
let datatable = project.DatatableByName(datatableName);&lt;br /&gt;
if (datatable == null) {&lt;br /&gt;
  datatable = project.CreateDatatable(datatableName);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||DeletePermanently&lt;br /&gt;
||(none)&lt;br /&gt;
||Deletes the Project permanently. Note that the Project doesn&#039;t need to be in the recycle bin to be able to delete it permanently.&lt;br /&gt;
|-&lt;br /&gt;
||Export (String)&lt;br /&gt;
||(none)&lt;br /&gt;
||Exports the project and its content to a json string. The json format is described in [[Projects Export File Format]].&lt;br /&gt;
&lt;br /&gt;
Example: Export project id 1 to json data:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).Export();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||Import&lt;br /&gt;
||JSON string&lt;br /&gt;
||Creates one or several projects from a json string. The project(s) are created as child projects of the context project. The json format is described in [[Projects Export File Format]]. The function returns the created project objects. In case the project names already exist, the import operation automatically adjusts the names to be unique.&lt;br /&gt;
&lt;br /&gt;
Example: Create project from json data (as child of project id 1):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let jsonData = `{ &amp;quot;Projects&amp;quot;: [ { &amp;quot;Name&amp;quot;: &amp;quot;My project&amp;quot; } ] }`;&lt;br /&gt;
let result = ProjectById(1).Import(jsonData);&lt;br /&gt;
let createdProjectId = result[&amp;quot;Projects&amp;quot;][0].Id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||Restore&lt;br /&gt;
||(none)&lt;br /&gt;
||Restores the Project from the recycle bin back to the original location.&lt;br /&gt;
|-&lt;br /&gt;
||ModelByName (Model)&lt;br /&gt;
||Model name (String)&lt;br /&gt;
||&lt;br /&gt;
Returns Model by its name located in the project. Returns null, if Model with that name does not exist in the project.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(123).ModelByName(&amp;quot;My Model 1&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;ModifyProject&amp;quot;&amp;gt;Modify&amp;lt;/span&amp;gt; (Project)&lt;br /&gt;
||Dictionary of settings to change&lt;br /&gt;
||&lt;br /&gt;
Change project settings. Following settings are supported:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039; (String): Name of the project.&lt;br /&gt;
* &#039;&#039;&#039;Description&#039;&#039;&#039; (String): Description text of the project.&lt;br /&gt;
* &#039;&#039;&#039;ParentProjectId&#039;&#039;&#039; (Integer): Parent project id. Changing this effectively moves the project into different parent project.&lt;br /&gt;
* &#039;&#039;&#039;DatabaseNameInDataSource&#039;&#039;&#039;: Name of the Snowflake database where the project&#039;s datatables are located. The database needs to exist in the same Snowflake account configured in the Snowflake connection string. When defining this setting, define also the &#039;&#039;SchemaNameInDataSource&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;SchemaNameInDataSource&#039;&#039;&#039;: Name of the Snowflake schema where the project&#039;s datatables are located. The schema needs to exist in the same Snowflake account configured in the Snowflake connection string. When defining this setting, define also the &#039;&#039;DatabaseNameInDataSource&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;SnowflakeConnectionStringKey&#039;&#039;&#039; (String): Snowflake connection string key for the project. Snowflake datatables in the project will use connection string behind this key (unless specified by the datatatable).&lt;br /&gt;
* &#039;&#039;&#039;SqlServerConnectionStringKey&#039;&#039;&#039; (String): SQL Server connection string key. SQL Server datatables in the project will use connection string behind this key (unless specified by the datatatable).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ManageProject&#039;&#039; permission is needed to change project properties.&lt;br /&gt;
&lt;br /&gt;
Example: Change project name and move project into other parent project:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1)&lt;br /&gt;
  .Modify(#{&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;Project 1&amp;quot;&lt;br /&gt;
    &amp;quot;ParentProjectId&amp;quot;: 2&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Set Snowflake connection string key for the project:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1)&lt;br /&gt;
  .Modify(#{&lt;br /&gt;
    &amp;quot;SnowflakeConnectionStringKey&amp;quot;: &amp;quot;MyKey1&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||ScriptByName (Script)&lt;br /&gt;
||Script name (String)&lt;br /&gt;
||&lt;br /&gt;
Returns Script by its name located in the project. Returns null, if Script with that name does not exist in the project.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(123).ScriptByName(&amp;quot;MyScript1&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;SetSecret&amp;quot;&amp;gt;SetSecret&amp;lt;/span&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
# Secret type (string)&lt;br /&gt;
# Secret name (string)&lt;br /&gt;
# Secret value (string)&lt;br /&gt;
||Sets or adds a [[Storing_Secrets_for_Scripts|secret]] for the project. Setting the secret value to &#039;&#039;null&#039;&#039; 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 &#039;&#039;ManageProject&#039;&#039; permission.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
# &#039;&#039;&#039;Type&#039;&#039;&#039; (string): Secret type which is one of the following:&lt;br /&gt;
#* &amp;quot;externaldatatableconnection&amp;quot;: Snowflake ODBC connection string for datatables.&lt;br /&gt;
#* &amp;quot;odbc&amp;quot;: ODBC connection string (e.g., to extract data in scripts, or load an in-memory model).&lt;br /&gt;
#* &amp;quot;oledb&amp;quot;: OleDB connection string (e.g., to extract data in scripts, or load an in-memory model).&lt;br /&gt;
#* &amp;quot;sap&amp;quot;: SAP password.&lt;br /&gt;
#* &amp;quot;salesforce&amp;quot;: Salesforce password.&lt;br /&gt;
#* &amp;quot;sql&amp;quot;: SQL Server connection string.&lt;br /&gt;
#* &amp;quot;qprmea&amp;quot;: QPR MEA connection string.&lt;br /&gt;
# &#039;&#039;&#039;Name&#039;&#039;&#039; (string): Secret name, used to refer to the secret in the commands.&lt;br /&gt;
# &#039;&#039;&#039;Value&#039;&#039;&#039; (string): Secret value which contains the confidential information.&lt;br /&gt;
&lt;br /&gt;
Example: Set SAP password:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).SetSecret(&amp;quot;sap&amp;quot;, &amp;quot;MySapPassword&amp;quot;, &amp;quot;I l0ve 5AP!&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Remove SAP password:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).SetSecret(&amp;quot;sap&amp;quot;, &amp;quot;MySapPassword&amp;quot;, null);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Functions to get project:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||ProjectById&lt;br /&gt;
||Project id (Integer)&lt;br /&gt;
||&lt;br /&gt;
Returns project object corresponding to the provided project id.&lt;br /&gt;
|-&lt;br /&gt;
||ProjectByName&lt;br /&gt;
||Project name (String)&lt;br /&gt;
||&lt;br /&gt;
Returns project object by given project name. If there is no such project or user doesn&#039;t have access to it, &#039;&#039;null&#039;&#039; value is returned. If there are multiple projects with the same name, one of them is returned.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let project = ProjectByName(&amp;quot;My Project&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Functions to create project:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;CreateProject&amp;quot;&amp;gt;CreateProject&amp;lt;/span&amp;gt; (Project)&lt;br /&gt;
||Parameters dictionary&lt;br /&gt;
||Create a project. This is a similar function as the [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#CreateProject|CreateProject function]] in the project context. This function in the generic context is needed to create root-level projects (which don&#039;t have parent project).&lt;br /&gt;
&lt;br /&gt;
Example: create a root project:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CreateProject(#{&lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My project&amp;quot;&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: create a sub-project:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CreateProject(#{&lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My project&amp;quot;&lt;br /&gt;
  &amp;quot;ParentProjectId&amp;quot;: 1&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;Import&amp;quot;&amp;gt;Import&amp;lt;/span&amp;gt; (Project*)&lt;br /&gt;
||JSON string&lt;br /&gt;
||Creates one or several projects from a json string. The project(s) are created as the root level projects. The json format is described in [[Projects Export File Format]]. The function returns the created project objects. In case the project names already exist, the import operation automatically adjusts the names to be unique.&lt;br /&gt;
&lt;br /&gt;
Example: Create a root level project from json data:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let jsonData = `{ &amp;quot;Projects&amp;quot;: [ { &amp;quot;Name&amp;quot;: &amp;quot;My project&amp;quot; } ] }`;&lt;br /&gt;
let result = Import(jsonData);&lt;br /&gt;
let createdProjectId = result[&amp;quot;Projects&amp;quot;][0].Id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Script ==&lt;br /&gt;
Scripts are entities that contain executable code, that can be run. Usually scripts contains ETL routines but also other kind of tasks are possible.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Script properties&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||Code (String)&lt;br /&gt;
||Script code.&lt;br /&gt;
|-&lt;br /&gt;
||CreatedBy (User)&lt;br /&gt;
||User who created the Script.&lt;br /&gt;
|-&lt;br /&gt;
||CreatedDate (DateTime)&lt;br /&gt;
||Timestamp when the Script was created.&lt;br /&gt;
|-&lt;br /&gt;
||CurrentRunStart (DateTime)&lt;br /&gt;
||Timestamp of the current run start. Null if the script is currently not running.&lt;br /&gt;
|-&lt;br /&gt;
||Description (String)&lt;br /&gt;
||Description of the Script.&lt;br /&gt;
|-&lt;br /&gt;
||Id (Integer)&lt;br /&gt;
||Id of the Script.&lt;br /&gt;
|-&lt;br /&gt;
||Language (String)&lt;br /&gt;
||Either of the following scripting language: &#039;&#039;&#039;Expression&#039;&#039;&#039; or &#039;&#039;&#039;SQL&#039;&#039;&#039;. 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).&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedBy (User)&lt;br /&gt;
||User who last modified the Script.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedDate (DateTime)&lt;br /&gt;
||Timestamp when the Script was last modified.&lt;br /&gt;
|-&lt;br /&gt;
||LastRunEnd (DateTime)&lt;br /&gt;
||Timestamp of the last completed script run end (either successful completion or failure). Null if the Script hasn&#039;t been run yet.&lt;br /&gt;
|-&lt;br /&gt;
||LastRunResult (String)&lt;br /&gt;
||Result of the last run. Options are:&lt;br /&gt;
* &#039;&#039;&#039;Completed&#039;&#039;&#039;: The last run was completed successfully.&lt;br /&gt;
* &#039;&#039;&#039;Failed&#039;&#039;&#039;: An error occurred during the last run, so likely the script did not complete as intended.&lt;br /&gt;
* &#039;&#039;&#039;Aborted&#039;&#039;&#039;: Script run was manually stopped prematurely by a user, so the script did not proceeded in the end.&lt;br /&gt;
&lt;br /&gt;
Null if the Script hasn&#039;t been run yet.&lt;br /&gt;
|-&lt;br /&gt;
||LastRunStart (DateTime)&lt;br /&gt;
||Timestamp of the last completed script run start time. Null if the Script hasn&#039;t been run yet.&lt;br /&gt;
|-&lt;br /&gt;
||Name (String)&lt;br /&gt;
||Name of the Script.&lt;br /&gt;
|-&lt;br /&gt;
||OperationId (Integer)&lt;br /&gt;
||Id of the operation which runs the Script. Null if the script is currently not running.&lt;br /&gt;
|-&lt;br /&gt;
||Project (Project)&lt;br /&gt;
||Project where the Script is located. Null if the script is in the global context.&lt;br /&gt;
|-&lt;br /&gt;
||ProjectId (Integer)&lt;br /&gt;
||Id of the project where the Script is located. Null if the script is in the global context.&lt;br /&gt;
|-&lt;br /&gt;
||Status (String)&lt;br /&gt;
||Current status of the script. Options are:&lt;br /&gt;
* &#039;&#039;&#039;Ready&#039;&#039;&#039;: Script is not running. In this status, the script can be started (changing the status to &#039;&#039;Running&#039;&#039;).&lt;br /&gt;
* &#039;&#039;&#039;Running&#039;&#039;&#039;: Script is running. In this status, the script can be stopped (changing the status to &#039;&#039;Stopping&#039;&#039;). Calling stop just requests a script to stop, and the actual stopping occurs some time later.&lt;br /&gt;
* &#039;&#039;&#039;Stopping&#039;&#039;&#039;: Script has been requested to be stopped, but it&#039;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 &#039;&#039;Ready&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Script functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||Run (Object)&lt;br /&gt;
||Dictionary of parameters&lt;br /&gt;
||&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
For SQL scripts, the passed parameters are available in the script as variables in format &#039;&#039;&#039;@_parameter_&amp;lt;ParameterName&amp;gt;&#039;&#039;&#039; where &amp;lt;ParameterName&amp;gt; is the name of the parameter, e.g. &#039;&#039;parameter_myParameter1&#039;&#039;. Only string type of parameters can be used, so any other type of data in parameter values is converted into strings.&lt;br /&gt;
&lt;br /&gt;
The return value of the script is returned by the Run function. Expression scripts return a value with the &#039;&#039;return&#039;&#039; 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 &#039;&#039;_empty&#039;&#039;. 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 &#039;&#039;--#ShowReport&#039;&#039; command or the &#039;&#039;Show&#039;&#039; parameter).&lt;br /&gt;
&lt;br /&gt;
When a script is called using the Run function, the called script status does not change, because it&#039;s the parent script that is &#039;&#039;Running&#039;&#039;. Also the called script log is not filled, but instead the logging goes to the calling script.&lt;br /&gt;
&lt;br /&gt;
It&#039;s possible to call a script using the Run function several times simultaneously.&lt;br /&gt;
&lt;br /&gt;
If there is an error when running the called script, the Run function throws the error to the calling script.&lt;br /&gt;
&lt;br /&gt;
Scripts are run in the script entity context, so for example the following properties are available:&lt;br /&gt;
* Id: Script id&lt;br /&gt;
* Name: Script name&lt;br /&gt;
* Project.Id: Project id where the script is located&lt;br /&gt;
* Project.Name: Name of the project where the script is located&lt;br /&gt;
&lt;br /&gt;
Example: Following script (id 123) raises a specified number to a specified power:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
return Pow(numberToRaise, exponent);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The script can be called as follows (returning 16):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let runResult = ScriptById(123).Run(#{&lt;br /&gt;
  &amp;quot;numberToRaise&amp;quot;: 4,&lt;br /&gt;
  &amp;quot;exponent&amp;quot;: 2&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;Start&amp;quot;&amp;gt;Start&amp;lt;/span&amp;gt;&lt;br /&gt;
||Dictionary of parameters&lt;br /&gt;
||Starts the script. The function call doesn&#039;t wait for the script run to complete (i.e., asynchronous behavior) which is same as starting the script in the [[Managing_Scripts#Starting_Script|Workspace]].&lt;br /&gt;
&lt;br /&gt;
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 &#039;&#039;null&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Example: Start script (without parameters) and store the script run id:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let runId = ScriptById(1).Start();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Start script with passing parameters:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ScriptById(1).Start(#{&lt;br /&gt;
  &amp;quot;variable1&amp;quot;: &amp;quot;val1&amp;quot;,&lt;br /&gt;
  &amp;quot;variable2&amp;quot;: 5&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||Stop&lt;br /&gt;
||&lt;br /&gt;
||Stops the script. The operation doesn&#039;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.&lt;br /&gt;
&lt;br /&gt;
Return value is the script run id (integer) if the script was running. If the script isn&#039;t running, the return value is &#039;&#039;null&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let runId = ScriptById(1).Stop();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Function to get a script by the script id:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||ScriptById&lt;br /&gt;
||&lt;br /&gt;
* Script id (Integer)&lt;br /&gt;
||&lt;br /&gt;
Returns Script object corresponding to the given script id. If script with the given id doesn&#039;t exist or user doesn&#039;t have permissions to it, an error is given.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== User/Group ==&lt;br /&gt;
User objects represents users and user groups. Note that some properties can only be used for users and some for groups.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;User/group properties&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||CreatedBy (User)&lt;br /&gt;
||Returns the user who created the user.&lt;br /&gt;
|-&lt;br /&gt;
||CreatedDate (DateTime)&lt;br /&gt;
||Returns the date when the user was created.&lt;br /&gt;
|-&lt;br /&gt;
||DefaultDashboard (String)&lt;br /&gt;
||Returns the configured [[User_Settings#Starting_dashboard|starting dashboard]] (&amp;quot;default dashboard&amp;quot;) identifier for a group (for users, the starting dashboard cannot be configured). The starting dashboard is automatically opened when a user logs in.&lt;br /&gt;
|-&lt;br /&gt;
||Description (String)&lt;br /&gt;
||Description of the user.&lt;br /&gt;
|-&lt;br /&gt;
||EffectiveDefaultDashboard (String)&lt;br /&gt;
||Returns the [[User_Settings#Starting_dashboard|starting dashboard]] of a user. Value &#039;&#039;null&#039;&#039; means that the user doesn&#039;t have a starting dashboard. The starting dashboard comes from the user&#039;s groups. If multiple of user&#039;s groups have the starting dashboard defined, the user&#039;s starting dashboard will be taken from a group having alphabetically the first name.&lt;br /&gt;
|-&lt;br /&gt;
||Email (String)&lt;br /&gt;
||Email address of the user.&lt;br /&gt;
|-&lt;br /&gt;
||FullName (String)&lt;br /&gt;
||Full name of the user or group name.&lt;br /&gt;
|-&lt;br /&gt;
||GlobalPermissions (String*)&lt;br /&gt;
||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.&lt;br /&gt;
|-&lt;br /&gt;
||GroupMemberNames (String*)&lt;br /&gt;
||Array of names of members of a user group. This property is available for groups.&lt;br /&gt;
|-&lt;br /&gt;
||GroupMembers (User*)&lt;br /&gt;
||Array of members of a user group. This property is available for groups.&lt;br /&gt;
|-&lt;br /&gt;
||GroupNames (String*)&lt;br /&gt;
||Array of names of user groups the user belongs to. This property is available for users.&lt;br /&gt;
|-&lt;br /&gt;
||Groups (User*)&lt;br /&gt;
||Array of user groups the user belongs to. This property is available for users.&lt;br /&gt;
|-&lt;br /&gt;
||HasPassword (Boolean)&lt;br /&gt;
||Returns true if user has a password defined in QPR ProcessAnalyzer and thus user can authenticate using the password. If user doesn&#039;t have a password, the SAML authentication is the only way to log in. &#039;&#039;ManageUsers&#039;&#039; permission is needed to access this property for other users.&lt;br /&gt;
|-&lt;br /&gt;
||Id (Integer)&lt;br /&gt;
||Id of the user, which is unique for every user.&lt;br /&gt;
|-&lt;br /&gt;
||IsActive (Boolean)&lt;br /&gt;
||Returns true only if the user is active (not disabled).&lt;br /&gt;
|-&lt;br /&gt;
||IsGroup (Boolean)&lt;br /&gt;
||Returns true if the user is a user group.&lt;br /&gt;
|-&lt;br /&gt;
||IsLocked (Boolean)&lt;br /&gt;
||Returns true if user account is currently [[User_Session_Management#Preventing_password_guessing_attacks|locked]]. &#039;&#039;ManageUsers&#039;&#039; permission is needed to access this property.&lt;br /&gt;
|-&lt;br /&gt;
||LastLockedDate (DateTime)&lt;br /&gt;
||Returns date when user account was locked the last time. Returns &#039;&#039;null&#039;&#039; if the user account has never been locked. &#039;&#039;ManageUsers&#039;&#039; permission is needed to access this property.&lt;br /&gt;
|-&lt;br /&gt;
||LastLoginDate (DateTime)&lt;br /&gt;
||Returns date when the user made last successful login. &#039;&#039;ManageUsers&#039;&#039; permission is needed to access this property for other users.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedBy (User)&lt;br /&gt;
||Returns the user who last modified this user.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedDate (DateTime)&lt;br /&gt;
||Returns the date when the user was last modified.&lt;br /&gt;
|-&lt;br /&gt;
||Name (String)&lt;br /&gt;
||Login name of the user or group.&lt;br /&gt;
|-&lt;br /&gt;
||Roles (Object**)&lt;br /&gt;
||&lt;br /&gt;
Returns all roles of the user (both global and project roles) as a nested array structure.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ToJson(Users.Where(name == &amp;quot;qpr&amp;quot;).Roles)&lt;br /&gt;
Returns (for example):&lt;br /&gt;
[&lt;br /&gt;
  [{&amp;quot;calcId&amp;quot;: &amp;quot;Project:1&amp;quot;}, &amp;quot;Administrator&amp;quot;],&lt;br /&gt;
  [{&amp;quot;calcId&amp;quot;: &amp;quot;Project:2&amp;quot;}, &amp;quot;Analyzer&amp;quot;],&lt;br /&gt;
  [{&amp;quot;calcId&amp;quot;: &amp;quot;Project:3&amp;quot;}, &amp;quot;Viewer&amp;quot;],&lt;br /&gt;
  [null, &amp;quot;RunScripts&amp;quot;],&lt;br /&gt;
  [null, &amp;quot;Administrator&amp;quot;]&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;User/group functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||EffectivePermissionsFor (String Array)&lt;br /&gt;
||&lt;br /&gt;
* Project to get permissions&lt;br /&gt;
||&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Permissions for the EffectivePermissionsFor function are as follows:&lt;br /&gt;
* All users can query their own permissions&lt;br /&gt;
* To get permissions for any user, the user needs to have [[Roles_and_Permissions|ManageUsers permission]].&lt;br /&gt;
&lt;br /&gt;
Note that &#039;&#039;inactive&#039;&#039; users don&#039;t have any effective permissions, so the EffectivePermissionsFor function does not return any permissions for those users.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
UserById(1).EffectivePermissionsFor(ModelById(2).Project)&lt;br /&gt;
Returns (for example): [&amp;quot;EditDashboards&amp;quot;, &amp;quot;Filtering&amp;quot;, &amp;quot;GenericRead&amp;quot;]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||GetAttribute&lt;br /&gt;
||&lt;br /&gt;
||&lt;br /&gt;
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&#039;t exist, null is returned.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
# &#039;&#039;&#039;Attribute name&#039;&#039;&#039; (String): Name of the attribute.&lt;br /&gt;
# &#039;&#039;&#039;Attribute context&#039;&#039;&#039; (Project/Model/Dashboard): Optional context object the attribute is linked to.&lt;br /&gt;
&lt;br /&gt;
Users have permissions to get attributes for themselves, and also (administrator) users with global &#039;&#039;ManageUsers&#039;&#039; permission can get attributes for all users. In addition, if using the context object, the &#039;&#039;GenericRead&#039;&#039; permission is required for the context object.&lt;br /&gt;
&lt;br /&gt;
Example: Get user attribute MyDataValue for myself:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CurrentUser&lt;br /&gt;
  .GetAttribute(&amp;quot;MyDataValue&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Get user attribute MyDataValue for user John:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Users&lt;br /&gt;
  .Where(Name==&amp;quot;John&amp;quot;)&lt;br /&gt;
  .GetAttribute(&amp;quot;MyDataValue&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Get user attribute MyDataValue for user 1 related to dashboard id 1:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
UserById(1)&lt;br /&gt;
  .GetAttribute(&amp;quot;MyDataValue&amp;quot;, DashboardById(1));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||SetAttribute&lt;br /&gt;
||&lt;br /&gt;
||&lt;br /&gt;
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 &#039;&#039;null&#039;&#039;, the user attribute is removed. Required permissions are same as in the GetAttribute function.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
# &#039;&#039;&#039;Attribute name&#039;&#039;&#039; (String): Name of the attribute.&lt;br /&gt;
# &#039;&#039;&#039;Attribute value&#039;&#039;&#039; (String/Integer/Float/DateTime): Attribute value to be stored.&lt;br /&gt;
# &#039;&#039;&#039;Attribute context&#039;&#039;&#039; (Project/Model/Dashboard): Optional context object the attribute value is linked to.&lt;br /&gt;
&lt;br /&gt;
Example: Set user attribute MyDataValue for myself:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CurrentUser&lt;br /&gt;
  .SetAttribute(&amp;quot;MyDataValue &amp;quot;, &amp;quot;value&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Set value 123 as user attribute MyDataValue for user John:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Users&lt;br /&gt;
  .Where(Name==&amp;quot;John&amp;quot;)&lt;br /&gt;
  .SetAttribute(&amp;quot;MyDataValue&amp;quot;, 123);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Set current time as user attribute MyDataValue for user 1 related to dashboard id 1:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
UserById(1)&lt;br /&gt;
  .GetAttribute(&amp;quot;MyDataValue&amp;quot;, Now, DashboardById(1));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Function to get User by user id:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||UserById (User)&lt;br /&gt;
||&lt;br /&gt;
* User id (Integer)&lt;br /&gt;
||&lt;br /&gt;
Returns User object that has the provided user id. Also groups can be queried with this function. Returns an access denied error if the user with given id does not exist or the current user does not have access to it.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Objects_in_Expression_Language&amp;diff=28039</id>
		<title>QPR ProcessAnalyzer Objects in Expression Language</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Objects_in_Expression_Language&amp;diff=28039"/>
		<updated>2026-04-08T23:20:07Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: /* Project */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Filter==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Filter properties&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||CreatedBy (User)&lt;br /&gt;
||Returns the user who created the filter.&lt;br /&gt;
|-&lt;br /&gt;
||CreatedDate (DateTime)&lt;br /&gt;
||Returns date when the filter created date.&lt;br /&gt;
|-&lt;br /&gt;
||Description (String)&lt;br /&gt;
||Returns description of the filter.&lt;br /&gt;
|-&lt;br /&gt;
||Id (Integer)&lt;br /&gt;
||Returns id of the filter.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedBy (User)&lt;br /&gt;
||Returns user who modified the filter.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedDate (DateTime)&lt;br /&gt;
||Returns date when the filter last modified.&lt;br /&gt;
|-&lt;br /&gt;
||Model&lt;br /&gt;
||Returns model where the filter belongs to.&lt;br /&gt;
|-&lt;br /&gt;
||ModelId (Integer)&lt;br /&gt;
||Returns model where the filter belongs to.&lt;br /&gt;
|-&lt;br /&gt;
||Name (String)&lt;br /&gt;
||Returns the name of the filter.&lt;br /&gt;
|-&lt;br /&gt;
||Project&lt;br /&gt;
||Returns project where the filter belongs to.&lt;br /&gt;
|-&lt;br /&gt;
||ProjectId (Integer)&lt;br /&gt;
||Returns project id where the filter belongs to.&lt;br /&gt;
|-&lt;br /&gt;
||PublishMode (String)&lt;br /&gt;
||Returns publish mode of the filter, one of the following: &#039;&#039;&#039;Private&#039;&#039;&#039;, &#039;&#039;&#039;Public&#039;&#039;&#039;, or &#039;&#039;&#039;Default&#039;&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
||Rules (Dictionary)&lt;br /&gt;
||Returns a dictionary containing the filter rules in the filter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Filter functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||DeletePermanently&lt;br /&gt;
||(none)&lt;br /&gt;
||&lt;br /&gt;
Deletes the filter permanently. To delete own filters, the &#039;&#039;&#039;Filtering&#039;&#039;&#039; permission is needed, and to delete any filters the &#039;&#039;&#039;ManageViews&#039;&#039;&#039; permission is needed.&lt;br /&gt;
|-&lt;br /&gt;
||Modify&lt;br /&gt;
||Dictionary&lt;br /&gt;
||&lt;br /&gt;
Modifies filter properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: &#039;&#039;Name&#039;&#039;, &#039;&#039;Description&#039;&#039;, &#039;&#039;PublishMode&#039;&#039;, and &#039;&#039;Rules&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The function returns the updated filter object. Requires &#039;&#039;GenericWrite&#039;&#039; permission for the Project and global &#039;&#039;CreateModel&#039;&#039; permission.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FilterById(1)&lt;br /&gt;
	.Modify(#{&lt;br /&gt;
		&amp;quot;Name&amp;quot;: &amp;quot;My filter&amp;quot;,&lt;br /&gt;
		&amp;quot;Description&amp;quot;: &amp;quot;My description&amp;quot;,&lt;br /&gt;
		&amp;quot;PublishMode&amp;quot;: &amp;quot;Public&amp;quot;,&lt;br /&gt;
		&amp;quot;Rules&amp;quot;: #{&lt;br /&gt;
			&amp;quot;Items&amp;quot;: [&lt;br /&gt;
				#{&lt;br /&gt;
					&amp;quot;Type&amp;quot;: &amp;quot;IncludeCases&amp;quot;,&lt;br /&gt;
					&amp;quot;Items&amp;quot;: [&lt;br /&gt;
						#{&lt;br /&gt;
							&amp;quot;Type&amp;quot;: &amp;quot;CaseAttributeValue&amp;quot;,&lt;br /&gt;
							&amp;quot;Attribute&amp;quot;: &amp;quot;Account Manager&amp;quot;,&lt;br /&gt;
							&amp;quot;StringifiedValues&amp;quot;: [&lt;br /&gt;
								&amp;quot;0Mary Wilson&amp;quot;&lt;br /&gt;
							]&lt;br /&gt;
						}&lt;br /&gt;
					]&lt;br /&gt;
				}&lt;br /&gt;
			]&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Function to get filter id:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||FilterById&lt;br /&gt;
||&lt;br /&gt;
* Filter id (Integer)&lt;br /&gt;
||&lt;br /&gt;
Returns Filter object corresponding to the provided filter id.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Model==&lt;br /&gt;
Notes:&lt;br /&gt;
* For in-memory models that are offline, the object counts represent the situation when the model was last time online (loaded into the memory). &#039;&#039;null&#039;&#039; is returned if the model has never been loaded into the memory.&lt;br /&gt;
* If [[Case_Level_Permissions|Case permissions]] are used for the model, and user doesn&#039;t have &#039;&#039;&#039;GenericWrite&#039;&#039;&#039; permission for the model, &#039;&#039;null&#039;&#039; is returned for data security reasons. Users that have the &#039;&#039;&#039;GenericWrite&#039;&#039;&#039; permission, see null when the model is offline, and when online, they see counts where the case level permissions settings are applied.&lt;br /&gt;
* Properties &#039;&#039;CaseAttributes&#039;&#039;, &#039;&#039;EventAttributes&#039;&#039; and &#039;&#039;Eventlog&#039;&#039; 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.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Model properties&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||AllFilters (Filter*)&lt;br /&gt;
||Returns an array of all [[#Filter|filters]] in the model where the user has access to. In addition to the &#039;&#039;Filters&#039;&#039; property, &#039;&#039;AllFilters&#039;&#039; also returns private filters of other users. The &#039;&#039;ManageViews&#039;&#039; permission is required to use this property.&lt;br /&gt;
|-&lt;br /&gt;
||Calendars (BusinessCalendar*)&lt;br /&gt;
||&lt;br /&gt;
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.&lt;br /&gt;
|-&lt;br /&gt;
||CaseAttributes (AttributeType*)&lt;br /&gt;
||[[#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&#039;s loaded when this property is used.&lt;br /&gt;
|-&lt;br /&gt;
||CasesDatatable (Datatable)&lt;br /&gt;
||Returns the Datatable the model uses as a datasource for cases. Returns &#039;&#039;null&#039;&#039; if the cases Datatable is not defined or if model uses other than the Datatable datasource.&lt;br /&gt;
|-&lt;br /&gt;
||Configuration (Dictionary)&lt;br /&gt;
||Returns the Model configuration as dictionary. Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(123).Configuration.DataSource.Events.DataTableName&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||ConfigurationJson (String)&lt;br /&gt;
||Returns the Model configuration as JSON string.&lt;br /&gt;
|-&lt;br /&gt;
||CreatedBy (User)&lt;br /&gt;
||User who created the model.&lt;br /&gt;
|-&lt;br /&gt;
||CreatedDate (DateTime)&lt;br /&gt;
||Timestamp when the model was created.&lt;br /&gt;
|-&lt;br /&gt;
||DefaultCalendar (BusinessCalendar)&lt;br /&gt;
||Returns the default [[Business_Calendar|business calendar]] of the Model. Returns &#039;&#039;null&#039;&#039;, 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.&lt;br /&gt;
|-&lt;br /&gt;
||DefaultFilter (Filter)&lt;br /&gt;
||Default filter of the model. Returns &#039;&#039;null&#039;&#039; if the model does not have a default filter.&lt;br /&gt;
|-&lt;br /&gt;
||DefaultFilterId (Integer)&lt;br /&gt;
||Default filter id of the model. Returns &#039;&#039;null&#039;&#039; if the model does not have a default filter.&lt;br /&gt;
|-&lt;br /&gt;
||Description (String)&lt;br /&gt;
||Model description. The model description may contain line breaks.&lt;br /&gt;
|-&lt;br /&gt;
||DeletedDate (DateTime)&lt;br /&gt;
||Timestamp when Model was deleted (moved to the recycle bin).&lt;br /&gt;
|-&lt;br /&gt;
||DeletedBy (User)&lt;br /&gt;
||User how deleted the Model.&lt;br /&gt;
|-&lt;br /&gt;
||Diagrams (Diagram*)&lt;br /&gt;
||Returns an array of all [[Diagram_in_Expression_Language|diagrams]] in the model.&lt;br /&gt;
|-&lt;br /&gt;
||EstimatedMemory (Integer)&lt;br /&gt;
||Returns an estimation of how much memory in bytes the model requires.&lt;br /&gt;
|-&lt;br /&gt;
||EventsDatatable (Datatable)&lt;br /&gt;
||Returns the Datatable the model uses as a datasource for events. Returns &#039;&#039;null&#039;&#039; if the events Datatable is not defined or if model uses other than the Datatable datasource.&lt;br /&gt;
|-&lt;br /&gt;
||EventAttributes (AttributeType*)&lt;br /&gt;
||[[#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&#039;s loaded when this property is used.&lt;br /&gt;
|-&lt;br /&gt;
||EventLog (EventLog)&lt;br /&gt;
||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&#039;s loaded when this property is used.&lt;br /&gt;
|-&lt;br /&gt;
||Filters (Filter*)&lt;br /&gt;
||Returns an array of all public [[#Filter|filters]], the default filter (if any) and the user&#039;s own private filters in the model. Note that the other users&#039;s private filters are not returned even for administrators.&lt;br /&gt;
|-&lt;br /&gt;
||Id (Integer)&lt;br /&gt;
||Model Id. Model Id is generated by QPR ProcessAnalyzer when the model is created.&lt;br /&gt;
|-&lt;br /&gt;
||IsValidInMemoryModel (boolean)&lt;br /&gt;
||Returns &#039;&#039;true&#039;&#039; if all the following conditions are met:&lt;br /&gt;
* CheckModelValidity function doesn&#039;t return any issues (because invalid models are assumed to be Snowflake models).&lt;br /&gt;
* Model is not an object-centric model.&lt;br /&gt;
* Data source of the model is &#039;&#039;ODBC&#039;&#039; or &#039;&#039;Expression&#039;&#039;, or the referred datatable has &#039;&#039;DataSourceType&#039;&#039; either &#039;&#039;Local&#039;&#039; or &#039;&#039;SqlServer&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedBy (User)&lt;br /&gt;
||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.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedDate (DateTime)&lt;br /&gt;
||Timestamp when the model was modified the last time.&lt;br /&gt;
|-&lt;br /&gt;
||Name (String)&lt;br /&gt;
||Model name.&lt;br /&gt;
|-&lt;br /&gt;
||NCache (Integer)&lt;br /&gt;
||Number of objects related to the model when the model is loaded into the memory.&lt;br /&gt;
|-&lt;br /&gt;
||NCaseAttributes (Integer)&lt;br /&gt;
||Number of [[#AttributeType|CaseAttributes]] in model. Works only for in-memory models.&lt;br /&gt;
|-&lt;br /&gt;
||NCases (Integer)&lt;br /&gt;
||Number of [[#Case|Cases]] in the model. Works only for in-memory models.&lt;br /&gt;
|-&lt;br /&gt;
||NEventAttributes (Integer)&lt;br /&gt;
||Number of [[#AttributeType|EventAttributes]] in model. Works only for in-memory models.&lt;br /&gt;
|-&lt;br /&gt;
||NEvents (Integer)&lt;br /&gt;
||Number of [[#Event|Events]] in model. Works only for in-memory models.&lt;br /&gt;
|-&lt;br /&gt;
||NEventTypes (Integer)&lt;br /&gt;
||Number of [[#EventType|EventTypes]] in the model. Works only for in-memory models.&lt;br /&gt;
|-&lt;br /&gt;
||Project (Project)&lt;br /&gt;
||[[#Project|Project]] where the model belongs to.&lt;br /&gt;
|-&lt;br /&gt;
||ProjectId (Integer)&lt;br /&gt;
||[[#Project|Project]] id where the model belongs to.&lt;br /&gt;
|-&lt;br /&gt;
||Status (String)&lt;br /&gt;
||&lt;br /&gt;
Memory availability status of the model. There are the following statuses:&lt;br /&gt;
* &#039;&#039;&#039;Loading&#039;&#039;&#039;: The model is currently loading into the memory. When the loading is ready, the status changes to &#039;&#039;online&#039;&#039;. If the loading fails, the status changes to &#039;&#039;offline&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Offline&#039;&#039;&#039;: 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).&lt;br /&gt;
* &#039;&#039;&#039;Online&#039;&#039;&#039;: The model is in the memory and ready for analysis calculation. If the model is dropped from the memory, its status changes to &#039;&#039;offline&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
||UsedDatatables (Datatable*)&lt;br /&gt;
||Returns all datatables the model uses as a datasource.&lt;br /&gt;
&lt;br /&gt;
Example: List datatables used by a model:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
StringJoin(&amp;quot;, &amp;quot;, OrderByValue(ModelById(1).UsedDataTables.Name))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Model functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||CalendarByName (BusinessCalendar)&lt;br /&gt;
||&lt;br /&gt;
name (String)&lt;br /&gt;
||&lt;br /&gt;
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 &#039;&#039;null&#039;&#039;, if a calendar with the provided name is not stored to the model.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(123).CalendarByName(&amp;quot;MyCalendar&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||CreateDiagram (Diagram)&lt;br /&gt;
||Parameters dictionary&lt;br /&gt;
||&lt;br /&gt;
Creates a [[Diagram_in_Expression_Language|diagram]] to the model. Parameters is a dictionary containing diagram properties. Following properties are available:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039; (string): Diagram name that distinguishes diagrams in a model.&lt;br /&gt;
* &#039;&#039;&#039;Description&#039;&#039;&#039; (string): Diagram description text.&lt;br /&gt;
* &#039;&#039;&#039;Content&#039;&#039;&#039; (dictionary): Diagram content as dictionary.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(1)&lt;br /&gt;
  .CreateDiagram(#{&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;My diagram&amp;quot;,&lt;br /&gt;
    &amp;quot;Description&amp;quot;: &amp;quot;This is my new diagram&amp;quot;,&lt;br /&gt;
    &amp;quot;Content&amp;quot;: #{ ... },&lt;br /&gt;
  })&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||CreateFilter (Filter)&lt;br /&gt;
||Parameters dictionary&lt;br /&gt;
||Creates a filter to a model. Requires &#039;&#039;GenericWrite&#039;&#039; permission for the project and global &#039;&#039;CreateModel&#039;&#039; permission. If a filter with that name already exists in the model, an exception is thrown.&lt;br /&gt;
The parameters dictionary may have the following properties:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039;: Name of the filter. This property is mandatory.&lt;br /&gt;
* &#039;&#039;&#039;Description&#039;&#039;&#039;: Description of the filter. This property is optional.&lt;br /&gt;
* &#039;&#039;&#039;Rules&#039;&#039;&#039;: Filter rules for the filter defined as a dictionary according to the [[Filtering_in_QPR_ProcessAnalyzer_Queries|filter json format]]. This property is mandatory.&lt;br /&gt;
* &#039;&#039;&#039;PublishMode&#039;&#039;&#039;: Publish mode of the filter which is one of the following: &#039;&#039;Private&#039;&#039;, &#039;&#039;Public&#039;&#039; or &#039;&#039;Default&#039;&#039;. This property is optional, and the default value is &#039;&#039;Private&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let newFilter = modelById(1).CreateFilter(#{    &lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My Filter&amp;quot;,&lt;br /&gt;
  &amp;quot;Rules&amp;quot;: #{&lt;br /&gt;
    &amp;quot;Items&amp;quot;: [#{&lt;br /&gt;
      &amp;quot;Type&amp;quot;: &amp;quot;IncludeCases&amp;quot;,&lt;br /&gt;
      &amp;quot;Items&amp;quot;: [#{&lt;br /&gt;
        &amp;quot;Type&amp;quot;: &amp;quot;CaseAttributeValue&amp;quot;,&lt;br /&gt;
        &amp;quot;Attribute&amp;quot;: &amp;quot;Account Manager&amp;quot;,&lt;br /&gt;
        &amp;quot;StringifiedValues&amp;quot;: [ &amp;quot;0Robert Miller&amp;quot; ]&lt;br /&gt;
      }]&lt;br /&gt;
    }]&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;PublishMode&amp;quot;: &amp;quot;Public&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||DeletePermanently&lt;br /&gt;
||(none)&lt;br /&gt;
||Deletes the Model permanently. The model doesn&#039;t need to be in the recycle bin to be able to delete it permanently.&lt;br /&gt;
|-&lt;br /&gt;
||Modify (Model)&lt;br /&gt;
||Dictionary&lt;br /&gt;
||&lt;br /&gt;
Modifies model properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: &#039;&#039;Name&#039;&#039;, &#039;&#039;Description&#039;&#039;, &#039;&#039;ProjectId&#039;&#039;, and &#039;&#039;Configuration&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The function returns the updated model object. Requires the &#039;&#039;GenericWrite&#039;&#039; permission for the project and the global &#039;&#039;CreateModel&#039;&#039; permission.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(1)&lt;br /&gt;
	.Modify(#{&lt;br /&gt;
		&amp;quot;Name&amp;quot;: &amp;quot;My model&amp;quot;,&lt;br /&gt;
		&amp;quot;Description&amp;quot;: &amp;quot;My description&amp;quot;,&lt;br /&gt;
		&amp;quot;ProjectId&amp;quot;: 2,&lt;br /&gt;
		&amp;quot;Configuration&amp;quot;: #{&lt;br /&gt;
			&amp;quot;DataSource&amp;quot;: #{&lt;br /&gt;
				&amp;quot;Cases&amp;quot;: #{&lt;br /&gt;
					&amp;quot;DataSourceType&amp;quot;: &amp;quot;datatable&amp;quot;,&lt;br /&gt;
					&amp;quot;DataTableName&amp;quot;: &amp;quot;My cases datatable&amp;quot;,&lt;br /&gt;
					&amp;quot;Columns&amp;quot;: #{&lt;br /&gt;
						&amp;quot;CaseId&amp;quot;: &amp;quot;Case Name&amp;quot;&lt;br /&gt;
					}&lt;br /&gt;
				},&lt;br /&gt;
				&amp;quot;Events&amp;quot;: #{&lt;br /&gt;
					&amp;quot;DataSourceType&amp;quot;: &amp;quot;datatable&amp;quot;,&lt;br /&gt;
					&amp;quot;DataTableName&amp;quot;: &amp;quot;My events datatable&amp;quot;,&lt;br /&gt;
					&amp;quot;Columns&amp;quot;: #{&lt;br /&gt;
						&amp;quot;CaseId&amp;quot;: &amp;quot;Case Name&amp;quot;,&lt;br /&gt;
						&amp;quot;EventType&amp;quot;: &amp;quot;Event Type&amp;quot;,&lt;br /&gt;
						&amp;quot;Timestamp&amp;quot;: &amp;quot;Start Time&amp;quot;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||ResetModelCache&lt;br /&gt;
||(none)&lt;br /&gt;
||&lt;br /&gt;
Synchronously clears all cached model data. For a Snowflake model, deletes all cache tables related to the model from Snowflake. For an in-memory model, drops the model from the memory and also drops all other model related caches from the memory. &lt;br /&gt;
|-&lt;br /&gt;
||ResetPreprocessings&lt;br /&gt;
||(none)&lt;br /&gt;
||&lt;br /&gt;
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.&lt;br /&gt;
|-&lt;br /&gt;
||Restore&lt;br /&gt;
||(none)&lt;br /&gt;
||Restores the Model from the recycle bin back to the original location.&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;ToSqlDataFrame&amp;quot;&amp;gt;ToSqlDataFrame&amp;lt;/span&amp;gt;&lt;br /&gt;
||In-memory dataframe&lt;br /&gt;
||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.&lt;br /&gt;
&lt;br /&gt;
Example: Select matching cases from events data using in-memory dataframe:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let model = ModelById(1);&lt;br /&gt;
let dfEvents = model.EventsDatatable.SqlDataFrame;&lt;br /&gt;
let inMemoryDf = ToDataFrame(&lt;br /&gt;
  [[&amp;quot;1&amp;quot;], [&amp;quot;2&amp;quot;], [&amp;quot;3&amp;quot;]],&lt;br /&gt;
  [#{&amp;quot;Name&amp;quot;: &amp;quot;id&amp;quot;, &amp;quot;DataType&amp;quot;: &amp;quot;String&amp;quot;}]&lt;br /&gt;
);&lt;br /&gt;
model.ToSqlDataFrame(inMemoryDf)&lt;br /&gt;
  .Join(dfEvents, [&amp;quot;id&amp;quot;: &amp;quot;CaseId&amp;quot;])&lt;br /&gt;
  .SelectDistinct([&amp;quot;CaseId&amp;quot;])&lt;br /&gt;
  .Collect();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;TriggerNotifications&amp;quot;&amp;gt;TriggerNotifications&amp;lt;/span&amp;gt; (Boolean)&lt;br /&gt;
||Notification names (String*)&lt;br /&gt;
||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.&lt;br /&gt;
&lt;br /&gt;
The function return &#039;&#039;true&#039;&#039; if any notification were triggered, otherwise &#039;&#039;false&#039;&#039;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(123).TriggerNotifications([&amp;quot;Notification 1&amp;quot;, &amp;quot;Notification 2&amp;quot;]);&lt;br /&gt;
Triggers notifications Notification 1 and Notification 2 in model id 123.&lt;br /&gt;
&lt;br /&gt;
ModelById(123).TriggerNotifications();&lt;br /&gt;
Triggers all notifications in model id 123.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;CheckModelValidity&amp;quot;&amp;gt;CheckModelValidity&amp;lt;/span&amp;gt; (Object array)&lt;br /&gt;
||CheckData field in dictionary&lt;br /&gt;
||Checks the model validity and returns found issues. The returned data is an array of objects where each object represents one validity error and contains the following properties:&lt;br /&gt;
* &#039;&#039;&#039;IssueType&#039;&#039;&#039; (String): Specifies the issue type.&lt;br /&gt;
* &#039;&#039;&#039;ContextType&#039;&#039;&#039; (String): Context in which the issue was found, and it can be &#039;&#039;&#039;EventDataSource&#039;&#039;&#039;, &#039;&#039;&#039;CaseDataSource&#039;&#039;&#039;, &#039;&#039;&#039;OcelDataSource&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Details&#039;&#039;&#039; (Dictionary): Additional details which depend on the type of the issue.&lt;br /&gt;
&lt;br /&gt;
There are two types of checks available (based on whether the &#039;&#039;&#039;CheckData&#039;&#039;&#039; parameter is defined):&lt;br /&gt;
* &#039;&#039;Lightweight check&#039;&#039;: The check is based on only the configuration data stored in QPR ProcessAnalyzer. This check is very quick and does not require running queries in datasource (e.g., in Snowflake).&lt;br /&gt;
* &#039;&#039;Full check&#039;&#039;: The check is comprehensive and it&#039;s able to detect any validity issues the model may have. The full check requires running queries to the actual data which makes the check slower, and in case of Snowflake, it uses the Snowflake warehouse to run the queries.&lt;br /&gt;
&lt;br /&gt;
The lightweight check is performed automatically by the [[QPR_ProcessAnalyzer_Project_Workspace|Workspace]], so if there are any validity issues that the lightweight check can detect, the Workspace notifies about them immediately. If there are any problems with the model calculation results, it might be a good idea to run the full validity check to confirm whether the problems are due to the model being invalid.&lt;br /&gt;
&lt;br /&gt;
Example: Lightweight check:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ToJson(ModelById(1).CheckModelValidity())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Full check:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ToJson(ModelById(1).CheckModelValidity(#{ &amp;quot;CheckData&amp;quot;: true }))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||CortexAgentsQuery&lt;br /&gt;
||&lt;br /&gt;
||Creates a Snowflake Cortex semantic model (see &#039;&#039;GetSemanticModel&#039;&#039; function) for the process mining model and makes a natural language query on it using Snowflake Cortex Agents. More information: https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents. &lt;br /&gt;
&lt;br /&gt;
There are the following parameters:&lt;br /&gt;
# &#039;&#039;&#039;Parameters&#039;&#039;&#039;: Dictionary parameters given to the Cortex Agents REST API query (https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-rest-api). There is a special handling for the following parameters:&lt;br /&gt;
#* &#039;&#039;&#039;model&#039;&#039;&#039;: If not defined, uses the default Cortex Agents model name configured into the database, or if that is not defined, uses &amp;quot;llama3.1-70b&amp;quot;.&lt;br /&gt;
#* &#039;&#039;&#039;_tools&#039;&#039;&#039;: Additional tool_spec of type &amp;quot;cortex_analyst_text_to_sql&amp;quot; will be added to this value with a reference to the generated semantic model.&lt;br /&gt;
#* &#039;&#039;&#039;_tool_resources&#039;&#039;&#039;: Generated semantic model is added as an additional resource.&lt;br /&gt;
# &#039;&#039;&#039;Filter configuration&#039;&#039;&#039;: Can be a string containing filter JSON or a dictionary containing the filter configuration. The semantic model is created for the filtered eventlog. If not defined, the entire model eventlog will be used.&lt;br /&gt;
# &#039;&#039;&#039;Event column role nappings&#039;&#039;&#039;: Mappings to apply for event columns. If not defined, default column mappings are used.&lt;br /&gt;
# &#039;&#039;&#039;Case column role mappings&#039;&#039;&#039;: Mappings to apply for case columns. If not defined, default column mappings are used.&lt;br /&gt;
&lt;br /&gt;
The function returns a dictionary with the following keys:&lt;br /&gt;
# &#039;&#039;&#039;Response&#039;&#039;&#039;: Actual response as a dictionary returned by the Cortex Agents.&lt;br /&gt;
# &#039;&#039;&#039;Response items&#039;&#039;&#039;: Contains processed response consisting of an array of objects having the following properties:&lt;br /&gt;
#* &#039;&#039;&#039;Text&#039;&#039;&#039;: Textual response.&lt;br /&gt;
#* &#039;&#039;&#039;Sql&#039;&#039;&#039;: Response SQL query string. Not mandatory.&lt;br /&gt;
#* &#039;&#039;&#039;SqlDataFrame&#039;&#039;&#039;: SqlDataFrame created for the SQL query in the Sql property. Only present if Sql is present.&lt;br /&gt;
|-&lt;br /&gt;
||GetSemanticModel&lt;br /&gt;
||&lt;br /&gt;
||Creates a Snowflake Cortex Analyst semantic model for the process mining model and returns it as a dictionary. More information: https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-analyst/semantic-model-spec.&lt;br /&gt;
&lt;br /&gt;
There are the following parameters:&lt;br /&gt;
# &#039;&#039;&#039;Filter configuration&#039;&#039;&#039;: Can be a string containing filter JSON or a dictionary containing the filter. The semantic model is created for the filtered eventlog. If not defined, the entire model eventlog will be used.&lt;br /&gt;
# &#039;&#039;&#039;Event column role mappings&#039;&#039;&#039;: Mappings to apply for event columns. If not defined, default column mappings are used.&lt;br /&gt;
# &#039;&#039;&#039;Case column role mappings&#039;&#039;&#039;: Mappings to apply for case columns. If not defined, default column mappings are used.&lt;br /&gt;
&lt;br /&gt;
Examples: Returns a semantic model without any filtering applied.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(1).GetSemanticModel();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Function to get Model by model id:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||ModelById&lt;br /&gt;
||&lt;br /&gt;
* Model id (Integer)&lt;br /&gt;
||&lt;br /&gt;
Returns [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Model|Model]] object corresponding to the provided model id.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Object-centric model==&lt;br /&gt;
Object-centric models additionally have the following properties and functions.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Object-Centric model properties&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||IsOcelModel (boolean)&lt;br /&gt;
||Returns &#039;&#039;true&#039;&#039; when the model is an OCEL model.&lt;br /&gt;
|-&lt;br /&gt;
||OcelEvents (Datatable)&lt;br /&gt;
||Datatable containing event data for the OCEL model. Value &#039;&#039;null&#039;&#039; is returned if event datatable has not been configured for the model. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
|-&lt;br /&gt;
||OcelEventToObject (Datatable)&lt;br /&gt;
||Datatable containing event-to-object relations data for the OCEL model. Value &#039;&#039;null&#039;&#039; is returned if event-to-object relation datatable has not been configured for the model. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
|-&lt;br /&gt;
||OcelEventTypes (Dictionary)&lt;br /&gt;
||Returns a dictionary containing event type names as keys and the datatables holding event data for that event type in this OCEL model as value. An empty array is returned if event types datatable has not been configured for the model. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
&lt;br /&gt;
Example: Get datatable for &amp;quot;Create order&amp;quot; events:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(1).OcelEventTypes.Get(&amp;quot;Create order&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||OcelObjects (Datatable)&lt;br /&gt;
||Datatable containing objects data for the OCEL model. Value &#039;&#039;null&#039;&#039; is returned if object datatable has not been configured for the model. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
|-&lt;br /&gt;
||OcelObjectToObject (Datatable)&lt;br /&gt;
||Datatable containing object-to-object relations data for the OCEL model. Value &#039;&#039;null&#039;&#039; is returned if object-to-object relation datatable has not been configured for the model. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
|-&lt;br /&gt;
||OcelObjectTypes (Dictionary)&lt;br /&gt;
||Returns a dictionary containing object type names as keys and the datatables holding data for that object type in this OCEL model as value. An empty array is returned if object types have not been configured for this model. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Object-centric model functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||OcelEventType&lt;br /&gt;
||Event type name (String)&lt;br /&gt;
||&lt;br /&gt;
Datatable containing event type attributes of given event type in this OCEL model. Value &#039;&#039;null&#039;&#039; is returned if a datatable is not configured for this model for given event type. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
&lt;br /&gt;
Example: Get datatable for &amp;quot;Create order&amp;quot; events:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(1).OcelEventType(&amp;quot;Create order&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||OcelObjectType&lt;br /&gt;
||Object type name (String)&lt;br /&gt;
||Datatable containing object type attributes of given object type in this OCEL model. Value &#039;&#039;null&#039;&#039; is returned if a datatable is not configured for this model for given object type. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
|-&lt;br /&gt;
||OcelObjectTypeConfiguration&lt;br /&gt;
||Object type name (String)&lt;br /&gt;
||Returns a matching configuration object with the following properties:&amp;lt;br&amp;gt;&lt;br /&gt;
# Datatable: name of the datatable&lt;br /&gt;
# Unit: unit label for object type items&lt;br /&gt;
&#039;&#039;Null&#039;&#039; is returned if the given object type is not found in the model configuration.  &lt;br /&gt;
If the object type name is not specified or &#039;&#039;null&#039;&#039;, the function returns a dictionary containing configurations for all defined object types.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Project properties&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||CreatedBy (User)&lt;br /&gt;
||User who created the Project.&lt;br /&gt;
|-&lt;br /&gt;
||CreatedDate (DateTime)&lt;br /&gt;
||Timestamp when the Project was created.&lt;br /&gt;
|-&lt;br /&gt;
||Configuration (Dictionary)&lt;br /&gt;
||Project settings as Dictionary object. See example in &#039;&#039;ConfigurationJson&#039;&#039; property.&lt;br /&gt;
|-&lt;br /&gt;
||ConfigurationJson (String)&lt;br /&gt;
||Project settings as json string.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;DefaultLocationInDataSource&amp;quot;: {&lt;br /&gt;
    &amp;quot;Database&amp;quot;: &amp;quot;MyDatabase&amp;quot;,&lt;br /&gt;
    &amp;quot;Schema&amp;quot;: &amp;quot;MySchema&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;ConnectionStringKeys&amp;quot;: {&lt;br /&gt;
    &amp;quot;Snowflake&amp;quot;: &amp;quot;MyKey1&amp;quot;,&lt;br /&gt;
    &amp;quot;SqlServer&amp;quot;: &amp;quot;MyKey2&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||Dashboards (Dashboard*)&lt;br /&gt;
||Returns all [[Dashboard_in_Expression_Language|dashboards]] in the project.&lt;br /&gt;
|-&lt;br /&gt;
||Datatables (Datatable*)&lt;br /&gt;
||Returns all Datatables in the project.&lt;br /&gt;
|-&lt;br /&gt;
||DeletedDate (DateTime)&lt;br /&gt;
||Timestamp when the Project was deleted (moved to the recycle bin).&lt;br /&gt;
|-&lt;br /&gt;
||Description (String)&lt;br /&gt;
||Project description. The project description may contain line breaks.&lt;br /&gt;
|-&lt;br /&gt;
||DeletedBy (User)&lt;br /&gt;
||User who deleted the Project (moved to the recycle bin).&lt;br /&gt;
|-&lt;br /&gt;
||Id (Integer)&lt;br /&gt;
||Id of the Project.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedBy (User)&lt;br /&gt;
||User who last modified the Project.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedDate (DateTime)&lt;br /&gt;
||Timestamp when the Project was last modified (refers to the project name, description and parent, not the contents of the project).&lt;br /&gt;
|-&lt;br /&gt;
||Name (String)&lt;br /&gt;
||Name of the Project.&lt;br /&gt;
|-&lt;br /&gt;
||Models (Model*)&lt;br /&gt;
||Models that are in the Project.&lt;br /&gt;
|-&lt;br /&gt;
||Parent (Project)&lt;br /&gt;
||Parent project, i.e. a Project where the Project is located in the hierarchy of Projects. Returns &#039;&#039;null&#039;&#039; for root level Projects. Throws an error if user doesn&#039;t have access to the parent project.&lt;br /&gt;
|-&lt;br /&gt;
||ParentProjectId (Integer)&lt;br /&gt;
||Parent project id. Returns &#039;&#039;null&#039;&#039; for root level Projects. The parent project id is returned even if user doesn&#039;t have access to the parent project.&lt;br /&gt;
|-&lt;br /&gt;
||Scripts (Script*)&lt;br /&gt;
||Scripts that are in the Project.&lt;br /&gt;
|-&lt;br /&gt;
||Secrets (Dictionary*)&lt;br /&gt;
||Returns array of all [[Storing_Secrets_for_Scripts|secrets]] in the project as Dictionary with following properties:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039; (string): Name of the secret.&lt;br /&gt;
* &#039;&#039;&#039;Type&#039;&#039;&#039; (string): Type of the secret which is one of the following: &amp;quot;odbc&amp;quot;, &amp;quot;sap&amp;quot;, &amp;quot;salesforce&amp;quot;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Project functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||CreateDashboard (Dashboard)&lt;br /&gt;
||Parameters dictionary&lt;br /&gt;
||Creates a dashboard to the project. &#039;&#039;EditDashboards&#039;&#039; permission to the project is required. The parameter is dictionary with following supported dashboard properties:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039; (String): Name of the dashboard.&lt;br /&gt;
* &#039;&#039;&#039;Identifier&#039;&#039;&#039; (String): Identifier of the dashboard.&lt;br /&gt;
* &#039;&#039;&#039;Description&#039;&#039;&#039; (String): Description of the dashboard.&lt;br /&gt;
* &#039;&#039;&#039;Content&#039;&#039;&#039; (Dictionary): Content of the dashboard.&lt;br /&gt;
&lt;br /&gt;
Example: Create empty dashboard.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1)&lt;br /&gt;
  .CreateDashboard(#{&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;My dashboard&amp;quot;,&lt;br /&gt;
    &amp;quot;Identifier&amp;quot;: &amp;quot;MyDashboard&amp;quot;&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Create dashboard with a chart.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1)&lt;br /&gt;
  .CreateDashboard(#{&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;My dashboard&amp;quot;,&lt;br /&gt;
    &amp;quot;Content&amp;quot;: #{&lt;br /&gt;
      &amp;quot;version&amp;quot;: 4,&lt;br /&gt;
      &amp;quot;typeName&amp;quot;: &amp;quot;View&amp;quot;,&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;My dashboard&amp;quot;,&lt;br /&gt;
      &amp;quot;subElements&amp;quot;: [&lt;br /&gt;
        #{&lt;br /&gt;
          &amp;quot;position&amp;quot;: #{&lt;br /&gt;
            &amp;quot;x&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;y&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;width&amp;quot;: 0.5,&lt;br /&gt;
            &amp;quot;height&amp;quot;: 0.5,&lt;br /&gt;
            &amp;quot;zOrder&amp;quot;: 0&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;element&amp;quot;: #{&lt;br /&gt;
            &amp;quot;typeName&amp;quot;: &amp;quot;Chart&amp;quot;,&lt;br /&gt;
            &amp;quot;configuration&amp;quot;: #{&lt;br /&gt;
              &amp;quot;root&amp;quot;: #{&lt;br /&gt;
                &amp;quot;expressionType&amp;quot;: &amp;quot;Cases&amp;quot;,&lt;br /&gt;
                &amp;quot;expressionParameters&amp;quot;: #{}&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;measures&amp;quot;: [#{&lt;br /&gt;
                &amp;quot;expressionType&amp;quot;: &amp;quot;Count&amp;quot;,&lt;br /&gt;
                &amp;quot;expressionParameters&amp;quot;: #{}&lt;br /&gt;
              }]&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;CreateDatatable&amp;quot;&amp;gt;CreateDatatable&amp;lt;/span&amp;gt; (Datatable)&lt;br /&gt;
||&lt;br /&gt;
* Parameters dictionary&lt;br /&gt;
||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:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039; (string): Name of the datatable. This parameter is mandatory.&lt;br /&gt;
* &#039;&#039;&#039;Description&#039;&#039;&#039; (string): Description for the datatable. This parameter is optional.&lt;br /&gt;
* &#039;&#039;&#039;NameInDataSource&#039;&#039;&#039; (string): Table name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.&lt;br /&gt;
* &#039;&#039;&#039;SchemaNameInDataSource&#039;&#039;&#039; (string): Schema name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.&lt;br /&gt;
* &#039;&#039;&#039;DatabaseNameInDataSource&#039;&#039;&#039; (string): Database name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.&lt;br /&gt;
* &#039;&#039;&#039;Type&#039;&#039;&#039; (string): Defines where the data for the datatable is located. Available values are &#039;&#039;&#039;Snowflake&#039;&#039;&#039;, &#039;&#039;&#039;SqlServer&#039;&#039;&#039;, and &#039;&#039;&#039;Local&#039;&#039;&#039;.  This parameter is optional and default value is defined by the [[PA_Configuration_database_table#General_Settings|DefaultDataSource]] setting.&lt;br /&gt;
* &#039;&#039;&#039;Connection&#039;&#039;&#039;: Connection object for the datatable. This parameter is optional.&lt;br /&gt;
&lt;br /&gt;
Example: Create a new datatable:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).CreateDatatable(#{&lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My datatable&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Create Snowflake datatable linked to a custom table:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).CreateDatatable(#{&lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My datatable&amp;quot;,&lt;br /&gt;
  &amp;quot;Description&amp;quot;: &amp;quot;My description&amp;quot;,&lt;br /&gt;
  &amp;quot;NameInDataSource&amp;quot;: &amp;quot;MyTable&amp;quot;,&lt;br /&gt;
  &amp;quot;SchemaNameInDataSource&amp;quot;: &amp;quot;MySchema&amp;quot;,&lt;br /&gt;
  &amp;quot;DatabaseNameInDataSource&amp;quot;: &amp;quot;MyDatabase&amp;quot;,&lt;br /&gt;
  &amp;quot;Type&amp;quot;: &amp;quot;Snowflake&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Create Snowflake datatable where connection string is stored as a [[Storing_Secrets_for_Scripts|secret]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).CreateDatatable(#{&lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My datatable&amp;quot;,&lt;br /&gt;
  &amp;quot;Type&amp;quot;: &amp;quot;Snowflake&amp;quot;,&lt;br /&gt;
  &amp;quot;Connection&amp;quot;: ProjectById(1).CreateSnowflakeConnection(#{ &amp;quot;OdbcConnectionStringKey&amp;quot;: &amp;quot;MyKey&amp;quot; })&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||CreateMeaConnection&lt;br /&gt;
||&lt;br /&gt;
||&lt;br /&gt;
Creates an object representing connection to QPR MEA (QPR Suite) Web Service. The parameter is a dictionary supporting parameter &#039;&#039;&#039;ConnectionStringKey&#039;&#039;&#039; which defines the secret name for the MEA connection string.&lt;br /&gt;
&lt;br /&gt;
Example to create the connection:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let connection = ProjectByName(&amp;quot;MyProject&amp;quot;).CreateMeaConnection( #{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MyMeaConnection&amp;quot;} );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example [[QPR_MEA_Integration|to use the connection]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let results = connection.QueryObjects(&amp;quot;[PG.785401983.683494101]&amp;quot;, &amp;quot;name, typename&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||CreateModel (Model)&lt;br /&gt;
||&lt;br /&gt;
* Parameters dictionary&lt;br /&gt;
||Creates a model to a project. Requires &#039;&#039;GenericWrite&#039;&#039; permission for the Project and global &#039;&#039;CreateModel&#039;&#039; permission. If a model with that name already exists, an exception is thrown.&lt;br /&gt;
&lt;br /&gt;
Parameters dictionary has the following properties:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039;: Name of the model. This property is mandatory.&lt;br /&gt;
* &#039;&#039;&#039;Description&#039;&#039;&#039;: Description of the model. This property is optional.&lt;br /&gt;
* &#039;&#039;&#039;Configuration&#039;&#039;&#039;: Configuration dictionary for the model. This property is technically optional, but a working model requires at least datasource settings to be defined.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).CreateModel(#{    &lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My model&amp;quot;,&lt;br /&gt;
  &amp;quot;Description&amp;quot;: &amp;quot;My description&amp;quot;,&lt;br /&gt;
  &amp;quot;Configuration&amp;quot;: #{&lt;br /&gt;
    &amp;quot;DataSource&amp;quot;: #{&lt;br /&gt;
      &amp;quot;Cases&amp;quot;: #{&lt;br /&gt;
        &amp;quot;DataSourceType&amp;quot;: &amp;quot;datatable&amp;quot;,&lt;br /&gt;
        &amp;quot;DataTableName&amp;quot;: &amp;quot;My cases datatable&amp;quot;,&lt;br /&gt;
        &amp;quot;Columns&amp;quot;: #{&lt;br /&gt;
          &amp;quot;CaseId&amp;quot;: &amp;quot;Case Name&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;Events&amp;quot;: #{&lt;br /&gt;
        &amp;quot;DataSourceType&amp;quot;: &amp;quot;datatable&amp;quot;,&lt;br /&gt;
        &amp;quot;DataTableName&amp;quot;: &amp;quot;My events datatable&amp;quot;,&lt;br /&gt;
        &amp;quot;Columns&amp;quot;: #{&lt;br /&gt;
           &amp;quot;CaseId&amp;quot;: &amp;quot;Case Name&amp;quot;,&lt;br /&gt;
           &amp;quot;EventType&amp;quot;: &amp;quot;Event Type&amp;quot;,&lt;br /&gt;
           &amp;quot;Timestamp&amp;quot;: &amp;quot;Start Time&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;CreateProject&amp;quot;&amp;gt;CreateProject&amp;lt;/span&amp;gt; (Project)&lt;br /&gt;
||&lt;br /&gt;
* Parameters dictionary&lt;br /&gt;
||Create a project as a sub-project of the context project. Returns the created project. Requires the &#039;&#039;ManageProject&#039;&#039; permission.&lt;br /&gt;
&lt;br /&gt;
Parameters dictionary has the following properties:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039; (string): Name of the project. This property is required.&lt;br /&gt;
* &#039;&#039;&#039;Description&#039;&#039;&#039; (string): Description of the project.&lt;br /&gt;
* &#039;&#039;&#039;ParentProjectId&#039;&#039;&#039; (integer): Id of the parent project where the new project is created. This parameter is usually not needed because the parent project is the context project. The CreateProject function is also available in the generic context where the &#039;&#039;ParentProjectId&#039;&#039; parameter is needed to create sub-projects.&lt;br /&gt;
* &#039;&#039;&#039;DatabaseNameInDataSource&#039;&#039;&#039; (string): Snowflake database the project is linked to. Data for the datatables in this project will be located in this database.&lt;br /&gt;
* &#039;&#039;&#039;SchemaNameInDataSource&#039;&#039;&#039; (string): Snowflake schema the project is linked to. Data for the datatables in this project will be located in this schema. If the schema is defined, also the &#039;&#039;DatabaseNameInDataSource&#039;&#039; needs to be defined.&lt;br /&gt;
* &#039;&#039;&#039;SnowflakeConnectionStringKey&#039;&#039;&#039; (string): Snowflake connection string key to be used for the datatables in this project. &lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).CreateProject(#{&lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My project&amp;quot;, &lt;br /&gt;
  &amp;quot;Description&amp;quot;: &amp;quot;My description&amp;quot;, &lt;br /&gt;
  &amp;quot;DatabaseNameInDataSource&amp;quot;: &amp;quot;My database&amp;quot;, &lt;br /&gt;
  &amp;quot;SchemaNameInDataSource&amp;quot;: &amp;quot;My schema&amp;quot; &lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||DatatableByName (Datatable)&lt;br /&gt;
||Datatable name (String)&lt;br /&gt;
||&lt;br /&gt;
Returns Datatable by its name located in the project. Returns null, if Datatable with that name does not exist in the project.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(123).DatatableByName(&amp;quot;MyDatatable1&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Get datatable by name, and create it if it doesn&#039;t exist:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let project = ProjectById(123);&lt;br /&gt;
let datatableName = &amp;quot;MyDatatable1&amp;quot;;&lt;br /&gt;
let datatable = project.DatatableByName(datatableName);&lt;br /&gt;
if (datatable == null) {&lt;br /&gt;
  datatable = project.CreateDatatable(datatableName);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||DeletePermanently&lt;br /&gt;
||(none)&lt;br /&gt;
||Deletes the Project permanently. Note that the Project doesn&#039;t need to be in the recycle bin to be able to delete it permanently.&lt;br /&gt;
|-&lt;br /&gt;
||Export (String)&lt;br /&gt;
||(none)&lt;br /&gt;
||Exports the project and its content to a json string. The json format is described in [[Projects Export File Format]].&lt;br /&gt;
&lt;br /&gt;
Example: Export project id 1 to json data:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).Export();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||Import&lt;br /&gt;
||JSON string&lt;br /&gt;
||Creates one or several projects from a json string. The project(s) are created as child projects of the context project. The json format is described in [[Projects Export File Format]]. The function returns the created project objects. In case the project names already exist, the import operation automatically adjusts the names to be unique.&lt;br /&gt;
&lt;br /&gt;
Example: Create project from json data (as child of project id 1):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let jsonData = `{ &amp;quot;Projects&amp;quot;: [ { &amp;quot;Name&amp;quot;: &amp;quot;My project&amp;quot; } ] }`;&lt;br /&gt;
let result = ProjectById(1).Import(jsonData);&lt;br /&gt;
let createdProjectId = result[&amp;quot;Projects&amp;quot;][0].Id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||Restore&lt;br /&gt;
||(none)&lt;br /&gt;
||Restores the Project from the recycle bin back to the original location.&lt;br /&gt;
|-&lt;br /&gt;
||ModelByName (Model)&lt;br /&gt;
||Model name (String)&lt;br /&gt;
||&lt;br /&gt;
Returns Model by its name located in the project. Returns null, if Model with that name does not exist in the project.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(123).ModelByName(&amp;quot;My Model 1&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;ModifyProject&amp;quot;&amp;gt;Modify&amp;lt;/span&amp;gt; (Project)&lt;br /&gt;
||Dictionary of settings to change&lt;br /&gt;
||&lt;br /&gt;
Change project settings. Following settings are supported:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039; (String): Name of the project.&lt;br /&gt;
* &#039;&#039;&#039;Description&#039;&#039;&#039; (String): Description text of the project.&lt;br /&gt;
* &#039;&#039;&#039;ParentProjectId&#039;&#039;&#039; (Integer): Parent project id. Changing this effectively moves the project into different parent project.&lt;br /&gt;
* &#039;&#039;&#039;DatabaseNameInDataSource&#039;&#039;&#039;: Name of the Snowflake database where the project&#039;s datatables are located. The database needs to exist in the same Snowflake account configured in the Snowflake connection string. When defining this setting, define also the &#039;&#039;SchemaNameInDataSource&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;SchemaNameInDataSource&#039;&#039;&#039;: Name of the Snowflake schema where the project&#039;s datatables are located. The schema needs to exist in the same Snowflake account configured in the Snowflake connection string. When defining this setting, define also the &#039;&#039;DatabaseNameInDataSource&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;SnowflakeConnectionStringKey&#039;&#039;&#039; (String): Snowflake connection string key for the project. Snowflake datatables in the project will use connection string behind this key (unless specified by the datatatable).&lt;br /&gt;
* &#039;&#039;&#039;SqlServerConnectionStringKey&#039;&#039;&#039; (String): SQL Server connection string key. SQL Server datatables in the project will use connection string behind this key (unless specified by the datatatable).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ManageProject&#039;&#039; permission is needed to change project properties.&lt;br /&gt;
&lt;br /&gt;
Example: Change project name and move project into other parent project:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1)&lt;br /&gt;
  .Modify(#{&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;Project 1&amp;quot;&lt;br /&gt;
    &amp;quot;ParentProjectId&amp;quot;: 2&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Set Snowflake connection string key for the project:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1)&lt;br /&gt;
  .Modify(#{&lt;br /&gt;
    &amp;quot;SnowflakeConnectionStringKey&amp;quot;: &amp;quot;MyKey1&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||ScriptByName (Script)&lt;br /&gt;
||Script name (String)&lt;br /&gt;
||&lt;br /&gt;
Returns Script by its name located in the project. Returns null, if Script with that name does not exist in the project.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(123).ScriptByName(&amp;quot;MyScript1&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;SetSecret&amp;quot;&amp;gt;SetSecret&amp;lt;/span&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
# Secret type (string)&lt;br /&gt;
# Secret name (string)&lt;br /&gt;
# Secret value (string)&lt;br /&gt;
||Sets or adds a [[Storing_Secrets_for_Scripts|secret]] for the project. Setting the secret value to &#039;&#039;null&#039;&#039; 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 &#039;&#039;ManageProject&#039;&#039; permission.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
# &#039;&#039;&#039;Type&#039;&#039;&#039; (string): Secret type which is one of the following:&lt;br /&gt;
#* &amp;quot;externaldatatableconnection&amp;quot;: Snowflake ODBC connection string for datatables.&lt;br /&gt;
#* &amp;quot;odbc&amp;quot;: ODBC connection string (e.g., to extract data in scripts, or load an in-memory model).&lt;br /&gt;
#* &amp;quot;oledb&amp;quot;: OleDB connection string (e.g., to extract data in scripts, or load an in-memory model).&lt;br /&gt;
#* &amp;quot;sap&amp;quot;: SAP password.&lt;br /&gt;
#* &amp;quot;salesforce&amp;quot;: Salesforce password.&lt;br /&gt;
#* &amp;quot;sql&amp;quot;: SQL Server connection string.&lt;br /&gt;
#* &amp;quot;qprmea&amp;quot;: QPR MEA connection string.&lt;br /&gt;
# &#039;&#039;&#039;Name&#039;&#039;&#039; (string): Secret name, used to refer to the secret in the commands.&lt;br /&gt;
# &#039;&#039;&#039;Value&#039;&#039;&#039; (string): Secret value which contains the confidential information.&lt;br /&gt;
&lt;br /&gt;
Example: Set SAP password:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).SetSecret(&amp;quot;sap&amp;quot;, &amp;quot;MySapPassword&amp;quot;, &amp;quot;I l0ve 5AP!&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Remove SAP password:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).SetSecret(&amp;quot;sap&amp;quot;, &amp;quot;MySapPassword&amp;quot;, null);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Functions to get project:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||ProjectById&lt;br /&gt;
||Project id (Integer)&lt;br /&gt;
||&lt;br /&gt;
Returns project object corresponding to the provided project id.&lt;br /&gt;
|-&lt;br /&gt;
||ProjectByName&lt;br /&gt;
||Project name (String)&lt;br /&gt;
||&lt;br /&gt;
Returns project object by given project name. If there is no such project or user doesn&#039;t have access to it, &#039;&#039;null&#039;&#039; value is returned. If there are multiple projects with the same name, one of them is returned.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let project = ProjectByName(&amp;quot;My Project&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Functions to create project:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;CreateProject&amp;quot;&amp;gt;CreateProject&amp;lt;/span&amp;gt; (Project)&lt;br /&gt;
||Parameters dictionary&lt;br /&gt;
||Create a project. This is a similar function as the [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#CreateProject|CreateProject function]] in the project context. This function in the generic context is needed to create root-level projects (which don&#039;t have parent project).&lt;br /&gt;
&lt;br /&gt;
Example: create a root project:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CreateProject(#{&lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My project&amp;quot;&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: create a sub-project:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CreateProject(#{&lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My project&amp;quot;&lt;br /&gt;
  &amp;quot;ParentProjectId&amp;quot;: 1&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;Import&amp;quot;&amp;gt;Import&amp;lt;/span&amp;gt; (Project*)&lt;br /&gt;
||JSON string&lt;br /&gt;
||Creates one or several projects from a json string. The project(s) are created as the root level projects. The json format is described in [[Projects Export File Format]]. The function returns the created project objects. In case the project names already exist, the import operation automatically adjusts the names to be unique.&lt;br /&gt;
&lt;br /&gt;
Example: Create a root level project from json data:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let jsonData = `{ &amp;quot;Projects&amp;quot;: [ { &amp;quot;Name&amp;quot;: &amp;quot;My project&amp;quot; } ] }`;&lt;br /&gt;
let result = Import(jsonData);&lt;br /&gt;
let createdProjectId = result[&amp;quot;Projects&amp;quot;][0].Id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Script ==&lt;br /&gt;
Scripts are entities that contain executable code, that can be run. Usually scripts contains ETL routines but also other kind of tasks are possible.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Script properties&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||Code (String)&lt;br /&gt;
||Script code.&lt;br /&gt;
|-&lt;br /&gt;
||CreatedBy (User)&lt;br /&gt;
||User who created the Script.&lt;br /&gt;
|-&lt;br /&gt;
||CreatedDate (DateTime)&lt;br /&gt;
||Timestamp when the Script was created.&lt;br /&gt;
|-&lt;br /&gt;
||CurrentRunStart (DateTime)&lt;br /&gt;
||Timestamp of the current run start. Null if the script is currently not running.&lt;br /&gt;
|-&lt;br /&gt;
||Description (String)&lt;br /&gt;
||Description of the Script.&lt;br /&gt;
|-&lt;br /&gt;
||Id (Integer)&lt;br /&gt;
||Id of the Script.&lt;br /&gt;
|-&lt;br /&gt;
||Language (String)&lt;br /&gt;
||Either of the following scripting language: &#039;&#039;&#039;Expression&#039;&#039;&#039; or &#039;&#039;&#039;SQL&#039;&#039;&#039;. 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).&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedBy (User)&lt;br /&gt;
||User who last modified the Script.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedDate (DateTime)&lt;br /&gt;
||Timestamp when the Script was last modified.&lt;br /&gt;
|-&lt;br /&gt;
||LastRunEnd (DateTime)&lt;br /&gt;
||Timestamp of the last completed script run end (either successful completion or failure). Null if the Script hasn&#039;t been run yet.&lt;br /&gt;
|-&lt;br /&gt;
||LastRunResult (String)&lt;br /&gt;
||Result of the last run. Options are:&lt;br /&gt;
* &#039;&#039;&#039;Completed&#039;&#039;&#039;: The last run was completed successfully.&lt;br /&gt;
* &#039;&#039;&#039;Failed&#039;&#039;&#039;: An error occurred during the last run, so likely the script did not complete as intended.&lt;br /&gt;
* &#039;&#039;&#039;Aborted&#039;&#039;&#039;: Script run was manually stopped prematurely by a user, so the script did not proceeded in the end.&lt;br /&gt;
&lt;br /&gt;
Null if the Script hasn&#039;t been run yet.&lt;br /&gt;
|-&lt;br /&gt;
||LastRunStart (DateTime)&lt;br /&gt;
||Timestamp of the last completed script run start time. Null if the Script hasn&#039;t been run yet.&lt;br /&gt;
|-&lt;br /&gt;
||Name (String)&lt;br /&gt;
||Name of the Script.&lt;br /&gt;
|-&lt;br /&gt;
||OperationId (Integer)&lt;br /&gt;
||Id of the operation which runs the Script. Null if the script is currently not running.&lt;br /&gt;
|-&lt;br /&gt;
||Project (Project)&lt;br /&gt;
||Project where the Script is located. Null if the script is in the global context.&lt;br /&gt;
|-&lt;br /&gt;
||ProjectId (Integer)&lt;br /&gt;
||Id of the project where the Script is located. Null if the script is in the global context.&lt;br /&gt;
|-&lt;br /&gt;
||Status (String)&lt;br /&gt;
||Current status of the script. Options are:&lt;br /&gt;
* &#039;&#039;&#039;Ready&#039;&#039;&#039;: Script is not running. In this status, the script can be started (changing the status to &#039;&#039;Running&#039;&#039;).&lt;br /&gt;
* &#039;&#039;&#039;Running&#039;&#039;&#039;: Script is running. In this status, the script can be stopped (changing the status to &#039;&#039;Stopping&#039;&#039;). Calling stop just requests a script to stop, and the actual stopping occurs some time later.&lt;br /&gt;
* &#039;&#039;&#039;Stopping&#039;&#039;&#039;: Script has been requested to be stopped, but it&#039;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 &#039;&#039;Ready&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Script functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||Run (Object)&lt;br /&gt;
||Dictionary of parameters&lt;br /&gt;
||&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
For SQL scripts, the passed parameters are available in the script as variables in format &#039;&#039;&#039;@_parameter_&amp;lt;ParameterName&amp;gt;&#039;&#039;&#039; where &amp;lt;ParameterName&amp;gt; is the name of the parameter, e.g. &#039;&#039;parameter_myParameter1&#039;&#039;. Only string type of parameters can be used, so any other type of data in parameter values is converted into strings.&lt;br /&gt;
&lt;br /&gt;
The return value of the script is returned by the Run function. Expression scripts return a value with the &#039;&#039;return&#039;&#039; 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 &#039;&#039;_empty&#039;&#039;. 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 &#039;&#039;--#ShowReport&#039;&#039; command or the &#039;&#039;Show&#039;&#039; parameter).&lt;br /&gt;
&lt;br /&gt;
When a script is called using the Run function, the called script status does not change, because it&#039;s the parent script that is &#039;&#039;Running&#039;&#039;. Also the called script log is not filled, but instead the logging goes to the calling script.&lt;br /&gt;
&lt;br /&gt;
It&#039;s possible to call a script using the Run function several times simultaneously.&lt;br /&gt;
&lt;br /&gt;
If there is an error when running the called script, the Run function throws the error to the calling script.&lt;br /&gt;
&lt;br /&gt;
Scripts are run in the script entity context, so for example the following properties are available:&lt;br /&gt;
* Id: Script id&lt;br /&gt;
* Name: Script name&lt;br /&gt;
* Project.Id: Project id where the script is located&lt;br /&gt;
* Project.Name: Name of the project where the script is located&lt;br /&gt;
&lt;br /&gt;
Example: Following script (id 123) raises a specified number to a specified power:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
return Pow(numberToRaise, exponent);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The script can be called as follows (returning 16):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let runResult = ScriptById(123).Run(#{&lt;br /&gt;
  &amp;quot;numberToRaise&amp;quot;: 4,&lt;br /&gt;
  &amp;quot;exponent&amp;quot;: 2&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;Start&amp;quot;&amp;gt;Start&amp;lt;/span&amp;gt;&lt;br /&gt;
||Dictionary of parameters&lt;br /&gt;
||Starts the script. The function call doesn&#039;t wait for the script run to complete (i.e., asynchronous behavior) which is same as starting the script in the [[Managing_Scripts#Starting_Script|Workspace]].&lt;br /&gt;
&lt;br /&gt;
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 &#039;&#039;null&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Example: Start script (without parameters) and store the script run id:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let runId = ScriptById(1).Start();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Start script with passing parameters:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ScriptById(1).Start(#{&lt;br /&gt;
  &amp;quot;variable1&amp;quot;: &amp;quot;val1&amp;quot;,&lt;br /&gt;
  &amp;quot;variable2&amp;quot;: 5&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||Stop&lt;br /&gt;
||&lt;br /&gt;
||Stops the script. The operation doesn&#039;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.&lt;br /&gt;
&lt;br /&gt;
Return value is the script run id (integer) if the script was running. If the script isn&#039;t running, the return value is &#039;&#039;null&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let runId = ScriptById(1).Stop();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Function to get a script by the script id:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||ScriptById&lt;br /&gt;
||&lt;br /&gt;
* Script id (Integer)&lt;br /&gt;
||&lt;br /&gt;
Returns Script object corresponding to the given script id. If script with the given id doesn&#039;t exist or user doesn&#039;t have permissions to it, an error is given.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== User/Group ==&lt;br /&gt;
User objects represents users and user groups. Note that some properties can only be used for users and some for groups.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;User/group properties&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||CreatedBy (User)&lt;br /&gt;
||Returns the user who created the user.&lt;br /&gt;
|-&lt;br /&gt;
||CreatedDate (DateTime)&lt;br /&gt;
||Returns the date when the user was created.&lt;br /&gt;
|-&lt;br /&gt;
||DefaultDashboard (String)&lt;br /&gt;
||Returns the configured [[User_Settings#Starting_dashboard|starting dashboard]] (&amp;quot;default dashboard&amp;quot;) identifier for a group (for users, the starting dashboard cannot be configured). The starting dashboard is automatically opened when a user logs in.&lt;br /&gt;
|-&lt;br /&gt;
||Description (String)&lt;br /&gt;
||Description of the user.&lt;br /&gt;
|-&lt;br /&gt;
||EffectiveDefaultDashboard (String)&lt;br /&gt;
||Returns the [[User_Settings#Starting_dashboard|starting dashboard]] of a user. Value &#039;&#039;null&#039;&#039; means that the user doesn&#039;t have a starting dashboard. The starting dashboard comes from the user&#039;s groups. If multiple of user&#039;s groups have the starting dashboard defined, the user&#039;s starting dashboard will be taken from a group having alphabetically the first name.&lt;br /&gt;
|-&lt;br /&gt;
||Email (String)&lt;br /&gt;
||Email address of the user.&lt;br /&gt;
|-&lt;br /&gt;
||FullName (String)&lt;br /&gt;
||Full name of the user or group name.&lt;br /&gt;
|-&lt;br /&gt;
||GlobalPermissions (String*)&lt;br /&gt;
||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.&lt;br /&gt;
|-&lt;br /&gt;
||GroupMemberNames (String*)&lt;br /&gt;
||Array of names of members of a user group. This property is available for groups.&lt;br /&gt;
|-&lt;br /&gt;
||GroupMembers (User*)&lt;br /&gt;
||Array of members of a user group. This property is available for groups.&lt;br /&gt;
|-&lt;br /&gt;
||GroupNames (String*)&lt;br /&gt;
||Array of names of user groups the user belongs to. This property is available for users.&lt;br /&gt;
|-&lt;br /&gt;
||Groups (User*)&lt;br /&gt;
||Array of user groups the user belongs to. This property is available for users.&lt;br /&gt;
|-&lt;br /&gt;
||HasPassword (Boolean)&lt;br /&gt;
||Returns true if user has a password defined in QPR ProcessAnalyzer and thus user can authenticate using the password. If user doesn&#039;t have a password, the SAML authentication is the only way to log in. &#039;&#039;ManageUsers&#039;&#039; permission is needed to access this property for other users.&lt;br /&gt;
|-&lt;br /&gt;
||Id (Integer)&lt;br /&gt;
||Id of the user, which is unique for every user.&lt;br /&gt;
|-&lt;br /&gt;
||IsActive (Boolean)&lt;br /&gt;
||Returns true only if the user is active (not disabled).&lt;br /&gt;
|-&lt;br /&gt;
||IsGroup (Boolean)&lt;br /&gt;
||Returns true if the user is a user group.&lt;br /&gt;
|-&lt;br /&gt;
||IsLocked (Boolean)&lt;br /&gt;
||Returns true if user account is currently [[User_Session_Management#Preventing_password_guessing_attacks|locked]]. &#039;&#039;ManageUsers&#039;&#039; permission is needed to access this property.&lt;br /&gt;
|-&lt;br /&gt;
||LastLockedDate (DateTime)&lt;br /&gt;
||Returns date when user account was locked the last time. Returns &#039;&#039;null&#039;&#039; if the user account has never been locked. &#039;&#039;ManageUsers&#039;&#039; permission is needed to access this property.&lt;br /&gt;
|-&lt;br /&gt;
||LastLoginDate (DateTime)&lt;br /&gt;
||Returns date when the user made last successful login. &#039;&#039;ManageUsers&#039;&#039; permission is needed to access this property for other users.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedBy (User)&lt;br /&gt;
||Returns the user who last modified this user.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedDate (DateTime)&lt;br /&gt;
||Returns the date when the user was last modified.&lt;br /&gt;
|-&lt;br /&gt;
||Name (String)&lt;br /&gt;
||Login name of the user or group.&lt;br /&gt;
|-&lt;br /&gt;
||Roles (Object**)&lt;br /&gt;
||&lt;br /&gt;
Returns all roles of the user (both global and project roles) as a nested array structure.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ToJson(Users.Where(name == &amp;quot;qpr&amp;quot;).Roles)&lt;br /&gt;
Returns (for example):&lt;br /&gt;
[&lt;br /&gt;
  [{&amp;quot;calcId&amp;quot;: &amp;quot;Project:1&amp;quot;}, &amp;quot;Administrator&amp;quot;],&lt;br /&gt;
  [{&amp;quot;calcId&amp;quot;: &amp;quot;Project:2&amp;quot;}, &amp;quot;Analyzer&amp;quot;],&lt;br /&gt;
  [{&amp;quot;calcId&amp;quot;: &amp;quot;Project:3&amp;quot;}, &amp;quot;Viewer&amp;quot;],&lt;br /&gt;
  [null, &amp;quot;RunScripts&amp;quot;],&lt;br /&gt;
  [null, &amp;quot;Administrator&amp;quot;]&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;User/group functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||EffectivePermissionsFor (String Array)&lt;br /&gt;
||&lt;br /&gt;
* Project to get permissions&lt;br /&gt;
||&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Permissions for the EffectivePermissionsFor function are as follows:&lt;br /&gt;
* All users can query their own permissions&lt;br /&gt;
* To get permissions for any user, the user needs to have [[Roles_and_Permissions|ManageUsers permission]].&lt;br /&gt;
&lt;br /&gt;
Note that &#039;&#039;inactive&#039;&#039; users don&#039;t have any effective permissions, so the EffectivePermissionsFor function does not return any permissions for those users.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
UserById(1).EffectivePermissionsFor(ModelById(2).Project)&lt;br /&gt;
Returns (for example): [&amp;quot;EditDashboards&amp;quot;, &amp;quot;Filtering&amp;quot;, &amp;quot;GenericRead&amp;quot;]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||GetAttribute&lt;br /&gt;
||&lt;br /&gt;
||&lt;br /&gt;
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&#039;t exist, null is returned.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
# &#039;&#039;&#039;Attribute name&#039;&#039;&#039; (String): Name of the attribute.&lt;br /&gt;
# &#039;&#039;&#039;Attribute context&#039;&#039;&#039; (Project/Model/Dashboard): Optional context object the attribute is linked to.&lt;br /&gt;
&lt;br /&gt;
Users have permissions to get attributes for themselves, and also (administrator) users with global &#039;&#039;ManageUsers&#039;&#039; permission can get attributes for all users. In addition, if using the context object, the &#039;&#039;GenericRead&#039;&#039; permission is required for the context object.&lt;br /&gt;
&lt;br /&gt;
Example: Get user attribute MyDataValue for myself:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CurrentUser&lt;br /&gt;
  .GetAttribute(&amp;quot;MyDataValue&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Get user attribute MyDataValue for user John:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Users&lt;br /&gt;
  .Where(Name==&amp;quot;John&amp;quot;)&lt;br /&gt;
  .GetAttribute(&amp;quot;MyDataValue&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Get user attribute MyDataValue for user 1 related to dashboard id 1:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
UserById(1)&lt;br /&gt;
  .GetAttribute(&amp;quot;MyDataValue&amp;quot;, DashboardById(1));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||SetAttribute&lt;br /&gt;
||&lt;br /&gt;
||&lt;br /&gt;
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 &#039;&#039;null&#039;&#039;, the user attribute is removed. Required permissions are same as in the GetAttribute function.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
# &#039;&#039;&#039;Attribute name&#039;&#039;&#039; (String): Name of the attribute.&lt;br /&gt;
# &#039;&#039;&#039;Attribute value&#039;&#039;&#039; (String/Integer/Float/DateTime): Attribute value to be stored.&lt;br /&gt;
# &#039;&#039;&#039;Attribute context&#039;&#039;&#039; (Project/Model/Dashboard): Optional context object the attribute value is linked to.&lt;br /&gt;
&lt;br /&gt;
Example: Set user attribute MyDataValue for myself:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CurrentUser&lt;br /&gt;
  .SetAttribute(&amp;quot;MyDataValue &amp;quot;, &amp;quot;value&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Set value 123 as user attribute MyDataValue for user John:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Users&lt;br /&gt;
  .Where(Name==&amp;quot;John&amp;quot;)&lt;br /&gt;
  .SetAttribute(&amp;quot;MyDataValue&amp;quot;, 123);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Set current time as user attribute MyDataValue for user 1 related to dashboard id 1:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
UserById(1)&lt;br /&gt;
  .GetAttribute(&amp;quot;MyDataValue&amp;quot;, Now, DashboardById(1));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Function to get User by user id:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||UserById (User)&lt;br /&gt;
||&lt;br /&gt;
* User id (Integer)&lt;br /&gt;
||&lt;br /&gt;
Returns User object that has the provided user id. Also groups can be queried with this function. Returns an access denied error if the user with given id does not exist or the current user does not have access to it.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Objects_in_Expression_Language&amp;diff=28038</id>
		<title>QPR ProcessAnalyzer Objects in Expression Language</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Objects_in_Expression_Language&amp;diff=28038"/>
		<updated>2026-04-08T23:19:13Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: /* Project */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Filter==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Filter properties&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||CreatedBy (User)&lt;br /&gt;
||Returns the user who created the filter.&lt;br /&gt;
|-&lt;br /&gt;
||CreatedDate (DateTime)&lt;br /&gt;
||Returns date when the filter created date.&lt;br /&gt;
|-&lt;br /&gt;
||Description (String)&lt;br /&gt;
||Returns description of the filter.&lt;br /&gt;
|-&lt;br /&gt;
||Id (Integer)&lt;br /&gt;
||Returns id of the filter.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedBy (User)&lt;br /&gt;
||Returns user who modified the filter.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedDate (DateTime)&lt;br /&gt;
||Returns date when the filter last modified.&lt;br /&gt;
|-&lt;br /&gt;
||Model&lt;br /&gt;
||Returns model where the filter belongs to.&lt;br /&gt;
|-&lt;br /&gt;
||ModelId (Integer)&lt;br /&gt;
||Returns model where the filter belongs to.&lt;br /&gt;
|-&lt;br /&gt;
||Name (String)&lt;br /&gt;
||Returns the name of the filter.&lt;br /&gt;
|-&lt;br /&gt;
||Project&lt;br /&gt;
||Returns project where the filter belongs to.&lt;br /&gt;
|-&lt;br /&gt;
||ProjectId (Integer)&lt;br /&gt;
||Returns project id where the filter belongs to.&lt;br /&gt;
|-&lt;br /&gt;
||PublishMode (String)&lt;br /&gt;
||Returns publish mode of the filter, one of the following: &#039;&#039;&#039;Private&#039;&#039;&#039;, &#039;&#039;&#039;Public&#039;&#039;&#039;, or &#039;&#039;&#039;Default&#039;&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
||Rules (Dictionary)&lt;br /&gt;
||Returns a dictionary containing the filter rules in the filter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Filter functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||DeletePermanently&lt;br /&gt;
||(none)&lt;br /&gt;
||&lt;br /&gt;
Deletes the filter permanently. To delete own filters, the &#039;&#039;&#039;Filtering&#039;&#039;&#039; permission is needed, and to delete any filters the &#039;&#039;&#039;ManageViews&#039;&#039;&#039; permission is needed.&lt;br /&gt;
|-&lt;br /&gt;
||Modify&lt;br /&gt;
||Dictionary&lt;br /&gt;
||&lt;br /&gt;
Modifies filter properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: &#039;&#039;Name&#039;&#039;, &#039;&#039;Description&#039;&#039;, &#039;&#039;PublishMode&#039;&#039;, and &#039;&#039;Rules&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The function returns the updated filter object. Requires &#039;&#039;GenericWrite&#039;&#039; permission for the Project and global &#039;&#039;CreateModel&#039;&#039; permission.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FilterById(1)&lt;br /&gt;
	.Modify(#{&lt;br /&gt;
		&amp;quot;Name&amp;quot;: &amp;quot;My filter&amp;quot;,&lt;br /&gt;
		&amp;quot;Description&amp;quot;: &amp;quot;My description&amp;quot;,&lt;br /&gt;
		&amp;quot;PublishMode&amp;quot;: &amp;quot;Public&amp;quot;,&lt;br /&gt;
		&amp;quot;Rules&amp;quot;: #{&lt;br /&gt;
			&amp;quot;Items&amp;quot;: [&lt;br /&gt;
				#{&lt;br /&gt;
					&amp;quot;Type&amp;quot;: &amp;quot;IncludeCases&amp;quot;,&lt;br /&gt;
					&amp;quot;Items&amp;quot;: [&lt;br /&gt;
						#{&lt;br /&gt;
							&amp;quot;Type&amp;quot;: &amp;quot;CaseAttributeValue&amp;quot;,&lt;br /&gt;
							&amp;quot;Attribute&amp;quot;: &amp;quot;Account Manager&amp;quot;,&lt;br /&gt;
							&amp;quot;StringifiedValues&amp;quot;: [&lt;br /&gt;
								&amp;quot;0Mary Wilson&amp;quot;&lt;br /&gt;
							]&lt;br /&gt;
						}&lt;br /&gt;
					]&lt;br /&gt;
				}&lt;br /&gt;
			]&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Function to get filter id:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||FilterById&lt;br /&gt;
||&lt;br /&gt;
* Filter id (Integer)&lt;br /&gt;
||&lt;br /&gt;
Returns Filter object corresponding to the provided filter id.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Model==&lt;br /&gt;
Notes:&lt;br /&gt;
* For in-memory models that are offline, the object counts represent the situation when the model was last time online (loaded into the memory). &#039;&#039;null&#039;&#039; is returned if the model has never been loaded into the memory.&lt;br /&gt;
* If [[Case_Level_Permissions|Case permissions]] are used for the model, and user doesn&#039;t have &#039;&#039;&#039;GenericWrite&#039;&#039;&#039; permission for the model, &#039;&#039;null&#039;&#039; is returned for data security reasons. Users that have the &#039;&#039;&#039;GenericWrite&#039;&#039;&#039; permission, see null when the model is offline, and when online, they see counts where the case level permissions settings are applied.&lt;br /&gt;
* Properties &#039;&#039;CaseAttributes&#039;&#039;, &#039;&#039;EventAttributes&#039;&#039; and &#039;&#039;Eventlog&#039;&#039; 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.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Model properties&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||AllFilters (Filter*)&lt;br /&gt;
||Returns an array of all [[#Filter|filters]] in the model where the user has access to. In addition to the &#039;&#039;Filters&#039;&#039; property, &#039;&#039;AllFilters&#039;&#039; also returns private filters of other users. The &#039;&#039;ManageViews&#039;&#039; permission is required to use this property.&lt;br /&gt;
|-&lt;br /&gt;
||Calendars (BusinessCalendar*)&lt;br /&gt;
||&lt;br /&gt;
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.&lt;br /&gt;
|-&lt;br /&gt;
||CaseAttributes (AttributeType*)&lt;br /&gt;
||[[#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&#039;s loaded when this property is used.&lt;br /&gt;
|-&lt;br /&gt;
||CasesDatatable (Datatable)&lt;br /&gt;
||Returns the Datatable the model uses as a datasource for cases. Returns &#039;&#039;null&#039;&#039; if the cases Datatable is not defined or if model uses other than the Datatable datasource.&lt;br /&gt;
|-&lt;br /&gt;
||Configuration (Dictionary)&lt;br /&gt;
||Returns the Model configuration as dictionary. Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(123).Configuration.DataSource.Events.DataTableName&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||ConfigurationJson (String)&lt;br /&gt;
||Returns the Model configuration as JSON string.&lt;br /&gt;
|-&lt;br /&gt;
||CreatedBy (User)&lt;br /&gt;
||User who created the model.&lt;br /&gt;
|-&lt;br /&gt;
||CreatedDate (DateTime)&lt;br /&gt;
||Timestamp when the model was created.&lt;br /&gt;
|-&lt;br /&gt;
||DefaultCalendar (BusinessCalendar)&lt;br /&gt;
||Returns the default [[Business_Calendar|business calendar]] of the Model. Returns &#039;&#039;null&#039;&#039;, 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.&lt;br /&gt;
|-&lt;br /&gt;
||DefaultFilter (Filter)&lt;br /&gt;
||Default filter of the model. Returns &#039;&#039;null&#039;&#039; if the model does not have a default filter.&lt;br /&gt;
|-&lt;br /&gt;
||DefaultFilterId (Integer)&lt;br /&gt;
||Default filter id of the model. Returns &#039;&#039;null&#039;&#039; if the model does not have a default filter.&lt;br /&gt;
|-&lt;br /&gt;
||Description (String)&lt;br /&gt;
||Model description. The model description may contain line breaks.&lt;br /&gt;
|-&lt;br /&gt;
||DeletedDate (DateTime)&lt;br /&gt;
||Timestamp when Model was deleted (moved to the recycle bin).&lt;br /&gt;
|-&lt;br /&gt;
||DeletedBy (User)&lt;br /&gt;
||User how deleted the Model.&lt;br /&gt;
|-&lt;br /&gt;
||Diagrams (Diagram*)&lt;br /&gt;
||Returns an array of all [[Diagram_in_Expression_Language|diagrams]] in the model.&lt;br /&gt;
|-&lt;br /&gt;
||EstimatedMemory (Integer)&lt;br /&gt;
||Returns an estimation of how much memory in bytes the model requires.&lt;br /&gt;
|-&lt;br /&gt;
||EventsDatatable (Datatable)&lt;br /&gt;
||Returns the Datatable the model uses as a datasource for events. Returns &#039;&#039;null&#039;&#039; if the events Datatable is not defined or if model uses other than the Datatable datasource.&lt;br /&gt;
|-&lt;br /&gt;
||EventAttributes (AttributeType*)&lt;br /&gt;
||[[#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&#039;s loaded when this property is used.&lt;br /&gt;
|-&lt;br /&gt;
||EventLog (EventLog)&lt;br /&gt;
||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&#039;s loaded when this property is used.&lt;br /&gt;
|-&lt;br /&gt;
||Filters (Filter*)&lt;br /&gt;
||Returns an array of all public [[#Filter|filters]], the default filter (if any) and the user&#039;s own private filters in the model. Note that the other users&#039;s private filters are not returned even for administrators.&lt;br /&gt;
|-&lt;br /&gt;
||Id (Integer)&lt;br /&gt;
||Model Id. Model Id is generated by QPR ProcessAnalyzer when the model is created.&lt;br /&gt;
|-&lt;br /&gt;
||IsValidInMemoryModel (boolean)&lt;br /&gt;
||Returns &#039;&#039;true&#039;&#039; if all the following conditions are met:&lt;br /&gt;
* CheckModelValidity function doesn&#039;t return any issues (because invalid models are assumed to be Snowflake models).&lt;br /&gt;
* Model is not an object-centric model.&lt;br /&gt;
* Data source of the model is &#039;&#039;ODBC&#039;&#039; or &#039;&#039;Expression&#039;&#039;, or the referred datatable has &#039;&#039;DataSourceType&#039;&#039; either &#039;&#039;Local&#039;&#039; or &#039;&#039;SqlServer&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedBy (User)&lt;br /&gt;
||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.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedDate (DateTime)&lt;br /&gt;
||Timestamp when the model was modified the last time.&lt;br /&gt;
|-&lt;br /&gt;
||Name (String)&lt;br /&gt;
||Model name.&lt;br /&gt;
|-&lt;br /&gt;
||NCache (Integer)&lt;br /&gt;
||Number of objects related to the model when the model is loaded into the memory.&lt;br /&gt;
|-&lt;br /&gt;
||NCaseAttributes (Integer)&lt;br /&gt;
||Number of [[#AttributeType|CaseAttributes]] in model. Works only for in-memory models.&lt;br /&gt;
|-&lt;br /&gt;
||NCases (Integer)&lt;br /&gt;
||Number of [[#Case|Cases]] in the model. Works only for in-memory models.&lt;br /&gt;
|-&lt;br /&gt;
||NEventAttributes (Integer)&lt;br /&gt;
||Number of [[#AttributeType|EventAttributes]] in model. Works only for in-memory models.&lt;br /&gt;
|-&lt;br /&gt;
||NEvents (Integer)&lt;br /&gt;
||Number of [[#Event|Events]] in model. Works only for in-memory models.&lt;br /&gt;
|-&lt;br /&gt;
||NEventTypes (Integer)&lt;br /&gt;
||Number of [[#EventType|EventTypes]] in the model. Works only for in-memory models.&lt;br /&gt;
|-&lt;br /&gt;
||Project (Project)&lt;br /&gt;
||[[#Project|Project]] where the model belongs to.&lt;br /&gt;
|-&lt;br /&gt;
||ProjectId (Integer)&lt;br /&gt;
||[[#Project|Project]] id where the model belongs to.&lt;br /&gt;
|-&lt;br /&gt;
||Status (String)&lt;br /&gt;
||&lt;br /&gt;
Memory availability status of the model. There are the following statuses:&lt;br /&gt;
* &#039;&#039;&#039;Loading&#039;&#039;&#039;: The model is currently loading into the memory. When the loading is ready, the status changes to &#039;&#039;online&#039;&#039;. If the loading fails, the status changes to &#039;&#039;offline&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Offline&#039;&#039;&#039;: 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).&lt;br /&gt;
* &#039;&#039;&#039;Online&#039;&#039;&#039;: The model is in the memory and ready for analysis calculation. If the model is dropped from the memory, its status changes to &#039;&#039;offline&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
||UsedDatatables (Datatable*)&lt;br /&gt;
||Returns all datatables the model uses as a datasource.&lt;br /&gt;
&lt;br /&gt;
Example: List datatables used by a model:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
StringJoin(&amp;quot;, &amp;quot;, OrderByValue(ModelById(1).UsedDataTables.Name))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Model functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||CalendarByName (BusinessCalendar)&lt;br /&gt;
||&lt;br /&gt;
name (String)&lt;br /&gt;
||&lt;br /&gt;
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 &#039;&#039;null&#039;&#039;, if a calendar with the provided name is not stored to the model.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(123).CalendarByName(&amp;quot;MyCalendar&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||CreateDiagram (Diagram)&lt;br /&gt;
||Parameters dictionary&lt;br /&gt;
||&lt;br /&gt;
Creates a [[Diagram_in_Expression_Language|diagram]] to the model. Parameters is a dictionary containing diagram properties. Following properties are available:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039; (string): Diagram name that distinguishes diagrams in a model.&lt;br /&gt;
* &#039;&#039;&#039;Description&#039;&#039;&#039; (string): Diagram description text.&lt;br /&gt;
* &#039;&#039;&#039;Content&#039;&#039;&#039; (dictionary): Diagram content as dictionary.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(1)&lt;br /&gt;
  .CreateDiagram(#{&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;My diagram&amp;quot;,&lt;br /&gt;
    &amp;quot;Description&amp;quot;: &amp;quot;This is my new diagram&amp;quot;,&lt;br /&gt;
    &amp;quot;Content&amp;quot;: #{ ... },&lt;br /&gt;
  })&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||CreateFilter (Filter)&lt;br /&gt;
||Parameters dictionary&lt;br /&gt;
||Creates a filter to a model. Requires &#039;&#039;GenericWrite&#039;&#039; permission for the project and global &#039;&#039;CreateModel&#039;&#039; permission. If a filter with that name already exists in the model, an exception is thrown.&lt;br /&gt;
The parameters dictionary may have the following properties:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039;: Name of the filter. This property is mandatory.&lt;br /&gt;
* &#039;&#039;&#039;Description&#039;&#039;&#039;: Description of the filter. This property is optional.&lt;br /&gt;
* &#039;&#039;&#039;Rules&#039;&#039;&#039;: Filter rules for the filter defined as a dictionary according to the [[Filtering_in_QPR_ProcessAnalyzer_Queries|filter json format]]. This property is mandatory.&lt;br /&gt;
* &#039;&#039;&#039;PublishMode&#039;&#039;&#039;: Publish mode of the filter which is one of the following: &#039;&#039;Private&#039;&#039;, &#039;&#039;Public&#039;&#039; or &#039;&#039;Default&#039;&#039;. This property is optional, and the default value is &#039;&#039;Private&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let newFilter = modelById(1).CreateFilter(#{    &lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My Filter&amp;quot;,&lt;br /&gt;
  &amp;quot;Rules&amp;quot;: #{&lt;br /&gt;
    &amp;quot;Items&amp;quot;: [#{&lt;br /&gt;
      &amp;quot;Type&amp;quot;: &amp;quot;IncludeCases&amp;quot;,&lt;br /&gt;
      &amp;quot;Items&amp;quot;: [#{&lt;br /&gt;
        &amp;quot;Type&amp;quot;: &amp;quot;CaseAttributeValue&amp;quot;,&lt;br /&gt;
        &amp;quot;Attribute&amp;quot;: &amp;quot;Account Manager&amp;quot;,&lt;br /&gt;
        &amp;quot;StringifiedValues&amp;quot;: [ &amp;quot;0Robert Miller&amp;quot; ]&lt;br /&gt;
      }]&lt;br /&gt;
    }]&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;PublishMode&amp;quot;: &amp;quot;Public&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||DeletePermanently&lt;br /&gt;
||(none)&lt;br /&gt;
||Deletes the Model permanently. The model doesn&#039;t need to be in the recycle bin to be able to delete it permanently.&lt;br /&gt;
|-&lt;br /&gt;
||Modify (Model)&lt;br /&gt;
||Dictionary&lt;br /&gt;
||&lt;br /&gt;
Modifies model properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: &#039;&#039;Name&#039;&#039;, &#039;&#039;Description&#039;&#039;, &#039;&#039;ProjectId&#039;&#039;, and &#039;&#039;Configuration&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The function returns the updated model object. Requires the &#039;&#039;GenericWrite&#039;&#039; permission for the project and the global &#039;&#039;CreateModel&#039;&#039; permission.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(1)&lt;br /&gt;
	.Modify(#{&lt;br /&gt;
		&amp;quot;Name&amp;quot;: &amp;quot;My model&amp;quot;,&lt;br /&gt;
		&amp;quot;Description&amp;quot;: &amp;quot;My description&amp;quot;,&lt;br /&gt;
		&amp;quot;ProjectId&amp;quot;: 2,&lt;br /&gt;
		&amp;quot;Configuration&amp;quot;: #{&lt;br /&gt;
			&amp;quot;DataSource&amp;quot;: #{&lt;br /&gt;
				&amp;quot;Cases&amp;quot;: #{&lt;br /&gt;
					&amp;quot;DataSourceType&amp;quot;: &amp;quot;datatable&amp;quot;,&lt;br /&gt;
					&amp;quot;DataTableName&amp;quot;: &amp;quot;My cases datatable&amp;quot;,&lt;br /&gt;
					&amp;quot;Columns&amp;quot;: #{&lt;br /&gt;
						&amp;quot;CaseId&amp;quot;: &amp;quot;Case Name&amp;quot;&lt;br /&gt;
					}&lt;br /&gt;
				},&lt;br /&gt;
				&amp;quot;Events&amp;quot;: #{&lt;br /&gt;
					&amp;quot;DataSourceType&amp;quot;: &amp;quot;datatable&amp;quot;,&lt;br /&gt;
					&amp;quot;DataTableName&amp;quot;: &amp;quot;My events datatable&amp;quot;,&lt;br /&gt;
					&amp;quot;Columns&amp;quot;: #{&lt;br /&gt;
						&amp;quot;CaseId&amp;quot;: &amp;quot;Case Name&amp;quot;,&lt;br /&gt;
						&amp;quot;EventType&amp;quot;: &amp;quot;Event Type&amp;quot;,&lt;br /&gt;
						&amp;quot;Timestamp&amp;quot;: &amp;quot;Start Time&amp;quot;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||ResetModelCache&lt;br /&gt;
||(none)&lt;br /&gt;
||&lt;br /&gt;
Synchronously clears all cached model data. For a Snowflake model, deletes all cache tables related to the model from Snowflake. For an in-memory model, drops the model from the memory and also drops all other model related caches from the memory. &lt;br /&gt;
|-&lt;br /&gt;
||ResetPreprocessings&lt;br /&gt;
||(none)&lt;br /&gt;
||&lt;br /&gt;
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.&lt;br /&gt;
|-&lt;br /&gt;
||Restore&lt;br /&gt;
||(none)&lt;br /&gt;
||Restores the Model from the recycle bin back to the original location.&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;ToSqlDataFrame&amp;quot;&amp;gt;ToSqlDataFrame&amp;lt;/span&amp;gt;&lt;br /&gt;
||In-memory dataframe&lt;br /&gt;
||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.&lt;br /&gt;
&lt;br /&gt;
Example: Select matching cases from events data using in-memory dataframe:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let model = ModelById(1);&lt;br /&gt;
let dfEvents = model.EventsDatatable.SqlDataFrame;&lt;br /&gt;
let inMemoryDf = ToDataFrame(&lt;br /&gt;
  [[&amp;quot;1&amp;quot;], [&amp;quot;2&amp;quot;], [&amp;quot;3&amp;quot;]],&lt;br /&gt;
  [#{&amp;quot;Name&amp;quot;: &amp;quot;id&amp;quot;, &amp;quot;DataType&amp;quot;: &amp;quot;String&amp;quot;}]&lt;br /&gt;
);&lt;br /&gt;
model.ToSqlDataFrame(inMemoryDf)&lt;br /&gt;
  .Join(dfEvents, [&amp;quot;id&amp;quot;: &amp;quot;CaseId&amp;quot;])&lt;br /&gt;
  .SelectDistinct([&amp;quot;CaseId&amp;quot;])&lt;br /&gt;
  .Collect();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;TriggerNotifications&amp;quot;&amp;gt;TriggerNotifications&amp;lt;/span&amp;gt; (Boolean)&lt;br /&gt;
||Notification names (String*)&lt;br /&gt;
||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.&lt;br /&gt;
&lt;br /&gt;
The function return &#039;&#039;true&#039;&#039; if any notification were triggered, otherwise &#039;&#039;false&#039;&#039;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(123).TriggerNotifications([&amp;quot;Notification 1&amp;quot;, &amp;quot;Notification 2&amp;quot;]);&lt;br /&gt;
Triggers notifications Notification 1 and Notification 2 in model id 123.&lt;br /&gt;
&lt;br /&gt;
ModelById(123).TriggerNotifications();&lt;br /&gt;
Triggers all notifications in model id 123.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;CheckModelValidity&amp;quot;&amp;gt;CheckModelValidity&amp;lt;/span&amp;gt; (Object array)&lt;br /&gt;
||CheckData field in dictionary&lt;br /&gt;
||Checks the model validity and returns found issues. The returned data is an array of objects where each object represents one validity error and contains the following properties:&lt;br /&gt;
* &#039;&#039;&#039;IssueType&#039;&#039;&#039; (String): Specifies the issue type.&lt;br /&gt;
* &#039;&#039;&#039;ContextType&#039;&#039;&#039; (String): Context in which the issue was found, and it can be &#039;&#039;&#039;EventDataSource&#039;&#039;&#039;, &#039;&#039;&#039;CaseDataSource&#039;&#039;&#039;, &#039;&#039;&#039;OcelDataSource&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Details&#039;&#039;&#039; (Dictionary): Additional details which depend on the type of the issue.&lt;br /&gt;
&lt;br /&gt;
There are two types of checks available (based on whether the &#039;&#039;&#039;CheckData&#039;&#039;&#039; parameter is defined):&lt;br /&gt;
* &#039;&#039;Lightweight check&#039;&#039;: The check is based on only the configuration data stored in QPR ProcessAnalyzer. This check is very quick and does not require running queries in datasource (e.g., in Snowflake).&lt;br /&gt;
* &#039;&#039;Full check&#039;&#039;: The check is comprehensive and it&#039;s able to detect any validity issues the model may have. The full check requires running queries to the actual data which makes the check slower, and in case of Snowflake, it uses the Snowflake warehouse to run the queries.&lt;br /&gt;
&lt;br /&gt;
The lightweight check is performed automatically by the [[QPR_ProcessAnalyzer_Project_Workspace|Workspace]], so if there are any validity issues that the lightweight check can detect, the Workspace notifies about them immediately. If there are any problems with the model calculation results, it might be a good idea to run the full validity check to confirm whether the problems are due to the model being invalid.&lt;br /&gt;
&lt;br /&gt;
Example: Lightweight check:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ToJson(ModelById(1).CheckModelValidity())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Full check:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ToJson(ModelById(1).CheckModelValidity(#{ &amp;quot;CheckData&amp;quot;: true }))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||CortexAgentsQuery&lt;br /&gt;
||&lt;br /&gt;
||Creates a Snowflake Cortex semantic model (see &#039;&#039;GetSemanticModel&#039;&#039; function) for the process mining model and makes a natural language query on it using Snowflake Cortex Agents. More information: https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents. &lt;br /&gt;
&lt;br /&gt;
There are the following parameters:&lt;br /&gt;
# &#039;&#039;&#039;Parameters&#039;&#039;&#039;: Dictionary parameters given to the Cortex Agents REST API query (https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-rest-api). There is a special handling for the following parameters:&lt;br /&gt;
#* &#039;&#039;&#039;model&#039;&#039;&#039;: If not defined, uses the default Cortex Agents model name configured into the database, or if that is not defined, uses &amp;quot;llama3.1-70b&amp;quot;.&lt;br /&gt;
#* &#039;&#039;&#039;_tools&#039;&#039;&#039;: Additional tool_spec of type &amp;quot;cortex_analyst_text_to_sql&amp;quot; will be added to this value with a reference to the generated semantic model.&lt;br /&gt;
#* &#039;&#039;&#039;_tool_resources&#039;&#039;&#039;: Generated semantic model is added as an additional resource.&lt;br /&gt;
# &#039;&#039;&#039;Filter configuration&#039;&#039;&#039;: Can be a string containing filter JSON or a dictionary containing the filter configuration. The semantic model is created for the filtered eventlog. If not defined, the entire model eventlog will be used.&lt;br /&gt;
# &#039;&#039;&#039;Event column role nappings&#039;&#039;&#039;: Mappings to apply for event columns. If not defined, default column mappings are used.&lt;br /&gt;
# &#039;&#039;&#039;Case column role mappings&#039;&#039;&#039;: Mappings to apply for case columns. If not defined, default column mappings are used.&lt;br /&gt;
&lt;br /&gt;
The function returns a dictionary with the following keys:&lt;br /&gt;
# &#039;&#039;&#039;Response&#039;&#039;&#039;: Actual response as a dictionary returned by the Cortex Agents.&lt;br /&gt;
# &#039;&#039;&#039;Response items&#039;&#039;&#039;: Contains processed response consisting of an array of objects having the following properties:&lt;br /&gt;
#* &#039;&#039;&#039;Text&#039;&#039;&#039;: Textual response.&lt;br /&gt;
#* &#039;&#039;&#039;Sql&#039;&#039;&#039;: Response SQL query string. Not mandatory.&lt;br /&gt;
#* &#039;&#039;&#039;SqlDataFrame&#039;&#039;&#039;: SqlDataFrame created for the SQL query in the Sql property. Only present if Sql is present.&lt;br /&gt;
|-&lt;br /&gt;
||GetSemanticModel&lt;br /&gt;
||&lt;br /&gt;
||Creates a Snowflake Cortex Analyst semantic model for the process mining model and returns it as a dictionary. More information: https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-analyst/semantic-model-spec.&lt;br /&gt;
&lt;br /&gt;
There are the following parameters:&lt;br /&gt;
# &#039;&#039;&#039;Filter configuration&#039;&#039;&#039;: Can be a string containing filter JSON or a dictionary containing the filter. The semantic model is created for the filtered eventlog. If not defined, the entire model eventlog will be used.&lt;br /&gt;
# &#039;&#039;&#039;Event column role mappings&#039;&#039;&#039;: Mappings to apply for event columns. If not defined, default column mappings are used.&lt;br /&gt;
# &#039;&#039;&#039;Case column role mappings&#039;&#039;&#039;: Mappings to apply for case columns. If not defined, default column mappings are used.&lt;br /&gt;
&lt;br /&gt;
Examples: Returns a semantic model without any filtering applied.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(1).GetSemanticModel();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Function to get Model by model id:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||ModelById&lt;br /&gt;
||&lt;br /&gt;
* Model id (Integer)&lt;br /&gt;
||&lt;br /&gt;
Returns [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Model|Model]] object corresponding to the provided model id.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Object-centric model==&lt;br /&gt;
Object-centric models additionally have the following properties and functions.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Object-Centric model properties&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||IsOcelModel (boolean)&lt;br /&gt;
||Returns &#039;&#039;true&#039;&#039; when the model is an OCEL model.&lt;br /&gt;
|-&lt;br /&gt;
||OcelEvents (Datatable)&lt;br /&gt;
||Datatable containing event data for the OCEL model. Value &#039;&#039;null&#039;&#039; is returned if event datatable has not been configured for the model. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
|-&lt;br /&gt;
||OcelEventToObject (Datatable)&lt;br /&gt;
||Datatable containing event-to-object relations data for the OCEL model. Value &#039;&#039;null&#039;&#039; is returned if event-to-object relation datatable has not been configured for the model. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
|-&lt;br /&gt;
||OcelEventTypes (Dictionary)&lt;br /&gt;
||Returns a dictionary containing event type names as keys and the datatables holding event data for that event type in this OCEL model as value. An empty array is returned if event types datatable has not been configured for the model. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
&lt;br /&gt;
Example: Get datatable for &amp;quot;Create order&amp;quot; events:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(1).OcelEventTypes.Get(&amp;quot;Create order&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||OcelObjects (Datatable)&lt;br /&gt;
||Datatable containing objects data for the OCEL model. Value &#039;&#039;null&#039;&#039; is returned if object datatable has not been configured for the model. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
|-&lt;br /&gt;
||OcelObjectToObject (Datatable)&lt;br /&gt;
||Datatable containing object-to-object relations data for the OCEL model. Value &#039;&#039;null&#039;&#039; is returned if object-to-object relation datatable has not been configured for the model. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
|-&lt;br /&gt;
||OcelObjectTypes (Dictionary)&lt;br /&gt;
||Returns a dictionary containing object type names as keys and the datatables holding data for that object type in this OCEL model as value. An empty array is returned if object types have not been configured for this model. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Object-centric model functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||OcelEventType&lt;br /&gt;
||Event type name (String)&lt;br /&gt;
||&lt;br /&gt;
Datatable containing event type attributes of given event type in this OCEL model. Value &#039;&#039;null&#039;&#039; is returned if a datatable is not configured for this model for given event type. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
&lt;br /&gt;
Example: Get datatable for &amp;quot;Create order&amp;quot; events:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(1).OcelEventType(&amp;quot;Create order&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||OcelObjectType&lt;br /&gt;
||Object type name (String)&lt;br /&gt;
||Datatable containing object type attributes of given object type in this OCEL model. Value &#039;&#039;null&#039;&#039; is returned if a datatable is not configured for this model for given object type. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
|-&lt;br /&gt;
||OcelObjectTypeConfiguration&lt;br /&gt;
||Object type name (String)&lt;br /&gt;
||Returns a matching configuration object with the following properties:&amp;lt;br&amp;gt;&lt;br /&gt;
# Datatable: name of the datatable&lt;br /&gt;
# Unit: unit label for object type items&lt;br /&gt;
&#039;&#039;Null&#039;&#039; is returned if the given object type is not found in the model configuration.  &lt;br /&gt;
If the object type name is not specified or &#039;&#039;null&#039;&#039;, the function returns a dictionary containing configurations for all defined object types.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Project properties&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||CreatedBy (User)&lt;br /&gt;
||User who created the Project.&lt;br /&gt;
|-&lt;br /&gt;
||CreatedDate (DateTime)&lt;br /&gt;
||Timestamp when the Project was created.&lt;br /&gt;
|-&lt;br /&gt;
||Configuration (Dictionary)&lt;br /&gt;
||Project settings as Dictionary object. See example in &#039;&#039;ConfigurationJson&#039;&#039; property.&lt;br /&gt;
|-&lt;br /&gt;
||ConfigurationJson (String)&lt;br /&gt;
||Project settings as json string.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;DefaultLocationInDataSource&amp;quot;: {&lt;br /&gt;
    &amp;quot;Database&amp;quot;: &amp;quot;MyDatabase&amp;quot;,&lt;br /&gt;
    &amp;quot;Schema&amp;quot;: &amp;quot;MySchema&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;ConnectionStringKeys&amp;quot;: {&lt;br /&gt;
    &amp;quot;Snowflake&amp;quot;: &amp;quot;MyKey1&amp;quot;,&lt;br /&gt;
    &amp;quot;SqlServer&amp;quot;: &amp;quot;MyKey2&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||Dashboards (Dashboard*)&lt;br /&gt;
||Returns all [[Dashboard_in_Expression_Language|dashboards]] in the project.&lt;br /&gt;
|-&lt;br /&gt;
||Datatables (Datatable*)&lt;br /&gt;
||Returns all Datatables in the project.&lt;br /&gt;
|-&lt;br /&gt;
||DeletedDate (DateTime)&lt;br /&gt;
||Timestamp when the Project was deleted (moved to the recycle bin).&lt;br /&gt;
|-&lt;br /&gt;
||Description (String)&lt;br /&gt;
||Project description. The project description may contain line breaks.&lt;br /&gt;
|-&lt;br /&gt;
||DeletedBy (User)&lt;br /&gt;
||User who deleted the Project (moved to the recycle bin).&lt;br /&gt;
|-&lt;br /&gt;
||Id (Integer)&lt;br /&gt;
||Id of the Project.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedBy (User)&lt;br /&gt;
||User who last modified the Project.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedDate (DateTime)&lt;br /&gt;
||Timestamp when the Project was last modified (refers to the project name, description and parent, not the contents of the project).&lt;br /&gt;
|-&lt;br /&gt;
||Name (String)&lt;br /&gt;
||Name of the Project.&lt;br /&gt;
|-&lt;br /&gt;
||Models (Model*)&lt;br /&gt;
||Models that are in the Project.&lt;br /&gt;
|-&lt;br /&gt;
||Parent (Project)&lt;br /&gt;
||Parent project, i.e. a Project where the Project is located in the hierarchy of Projects. Returns &#039;&#039;null&#039;&#039; for root level Projects. Throws an error if user doesn&#039;t have access to the parent project.&lt;br /&gt;
|-&lt;br /&gt;
||ParentProjectId (Integer)&lt;br /&gt;
||Parent project id. Returns &#039;&#039;null&#039;&#039; for root level Projects. The parent project id is returned even if user doesn&#039;t have access to the parent project.&lt;br /&gt;
|-&lt;br /&gt;
||Scripts (Script*)&lt;br /&gt;
||Scripts that are in the Project.&lt;br /&gt;
|-&lt;br /&gt;
||Secrets (Dictionary*)&lt;br /&gt;
||Returns array of all [[Storing_Secrets_for_Scripts|secrets]] in the project as Dictionary with following properties:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039; (string): Name of the secret.&lt;br /&gt;
* &#039;&#039;&#039;Type&#039;&#039;&#039; (string): Type of the secret which is one of the following: &amp;quot;odbc&amp;quot;, &amp;quot;sap&amp;quot;, &amp;quot;salesforce&amp;quot;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Project functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||CreateDashboard (Dashboard)&lt;br /&gt;
||Parameters dictionary&lt;br /&gt;
||Creates a dashboard to the project. &#039;&#039;EditDashboards&#039;&#039; permission to the project is required. The parameter is dictionary with following supported dashboard properties:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039; (String): Name of the dashboard.&lt;br /&gt;
* &#039;&#039;&#039;Identifier&#039;&#039;&#039; (String): Identifier of the dashboard.&lt;br /&gt;
* &#039;&#039;&#039;Description&#039;&#039;&#039; (String): Description of the dashboard.&lt;br /&gt;
* &#039;&#039;&#039;Content&#039;&#039;&#039; (Dictionary): Content of the dashboard.&lt;br /&gt;
&lt;br /&gt;
Example: Create empty dashboard.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1)&lt;br /&gt;
  .CreateDashboard(#{&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;My dashboard&amp;quot;,&lt;br /&gt;
    &amp;quot;Identifier&amp;quot;: &amp;quot;MyDashboard&amp;quot;&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Create dashboard with a chart.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1)&lt;br /&gt;
  .CreateDashboard(#{&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;My dashboard&amp;quot;,&lt;br /&gt;
    &amp;quot;Content&amp;quot;: #{&lt;br /&gt;
      &amp;quot;version&amp;quot;: 4,&lt;br /&gt;
      &amp;quot;typeName&amp;quot;: &amp;quot;View&amp;quot;,&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;My dashboard&amp;quot;,&lt;br /&gt;
      &amp;quot;subElements&amp;quot;: [&lt;br /&gt;
        #{&lt;br /&gt;
          &amp;quot;position&amp;quot;: #{&lt;br /&gt;
            &amp;quot;x&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;y&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;width&amp;quot;: 0.5,&lt;br /&gt;
            &amp;quot;height&amp;quot;: 0.5,&lt;br /&gt;
            &amp;quot;zOrder&amp;quot;: 0&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;element&amp;quot;: #{&lt;br /&gt;
            &amp;quot;typeName&amp;quot;: &amp;quot;Chart&amp;quot;,&lt;br /&gt;
            &amp;quot;configuration&amp;quot;: #{&lt;br /&gt;
              &amp;quot;root&amp;quot;: #{&lt;br /&gt;
                &amp;quot;expressionType&amp;quot;: &amp;quot;Cases&amp;quot;,&lt;br /&gt;
                &amp;quot;expressionParameters&amp;quot;: #{}&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;measures&amp;quot;: [#{&lt;br /&gt;
                &amp;quot;expressionType&amp;quot;: &amp;quot;Count&amp;quot;,&lt;br /&gt;
                &amp;quot;expressionParameters&amp;quot;: #{}&lt;br /&gt;
              }]&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;CreateDatatable&amp;quot;&amp;gt;CreateDatatable&amp;lt;/span&amp;gt; (Datatable)&lt;br /&gt;
||&lt;br /&gt;
* Parameters dictionary&lt;br /&gt;
||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:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039; (string): Name of the datatable. This parameter is mandatory.&lt;br /&gt;
* &#039;&#039;&#039;Description&#039;&#039;&#039; (string): Description for the datatable. This parameter is optional.&lt;br /&gt;
* &#039;&#039;&#039;NameInDataSource&#039;&#039;&#039; (string): Table name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.&lt;br /&gt;
* &#039;&#039;&#039;SchemaNameInDataSource&#039;&#039;&#039; (string): Schema name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.&lt;br /&gt;
* &#039;&#039;&#039;DatabaseNameInDataSource&#039;&#039;&#039; (string): Database name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.&lt;br /&gt;
* &#039;&#039;&#039;Type&#039;&#039;&#039; (string): Defines where the data for the datatable is located. Available values are &#039;&#039;&#039;Snowflake&#039;&#039;&#039;, &#039;&#039;&#039;SqlServer&#039;&#039;&#039;, and &#039;&#039;&#039;Local&#039;&#039;&#039;.  This parameter is optional and default value is defined by the [[PA_Configuration_database_table#General_Settings|DefaultDataSource]] setting.&lt;br /&gt;
* &#039;&#039;&#039;Connection&#039;&#039;&#039;: Connection object for the datatable. This parameter is optional.&lt;br /&gt;
&lt;br /&gt;
Example: Create a new datatable:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).CreateDatatable(#{&lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My datatable&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Create Snowflake datatable linked to a custom table:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).CreateDatatable(#{&lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My datatable&amp;quot;,&lt;br /&gt;
  &amp;quot;Description&amp;quot;: &amp;quot;My description&amp;quot;,&lt;br /&gt;
  &amp;quot;NameInDataSource&amp;quot;: &amp;quot;MyTable&amp;quot;,&lt;br /&gt;
  &amp;quot;SchemaNameInDataSource&amp;quot;: &amp;quot;MySchema&amp;quot;,&lt;br /&gt;
  &amp;quot;DatabaseNameInDataSource&amp;quot;: &amp;quot;MyDatabase&amp;quot;,&lt;br /&gt;
  &amp;quot;Type&amp;quot;: &amp;quot;Snowflake&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Create Snowflake datatable where connection string is stored as a [[Storing_Secrets_for_Scripts|secret]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).CreateDatatable(#{&lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My datatable&amp;quot;,&lt;br /&gt;
  &amp;quot;Type&amp;quot;: &amp;quot;Snowflake&amp;quot;,&lt;br /&gt;
  &amp;quot;Connection&amp;quot;: ProjectById(1).CreateSnowflakeConnection(#{ &amp;quot;OdbcConnectionStringKey&amp;quot;: &amp;quot;MyKey&amp;quot; })&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||CreateMeaConnection&lt;br /&gt;
||&lt;br /&gt;
||&lt;br /&gt;
Creates an object representing connection to QPR MEA (QPR Suite) Web Service. The parameter is a dictionary supporting parameter &#039;&#039;&#039;ConnectionStringKey&#039;&#039;&#039; which defines the secret name for the MEA connection string. More information [[QPR_MEA_Integration|how to use the connection]].&lt;br /&gt;
&lt;br /&gt;
Example to create the connection:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let connection = ProjectByName(&amp;quot;MyProject&amp;quot;).CreateMeaConnection( #{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MyMeaConnection&amp;quot;} );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example to use the connection:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let results = connection.QueryObjects(&amp;quot;[PG.785401983.683494101]&amp;quot;, &amp;quot;name, typename&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||CreateModel (Model)&lt;br /&gt;
||&lt;br /&gt;
* Parameters dictionary&lt;br /&gt;
||Creates a model to a project. Requires &#039;&#039;GenericWrite&#039;&#039; permission for the Project and global &#039;&#039;CreateModel&#039;&#039; permission. If a model with that name already exists, an exception is thrown.&lt;br /&gt;
&lt;br /&gt;
Parameters dictionary has the following properties:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039;: Name of the model. This property is mandatory.&lt;br /&gt;
* &#039;&#039;&#039;Description&#039;&#039;&#039;: Description of the model. This property is optional.&lt;br /&gt;
* &#039;&#039;&#039;Configuration&#039;&#039;&#039;: Configuration dictionary for the model. This property is technically optional, but a working model requires at least datasource settings to be defined.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).CreateModel(#{    &lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My model&amp;quot;,&lt;br /&gt;
  &amp;quot;Description&amp;quot;: &amp;quot;My description&amp;quot;,&lt;br /&gt;
  &amp;quot;Configuration&amp;quot;: #{&lt;br /&gt;
    &amp;quot;DataSource&amp;quot;: #{&lt;br /&gt;
      &amp;quot;Cases&amp;quot;: #{&lt;br /&gt;
        &amp;quot;DataSourceType&amp;quot;: &amp;quot;datatable&amp;quot;,&lt;br /&gt;
        &amp;quot;DataTableName&amp;quot;: &amp;quot;My cases datatable&amp;quot;,&lt;br /&gt;
        &amp;quot;Columns&amp;quot;: #{&lt;br /&gt;
          &amp;quot;CaseId&amp;quot;: &amp;quot;Case Name&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;Events&amp;quot;: #{&lt;br /&gt;
        &amp;quot;DataSourceType&amp;quot;: &amp;quot;datatable&amp;quot;,&lt;br /&gt;
        &amp;quot;DataTableName&amp;quot;: &amp;quot;My events datatable&amp;quot;,&lt;br /&gt;
        &amp;quot;Columns&amp;quot;: #{&lt;br /&gt;
           &amp;quot;CaseId&amp;quot;: &amp;quot;Case Name&amp;quot;,&lt;br /&gt;
           &amp;quot;EventType&amp;quot;: &amp;quot;Event Type&amp;quot;,&lt;br /&gt;
           &amp;quot;Timestamp&amp;quot;: &amp;quot;Start Time&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;CreateProject&amp;quot;&amp;gt;CreateProject&amp;lt;/span&amp;gt; (Project)&lt;br /&gt;
||&lt;br /&gt;
* Parameters dictionary&lt;br /&gt;
||Create a project as a sub-project of the context project. Returns the created project. Requires the &#039;&#039;ManageProject&#039;&#039; permission.&lt;br /&gt;
&lt;br /&gt;
Parameters dictionary has the following properties:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039; (string): Name of the project. This property is required.&lt;br /&gt;
* &#039;&#039;&#039;Description&#039;&#039;&#039; (string): Description of the project.&lt;br /&gt;
* &#039;&#039;&#039;ParentProjectId&#039;&#039;&#039; (integer): Id of the parent project where the new project is created. This parameter is usually not needed because the parent project is the context project. The CreateProject function is also available in the generic context where the &#039;&#039;ParentProjectId&#039;&#039; parameter is needed to create sub-projects.&lt;br /&gt;
* &#039;&#039;&#039;DatabaseNameInDataSource&#039;&#039;&#039; (string): Snowflake database the project is linked to. Data for the datatables in this project will be located in this database.&lt;br /&gt;
* &#039;&#039;&#039;SchemaNameInDataSource&#039;&#039;&#039; (string): Snowflake schema the project is linked to. Data for the datatables in this project will be located in this schema. If the schema is defined, also the &#039;&#039;DatabaseNameInDataSource&#039;&#039; needs to be defined.&lt;br /&gt;
* &#039;&#039;&#039;SnowflakeConnectionStringKey&#039;&#039;&#039; (string): Snowflake connection string key to be used for the datatables in this project. &lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).CreateProject(#{&lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My project&amp;quot;, &lt;br /&gt;
  &amp;quot;Description&amp;quot;: &amp;quot;My description&amp;quot;, &lt;br /&gt;
  &amp;quot;DatabaseNameInDataSource&amp;quot;: &amp;quot;My database&amp;quot;, &lt;br /&gt;
  &amp;quot;SchemaNameInDataSource&amp;quot;: &amp;quot;My schema&amp;quot; &lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||DatatableByName (Datatable)&lt;br /&gt;
||Datatable name (String)&lt;br /&gt;
||&lt;br /&gt;
Returns Datatable by its name located in the project. Returns null, if Datatable with that name does not exist in the project.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(123).DatatableByName(&amp;quot;MyDatatable1&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Get datatable by name, and create it if it doesn&#039;t exist:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let project = ProjectById(123);&lt;br /&gt;
let datatableName = &amp;quot;MyDatatable1&amp;quot;;&lt;br /&gt;
let datatable = project.DatatableByName(datatableName);&lt;br /&gt;
if (datatable == null) {&lt;br /&gt;
  datatable = project.CreateDatatable(datatableName);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||DeletePermanently&lt;br /&gt;
||(none)&lt;br /&gt;
||Deletes the Project permanently. Note that the Project doesn&#039;t need to be in the recycle bin to be able to delete it permanently.&lt;br /&gt;
|-&lt;br /&gt;
||Export (String)&lt;br /&gt;
||(none)&lt;br /&gt;
||Exports the project and its content to a json string. The json format is described in [[Projects Export File Format]].&lt;br /&gt;
&lt;br /&gt;
Example: Export project id 1 to json data:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).Export();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||Import&lt;br /&gt;
||JSON string&lt;br /&gt;
||Creates one or several projects from a json string. The project(s) are created as child projects of the context project. The json format is described in [[Projects Export File Format]]. The function returns the created project objects. In case the project names already exist, the import operation automatically adjusts the names to be unique.&lt;br /&gt;
&lt;br /&gt;
Example: Create project from json data (as child of project id 1):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let jsonData = `{ &amp;quot;Projects&amp;quot;: [ { &amp;quot;Name&amp;quot;: &amp;quot;My project&amp;quot; } ] }`;&lt;br /&gt;
let result = ProjectById(1).Import(jsonData);&lt;br /&gt;
let createdProjectId = result[&amp;quot;Projects&amp;quot;][0].Id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||Restore&lt;br /&gt;
||(none)&lt;br /&gt;
||Restores the Project from the recycle bin back to the original location.&lt;br /&gt;
|-&lt;br /&gt;
||ModelByName (Model)&lt;br /&gt;
||Model name (String)&lt;br /&gt;
||&lt;br /&gt;
Returns Model by its name located in the project. Returns null, if Model with that name does not exist in the project.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(123).ModelByName(&amp;quot;My Model 1&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;ModifyProject&amp;quot;&amp;gt;Modify&amp;lt;/span&amp;gt; (Project)&lt;br /&gt;
||Dictionary of settings to change&lt;br /&gt;
||&lt;br /&gt;
Change project settings. Following settings are supported:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039; (String): Name of the project.&lt;br /&gt;
* &#039;&#039;&#039;Description&#039;&#039;&#039; (String): Description text of the project.&lt;br /&gt;
* &#039;&#039;&#039;ParentProjectId&#039;&#039;&#039; (Integer): Parent project id. Changing this effectively moves the project into different parent project.&lt;br /&gt;
* &#039;&#039;&#039;DatabaseNameInDataSource&#039;&#039;&#039;: Name of the Snowflake database where the project&#039;s datatables are located. The database needs to exist in the same Snowflake account configured in the Snowflake connection string. When defining this setting, define also the &#039;&#039;SchemaNameInDataSource&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;SchemaNameInDataSource&#039;&#039;&#039;: Name of the Snowflake schema where the project&#039;s datatables are located. The schema needs to exist in the same Snowflake account configured in the Snowflake connection string. When defining this setting, define also the &#039;&#039;DatabaseNameInDataSource&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;SnowflakeConnectionStringKey&#039;&#039;&#039; (String): Snowflake connection string key for the project. Snowflake datatables in the project will use connection string behind this key (unless specified by the datatatable).&lt;br /&gt;
* &#039;&#039;&#039;SqlServerConnectionStringKey&#039;&#039;&#039; (String): SQL Server connection string key. SQL Server datatables in the project will use connection string behind this key (unless specified by the datatatable).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ManageProject&#039;&#039; permission is needed to change project properties.&lt;br /&gt;
&lt;br /&gt;
Example: Change project name and move project into other parent project:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1)&lt;br /&gt;
  .Modify(#{&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;Project 1&amp;quot;&lt;br /&gt;
    &amp;quot;ParentProjectId&amp;quot;: 2&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Set Snowflake connection string key for the project:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1)&lt;br /&gt;
  .Modify(#{&lt;br /&gt;
    &amp;quot;SnowflakeConnectionStringKey&amp;quot;: &amp;quot;MyKey1&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||ScriptByName (Script)&lt;br /&gt;
||Script name (String)&lt;br /&gt;
||&lt;br /&gt;
Returns Script by its name located in the project. Returns null, if Script with that name does not exist in the project.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(123).ScriptByName(&amp;quot;MyScript1&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;SetSecret&amp;quot;&amp;gt;SetSecret&amp;lt;/span&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
# Secret type (string)&lt;br /&gt;
# Secret name (string)&lt;br /&gt;
# Secret value (string)&lt;br /&gt;
||Sets or adds a [[Storing_Secrets_for_Scripts|secret]] for the project. Setting the secret value to &#039;&#039;null&#039;&#039; 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 &#039;&#039;ManageProject&#039;&#039; permission.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
# &#039;&#039;&#039;Type&#039;&#039;&#039; (string): Secret type which is one of the following:&lt;br /&gt;
#* &amp;quot;externaldatatableconnection&amp;quot;: Snowflake ODBC connection string for datatables.&lt;br /&gt;
#* &amp;quot;odbc&amp;quot;: ODBC connection string (e.g., to extract data in scripts, or load an in-memory model).&lt;br /&gt;
#* &amp;quot;oledb&amp;quot;: OleDB connection string (e.g., to extract data in scripts, or load an in-memory model).&lt;br /&gt;
#* &amp;quot;sap&amp;quot;: SAP password.&lt;br /&gt;
#* &amp;quot;salesforce&amp;quot;: Salesforce password.&lt;br /&gt;
#* &amp;quot;sql&amp;quot;: SQL Server connection string.&lt;br /&gt;
#* &amp;quot;qprmea&amp;quot;: QPR MEA connection string.&lt;br /&gt;
# &#039;&#039;&#039;Name&#039;&#039;&#039; (string): Secret name, used to refer to the secret in the commands.&lt;br /&gt;
# &#039;&#039;&#039;Value&#039;&#039;&#039; (string): Secret value which contains the confidential information.&lt;br /&gt;
&lt;br /&gt;
Example: Set SAP password:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).SetSecret(&amp;quot;sap&amp;quot;, &amp;quot;MySapPassword&amp;quot;, &amp;quot;I l0ve 5AP!&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Remove SAP password:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).SetSecret(&amp;quot;sap&amp;quot;, &amp;quot;MySapPassword&amp;quot;, null);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Functions to get project:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||ProjectById&lt;br /&gt;
||Project id (Integer)&lt;br /&gt;
||&lt;br /&gt;
Returns project object corresponding to the provided project id.&lt;br /&gt;
|-&lt;br /&gt;
||ProjectByName&lt;br /&gt;
||Project name (String)&lt;br /&gt;
||&lt;br /&gt;
Returns project object by given project name. If there is no such project or user doesn&#039;t have access to it, &#039;&#039;null&#039;&#039; value is returned. If there are multiple projects with the same name, one of them is returned.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let project = ProjectByName(&amp;quot;My Project&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Functions to create project:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;CreateProject&amp;quot;&amp;gt;CreateProject&amp;lt;/span&amp;gt; (Project)&lt;br /&gt;
||Parameters dictionary&lt;br /&gt;
||Create a project. This is a similar function as the [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#CreateProject|CreateProject function]] in the project context. This function in the generic context is needed to create root-level projects (which don&#039;t have parent project).&lt;br /&gt;
&lt;br /&gt;
Example: create a root project:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CreateProject(#{&lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My project&amp;quot;&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: create a sub-project:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CreateProject(#{&lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My project&amp;quot;&lt;br /&gt;
  &amp;quot;ParentProjectId&amp;quot;: 1&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;Import&amp;quot;&amp;gt;Import&amp;lt;/span&amp;gt; (Project*)&lt;br /&gt;
||JSON string&lt;br /&gt;
||Creates one or several projects from a json string. The project(s) are created as the root level projects. The json format is described in [[Projects Export File Format]]. The function returns the created project objects. In case the project names already exist, the import operation automatically adjusts the names to be unique.&lt;br /&gt;
&lt;br /&gt;
Example: Create a root level project from json data:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let jsonData = `{ &amp;quot;Projects&amp;quot;: [ { &amp;quot;Name&amp;quot;: &amp;quot;My project&amp;quot; } ] }`;&lt;br /&gt;
let result = Import(jsonData);&lt;br /&gt;
let createdProjectId = result[&amp;quot;Projects&amp;quot;][0].Id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Script ==&lt;br /&gt;
Scripts are entities that contain executable code, that can be run. Usually scripts contains ETL routines but also other kind of tasks are possible.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Script properties&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||Code (String)&lt;br /&gt;
||Script code.&lt;br /&gt;
|-&lt;br /&gt;
||CreatedBy (User)&lt;br /&gt;
||User who created the Script.&lt;br /&gt;
|-&lt;br /&gt;
||CreatedDate (DateTime)&lt;br /&gt;
||Timestamp when the Script was created.&lt;br /&gt;
|-&lt;br /&gt;
||CurrentRunStart (DateTime)&lt;br /&gt;
||Timestamp of the current run start. Null if the script is currently not running.&lt;br /&gt;
|-&lt;br /&gt;
||Description (String)&lt;br /&gt;
||Description of the Script.&lt;br /&gt;
|-&lt;br /&gt;
||Id (Integer)&lt;br /&gt;
||Id of the Script.&lt;br /&gt;
|-&lt;br /&gt;
||Language (String)&lt;br /&gt;
||Either of the following scripting language: &#039;&#039;&#039;Expression&#039;&#039;&#039; or &#039;&#039;&#039;SQL&#039;&#039;&#039;. 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).&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedBy (User)&lt;br /&gt;
||User who last modified the Script.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedDate (DateTime)&lt;br /&gt;
||Timestamp when the Script was last modified.&lt;br /&gt;
|-&lt;br /&gt;
||LastRunEnd (DateTime)&lt;br /&gt;
||Timestamp of the last completed script run end (either successful completion or failure). Null if the Script hasn&#039;t been run yet.&lt;br /&gt;
|-&lt;br /&gt;
||LastRunResult (String)&lt;br /&gt;
||Result of the last run. Options are:&lt;br /&gt;
* &#039;&#039;&#039;Completed&#039;&#039;&#039;: The last run was completed successfully.&lt;br /&gt;
* &#039;&#039;&#039;Failed&#039;&#039;&#039;: An error occurred during the last run, so likely the script did not complete as intended.&lt;br /&gt;
* &#039;&#039;&#039;Aborted&#039;&#039;&#039;: Script run was manually stopped prematurely by a user, so the script did not proceeded in the end.&lt;br /&gt;
&lt;br /&gt;
Null if the Script hasn&#039;t been run yet.&lt;br /&gt;
|-&lt;br /&gt;
||LastRunStart (DateTime)&lt;br /&gt;
||Timestamp of the last completed script run start time. Null if the Script hasn&#039;t been run yet.&lt;br /&gt;
|-&lt;br /&gt;
||Name (String)&lt;br /&gt;
||Name of the Script.&lt;br /&gt;
|-&lt;br /&gt;
||OperationId (Integer)&lt;br /&gt;
||Id of the operation which runs the Script. Null if the script is currently not running.&lt;br /&gt;
|-&lt;br /&gt;
||Project (Project)&lt;br /&gt;
||Project where the Script is located. Null if the script is in the global context.&lt;br /&gt;
|-&lt;br /&gt;
||ProjectId (Integer)&lt;br /&gt;
||Id of the project where the Script is located. Null if the script is in the global context.&lt;br /&gt;
|-&lt;br /&gt;
||Status (String)&lt;br /&gt;
||Current status of the script. Options are:&lt;br /&gt;
* &#039;&#039;&#039;Ready&#039;&#039;&#039;: Script is not running. In this status, the script can be started (changing the status to &#039;&#039;Running&#039;&#039;).&lt;br /&gt;
* &#039;&#039;&#039;Running&#039;&#039;&#039;: Script is running. In this status, the script can be stopped (changing the status to &#039;&#039;Stopping&#039;&#039;). Calling stop just requests a script to stop, and the actual stopping occurs some time later.&lt;br /&gt;
* &#039;&#039;&#039;Stopping&#039;&#039;&#039;: Script has been requested to be stopped, but it&#039;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 &#039;&#039;Ready&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Script functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||Run (Object)&lt;br /&gt;
||Dictionary of parameters&lt;br /&gt;
||&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
For SQL scripts, the passed parameters are available in the script as variables in format &#039;&#039;&#039;@_parameter_&amp;lt;ParameterName&amp;gt;&#039;&#039;&#039; where &amp;lt;ParameterName&amp;gt; is the name of the parameter, e.g. &#039;&#039;parameter_myParameter1&#039;&#039;. Only string type of parameters can be used, so any other type of data in parameter values is converted into strings.&lt;br /&gt;
&lt;br /&gt;
The return value of the script is returned by the Run function. Expression scripts return a value with the &#039;&#039;return&#039;&#039; 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 &#039;&#039;_empty&#039;&#039;. 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 &#039;&#039;--#ShowReport&#039;&#039; command or the &#039;&#039;Show&#039;&#039; parameter).&lt;br /&gt;
&lt;br /&gt;
When a script is called using the Run function, the called script status does not change, because it&#039;s the parent script that is &#039;&#039;Running&#039;&#039;. Also the called script log is not filled, but instead the logging goes to the calling script.&lt;br /&gt;
&lt;br /&gt;
It&#039;s possible to call a script using the Run function several times simultaneously.&lt;br /&gt;
&lt;br /&gt;
If there is an error when running the called script, the Run function throws the error to the calling script.&lt;br /&gt;
&lt;br /&gt;
Scripts are run in the script entity context, so for example the following properties are available:&lt;br /&gt;
* Id: Script id&lt;br /&gt;
* Name: Script name&lt;br /&gt;
* Project.Id: Project id where the script is located&lt;br /&gt;
* Project.Name: Name of the project where the script is located&lt;br /&gt;
&lt;br /&gt;
Example: Following script (id 123) raises a specified number to a specified power:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
return Pow(numberToRaise, exponent);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The script can be called as follows (returning 16):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let runResult = ScriptById(123).Run(#{&lt;br /&gt;
  &amp;quot;numberToRaise&amp;quot;: 4,&lt;br /&gt;
  &amp;quot;exponent&amp;quot;: 2&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;Start&amp;quot;&amp;gt;Start&amp;lt;/span&amp;gt;&lt;br /&gt;
||Dictionary of parameters&lt;br /&gt;
||Starts the script. The function call doesn&#039;t wait for the script run to complete (i.e., asynchronous behavior) which is same as starting the script in the [[Managing_Scripts#Starting_Script|Workspace]].&lt;br /&gt;
&lt;br /&gt;
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 &#039;&#039;null&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Example: Start script (without parameters) and store the script run id:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let runId = ScriptById(1).Start();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Start script with passing parameters:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ScriptById(1).Start(#{&lt;br /&gt;
  &amp;quot;variable1&amp;quot;: &amp;quot;val1&amp;quot;,&lt;br /&gt;
  &amp;quot;variable2&amp;quot;: 5&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||Stop&lt;br /&gt;
||&lt;br /&gt;
||Stops the script. The operation doesn&#039;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.&lt;br /&gt;
&lt;br /&gt;
Return value is the script run id (integer) if the script was running. If the script isn&#039;t running, the return value is &#039;&#039;null&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let runId = ScriptById(1).Stop();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Function to get a script by the script id:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||ScriptById&lt;br /&gt;
||&lt;br /&gt;
* Script id (Integer)&lt;br /&gt;
||&lt;br /&gt;
Returns Script object corresponding to the given script id. If script with the given id doesn&#039;t exist or user doesn&#039;t have permissions to it, an error is given.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== User/Group ==&lt;br /&gt;
User objects represents users and user groups. Note that some properties can only be used for users and some for groups.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;User/group properties&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||CreatedBy (User)&lt;br /&gt;
||Returns the user who created the user.&lt;br /&gt;
|-&lt;br /&gt;
||CreatedDate (DateTime)&lt;br /&gt;
||Returns the date when the user was created.&lt;br /&gt;
|-&lt;br /&gt;
||DefaultDashboard (String)&lt;br /&gt;
||Returns the configured [[User_Settings#Starting_dashboard|starting dashboard]] (&amp;quot;default dashboard&amp;quot;) identifier for a group (for users, the starting dashboard cannot be configured). The starting dashboard is automatically opened when a user logs in.&lt;br /&gt;
|-&lt;br /&gt;
||Description (String)&lt;br /&gt;
||Description of the user.&lt;br /&gt;
|-&lt;br /&gt;
||EffectiveDefaultDashboard (String)&lt;br /&gt;
||Returns the [[User_Settings#Starting_dashboard|starting dashboard]] of a user. Value &#039;&#039;null&#039;&#039; means that the user doesn&#039;t have a starting dashboard. The starting dashboard comes from the user&#039;s groups. If multiple of user&#039;s groups have the starting dashboard defined, the user&#039;s starting dashboard will be taken from a group having alphabetically the first name.&lt;br /&gt;
|-&lt;br /&gt;
||Email (String)&lt;br /&gt;
||Email address of the user.&lt;br /&gt;
|-&lt;br /&gt;
||FullName (String)&lt;br /&gt;
||Full name of the user or group name.&lt;br /&gt;
|-&lt;br /&gt;
||GlobalPermissions (String*)&lt;br /&gt;
||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.&lt;br /&gt;
|-&lt;br /&gt;
||GroupMemberNames (String*)&lt;br /&gt;
||Array of names of members of a user group. This property is available for groups.&lt;br /&gt;
|-&lt;br /&gt;
||GroupMembers (User*)&lt;br /&gt;
||Array of members of a user group. This property is available for groups.&lt;br /&gt;
|-&lt;br /&gt;
||GroupNames (String*)&lt;br /&gt;
||Array of names of user groups the user belongs to. This property is available for users.&lt;br /&gt;
|-&lt;br /&gt;
||Groups (User*)&lt;br /&gt;
||Array of user groups the user belongs to. This property is available for users.&lt;br /&gt;
|-&lt;br /&gt;
||HasPassword (Boolean)&lt;br /&gt;
||Returns true if user has a password defined in QPR ProcessAnalyzer and thus user can authenticate using the password. If user doesn&#039;t have a password, the SAML authentication is the only way to log in. &#039;&#039;ManageUsers&#039;&#039; permission is needed to access this property for other users.&lt;br /&gt;
|-&lt;br /&gt;
||Id (Integer)&lt;br /&gt;
||Id of the user, which is unique for every user.&lt;br /&gt;
|-&lt;br /&gt;
||IsActive (Boolean)&lt;br /&gt;
||Returns true only if the user is active (not disabled).&lt;br /&gt;
|-&lt;br /&gt;
||IsGroup (Boolean)&lt;br /&gt;
||Returns true if the user is a user group.&lt;br /&gt;
|-&lt;br /&gt;
||IsLocked (Boolean)&lt;br /&gt;
||Returns true if user account is currently [[User_Session_Management#Preventing_password_guessing_attacks|locked]]. &#039;&#039;ManageUsers&#039;&#039; permission is needed to access this property.&lt;br /&gt;
|-&lt;br /&gt;
||LastLockedDate (DateTime)&lt;br /&gt;
||Returns date when user account was locked the last time. Returns &#039;&#039;null&#039;&#039; if the user account has never been locked. &#039;&#039;ManageUsers&#039;&#039; permission is needed to access this property.&lt;br /&gt;
|-&lt;br /&gt;
||LastLoginDate (DateTime)&lt;br /&gt;
||Returns date when the user made last successful login. &#039;&#039;ManageUsers&#039;&#039; permission is needed to access this property for other users.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedBy (User)&lt;br /&gt;
||Returns the user who last modified this user.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedDate (DateTime)&lt;br /&gt;
||Returns the date when the user was last modified.&lt;br /&gt;
|-&lt;br /&gt;
||Name (String)&lt;br /&gt;
||Login name of the user or group.&lt;br /&gt;
|-&lt;br /&gt;
||Roles (Object**)&lt;br /&gt;
||&lt;br /&gt;
Returns all roles of the user (both global and project roles) as a nested array structure.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ToJson(Users.Where(name == &amp;quot;qpr&amp;quot;).Roles)&lt;br /&gt;
Returns (for example):&lt;br /&gt;
[&lt;br /&gt;
  [{&amp;quot;calcId&amp;quot;: &amp;quot;Project:1&amp;quot;}, &amp;quot;Administrator&amp;quot;],&lt;br /&gt;
  [{&amp;quot;calcId&amp;quot;: &amp;quot;Project:2&amp;quot;}, &amp;quot;Analyzer&amp;quot;],&lt;br /&gt;
  [{&amp;quot;calcId&amp;quot;: &amp;quot;Project:3&amp;quot;}, &amp;quot;Viewer&amp;quot;],&lt;br /&gt;
  [null, &amp;quot;RunScripts&amp;quot;],&lt;br /&gt;
  [null, &amp;quot;Administrator&amp;quot;]&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;User/group functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||EffectivePermissionsFor (String Array)&lt;br /&gt;
||&lt;br /&gt;
* Project to get permissions&lt;br /&gt;
||&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Permissions for the EffectivePermissionsFor function are as follows:&lt;br /&gt;
* All users can query their own permissions&lt;br /&gt;
* To get permissions for any user, the user needs to have [[Roles_and_Permissions|ManageUsers permission]].&lt;br /&gt;
&lt;br /&gt;
Note that &#039;&#039;inactive&#039;&#039; users don&#039;t have any effective permissions, so the EffectivePermissionsFor function does not return any permissions for those users.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
UserById(1).EffectivePermissionsFor(ModelById(2).Project)&lt;br /&gt;
Returns (for example): [&amp;quot;EditDashboards&amp;quot;, &amp;quot;Filtering&amp;quot;, &amp;quot;GenericRead&amp;quot;]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||GetAttribute&lt;br /&gt;
||&lt;br /&gt;
||&lt;br /&gt;
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&#039;t exist, null is returned.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
# &#039;&#039;&#039;Attribute name&#039;&#039;&#039; (String): Name of the attribute.&lt;br /&gt;
# &#039;&#039;&#039;Attribute context&#039;&#039;&#039; (Project/Model/Dashboard): Optional context object the attribute is linked to.&lt;br /&gt;
&lt;br /&gt;
Users have permissions to get attributes for themselves, and also (administrator) users with global &#039;&#039;ManageUsers&#039;&#039; permission can get attributes for all users. In addition, if using the context object, the &#039;&#039;GenericRead&#039;&#039; permission is required for the context object.&lt;br /&gt;
&lt;br /&gt;
Example: Get user attribute MyDataValue for myself:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CurrentUser&lt;br /&gt;
  .GetAttribute(&amp;quot;MyDataValue&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Get user attribute MyDataValue for user John:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Users&lt;br /&gt;
  .Where(Name==&amp;quot;John&amp;quot;)&lt;br /&gt;
  .GetAttribute(&amp;quot;MyDataValue&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Get user attribute MyDataValue for user 1 related to dashboard id 1:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
UserById(1)&lt;br /&gt;
  .GetAttribute(&amp;quot;MyDataValue&amp;quot;, DashboardById(1));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||SetAttribute&lt;br /&gt;
||&lt;br /&gt;
||&lt;br /&gt;
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 &#039;&#039;null&#039;&#039;, the user attribute is removed. Required permissions are same as in the GetAttribute function.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
# &#039;&#039;&#039;Attribute name&#039;&#039;&#039; (String): Name of the attribute.&lt;br /&gt;
# &#039;&#039;&#039;Attribute value&#039;&#039;&#039; (String/Integer/Float/DateTime): Attribute value to be stored.&lt;br /&gt;
# &#039;&#039;&#039;Attribute context&#039;&#039;&#039; (Project/Model/Dashboard): Optional context object the attribute value is linked to.&lt;br /&gt;
&lt;br /&gt;
Example: Set user attribute MyDataValue for myself:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CurrentUser&lt;br /&gt;
  .SetAttribute(&amp;quot;MyDataValue &amp;quot;, &amp;quot;value&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Set value 123 as user attribute MyDataValue for user John:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Users&lt;br /&gt;
  .Where(Name==&amp;quot;John&amp;quot;)&lt;br /&gt;
  .SetAttribute(&amp;quot;MyDataValue&amp;quot;, 123);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Set current time as user attribute MyDataValue for user 1 related to dashboard id 1:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
UserById(1)&lt;br /&gt;
  .GetAttribute(&amp;quot;MyDataValue&amp;quot;, Now, DashboardById(1));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Function to get User by user id:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||UserById (User)&lt;br /&gt;
||&lt;br /&gt;
* User id (Integer)&lt;br /&gt;
||&lt;br /&gt;
Returns User object that has the provided user id. Also groups can be queried with this function. Returns an access denied error if the user with given id does not exist or the current user does not have access to it.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=Next_Release_Roadmap&amp;diff=28037</id>
		<title>Next Release Roadmap</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=Next_Release_Roadmap&amp;diff=28037"/>
		<updated>2026-04-08T23:12:03Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--10926--&amp;gt;&lt;br /&gt;
This page contains preliminary information about new features and fixed issues in the next release.&lt;br /&gt;
&lt;br /&gt;
==New features in next release==&lt;br /&gt;
* Units can be specified for object counts for each object types in object-centric models. (&#039;&#039;B-08992&#039;&#039;)&lt;br /&gt;
* QPR ProcessAnalyzer acts as MCP server where MCP tools are implemented using scripts. (&#039;&#039;B-09004&#039;&#039;)&lt;br /&gt;
* Frontend components have been updated. (&#039;&#039;B-09028&#039;&#039;)&lt;br /&gt;
* Connection to MEA using expression language. (&#039;&#039;B-09030&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
==Issues fixed in next release==&lt;br /&gt;
* Table column filter is not entire visible in narrow tables located in bottom of screen. (&#039;&#039;D-14783&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
==Features under work==&lt;br /&gt;
* Data models with datatables and relations can be visualized and modified with ER diagrams. (&#039;&#039;B-09023&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Note: Features and fixes currently under work are not necessarily targeting to the next release.&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=Next_Release_Roadmap&amp;diff=28036</id>
		<title>Next Release Roadmap</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=Next_Release_Roadmap&amp;diff=28036"/>
		<updated>2026-04-08T23:11:23Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--10926--&amp;gt;&lt;br /&gt;
This page contains preliminary information about new features and fixed issues in the next release.&lt;br /&gt;
&lt;br /&gt;
==New features in next release==&lt;br /&gt;
* Units can be specified for object counts for each object types in object-centric models. (&#039;&#039;B-08992&#039;&#039;)&lt;br /&gt;
* QPR ProcessAnalyzer acts as MCP server where MCP tools are implemented using scripts. (&#039;&#039;B-09004&#039;&#039;)&lt;br /&gt;
* Frontend components have been updated. (&#039;&#039;B-09028&#039;&#039;)&lt;br /&gt;
* Connection to MEA using expression language. (&#039;&#039;B-09030&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
==Issues fixed in next release==&lt;br /&gt;
* Table column filter is not entire visible in narrow tables located in bottom of screen. (&#039;&#039;D-14783&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
==Features under work==&lt;br /&gt;
* Data models with datatables and relations can be visualized and modified with ER diagrams. (&#039;&#039;B-09023&#039;&#039;)&lt;br /&gt;
* ProcessAnalyzer release 2026.3. (&#039;&#039;B-09050&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Note: Features and fixes currently under work are not necessarily targeting to the next release.&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=Next_Release_Roadmap&amp;diff=28035</id>
		<title>Next Release Roadmap</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=Next_Release_Roadmap&amp;diff=28035"/>
		<updated>2026-04-08T23:07:34Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--10926--&amp;gt;&lt;br /&gt;
This page contains preliminary information about new features and fixed issues in the next&lt;br /&gt;
&lt;br /&gt;
==New features in next release==&lt;br /&gt;
* Units can be specified for counts of each type of objects in object-centric models. (&#039;&#039;B-08992&#039;&#039;)&lt;br /&gt;
* Dashboard variables can be used in External Content component urls for dynamically changing web page. (&#039;&#039;B-08998&#039;&#039;)&lt;br /&gt;
* QPR ProcessAnalyzer acts as MCP server where MCP tools are implemented using scripts. (&#039;&#039;B-09004&#039;&#039;)&lt;br /&gt;
* Project export to file and import from file support filters stored in models. (&#039;&#039;B-09007&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
==Issues fixed in next release==&lt;br /&gt;
* Table column filter is not entire visible in narrow tables located in bottom of screen. (&#039;&#039;D-14783&#039;&#039;)&lt;br /&gt;
* Fixed issue where object-centric model queries sometimes gave inconsistent results. (&#039;&#039;D-14854&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
==Features under work==&lt;br /&gt;
* Datatables data model visualization with ER diagram. (&#039;&#039;B-09023&#039;&#039;)&lt;br /&gt;
* Connection to MEA using expression language. (&#039;&#039;B-09030&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Note: Features and fixes currently under work are not necessarily targeting to the next release.&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=Next_Release_Roadmap&amp;diff=28034</id>
		<title>Next Release Roadmap</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=Next_Release_Roadmap&amp;diff=28034"/>
		<updated>2026-04-08T23:06:55Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--10926--&amp;gt;&lt;br /&gt;
This page contains preliminary information about new features and fixed issues in the next release.&lt;br /&gt;
&lt;br /&gt;
==New features in next release==&lt;br /&gt;
* Units can be specified for counts of each type of objects in object-centric models. (&#039;&#039;B-08992&#039;&#039;)&lt;br /&gt;
* Dashboard variables can be used in External Content component urls for dynamically changing web page. (&#039;&#039;B-08998&#039;&#039;)&lt;br /&gt;
* QPR ProcessAnalyzer acts as MCP server where MCP tools are implemented using scripts. (&#039;&#039;B-09004&#039;&#039;)&lt;br /&gt;
* Project export to file and import from file support filters stored in models. (&#039;&#039;B-09007&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
==Issues fixed in next release==&lt;br /&gt;
* Table column filter is not entire visible in narrow tables located in bottom of screen. (&#039;&#039;D-14783&#039;&#039;)&lt;br /&gt;
* Fixed issue where object-centric model queries sometimes gave inconsistent results. (&#039;&#039;D-14854&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
==Features under work==&lt;br /&gt;
* Datatables data model visualization with ER diagram. (&#039;&#039;B-09023&#039;&#039;)&lt;br /&gt;
* Connection to MEA using expression language. (&#039;&#039;B-09030&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Note: Features and fixes currently under work are not necessarily targeting to the next release.&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=QPR_MEA_Integration&amp;diff=28033</id>
		<title>QPR MEA Integration</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=QPR_MEA_Integration&amp;diff=28033"/>
		<updated>2026-04-08T22:59:30Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;QPR ProcessAnalyzer is able to establish a connection to a QPR MEA (QPR Suite) instance, and call Web Service operations.&lt;br /&gt;
&lt;br /&gt;
MEA Web Service documentation: https://kb.qpr.com/qpr2025-1/qpr_web_service.html&lt;br /&gt;
&lt;br /&gt;
== MEA Connection String ==&lt;br /&gt;
To connect to QPR MEA, a MEA connection string needs to be created and stored as a [[Storing_Secrets_for_Scripts|secret]].&lt;br /&gt;
&lt;br /&gt;
The MEA connection string is a json object with following properties:&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039;: URL to the webHttp endpoint of the QPR MEA Web Service to be connected to.&lt;br /&gt;
* &#039;&#039;&#039;logOnName&#039;&#039;&#039;: Log on name of the user who will access the QPR MEA Web Service.&lt;br /&gt;
* &#039;&#039;&#039;password&#039;&#039;&#039;: User&#039;s password in QPR MEA.&lt;br /&gt;
&lt;br /&gt;
Example connection string:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ &amp;quot;url&amp;quot;: &amp;quot;https://&amp;lt;hostname&amp;gt;/QPR/Portal/QPR.Isapi.dll/wsforward/MainService.svc/webHttp&amp;quot;, &amp;quot;logOnName&amp;quot;: &amp;quot;MyUser&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;MyPassword&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Operations ==&lt;br /&gt;
=== CreateObject ===&lt;br /&gt;
Performs CreateObject function call (https://kb.qpr.com/qpr2025-1/createobject2.html), and returns the MEA ID of the created object.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;namespaceId&#039;&#039;&#039; (String): MEA ID of the namespace into which the object is to be created.&lt;br /&gt;
* &#039;&#039;&#039;objectTypeName&#039;&#039;&#039; (String): Defines the type of the new object.&lt;br /&gt;
* &#039;&#039;&#039; name&#039;&#039;&#039; (String): Defines name for the new object.&lt;br /&gt;
* &#039;&#039;&#039;parentIds&#039;&#039;&#039; (String or String*): MEA ID of parent object. If array is given, every array element specifies one ID.&lt;br /&gt;
* &#039;&#039;&#039;attributes&#039;&#039;&#039; (Dictionary): Key/value pairs of &amp;amp;lt;attribute&amp;amp;gt;/&amp;amp;lt;attribute value&amp;amp;gt; to be set for the created object.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options&lt;br /&gt;
&lt;br /&gt;
Example: Connects to the configured QPR MEA and creates a new top-level comment-action.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .CreateObject(&amp;quot;PO&amp;quot;, &amp;quot;Comment&amp;quot;, &amp;quot;Test comment&amp;quot;, &amp;quot;&amp;quot;, #{&amp;quot;description&amp;quot;: &amp;quot;Test comment description&amp;quot;});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===DeleteObject ===&lt;br /&gt;
Performs DeleteObject function call (https://kb.qpr.com/qpr2025-1/deleteobject2.html) and returns _empty.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;objectIds&#039;&#039;&#039; (String or String*): One or more MEA IDs of objects to be deleted. If array is given, every array element specifies one ID of object to be deleted.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .DeleteObject(&amp;quot;PO.0.985518423&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Connects to the configured QPR MEA and deletes object with ID PO.0.985518423.&lt;br /&gt;
&lt;br /&gt;
=== GetAttribute ===&lt;br /&gt;
Performs GetAttributeAsString function call (https://kb.qpr.com/qpr2025-1/getattributeasstring.html), and returns the value of given object&#039;s attribute as a string.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;objectId&#039;&#039;&#039; (String):  MEA ID of an object from which the attribute is fetched.&lt;br /&gt;
* &#039;&#039;&#039;attribute&#039;&#039;&#039; (String): Name of the attribute that is queried. See [supported attributes](https://kb.qpr.com/qpr2025-1/supported_parameters.html).&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the query. See (https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Connects to the configured QPR MEA and returns the name of object identified by MEA object ID: PG.785401983.683494101.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .GetAttribute(&lt;br /&gt;
    &amp;quot;[PG.785401983.683494101]&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== QueryObjects ===&lt;br /&gt;
Performs QueryObjects function call (https://kb.qpr.com/qpr2025-1/queryobjects.html), and returns the result of the query as a hierarchical dictionary object (#48320#) following the hierarchy of ResultSet-object returned by QPR MEA.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;query&#039;&#039;&#039; (String): The actual query. For more information, see the [query syntax documentation](https://kb.qpr.com/qpr2025-1/query_syntax.html)&lt;br /&gt;
* &#039;&#039;&#039;attributes&#039;&#039;&#039; (String): Comma-separated list of attributes that are included in the results.&lt;br /&gt;
      2. See [supported attributes](https://kb.qpr.com/qpr2025-1/supported_parameters.html).&lt;br /&gt;
* &#039;&#039;&#039;criteria&#039;&#039;&#039; (String): Criteria used to filter the results by.&lt;br /&gt;
      2. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=globalparameters.&lt;br /&gt;
* &#039;&#039;&#039;sortBy&#039;&#039;&#039; (String): Comma-separated list of attributes to sort the results by.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (String): Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Connects to the configured QPR MEA and returns name and typename of all the subprocesses in model identified by MEA object id PG.1374444994 whose name contains text &amp;quot;Account&amp;quot;. Results are ordered by name and only at most three results are returned.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .QueryObjects(&lt;br /&gt;
    &amp;quot;[PG.1374444994].Subprocess&amp;quot;,&lt;br /&gt;
    &amp;quot;name, typename&amp;quot;,&lt;br /&gt;
    `Find(&amp;quot;Account&amp;quot;, Name)`,&lt;br /&gt;
    &amp;quot;name&amp;quot;,&lt;br /&gt;
    &amp;quot;MaxCount=3&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SetAttribute ===&lt;br /&gt;
Performs SetAttribute (https://kb.qpr.com/qpr2025-1/setattribute.html) function call to set an attribute value.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;objectIds&#039;&#039;&#039; (String or String*): MEA ID of an object from which the attribute is fetched. If array is given, every array element specifies one ID.&lt;br /&gt;
* &#039;&#039;&#039;attribute&#039;&#039;&#039; (String): Name of the attribute that is queried. See [supported attributes](https://kb.qpr.com/qpr2025-1/supported_parameters.html). Attribute must be writeable.&lt;br /&gt;
* &#039;&#039;&#039;value&#039;&#039;&#039; (String): Value to be set for given object&#039;s attribute.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039;:  Optional options for the query. See https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options.&lt;br /&gt;
&lt;br /&gt;
Example: Connects to the configured QPR MEA and changes the name of the user identified by MEA object ID: UM.0.123 to &amp;quot;ChangedUser&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .SetAttribute(&lt;br /&gt;
    &amp;quot;[UM.0.123]&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;,&lt;br /&gt;
    &amp;quot;ChangedUser&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=QPR_MEA_Integration&amp;diff=28032</id>
		<title>QPR MEA Integration</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=QPR_MEA_Integration&amp;diff=28032"/>
		<updated>2026-04-08T22:53:00Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;QPR ProcessAnalyzer is able to establish a connection to a QPR MEA (QPR Suite) instance, and call Web Service operations.&lt;br /&gt;
&lt;br /&gt;
MEA Web Service documentation: https://kb.qpr.com/qpr2025-1/qpr_web_service.html&lt;br /&gt;
&lt;br /&gt;
== MEA Connection String ==&lt;br /&gt;
To connect to QPR MEA, a MEA connection string needs to be created and stored as a [[Storing_Secrets_for_Scripts|secret]].&lt;br /&gt;
&lt;br /&gt;
The MEA connection string is a json object with following properties:&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039;: URL to the webHttp endpoint of the QPR MEA Web Service to be connected to.&lt;br /&gt;
* &#039;&#039;&#039;logOnName&#039;&#039;&#039;: Log on name of the user who will access the QPR MEA Web Service.&lt;br /&gt;
* &#039;&#039;&#039;password&#039;&#039;&#039;: User&#039;s password in QPR MEA.&lt;br /&gt;
&lt;br /&gt;
Example connection string:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ &amp;quot;url&amp;quot;: &amp;quot;https://&amp;lt;hostname&amp;gt;/QPR/Portal/QPR.Isapi.dll/wsforward/MainService.svc/webHttp&amp;quot;, &amp;quot;logOnName&amp;quot;: &amp;quot;MyUser&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;MyPassword&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CreateObject ===&lt;br /&gt;
Performs [CreateObject](https://kb.qpr.com/qpr2025-1/createobject2.html) function call.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;namespaceId&#039;&#039;&#039;: String&lt;br /&gt;
      1. MEA ID of the namespace into which the object is to be created.&lt;br /&gt;
* &#039;&#039;&#039;objectTypeName&#039;&#039;&#039;: String&lt;br /&gt;
      1. Defines the type of the new object.&lt;br /&gt;
* &#039;&#039;&#039; name&#039;&#039;&#039;: String&lt;br /&gt;
      1. Defines name for the new object.&lt;br /&gt;
* &#039;&#039;&#039;parentIds&#039;&#039;&#039;: String / array of strings&lt;br /&gt;
      1. MEA ID of parent object.&lt;br /&gt;
      2. If array is given, every array element specifies one ID.&lt;br /&gt;
* &#039;&#039;&#039;attributes&#039;&#039;&#039;: Dictionary&lt;br /&gt;
      1. Key/value pairs of &amp;amp;lt;attribute&amp;amp;gt;/&amp;amp;lt;attribute value&amp;amp;gt; to be set for the created object.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039;: String&lt;br /&gt;
      1. Additional options for the query.&lt;br /&gt;
      2. See [supported options](https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options).&lt;br /&gt;
      3. Optional.&lt;br /&gt;
&lt;br /&gt;
Returns the MEA ID of the created object.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .CreateObject(&amp;quot;PO&amp;quot;, &amp;quot;Comment&amp;quot;, &amp;quot;Test comment&amp;quot;, &amp;quot;&amp;quot;, #{&amp;quot;description&amp;quot;: &amp;quot;Test comment description&amp;quot;});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Connects to the configured QPR MEA and creates a new top-level comment-action.&lt;br /&gt;
&lt;br /&gt;
===DeleteObject ===&lt;br /&gt;
Performs DeleteObject function call (https://kb.qpr.com/qpr2025-1/deleteobject2.html).&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;objectIds&#039;&#039;&#039;: String / array of strings&lt;br /&gt;
      1. One or more MEA IDs of objects to be deleted.&lt;br /&gt;
      2. If array is given, every array element specifies one ID of object to be deleted.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039;: String&lt;br /&gt;
      1. Additional options for the query.&lt;br /&gt;
      2. See [supported options](https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options).&lt;br /&gt;
      3. Optional.&lt;br /&gt;
&lt;br /&gt;
Returns _empty.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .DeleteObject(&amp;quot;PO.0.985518423&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Connects to the configured QPR MEA and deletes object with ID PO.0.985518423.&lt;br /&gt;
&lt;br /&gt;
=== GetAttribute ===&lt;br /&gt;
Performs GetAttributeAsString function call (https://kb.qpr.com/qpr2025-1/getattributeasstring.html).&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;objectId&#039;&#039;&#039;: String&lt;br /&gt;
      1. MEA ID of an object from which the attribute is fetched.&lt;br /&gt;
* &#039;&#039;&#039;attribute&#039;&#039;&#039;: String&lt;br /&gt;
      1. Name of the attribute that is queried. &lt;br /&gt;
      2. See [supported attributes](https://kb.qpr.com/qpr2025-1/supported_parameters.html).&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039;: String&lt;br /&gt;
      1. Additional options for the query.&lt;br /&gt;
      2. See [supported options](https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options).&lt;br /&gt;
      3. Optional.&lt;br /&gt;
&lt;br /&gt;
Returns the value of given object&#039;s attribute as a string.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .GetAttribute(&lt;br /&gt;
    &amp;quot;[PG.785401983.683494101]&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Connects to the configured QPR MEA and returns the name of object identified by MEA object ID: PG.785401983.683494101.&lt;br /&gt;
&lt;br /&gt;
=== QueryObjects ===&lt;br /&gt;
Performs QueryObjects function call (https://kb.qpr.com/qpr2025-1/queryobjects.html).&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;query&#039;&#039;&#039;: String&lt;br /&gt;
      1. The actual query. For more information, see the [query syntax documentation](https://kb.qpr.com/qpr2025-1/query_syntax.html)&lt;br /&gt;
* &#039;&#039;&#039;attributes&#039;&#039;&#039;: String&lt;br /&gt;
      1. Comma-separated list of attributes that are included in the results.&lt;br /&gt;
      2. See [supported attributes](https://kb.qpr.com/qpr2025-1/supported_parameters.html).&lt;br /&gt;
* &#039;&#039;&#039;criteria&#039;&#039;&#039;: String&lt;br /&gt;
      1. Criteria used to filter the results by.&lt;br /&gt;
      2. See [criteria documentation](https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=globalparameters).&lt;br /&gt;
* &#039;&#039;&#039;sortBy&#039;&#039;&#039;: String&lt;br /&gt;
      1. Comma-separated list of attributes to sort the results by.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039;: String&lt;br /&gt;
      1. Additional options for the query.&lt;br /&gt;
      2. See [supported options](https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options).&lt;br /&gt;
      3. Optional.&lt;br /&gt;
&lt;br /&gt;
Returns the result of the query as a hierarchical dictionary object (#48320#) following the hierarchy of ResultSet-object returned by QPR MEA.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .QueryObjects(&lt;br /&gt;
    &amp;quot;[PG.1374444994].Subprocess&amp;quot;,&lt;br /&gt;
    &amp;quot;name, typename&amp;quot;,&lt;br /&gt;
    `Find(&amp;quot;Account&amp;quot;, Name)`,&lt;br /&gt;
    &amp;quot;name&amp;quot;,&lt;br /&gt;
    &amp;quot;MaxCount=3&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Connects to the configured QPR MEA and returns name and typename of all the subprocesses in model identified by MEA object id PG.1374444994 whose name contains text &amp;quot;Account&amp;quot;. Results are ordered by name and only at most three results are returned.&lt;br /&gt;
&lt;br /&gt;
=== SetAttribute ===&lt;br /&gt;
Performs [SetAttribute](https://kb.qpr.com/qpr2025-1/setattribute.html) function call.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;objectIds&#039;&#039;&#039;: String / array of strings&lt;br /&gt;
      1. MEA ID of an object from which the attribute is fetched.&lt;br /&gt;
      2. If array is given, every array element specifies one ID.&lt;br /&gt;
* &#039;&#039;&#039;attribute&#039;&#039;&#039;: String&lt;br /&gt;
      1. Name of the attribute that is queried. &lt;br /&gt;
      2. See [supported attributes](https://kb.qpr.com/qpr2025-1/supported_parameters.html).&lt;br /&gt;
      3. Attribute must be writeable.&lt;br /&gt;
* &#039;&#039;&#039;value&#039;&#039;&#039;: String&lt;br /&gt;
      1. Value to be set for given object&#039;s attribute.&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039;: String&lt;br /&gt;
      1. Additional options for the query.&lt;br /&gt;
      2. See [supported options](https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options).&lt;br /&gt;
      3. Optional.&lt;br /&gt;
&lt;br /&gt;
Sets the value of the attribute.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .SetAttribute(&lt;br /&gt;
    &amp;quot;[UM.0.123]&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;,&lt;br /&gt;
    &amp;quot;ChangedUser&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Connects to the configured QPR MEA and changes the name of the user identified by MEA object ID: UM.0.123 to &amp;quot;ChangedUser&amp;quot;.&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=QPR_MEA_Integration&amp;diff=28031</id>
		<title>QPR MEA Integration</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=QPR_MEA_Integration&amp;diff=28031"/>
		<updated>2026-04-08T22:50:06Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;QPR ProcessAnalyzer is able to establish a connection to a QPR MEA (QPR Suite) instance, and call Web Service operations.&lt;br /&gt;
&lt;br /&gt;
== MEA Connection String ==&lt;br /&gt;
To connect to QPR MEA, a MEA connection string needs to be created and stored as a [[Storing_Secrets_for_Scripts|secret]].&lt;br /&gt;
&lt;br /&gt;
The MEA connection string is a json object with following properties:&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039;: URL to the webHttp endpoint of the QPR MEA Web Service to be connected to.&lt;br /&gt;
* &#039;&#039;&#039;logOnName&#039;&#039;&#039;: Log on name of the user who will access the QPR MEA Web Service.&lt;br /&gt;
* &#039;&#039;&#039;password&#039;&#039;&#039;: User&#039;s password in QPR MEA.&lt;br /&gt;
&lt;br /&gt;
Example connection string:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ &amp;quot;url&amp;quot;: &amp;quot;https://&amp;lt;hostname&amp;gt;/QPR/Portal/QPR.Isapi.dll/wsforward/MainService.svc/webHttp&amp;quot;, &amp;quot;logOnName&amp;quot;: &amp;quot;MyUser&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;MyPassword&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://kb.qpr.com/qpr2025-1/qpr_web_service.html&lt;br /&gt;
&lt;br /&gt;
=== CreateObject ===&lt;br /&gt;
Performs [CreateObject](https://kb.qpr.com/qpr2025-1/createobject2.html) function call.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
   1. namespaceId: String&lt;br /&gt;
      1. MEA ID of the namespace into which the object is to be created.&lt;br /&gt;
   2. objectTypeName: String&lt;br /&gt;
      1. Defines the type of the new object.&lt;br /&gt;
   3. name: String&lt;br /&gt;
      1. Defines name for the new object.&lt;br /&gt;
   4. parentIds: String / array of strings&lt;br /&gt;
      1. MEA ID of parent object.&lt;br /&gt;
      2. If array is given, every array element specifies one ID.&lt;br /&gt;
   5. attributes: Dictionary&lt;br /&gt;
      1. Key/value pairs of &amp;amp;lt;attribute&amp;amp;gt;/&amp;amp;lt;attribute value&amp;amp;gt; to be set for the created object.&lt;br /&gt;
   6. options: String&lt;br /&gt;
      1. Additional options for the query.&lt;br /&gt;
      2. See [supported options](https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options).&lt;br /&gt;
      3. Optional.&lt;br /&gt;
3. Returns the MEA ID of the created object.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .CreateObject(&amp;quot;PO&amp;quot;, &amp;quot;Comment&amp;quot;, &amp;quot;Test comment&amp;quot;, &amp;quot;&amp;quot;, #{&amp;quot;description&amp;quot;: &amp;quot;Test comment description&amp;quot;});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Connects to the configured QPR MEA and creates a new top-level comment-action.&lt;br /&gt;
&lt;br /&gt;
===DeleteObject ===&lt;br /&gt;
Performs DeleteObject function call (https://kb.qpr.com/qpr2025-1/deleteobject2.html).&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
   1. &#039;&#039;&#039;objectIds&#039;&#039;&#039;: String / array of strings&lt;br /&gt;
      1. One or more MEA IDs of objects to be deleted.&lt;br /&gt;
      2. If array is given, every array element specifies one ID of object to be deleted.&lt;br /&gt;
   2. &#039;&#039;&#039;options&#039;&#039;&#039;: String&lt;br /&gt;
      1. Additional options for the query.&lt;br /&gt;
      2. See [supported options](https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options).&lt;br /&gt;
      3. Optional.&lt;br /&gt;
&lt;br /&gt;
Returns _empty.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .DeleteObject(&amp;quot;PO.0.985518423&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Connects to the configured QPR MEA and deletes object with ID PO.0.985518423.&lt;br /&gt;
&lt;br /&gt;
=== GetAttribute ===&lt;br /&gt;
Performs [GetAttributeAsString](https://kb.qpr.com/qpr2025-1/getattributeasstring.html) function call.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* &#039;&#039;&#039;objectId&#039;&#039;&#039;: String&lt;br /&gt;
      1. MEA ID of an object from which the attribute is fetched.&lt;br /&gt;
* &#039;&#039;&#039;attribute&#039;&#039;&#039;: String&lt;br /&gt;
      1. Name of the attribute that is queried. &lt;br /&gt;
      2. See [supported attributes](https://kb.qpr.com/qpr2025-1/supported_parameters.html).&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039;: String&lt;br /&gt;
      1. Additional options for the query.&lt;br /&gt;
      2. See [supported options](https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options).&lt;br /&gt;
      3. Optional.&lt;br /&gt;
&lt;br /&gt;
Returns the value of given object&#039;s attribute as a string.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .GetAttribute(&lt;br /&gt;
    &amp;quot;[PG.785401983.683494101]&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Connects to the configured QPR MEA and returns the name of object identified by MEA object ID: PG.785401983.683494101.&lt;br /&gt;
&lt;br /&gt;
=== QueryObjects ===&lt;br /&gt;
Performs [QueryObjects](https://kb.qpr.com/qpr2025-1/queryobjects.html) function call.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
   1. query: String&lt;br /&gt;
      1. The actual query. For more information, see the [query syntax documentation](https://kb.qpr.com/qpr2025-1/query_syntax.html)&lt;br /&gt;
   4. attributes: String&lt;br /&gt;
      1. Comma-separated list of attributes that are included in the results.&lt;br /&gt;
      2. See [supported attributes](https://kb.qpr.com/qpr2025-1/supported_parameters.html).&lt;br /&gt;
   2. criteria: String&lt;br /&gt;
      1. Criteria used to filter the results by.&lt;br /&gt;
      2. See [criteria documentation](https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=globalparameters).&lt;br /&gt;
   3. sortBy: String&lt;br /&gt;
      1. Comma-separated list of attributes to sort the results by.&lt;br /&gt;
   4. options: String&lt;br /&gt;
      1. Additional options for the query.&lt;br /&gt;
      2. See [supported options](https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options).&lt;br /&gt;
      3. Optional.&lt;br /&gt;
&lt;br /&gt;
Returns the result of the query as a hierarchical dictionary object (#48320#) following the hierarchy of ResultSet-object returned by QPR MEA.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .QueryObjects(&lt;br /&gt;
    &amp;quot;[PG.1374444994].Subprocess&amp;quot;,&lt;br /&gt;
    &amp;quot;name, typename&amp;quot;,&lt;br /&gt;
    `Find(&amp;quot;Account&amp;quot;, Name)`,&lt;br /&gt;
    &amp;quot;name&amp;quot;,&lt;br /&gt;
    &amp;quot;MaxCount=3&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Connects to the configured QPR MEA and returns name and typename of all the subprocesses in model identified by MEA object id PG.1374444994 whose name contains text &amp;quot;Account&amp;quot;. Results are ordered by name and only at most three results are returned.&lt;br /&gt;
&lt;br /&gt;
=== SetAttribute ===&lt;br /&gt;
Performs [SetAttribute](https://kb.qpr.com/qpr2025-1/setattribute.html) function call.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
   1. objectIds: String / array of strings&lt;br /&gt;
      1. MEA ID of an object from which the attribute is fetched.&lt;br /&gt;
      2. If array is given, every array element specifies one ID.&lt;br /&gt;
   2. attribute: String&lt;br /&gt;
      1. Name of the attribute that is queried. &lt;br /&gt;
      2. See [supported attributes](https://kb.qpr.com/qpr2025-1/supported_parameters.html).&lt;br /&gt;
      3. Attribute must be writeable.&lt;br /&gt;
   3. value: String&lt;br /&gt;
      1. Value to be set for given object&#039;s attribute.&lt;br /&gt;
   4. options: String&lt;br /&gt;
      1. Additional options for the query.&lt;br /&gt;
      2. See [supported options](https://kb.qpr.com/qpr2025-1/parameters_and_options.html?anchor=options).&lt;br /&gt;
      3. Optional.&lt;br /&gt;
3. Sets the value of the attribute.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectByName(&amp;quot;TestProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection(#{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MeaConnection&amp;quot;})&lt;br /&gt;
  .SetAttribute(&lt;br /&gt;
    &amp;quot;[UM.0.123]&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;,&lt;br /&gt;
    &amp;quot;ChangedUser&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Connects to the configured QPR MEA and changes the name of the user identified by MEA object ID: UM.0.123 to &amp;quot;ChangedUser&amp;quot;.&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&amp;diff=28030</id>
		<title>QPR ProcessAnalyzer Release Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Release_Notes&amp;diff=28030"/>
		<updated>2026-04-08T12:51:29Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: /* Next Release: QPR ProcessAnalyzer 2026.3 (planned release during week of April 6th) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists all new features and fixed issues for each QPR ProcessAnalyzer release.&lt;br /&gt;
&lt;br /&gt;
==Next Release: QPR ProcessAnalyzer 2026.3 (planned release during week of April 6th)==&lt;br /&gt;
[[Next_Release_Roadmap|See roadmap for next release features and fixes]]&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
* QPR ProcessAnalyzer acts as MCP server where MCP tools are implemented using scripts. (B-09004)&lt;br /&gt;
* [[Object-centric_Process_Mining_Model#Configure_object-centric_model|Object count units]] can be specified for each object type in object-centric models. (B-08992)&lt;br /&gt;
* [[PA_Configuration_database_table#:~:text=DefaultColorPalette|Charts color palette]] can be changed globally to easily manage consistent visual layout. (B-08993)&lt;br /&gt;
* [[External_Content|External content component]] url supports tags refering to dashboard variables to show dynamically changing web page. (B-08998)&lt;br /&gt;
* [[QPR_ProcessAnalyzer_Project_Workspace#Exporting_Project|Project export and import]] using files support public filters stored in models. (B-09007)&lt;br /&gt;
* [[QPR_ProcessAnalyzer_KPI_Card|KPI Card]] shows null value label when data has no rows, and table and chart show &amp;quot;No data&amp;quot; message. (B-08999)&lt;br /&gt;
* [[QPR_MEA_Integration|QPR MEA web service]] can be connected using expression language. (B-09030)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
* Expression filter rules with greater/less than criteria were incorrectly applied as equal filters when editing chart filters. (D-14852)&lt;br /&gt;
* Flowchart had flows missing if shown flows were beyond the top-500 flows. (D-14848)&lt;br /&gt;
* Table column filter dialog was not entire visible in narrow tables located in bottom of screen. (D-14783)&lt;br /&gt;
* Opening Scripts tab was slow when there were scripts with long log. (D-14670)&lt;br /&gt;
* Fixed issue where object-centric model queries sometimes gave inconsistent results. (D-14854)&lt;br /&gt;
* Snowflake query gave &amp;quot;invalid identifier&amp;quot; error when there were two measures with same cases going though event measure filter. (D-14845)&lt;br /&gt;
* Filter rules drag-and-drop didn&#039;t work between expressions in the same chart. (D-14850)&lt;br /&gt;
* Clear error message is shown when invalid value is specified to dashboard aspect ratio flex, chart margin, dashboard margin, external content border width, or external content border corner radius. (D-14805)&lt;br /&gt;
* Improved error message when object-centric model perspective doesn&#039;t have the object type correctly defined. (D-14795)&lt;br /&gt;
&lt;br /&gt;
===Other improvements===&lt;br /&gt;
* Frontend components have been updated. (B-09028)&lt;br /&gt;
* Backend components have been updated. (B-09027)&lt;br /&gt;
&lt;br /&gt;
==Current Release: Additional release for QPR ProcessAnalyzer 2026.2 (build 10910) (released date 16.3.2026)==&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
* Filters report in System reports shows also other users&#039; private filters for admins. (B-09017)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
* Filter rules were lost when saving a filter with &amp;quot;Cases with specific events&amp;quot;, &amp;quot;Cases starting with&amp;quot; or &amp;quot;Cases ending to&amp;quot; rules. (D-14847)&lt;br /&gt;
* Fixed issue where object-centric models sometimes gave &amp;quot;Object &amp;lt;cachetablename&amp;gt; does not exist or not authorized&amp;quot; error. (D-14797)&lt;br /&gt;
* ExtractSap function didn&#039;t work with QPR ScriptLauncher when using secret for storing SAP password. (D-14813)&lt;br /&gt;
* Variation stepper incorrectly skipped steps when going down when variation count is maximum. (D-14844)&lt;br /&gt;
* Improved error message when creating model from filter fails. (D-14811)&lt;br /&gt;
* System dashboard names were incorrectly translated twice. (D-14841)&lt;br /&gt;
* AI Assistant had one translation missing. (D-14840)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2026.2 (build 10897) (released date 2026-02-26)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2026_2.pdf QPR_ProcessAnalyzer_2026_2.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Snowflake user-defined functions (UDF) used by QPR ProcessAnalyzer have been updated to use Python 3.13. Some of the old versions of the functions use Python 3.9 which has been deprecated by Snowflake. Although the old versions are not anymore used by QPR ProcessAnalyzer, they are not automatically deleted and thus Snowflake may send notifications about existing deprecated functions. It&#039;s recommended to remove the old functions which are following:&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V2&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V3&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V4&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V5&lt;br /&gt;
* QPRPA_UDF_BC_DURATION_BETWEEN_DATES_V6&lt;br /&gt;
* QPRPA_UDF_BPMN_CONFORMANCE_VIOLATIONS_FLOWS&lt;br /&gt;
* QPRPA_UDF_BPMN_CONFORMANCE_VIOLATIONS_FLOWS_V2&lt;br /&gt;
* QPRPA_UDF_BPMN_CONFORMANCE_VIOLATIONS_FLOWS_V3&lt;br /&gt;
* QPRPA_UDF_BPMN_IS_CONFORMANT&lt;br /&gt;
* QPRPA_UDF_BPMN_IS_CONFORMANT_V2&lt;br /&gt;
* QPRPA_UDF_BPMN_IS_CONFORMANT_V3&lt;br /&gt;
* QPRPA_UDTF_CLUSTER&lt;br /&gt;
* QPRPA_UDTF_CLUSTER_V2&lt;br /&gt;
* QPRPA_UDTF_CLUSTER_V3&lt;br /&gt;
* QPRPA_UDTF_CLUSTER_V4&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
* Fully conformant [[QPR_ProcessAnalyzer_BPMN_Editor#Auto-creating_BPMN_Diagram_from_Eventlog|BPMN diagrams]] can be created from eventlogs with proper layout and identifying exclusive and parallel gateways. (B-08900)&lt;br /&gt;
* [[Object-Centric_Flowchart|Object-centric flowchart]] flows visibility can be controlled with a stepper based on top variations, and start and end symbols can be hidden for each event type. (B-08987)&lt;br /&gt;
* Added preset for object-centric flowchart, and improved Process Discovery dashboard usage for object-centric models. (B-08863)&lt;br /&gt;
* Viewer users can [[Filtering_in_QPR_ProcessAnalyzer#Saving_filters|save private filters]] for personal use. (B-08920)&lt;br /&gt;
* [[Chart_On-screen_Settings|On-screen settings]] support static and dynamic case/event attribute values selection, and [[Chart_Linked_Settings|linked settings]] can bind to on-screen settings. (B-08814)&lt;br /&gt;
* [[AI_Root_Causes|AI root causes analysis]] related error situations are easier to resolve with easier to understand error messages. (B-08997)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
* Histogram chart did not show at all and gave a JavaScript error. (D-14801)&lt;br /&gt;
* When chart with multiple series was sorted by measure, some datapoints were not shown when visible X-axis was limited by zooming or Custom layout settings. (D-14793)&lt;br /&gt;
* Disabled filter rules were incorrectly applied for the shown items in the filter rule editing dialog. (D-14791)&lt;br /&gt;
* If there were more than one Range filter components in dashboard, periods menu incorrectly affected all of them. (D-14818)&lt;br /&gt;
* List of event types in object-centric flowchart settings didn&#039;t open if there were object types linked to none events. (D-14798)&lt;br /&gt;
* Snowflake flowchart root causes analysis gave &amp;quot;SQL compilation error&amp;quot; when run with case duration criteria. (D-14790)&lt;br /&gt;
* Term &amp;quot;Second&amp;quot; when meaning time unit was translated incorrectly in French. (D-14803)&lt;br /&gt;
* OpenTelemetry metrics were not sent to Prometheus correctly. (D-14804)&lt;br /&gt;
* Opening script editor by url didn&#039;t show project path and also javascript error appeared to console. (D-14794)&lt;br /&gt;
* Fixed issue where case attribute prediction failed when using more than one iteration. (D-14789)&lt;br /&gt;
* SQLDataFrame with several append operations had performance issue. (D-14772)&lt;br /&gt;
* Null coalescing operators didn&#039;t work correctly in chaining in expression language. (D-14762)&lt;br /&gt;
* Native app could not call procedure if project referred to other database and schema. (D-14749)&lt;br /&gt;
* Trying to create script with duplicate name gave unclear error: Cannot insert duplicate key row in object &#039;dbo.PA_SCRIPT&#039; with unique index &#039;PA_SCRIPT_UNIQUE_NAME_IN_PROJECT&#039;. (D-14784)&lt;br /&gt;
* BPMN editor popup menu was partly hidden behind other chart components. (D-14345)&lt;br /&gt;
* When going to context menu report from BPMN editor, &amp;quot;Operation was cancelled by a user&amp;quot; was given when query was in progress. (D-14807)&lt;br /&gt;
* BPMN editor tooltips measure descriptions didn&#039;t disappear at all. (D-14809)&lt;br /&gt;
* Presets benchmarking didn&#039;t work for models without case attributes. (D-14822)&lt;br /&gt;
* Object-centric filter rule editor gave javascript error when opened for case-centric model. (D-14799)&lt;br /&gt;
* Object-centric filter rule could incorrectly be dropped as root causes comparison rule. (D-14796)&lt;br /&gt;
* Localization missing for &amp;quot;Save as new filter&amp;quot; button. (D-14839)&lt;br /&gt;
&lt;br /&gt;
===Other improvements===&lt;br /&gt;
* SQL queries run in Snowflake have been further optimized. (B-08936)&lt;br /&gt;
* Snowflake stored procedures and user defined functions have been migrated to Python 3.13. (B-08984)&lt;br /&gt;
* Frontend components have been updated. (B-08991)&lt;br /&gt;
* Backend components have been updated. (B-08990)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2026.1 (build 10870) (released date 2026-01-19)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2026_1.pdf QPR_ProcessAnalyzer_2026_1.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
QPR ProcessAnalyzer Server and QPR ScriptLauncher are running on .NET 10, replacing the previous .NET 8 version. When updating to this release, make sure to install the .NET 10 Runtime ([[Updating_QPR_ProcessAnalyzer_Server|update instructions]]). While .NET 8 and .NET 10 can run side by side, .NET 8 does not need to be removed immediately. However, for security reasons, any unused .NET 8 installation should be uninstalled as soon as possible after the update.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Known issue: The histogram visualization doesn&#039;t work in this release. The issue will be fixed in the next release. Possible workaround is to use the column chart where to set no spacing between columns. This can be configured with the following [[QPR_ProcessAnalyzer_Chart#:~:text=Custom%20Layout|Custom Layout]] settings:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;plotOptions&amp;quot;: {&lt;br /&gt;
		&amp;quot;series&amp;quot;: {&lt;br /&gt;
			&amp;quot;pointPadding&amp;quot;: 0,&lt;br /&gt;
			&amp;quot;groupPadding&amp;quot;: 0&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*Object-centric models support versatile [[Filtering_in_QPR_ProcessAnalyzer|object-centric filters]] based on case-centric filter rules using perspective. (B-08595)&lt;br /&gt;
*[[AI_Root_Causes|AI Root Causes analysis]] is shown in a hierarchy for easier readability. (B-08921)&lt;br /&gt;
*[[Process_Flowchart|Case-centric flowchart]] performance has been improved by making all queries simultaneously. (B-08916)&lt;br /&gt;
* Object counts indicator is hidden for object-centric models when perspective is not set. (B-08825)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
* Filter to exclude case attribute values incorrectly excluded null values even if null wasn&#039;t selected. (D-14773)&lt;br /&gt;
*Prediction generated invalid models where case IDs in events datatable didn&#039;t exist in cases datatable. (D-14758)&lt;br /&gt;
* AI Root Causes presets didn&#039;t work with models without case attributes. (D-14759)&lt;br /&gt;
* Snowflake query with multiple columns with aggregations and Coalesce function gave &amp;quot;invalid identifier&amp;quot; error. (D-14763)&lt;br /&gt;
*Dropdown list to add business calendar holidays from other model shows empty items. (D-14786)&lt;br /&gt;
*In-memory Average function didn&#039;t work when aggregating dates using model&#039;s Attribute function. (D-14761)&lt;br /&gt;
*Sometimes opening models list gave error &amp;quot;User doesn&#039;t have permission GenericRead to model&amp;quot;. (D-14742)&lt;br /&gt;
&lt;br /&gt;
===Other improvements=== &lt;br /&gt;
*[[QPR_ProcessAnalyzer_Security_Hardening#Added_HTTP_Headers|Content-security-policy]] img-src blob: directive has been restored for Highcharts image export. (B-08904)&lt;br /&gt;
*Backend components have been updated [[Updating_QPR_ProcessAnalyzer_Server|including .NET 10]]. (B-08926)&lt;br /&gt;
*Frontend components have been updated. (B-08927)&lt;br /&gt;
&lt;br /&gt;
==Additional release for QPR ProcessAnalyzer 2025.7 (build 10845) (released 2025-12-11)==&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*QPR ProcessAnalyzer can be deployed on-premise using [[Deploy_QPR_ProcessAnalyzer_from_Container|Linux containers]]. (B-08915)&lt;br /&gt;
*Snowflake SQL queries have been simplified to improve performance, e.g., when quering flows. (B-08901)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues=== &lt;br /&gt;
*ODBC and Loading script models, and models with calculated attributes didn&#039;t allow to create or modify case and event attribute filters from header. (D-14751)&lt;br /&gt;
*Fixed incompatibility issue when using Keycloak as identity provider for SAML authentication. (D-14757)&lt;br /&gt;
*System report for users incorrectly listed some users with read-only permissions as Developers (issue with the EffectivePermissionTypesFor function). (D-14748)&lt;br /&gt;
*Referrer-Policy HTTP header was incorrectly set to &amp;quot;same-origins&amp;quot; causing browser console error in Windows deployments. (D-14736)&lt;br /&gt;
*Fixed issue where QPR ProcessAnalyzer request ID was not added to Snowflake data modification queries. (D-14728)&lt;br /&gt;
*Login request duration was incorrectly shown as zero or negative in System reports. (D-14737)&lt;br /&gt;
*In chart settings, some Snowflake measures with aggregations were missing possibility to define percentile value. (D-14276)&lt;br /&gt;
*Fixed issue where it was not possible to delete a model with same name in the same project during the same session. (D-14708)&lt;br /&gt;
*Script editor to specific script can now be opened with a direct url containing the script_editor parameter. (D-14745)&lt;br /&gt;
*Fixed issue were sometimes an incorrect error code was given for a cancelled query. (D-14755)&lt;br /&gt;
*Improved error message if model loading fails when loading script returns incorrect type of data. (D-14637)&lt;br /&gt;
*Fixed issue where variations query with sampling was slow for new models. (D-14729)&lt;br /&gt;
*Added tooltip to gantt chart&#039;s table layout header so that the header text can be fully seen. (D-13748)&lt;br /&gt;
*Switching between Snowflake and in-memory chart by adjusting chart configuration json caused some items in chart settings to appear twice. (D-14667)&lt;br /&gt;
*Selecting model in dashboard when previously there was no model selected and going back to Workspace, gave error message. (D-14735)&lt;br /&gt;
*Query Designer gave untranslated error message: &amp;quot;You don&#039;t have permissions to model ...&amp;quot;. (D-14727)&lt;br /&gt;
*Query Designer gave untranslated error message &amp;quot;Unable to use Snowflake tables as data source for in-memory query&amp;quot;. (D-14683)&lt;br /&gt;
*In Query Designer, table column menu gave JavaScript error for columns where first row was null. (D-14684)&lt;br /&gt;
*Query Designer incorrectly gave message &amp;quot;There are no columns in the data&amp;quot; when the data had no rows. (D-14692)&lt;br /&gt;
*Fixed issue in Manage Users dialog where row selections disappeared when resizing the dialog. (D-14647)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.7 (build 10821) (released 2025-11-13)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_7.pdf QPR_ProcessAnalyzer_2025_7.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Known issue: Creating case and event attribute filters in dashboards is not possible from the main header for the following types of in-memory models and attributes:&lt;br /&gt;
*Any attributes for [[QPR_ProcessAnalyzer_Model_Datasources#ODBC_Datasource|ODBC loaded models]]&lt;br /&gt;
*Any attributes for [[QPR_ProcessAnalyzer_Model_Datasources#Loading_Script|Loading script models]]&lt;br /&gt;
*Calculated attributes in any in-memory models.&lt;br /&gt;
&lt;br /&gt;
Workaround is to create the filter rule in a chart&#039;s settings and drag-and-drop it to the header. The issue has been fixed by the next release (D-14751). The issue does not concern Snowflake models.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features ===&lt;br /&gt;
*Presets added for [[AI_Root_Causes|AI Root Causes analysis]] based on Snowflake Top Insights which is a decision tree model finding combinations of root cause contributors. (B-08889)&lt;br /&gt;
*Added new [[Range_Filter|filter selector]] component to dashboards to easily create date and number range filters. (B-08877)&lt;br /&gt;
*Projects can be browsed in the [[Navigation_Menu|navigation menu]] to access all dashboards, and also organized the menu into two columns. (B-08708)&lt;br /&gt;
*When QPR ProcessAnalyzer is [[Embed_to_Website|embedded to a website]], SAML authentication is performed in a separate window for more robust operation. (B-08871)&lt;br /&gt;
*For more flexible options, [[AI_Agent|AI Agents]] runs the language model query using the Snowflake account where the selected model is located. (B-08860)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*If DefaultUiLanguage in PA_CONFIGURATION table was not defined, users who haven&#039;t changed language could not login. (D-14706)&lt;br /&gt;
*Improved performance in opening dashboard. (D-14705)&lt;br /&gt;
* Snowflake Native App didn&#039;t show the version number and build timestamp correctly. (D-14703)&lt;br /&gt;
*Snowflake Native App activation failed with a custom compute pool if container service was in the suspended state. (D-14722)&lt;br /&gt;
*Server stuck when trying to generate SQL for SqlDataFrame having multiple columns with the same name. (D-14730)&lt;br /&gt;
*In eventlog prediction, fixed issues preventing the usage of case attribute value prediction. (D-14702)&lt;br /&gt;
*Snowflake DurationBetweenDates function calculated incorrectly when used in a in divisor. (D-14723)&lt;br /&gt;
* Import now succeeds when importing Snowflake datatables refering to data without access. (D-14694)&lt;br /&gt;
*Fixed incorrect color in table column filters, and Workspace loading time has been improved. (D-14704)&lt;br /&gt;
* Fixed issue where dropdown list with projects showed &amp;quot;undefined&amp;quot; in place of project id. (D-14659)&lt;br /&gt;
*Fixed issue where specifying a secret name longer than 440 characters, prevented saving the secret and resulted in an error. (D-14674)&lt;br /&gt;
* SAML authentication failed when it needed to create a new user to QPR ProcessAnalyzer. (D-14717)&lt;br /&gt;
* Fixed issue where SQL dataframe queries didn&#039;t work if the root expression ended to a semicolon. (D-14714)&lt;br /&gt;
*Specific Snowflake query with a comparison criteria, AggregateFrom and GetValueFrom functions gave error about invalid identifier. (D-14718)&lt;br /&gt;
&lt;br /&gt;
===Other improvements=== &lt;br /&gt;
*[[QPR_ProcessAnalyzer_Security_Hardening#HTTP_Response_Headers|Content-Security-Policy HTTP header]] has been reduced to more secure by removing the script-src &#039;unsafe-eval&#039; and img-src &#039;blob&#039; directives. (B-08897)&lt;br /&gt;
*Added [[QPR_ProcessAnalyzer_Security_Hardening#HTTP_Response_Headers|security related HTTP headers]]: X-Permitted-Cross-Domain-Policies, Cross-Origin-Embedder-Policy, Cross-Origin-Opener-Policy, Cross-Origin-Resource-Policy, Referrer-Policy, and Permissions-Policy. (B-08879)&lt;br /&gt;
*Implemented backend support for Snowflake Top Insights for [[SqlDataFrame_in_Expression_Language#:~:text=TopInsights|AI root causes analysis]]. (B-08664)&lt;br /&gt;
*Implemented improved error handling when trying to save too long text to database. (B-08892)&lt;br /&gt;
*For more understandable error messages, error handling and error message generation have been refactored. (B-08754)&lt;br /&gt;
*Optimized database queries and reduced log writing. (B-08870)&lt;br /&gt;
*Frontend components have been updated. (B-08899)&lt;br /&gt;
*Backend components have been updated. (B-08898)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.6 (build 10690) (released 2025-10-01)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_6.pdf QPR_ProcessAnalyzer_2025_6.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Known issue: If the [[PA_Configuration_database_table#:~:text=DefaultUiLanguage|DefaultUiLanguage]] system configuration is not defined, users who haven&#039;t changed their own language, are unable to login. To prevent this problem, please ensure the DefaultUiLanguage is defined. The next release has fixed this issue (D-14706).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Content-Security-Policy (CSP) HTTP header has been updated to enhance security by implementing more restrictive settings. The following directives have been added:&lt;br /&gt;
*object-src &#039;none&#039;&lt;br /&gt;
*frame-ancestors &#039;self&#039;&lt;br /&gt;
*form-action &#039;none&#039;&lt;br /&gt;
*base-uri &#039;none&#039;&lt;br /&gt;
*worker-src blob:&lt;br /&gt;
&lt;br /&gt;
These new restrictions may affect usage that has previously been possible. For example, with the new settings, QPR ProcessAnalyzer can be embedded to a website only within the same origin. For detailed instructions on embedding QPR ProcessAnalyzer on a different website, please refer to [[Embed_to_Website|this quide]]. Additionally, for information on modifying the CSP settings, see documentation for [[QPR_ProcessAnalyzer_Security_Hardening#HTTP_Response_Headers|security hardening]].&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
In the QPR ProcessAnalyzer 2025.6 Native App, the release version number is not displayed correctly in the User Settings dialog. This omission does not have any other complications. QPR ProcessAnalyzer 2025.6 is the only release with this issue, making it possible to identify this release despite the missing version number. This issue is specific to the Native App only. The next release has fixed this issue (D-14703).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*[[User_Settings#Starting_dashboard|Starting dashboard]] after login can be defined for user groups, allowing to create customized starting pages for easy navigation. (B-08791)&lt;br /&gt;
*Snowflake [[QPR_ProcessAnalyzer_Chart#Filtering_Settings|chart&#039;s event filters]] are now embedded to filters created from chart, to precisely follow chart calculation. (B-08845)&lt;br /&gt;
*Result data can be filtered in Snowflake charts using [[QPR_ProcessAnalyzer_Chart#:~:text=Result%20filtering%20expression|result filtering expression]] which works for any datasets. (B-08751)&lt;br /&gt;
*Filter rules order now stays the same when making filter selections and confirming filter. (B-08801)&lt;br /&gt;
*Added model setting [[QPR_ProcessAnalyzer_Project_Workspace#Hiding_Object_Count_Statistics|Show object count statistics]] to hide object counts information in dropdown lists to optimize performance. (B-08849)&lt;br /&gt;
*Added support for [[Chart_On-screen_Settings#:~:text=showStatistics|hiding statistics for on-screen setting]] dropdown lists to improve performance, and in addition the case ID is hidden Case/Event attribute profiling presets. (B-08840)&lt;br /&gt;
*Added following audit fields to users and groups: Created date, Created by, Last modified date, and Last modified by. (B-08792)&lt;br /&gt;
*Snowflake Native App: Added procedure to that [[QPR_ProcessAnalyzer_Native_App_in_Snowflake#Recover_administrator_access|creates administrator user to Native App]] if access to the app has been lost. Also, prevented user management operations that remove own access. (B-08733)&lt;br /&gt;
*Snowflake Native App: Added procedure to [[Change_Native_App_Compute_Pool_Size|change Native App compute pool size]]. Changed new Native Apps to use CPU_X64_S size compute pool, and improved Native App stability. (B-08859)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues=== &lt;br /&gt;
*Snowflake Cortex based AI Assistant didn&#039;t show the results table. (D-14643)&lt;br /&gt;
*When percent stacking is used, Y-axis values are now shown as percentages in data label and tooltip. (D-14633)&lt;br /&gt;
*Fixed issue where Label&amp;amp;Link component had sometimes unnecessary vertical scrollbar. (D-14685)&lt;br /&gt;
*Model validation showed incorrect error message for models with numeric duplicate case ID&#039;s. (D-14687)&lt;br /&gt;
*In Workspace, scripts &amp;quot;View current run log&amp;quot; dialog didn&#039;t update log correctly when new entries were added. (D-14662)&lt;br /&gt;
*Event type mapping in charts didn&#039;t work in object-centric models. (D-14620)&lt;br /&gt;
*Model generation didn&#039;t work as transformation step using _system.ML.ApplyTransformation function. (D-14654)&lt;br /&gt;
*Others aggregation has been removed from date type of dimensions because tables don&#039;t work with textual data in date columns. (D-14623)&lt;br /&gt;
*Fixed issue in AI Assistant where using both Snowflake Cortex and OpenAI modes caused error. (D-14646)&lt;br /&gt;
*In User Management Effective permissions table, column filter incorrectly showed &amp;quot;true&amp;quot; and &amp;quot;false&amp;quot; as options. (D-14639)&lt;br /&gt;
*Pivot table incorrectly showed &amp;quot;Numeric value is not recognized&amp;quot; error when Count or Unique count aggregations were used. (D-14559)&lt;br /&gt;
*Workspace buttons are now visible in small screens spanning to multiple lines. (D-14587)&lt;br /&gt;
*Added tooltip text to &amp;quot;Move to&amp;quot; submenu containing projects so that long project names can be seen. (D-14612)&lt;br /&gt;
*Translation was missing from error messages when deleting items from recycle bin. (D-14652)&lt;br /&gt;
*Fixed data type related issues with in-memory Floor, Ceiling and aggregation functions. (D-14622)&lt;br /&gt;
*Optimized resource loading by getting rid of unnecessary file assets/i18n/en_US.json. (D-14641)&lt;br /&gt;
*Fixed issue where opening script editor gave javascript error about content-security-policy violation. (D-14627)&lt;br /&gt;
*Fixed issue in charts showing datatable content had a strange error when datatable was not selected. (D-14650)&lt;br /&gt;
*Fixed incorrect data types in some project, user and group related measures. (D-14619)&lt;br /&gt;
* Fixed issue where moving expression scripts was not possible when SQL Scripting was not allowed. (D-14624)&lt;br /&gt;
*Deleting and renaming scripts were not available for expression scripts when SQL Scripting was not allowed. (D-14625)&lt;br /&gt;
*Improved documentation for situation when non-existing Snowflake warehouse is configured for a model. (D-14543)&lt;br /&gt;
*Project properties dialog shows a descriptive text when no secrets have been defined instead of an empty table. (D-14611)&lt;br /&gt;
* Improved messages and New project button visibility in Workspace top level when no projects are shown. (D-14609)&lt;br /&gt;
*Event preset gave error if enabling Apply with Chart Filters setting and trying to create filters. (D-14695)&lt;br /&gt;
&lt;br /&gt;
===Other improvements===&lt;br /&gt;
*Added QPR ProcessAnalyzer API request ID to Snowflake queries to easily find matching query in Snowflake query history. (B-08839)&lt;br /&gt;
*[[QPR_ProcessAnalyzer_Security_Hardening#Added_HTTP_Headers|Content Security Policy HTTP header]] includes now object-src, frame-ancestors, form-action, base-uri, and worker-src. (B-08794)&lt;br /&gt;
*Snowflake queries have been optimized by removing null and empty string checks from mapped columns as they are now handled by the model validation check. (B-08837)&lt;br /&gt;
*Added backend support for object-centric model filtering based on case-centric filter rules. (B-08836)&lt;br /&gt;
*Frontend components have been updated. (B-08851)&lt;br /&gt;
*Backend components have been updated. (B-08852)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.5 (build 10361) (released 2025-08-21)==&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_5.pdf QPR_ProcessAnalyzer_2025_5.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
When using Snowflake Cortex, the AI Assistant is not showing the results table in the assistant&#039;s response. This issue has been fixed by the next release.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===  &lt;br /&gt;
*[[Object-Centric_Flowchart|Object-centric flowchart]] can also use object-to-object relations to link events and objects simplifying event-to-object configuration. (B-08671)&lt;br /&gt;
*[[AI_Assistant_for_QPR_ProcessAnalyzer|AI Assistant]] can provide precise quantitative analysis by making queries to eventlog data (powered by Snowflake Cortex Analyst and Agents). (B-08652)&lt;br /&gt;
*[[Filtering_in_QPR_ProcessAnalyzer|Flows and variations can be filtered]] from any event attribute viewpoint in Snowflake. (B-08737)&lt;br /&gt;
* Added [[Project_Properties_Dialog|project properties dialog]] for viewing project information, changing Snowflake connection settings and project secrets. (B-08655)&lt;br /&gt;
*[[QPR_ProcessAnalyzer_Project_Workspace#Validating_Model|Model validity check]] easily detects technically invalid models and shows detailed reason for invalidity. (B-08624)&lt;br /&gt;
*Projects can be [[QPR_ProcessAnalyzer_Project_Workspace#Exporting_Project|exported]] to json files and imported as new projects. (B-08717)&lt;br /&gt;
*Action buttons can be added to dashboard by defining [[Label_and_Link|label component]] that can change dashboard variables and run scripts. (B-08694)&lt;br /&gt;
*Web user interface is available in [[Languages_and_Localization|Ukrainian language]]. (B-08734)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Fixed following error when performing client-side SAP import: Could not find a part of the path (QPR_ImportSource_Chunk_*.tmp). (D-14589)&lt;br /&gt;
*Fixed issue where ManageProjects permission was incorrectly required when running scripts using QPR ScriptLauncher non-legacy mode. (D-14562)&lt;br /&gt;
*Fixed following error when using SAP import from SQL script called from expression language called from SQL: The given key &#039;&#039; was not present in the dictionary. (D-14593)&lt;br /&gt;
*Some analyses didn&#039;t work, when case ID columns for cases and events datatables differed only in upper/lowercase letters. (D-14556)&lt;br /&gt;
*Business calendar didn&#039;t work for some measures/dimensions/columns and some had business calendar checkboxes missing. (D-14563)&lt;br /&gt;
*Prediction failed to following error: transformer_model_next_activity/event_year_input_embedding. (D-14551)&lt;br /&gt;
*Scripting now works correctly after rows from PA_OPERATION_STATUS table have been deleted. (D-14545)&lt;br /&gt;
*Fixed issue where case-centric flowchart was very slow for object-centric model. (D-14544)&lt;br /&gt;
*Prevented creating dashboards, models and scripts with duplicate names in the same project. (D-09480)&lt;br /&gt;
*KPI Card now shows line breaks correctly in textual values. (D-14546)&lt;br /&gt;
*Improved table Excel export for list data to show items with separator character instead of showing as JSON. (D-14479)&lt;br /&gt;
*Column showing non-conformance reason was incorrectly aligned to right. (D-14570)&lt;br /&gt;
*GetRelatedValueFrom function caused column name conflict when used multiple times in same query. (D-14591)&lt;br /&gt;
* Fixed issue where in-memory sorting for arrays gave &amp;quot;Error in sorting analysis result rows possibly due to multiple types of values ...&amp;quot;. (D-14592)&lt;br /&gt;
*Array type of values were shown incorrectly when used Last Row Aggregates Over-limit Rows setting. (D-14616)&lt;br /&gt;
*Fixed the &amp;quot;Most common&amp;quot; text aggregation sorting error for in-memory calculation. (D-14573)&lt;br /&gt;
*Snowflake model validation gave incorrect error message when mapped column didn&#039;t exist in datatable. (D-14565)&lt;br /&gt;
*Improved model validation to detect when connection string key for model or datatable does not exist. (D-14607)&lt;br /&gt;
* Model validation gave incorrect error when when events datatable case id mapping was missing. (D-14566)&lt;br /&gt;
*Model validation gave incorrect error message when cases and events datatables were in different datasources. (D-14567)&lt;br /&gt;
*Model validation gave incorrect error message when underlying Snowflake table didn&#039;t exist. (D-14568)&lt;br /&gt;
*Workspace Card/Table mode toggle buttons were not translated. (D-14547)&lt;br /&gt;
*Some invalid queries gave unexpected errors and strange outputs. (D-14569)&lt;br /&gt;
* Added translations to model notifications preview table headers. (D-14590)&lt;br /&gt;
* Added translations to access denied message for header object counts indicator. (D-13967)&lt;br /&gt;
* AI Assistant explaining charts speaks now user interface language. (D-14578)&lt;br /&gt;
* AI Agent prompt chart editor didn&#039;t show correctly if model was not selected. (D-14536)&lt;br /&gt;
*AI Assistant gave &amp;quot;Unsupported cache table type&amp;quot; error when trying to explain object-centric flowchart. (D-14477)&lt;br /&gt;
&lt;br /&gt;
===Other improvements ===&lt;br /&gt;
*When trying to open dashboard with an invalid model, the precise model validation error message is shown. (B-08629)&lt;br /&gt;
*Account locked message is now same as username/password incorrect to prevent account enumeration attack. (B-08740)&lt;br /&gt;
*Stringified value format supports also json objects. (B-08766)&lt;br /&gt;
*Event attribute used as event type can be defined for flow and variation filters in Snowflake models (backend support). (B-08705)&lt;br /&gt;
*Translations have been updated. (B-08757)&lt;br /&gt;
*Frontend components have been updated. (B-08760)&lt;br /&gt;
*Backend components have been updated. (B-08759)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.4 (build 9985) (released 2025-05-28)==&lt;br /&gt;
&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_4.pdf QPR_ProcessAnalyzer_2025_4.pdf]&lt;br /&gt;
&lt;br /&gt;
===New features ===&lt;br /&gt;
*Added new AI Agent presets analyzing current state and proposing improvements based on different viewpoints, such as Event and Case Counts, Automation, Bottlenecks, and Root Causes. (B-08710)&lt;br /&gt;
*Added a [[Filter_Selectors#Filter_selector|generic filtering component]] that can be configured for creating any type of filters for distinct values. (B-08654)&lt;br /&gt;
*Volume declining in measures due to case sampling can be compensated in chart and flowchart by using a [[Measure,_Dimension_and_Column_Settings#Statistical_calculations|Statistical calculation method]]. (B-08598)&lt;br /&gt;
*In object-centric models, Object ID, Event ID, Event timestamp, and Event type [[Object-centric_Process_Mining_Model#Object-centric_perspectives|attribute names]] are shown correctly. (B-08680)&lt;br /&gt;
*Snowflake native app has now [[QPR_ProcessAnalyzer_Native_App_in_Snowflake#User_access_to_application|application roles]] for user (for using app) and administrator (for managing app). (B-08660)&lt;br /&gt;
*For Snowflake native app, IMPORTED PRIVILEGES ON SNOWFLAKE DB privilege is removed and instead the [[QPR_ProcessAnalyzer_Native_App_in_Snowflake#Optional_privilege_for_AI_Agent|CORTEX_USER database role]] can be assigned. (B-08718)&lt;br /&gt;
*[[QPR_ProcessAnalyzer_Native_App_in_Snowflake#Logging|Native app logging]] has been improved and now sharing application logs with QPR is possible. (B-08661)&lt;br /&gt;
* Added [[DataFrame_in_Expression_Language#CsvToDataFrame|CsvToDataFrame]] function to expression language to convert textual CSV data into in-memory dataframe. (B-08246)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Fixed &amp;quot;Invalid identifier&amp;quot; error when opening attribute selection list for case attribute preset caused by object id columns which differed only by letter capitalization. (D-14539)&lt;br /&gt;
*When Image component is clicked in dashboard edit mode, the component is now selected instead of link followed. (D-14525)&lt;br /&gt;
*Filters created from dimensions having dimension-specific filter rules will now create expression filter rule where dimensions-specific filter is embedded, for accurately following the selection. (D-14499)&lt;br /&gt;
*Filtering variations or list of event attribute values didn&#039;t work in in-memory models. (D-14476)&lt;br /&gt;
*Fixed issue where AI Agent didn&#039;t update when dashboard variable changed used by prompt chart. (D-14537)&lt;br /&gt;
* Fixed issue where some statistical calculations inadvertently changed row order when applying in groups. (D-14495)&lt;br /&gt;
*In in-memory models, array type of data was not dimensioned correctly. (D-14518)&lt;br /&gt;
* AI Agent Process Variations preset gave &amp;quot;division by zero&amp;quot; error when there were zero cases. (D-14508)&lt;br /&gt;
*Table grouping header labels were not formatted correctly. (D-14514)&lt;br /&gt;
*Fixed Root causes analysis to work with object-centric models. (D-14515)&lt;br /&gt;
*Filtering by OcelObjectId didn&#039;t work when model didn&#039;t have object type table for perspective used in filter. (D-14522)&lt;br /&gt;
*Fixed Root causes analysis with weighting expression to work with object-centric models. (D-14517)&lt;br /&gt;
*Fixed issue where persisting query results where query is started from datatable having custom table name overwrote data in original table. (D-14528)&lt;br /&gt;
*Flowchart SVG export did not show start and end symbols. (D-12401)&lt;br /&gt;
*Fixed issue where join operation didn&#039;t find renamed columns in SqlDataFrames. (D-14512)&lt;br /&gt;
*Improved chart filtering button positions to work with small chart sizes. (D-14509)&lt;br /&gt;
*Datatable foreign key columns dictionary data type was incorrect preventing reading columns information. (D-14505)&lt;br /&gt;
*Workspace scripts editor allowed to change script code for viewer users (altough not save it). (D-14534)&lt;br /&gt;
* In chart custom sorting, trying to refer to measure that had None aggregation, caused SQL compilation error. (D-14526)&lt;br /&gt;
*Model validation check crashed when the datatables were in different datasources. (D-14502)&lt;br /&gt;
&lt;br /&gt;
===Other improvements=== &lt;br /&gt;
*Added expression language functions for using Snowflake Cortex Agents with Cortex Analyst access to query eventlogs. (B-08647)&lt;br /&gt;
*Projects can be export and imported in JSON format containing dashboards, models, datatables and scripts. (B-08613)&lt;br /&gt;
*Simplified object-centric model queries by accepting OcelObjectId as object attribute name in filters. (B-08702)&lt;br /&gt;
*Streamlined import API by removing importMode parameter and changing default fileType to CSV. (B-08704)&lt;br /&gt;
*Frontend components have been updated. (B-08695)&lt;br /&gt;
*Backend components has been updated. (B-08696)&lt;br /&gt;
&lt;br /&gt;
==Additional release for QPR ProcessAnalyzer 2025.3 (build 9805) (released 2025-04-30)==&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*Navigation menu is now displaying dashboards from open dashboard&#039;s project or from selected Workspace project (earlier dashboards were shown from the selected model&#039;s project). (B-08673)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues === &lt;br /&gt;
*Fixed issue where AI Agent made unnecessary queries when filtering dashboard, and also opening dashboard with lot of chart may have been slow. (D-14503)&lt;br /&gt;
*When datatable columns were modified, queries to the data may have given &amp;quot;Invalid identifier&amp;quot; error. (D-14507)&lt;br /&gt;
*Clustering analysis didn&#039;t work with object-centric models. (D-14486)&lt;br /&gt;
*When a new groups is added, it&#039;s selected by default in the Manage Users dialog. Also clicking a selected group does not deselect it. (D-14491)&lt;br /&gt;
*Deleting last group didn&#039;t remove the group from the list. (D-14504)&lt;br /&gt;
&lt;br /&gt;
==Additional release for QPR ProcessAnalyzer 2025.3 (build 9725) (released 2025-04-23)==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
There is an issue causing some dashboards having more than 50 charts to open slowly. The issue has been fixed in the next release by D-14503.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Fixed Issues=== &lt;br /&gt;
*Fixed issue where system stopped responding after opening Scripts tab several times (error in logs: Timeout expired prior to obtaining a connection from the pool). (D-14506)&lt;br /&gt;
*Fixed issue where the object-centric models object types tables didn&#039;t work without the timestamp column. (B-08683)&lt;br /&gt;
*Snowflake cache tables are now created after initiating calculation is completed to improve performance. (D-14460)&lt;br /&gt;
*Fixed issue in User Management where assigning role to project or adding user to group was not saved when there was a column filter. (D-14124)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.3 (build 9699) (released 2025-04-16)==&lt;br /&gt;
&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_3.pdf QPR_ProcessAnalyzer_2025_3.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
There is a potentially serious issue that can cause the system to stop responding, when opening the Scripts tab in the Workspace. The issue has been fixed in the next release (build 9725) by D-14506.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Object-centric model simplification in the story B-08667 (object attributes can only have a single value) doesn&#039;t work with this release. The issue has been fixed in the next release (build 9725) by B-08683.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*Enhanced [[AI Agent]] with UI for editing prompt datasets, and added checkbox to include other charts in dashboard to prompt. (B-08641)&lt;br /&gt;
*In [[Object-centric_Process_Mining_Model|object-centric models]], object-to-object relations are now followed by traversing once all object types. (B-08606)&lt;br /&gt;
*In object-centric models, event type and object type tables are not mandatory anymore, and common attributes can be specified in events and objects tables. (B-08663)&lt;br /&gt;
*Object-centric models support simplified structure where object attributes can only have a single value. (B-08667)&lt;br /&gt;
*Object relation steps setting can be empty to traverse all linked objects in the object-centric model. (B-08668)&lt;br /&gt;
*Snowflake Event Types preset has been improved by adding suggestion of desired and undesired activities based on frequency of occurrence. (B-08656)&lt;br /&gt;
* Added checkbox for [[Measure,_Dimension_and_Column_Settings#Advanced_settings|disabling filtering]] for individual dimensions or columns. (B-08589)&lt;br /&gt;
*Case and event attributes dropdown lists show number of unique values in Snowflake models (instead of attribute datatype as previously). (B-08316)&lt;br /&gt;
*[[SAML_2.0_Federated_Authentication|SAML authentication]] can now synchronize user groups from identity provider. (B-08612)&lt;br /&gt;
*Groups can be [[Manage_Users_and_Groups#Deleting_Group|deleted]] in user management. (B-08330)&lt;br /&gt;
*[[Storing_Secrets_for_Scripts|Secrets]] can be defines as global that can be used by all projects. To set global secrets, [[Generic_Functions_in_QPR_ProcessAnalyzer#SetSecret|SetSecret]] function works also in the generic context. (B-08599)&lt;br /&gt;
*Snowflake [[Clustering_Analysis|Clustering analysis]] shows now number of event occurrences as features describing clusters. (B-08353)&lt;br /&gt;
*Model validity check has been extended to find issues in the eventlog data for Snowflake case-centric models. (B-07910)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Fixed a potential issue which could have leaked database connections and caused connection pool starvation. (D-14414)&lt;br /&gt;
*Renewed self-signed certificate used by SAML 2.0 authentication with ten years of validity. (D-14424)&lt;br /&gt;
*Improved CallWebService function to send request body when using DELETE method. (D-14488)&lt;br /&gt;
* Login page now shows correct error message when there are serious system errors during login. (D-14480)&lt;br /&gt;
*&amp;quot;Datatable contents (in-memory)&amp;quot; option now works also with Snowflake datatables. (D-14391)&lt;br /&gt;
*Added maximum data size limitation to AI assistant to avoid error with large datasets. (D-14419)&lt;br /&gt;
*Day of the Year/Week/Month/Quater selection didn&#039;t work with specific event time in in-memory chart. (D-14421)&lt;br /&gt;
*KPI card now shows a scrollbar when content doesn&#039;t fit to the available space. (D-13428)&lt;br /&gt;
* Workspace projects hierarchy tooltips didn&#039;t show special characters correctly. (D-14430)&lt;br /&gt;
*BPMN editor crashed when creating filter from tasks giving following error: Cannot read properties of null (reading &#039;querySelector&#039;). (D-14399)&lt;br /&gt;
*Value expressions didn&#039;t work that are referred in dimension and containing aggregation. (D-13624)&lt;br /&gt;
* Fixed issue where object-centric flowchart filter selection gave error when case-centric model was selected. (D-14408)&lt;br /&gt;
*Fixed issue where query to non-existing model incorrectly returned &amp;quot;Sequence contains no elements&amp;quot;. (D-14402)&lt;br /&gt;
*Incorrect StringifiedValues in chart settings and expression filter rule caused UI to stuck. (D-14485)&lt;br /&gt;
*Table column filter value list didn&#039;t show the null value label correctly. (D-13844)&lt;br /&gt;
*&amp;quot;Visualize list items with colors&amp;quot; setting didn&#039;t work with the &amp;quot;Last Row Aggregates Over-limit Rows&amp;quot; setting. (D-14357)&lt;br /&gt;
*Made sure that failed queries are not added to model filter cache. (D-14484)&lt;br /&gt;
*Chart settings crashed when trying to use without model selected giving following error: Cannot read properties of undefined (reading &#039;injectValue&#039;). (D-14395)&lt;br /&gt;
*Fixed issue where chart settings opened on top of full screen BPMN editor. (D-14472)&lt;br /&gt;
*Show details button in some error messages didn&#039;t have any effect when pressed. (D-14490)&lt;br /&gt;
*Model validation message was incorrect for model where other datatable is Snowflake and other SQL Server. (D-14475)&lt;br /&gt;
&lt;br /&gt;
=== Other improvements=== &lt;br /&gt;
*Logging has been set to Warning level for Native App to avoid excessive number of log entries to Snowflake events table. (B-08687)&lt;br /&gt;
*Datatable duplication is now synchronous in Snowflake until 30 seconds to avoid showing the created duplicate datatable with zero rows while the operation is still in progress. (B-08634)&lt;br /&gt;
*Improved Snowflake cache table creation logic when there are multiple simultaneous queries. (B-08622)&lt;br /&gt;
*Refactored SQL Server operations to improve robustness and avoid leaking database connections. (B-08649)&lt;br /&gt;
*Frontend components have been updated. (B-08638)&lt;br /&gt;
* Backend components have been updated. (B-08639)&lt;br /&gt;
*Translations have been updated. (B-08640)&lt;br /&gt;
&lt;br /&gt;
== Additional release for QPR ProcessAnalyzer 2025.2 (build 9476) (released 2025-03-19)==&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Fixed issue where charts axis labels had unnecessary line breaks on spaces. (D-14413)&lt;br /&gt;
*Fixed issue where AI Agent and LLMComplete function didn&#039;t work in Native App. (D-14410)&lt;br /&gt;
*Fixed translations for Workspace Scripts tab column filter for Status and Result columns. (D-14393)&lt;br /&gt;
*Fixed issue where Volume Distribution of Flow Analyzed object type didn&#039;t work. (D-14390)&lt;br /&gt;
*Removed reference to fonts.googleapis.com for stylesheets to avoid content-security-policy error. (D-14373)&lt;br /&gt;
* Syncfusion dialog headers now show special characters correctly. (D-14407)&lt;br /&gt;
*Object attribute filter gave null reference error when object type didn&#039;t exist in model. (D-14379)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.2 (build 9410) (released 2025-03-05)==&lt;br /&gt;
&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_2.pdf QPR_ProcessAnalyzer_2025_2.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Detection of models with incomplete datasource configuration has been improved, and now models where the event timestamp column type is string, are not anymore considered valid models. Earlier the string type of data was accepted and converted into dates when model was loaded (for in-memory models) or in SQL queries (in Snowflake models).&lt;br /&gt;
&lt;br /&gt;
The following query can be run in the [[Navigation_Menu#Expression_Designer|Expression Designer]] (with System administrator user) to list models where the events datatable timestamp column type is string:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Models.Where({&lt;br /&gt;
	let timestampColumn = _.Configuration?.TryGetValue(&amp;quot;Datasource&amp;quot;)?.TryGetValue(&amp;quot;Events&amp;quot;)?.TryGetValue(&amp;quot;Columns&amp;quot;)?.TryGetValue(&amp;quot;Timestamp&amp;quot;);&lt;br /&gt;
	return First(_.EventsDatatable?.Columns?.Where(Name==timestampColumn))?.Datatype == &amp;quot;String&amp;quot;;&lt;br /&gt;
}).(Name + &amp;quot; (id: &amp;quot; + Id + &amp;quot;)&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #dfdfdf;padding:0.5em 1em 0.5em 1em;background-color:#E7EAEC;margin:10px 0px 0px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
For Snowflake dashboards, table actions to [[QPR_ProcessAnalyzer_Table#Table_actions|set dashboard variables]] now set the variable values in the [[Stringified_Value_Format|stringified format]] instead of as raw values. This makes the variables set by table actions compatible with the [[Chart_Linked_Settings|linked settings]] which also use the stringified format by default for the Snowflake models.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New features=== &lt;br /&gt;
*Introduced [[AI Agent]] which is a new dashboard component showing LLM generated answers based on user prompt and input data. (B-08556)&lt;br /&gt;
*Added [[Filtering_in_QPR_ProcessAnalyzer_Queries#Object-centric_filter_rules|filtering by object attributes]] for object-centric models. Filters can be created from dialog or selecting items from charts. (B-08547)&lt;br /&gt;
*In object-centric models, object-to-object relations are followed only forward and backward directions. Additionally, there are performance improvements for object-centric models. (B-08577)&lt;br /&gt;
*Snowflake warehouse can be [[QPR_ProcessAnalyzer_Project_Workspace#Change_Snowflake_Warehouse_for_Model|specified for each model]] allowing to use optimal type of warehouse for different sizes of models. (B-08610)&lt;br /&gt;
*Home screen has been removed, and [[QPR_ProcessAnalyzer_Project_Workspace|Workspace]] has new card layout and other UX improvements. (B-08541)&lt;br /&gt;
*Added [[Filtering_in_QPR_ProcessAnalyzer#Saving_filters|filter description]] field to filter properties dialog. (B-08451)&lt;br /&gt;
*Removed event type existence check from charts, so that non-existing event types are allowed. (B-08585)&lt;br /&gt;
*Snowflake Native App configuration data can be [[QPR_ProcessAnalyzer_Native_App_in_Snowflake#Backup_configuration_data|backed up to a snapshot and restored]]. (B-08591)&lt;br /&gt;
*Improved detection of invalid models by adding [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#CheckModelValidity|CheckModelValidity]] function returning model validation errors. (B-08426)&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*Prevented following error in Snowflake dashboards: Object &amp;quot;qprpa_dt_cache_...&amp;quot; already exists when creating a cache table. (D-14348)&lt;br /&gt;
*In-memory chart &amp;quot;Cases filtered by attribute&amp;quot; didn&#039;t work for date type of attributes. (D-14387)&lt;br /&gt;
*Fixed issue where each dashboard element resize made element width or height increase when chart margin was more than zero. (D-14361)&lt;br /&gt;
*Chart related buttons are now hidden in datatable content preview. (D-14360)&lt;br /&gt;
*Fixed issue where gateway based data import didn&#039;t write SAP errors into script log. (D-14351)&lt;br /&gt;
*Snowflake chart gave error when &amp;quot;Last Row Aggregates Over-limit Rows&amp;quot; setting was used with list aggregation. (D-14352)&lt;br /&gt;
*&amp;quot;Users&amp;quot; system report performance has been improved by adding EffectivePermissionTypesFor function. (D-14266)&lt;br /&gt;
*Fixed issue where AI Assistant crashed when used with a model having ODBC or expression datasource. (D-14340)&lt;br /&gt;
*Fixed issue where AI Assistant explaining charts crashed when applying to Label component. (D-14344)&lt;br /&gt;
* Improved client-side import not to perform redundant datatable configuration data queries. (D-14347)&lt;br /&gt;
*Model was incorrectly identified as in-memory model when datatables were missing. (D-14325)&lt;br /&gt;
*Model default filter is now in use when model is opened from Workspace. (D-14376)&lt;br /&gt;
&lt;br /&gt;
===Other improvements===  &lt;br /&gt;
*Changed Snowflake charts to store [[QPR_ProcessAnalyzer_Table#Table_actions|variable change actions]] in stringified format to make them compatible with linked settings. (B-08587)&lt;br /&gt;
*Backend support for [[Filtering_in_QPR_ProcessAnalyzer_Queries#Object-centric_filter_rules|object-centric filter rules Disabled flag]]. (B-08611)&lt;br /&gt;
*Implemented Entity Framework based database initialization and migrations. (B-08566)&lt;br /&gt;
*Added support for following Entity Framework database providers: SQL Server (full), Snowflake Hybrid Tables (experimental), PostgreSQL (experimental). (B-08581)&lt;br /&gt;
*Frontend components have been updated. (B-08597)&lt;br /&gt;
*Backend components have been updated. (B-08596)&lt;br /&gt;
*Translations have been updated for release 2025.2. (B-08607)&lt;br /&gt;
&lt;br /&gt;
==QPR ProcessAnalyzer 2025.1 (build 9124) (released 2025-01-23)==&lt;br /&gt;
&lt;br /&gt;
New features presentation: [https://files.qpr.com/releases/QPR_ProcessAnalyzer_2025_1.pdf QPR_ProcessAnalyzer_2025_1.pdf]&lt;br /&gt;
&lt;br /&gt;
===New features=== &lt;br /&gt;
*B-08526: Variations and other lists can be visualized with colors, and &amp;quot;List separator&amp;quot; field is available for dimensions and columns.&lt;br /&gt;
*B-08530: Charts can have a [[QPR_ProcessAnalyzer_Chart#Visual_Settings|description text]] which are shown in a dialog when pressing the info button.&lt;br /&gt;
*B-08546: Added [[SQL_Expressions#LLMComplete|LlmComplete]] function to access Snowflake Cortex large language models.&lt;br /&gt;
*B-08439: Added project settings [[QPR_ProcessAnalyzer_Project_Workspace#Project-level_Snowflake_Database_and_Schema|DatabaseNameInDataSource and SchemaNameInDataSource]] to define Snowflake database and schema.&lt;br /&gt;
*B-08531: Projects can be created in expression language using [[Generic_Functions_in_QPR_ProcessAnalyzer#CreateProject|CreateProject]] function.&lt;br /&gt;
*B-08387: Added backend support for object-centric model [[Filtering_in_QPR_ProcessAnalyzer_Queries#Object-centric_filter_rules|filtering for object attributes]].&lt;br /&gt;
&lt;br /&gt;
===Fixed issues===&lt;br /&gt;
*D-14339: Week numbers showed incorrect year for last dates in the end of year.&lt;br /&gt;
*D-14323: Filtering with &amp;quot;Split data by filtering&amp;quot; dimension didn&#039;t work with exclude type of filter rules and when there were multiple filter rules.&lt;br /&gt;
*D-14346: Fixed issue where manual activation using activation utility didn&#039;t work.&lt;br /&gt;
*D-14326: Fixed issue where extra columns in objects table broke object-centric model.&lt;br /&gt;
*D-14306: Fixed issue when there were both TimeStamp and ToTimeStamp event data columns.&lt;br /&gt;
*D-14332: Flowchart event type and flow queries are now simultaneous which will improve performance.&lt;br /&gt;
*D-14331: Flowchart lost selection when flowchart used linked variables with array values.&lt;br /&gt;
*D-14299: Table text filters didn&#039;t work in Snowflake (starts with, ends with, contains).&lt;br /&gt;
*D-14338: Model.Modify function generated model json configuration that frontend wasn&#039;t incompatible with.&lt;br /&gt;
*D-14342: Flow step and Zoom settings control have same size and layout is aligned.&lt;br /&gt;
*D-14316: Occurrence impact on case duration measure didn&#039;t work with certain in-memory models.&lt;br /&gt;
*D-14327: AI Assistant had console error when pressing send button without text.&lt;br /&gt;
*D-14341: AI Assistant overlapped with BPMN editor in fullscreen mode.&lt;br /&gt;
*D-14321: Added error message for AI Assistant when trying to use it without model selected.&lt;br /&gt;
&lt;br /&gt;
===Other improvements=== &lt;br /&gt;
*B-08391: Datatable access has been optimized improving performance for object-centric models.&lt;br /&gt;
* B-08529: Added support for array type in stringified value format.&lt;br /&gt;
*B-08527: Improved SAP connector error handling and removed assumption for fixed dll file names.&lt;br /&gt;
*B-08552: Migrated rest of SQL queries into Entity Framework as preparation for storing configuration data to Snowflake hybrid tables.&lt;br /&gt;
*B-08544: Frontend components have been updated.&lt;br /&gt;
*B-08561: Updated translations for release 2025.1.&lt;br /&gt;
&lt;br /&gt;
==Old Releases==&lt;br /&gt;
See older releases in [[QPR ProcessAnalyzer Release Archive]]&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
[[Category: QPR ProcessAnalyzer]]&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=Next_Release_Roadmap&amp;diff=28029</id>
		<title>Next Release Roadmap</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=Next_Release_Roadmap&amp;diff=28029"/>
		<updated>2026-04-08T12:50:33Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--10926--&amp;gt;&lt;br /&gt;
This page contains preliminary information about new features and fixed issues in the next release.&lt;br /&gt;
&lt;br /&gt;
==New features in next release==&lt;br /&gt;
* Units can be specified for counts of each type of objects in object-centric models. (&#039;&#039;B-08992&#039;&#039;)&lt;br /&gt;
* Dashboard variables can be used in External Content component urls for dynamically changing web page. (&#039;&#039;B-08998&#039;&#039;)&lt;br /&gt;
* QPR ProcessAnalyzer acts as MCP server where MCP tools are implemented using scripts. (&#039;&#039;B-09004&#039;&#039;)&lt;br /&gt;
* Project export to file and import from file support filters stored in models. (&#039;&#039;B-09007&#039;&#039;)&lt;br /&gt;
* Frontend components have been updated. (&#039;&#039;B-09028&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
==Issues fixed in next release==&lt;br /&gt;
* Table column filter is not entire visible in narrow tables located in bottom of screen. (&#039;&#039;D-14783&#039;&#039;)&lt;br /&gt;
* Fixed issue where object-centric model queries sometimes gave inconsistent results. (&#039;&#039;D-14854&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
==Features under work==&lt;br /&gt;
* Datatables data model visualization with ER diagram. (&#039;&#039;B-09023&#039;&#039;)&lt;br /&gt;
* Connection to MEA using expression language. (&#039;&#039;B-09030&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Note: Features and fixes currently under work are not necessarily targeting to the next release.&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Objects_in_Expression_Language&amp;diff=28028</id>
		<title>QPR ProcessAnalyzer Objects in Expression Language</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=QPR_ProcessAnalyzer_Objects_in_Expression_Language&amp;diff=28028"/>
		<updated>2026-04-08T12:43:28Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: /* Project */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Filter==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Filter properties&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||CreatedBy (User)&lt;br /&gt;
||Returns the user who created the filter.&lt;br /&gt;
|-&lt;br /&gt;
||CreatedDate (DateTime)&lt;br /&gt;
||Returns date when the filter created date.&lt;br /&gt;
|-&lt;br /&gt;
||Description (String)&lt;br /&gt;
||Returns description of the filter.&lt;br /&gt;
|-&lt;br /&gt;
||Id (Integer)&lt;br /&gt;
||Returns id of the filter.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedBy (User)&lt;br /&gt;
||Returns user who modified the filter.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedDate (DateTime)&lt;br /&gt;
||Returns date when the filter last modified.&lt;br /&gt;
|-&lt;br /&gt;
||Model&lt;br /&gt;
||Returns model where the filter belongs to.&lt;br /&gt;
|-&lt;br /&gt;
||ModelId (Integer)&lt;br /&gt;
||Returns model where the filter belongs to.&lt;br /&gt;
|-&lt;br /&gt;
||Name (String)&lt;br /&gt;
||Returns the name of the filter.&lt;br /&gt;
|-&lt;br /&gt;
||Project&lt;br /&gt;
||Returns project where the filter belongs to.&lt;br /&gt;
|-&lt;br /&gt;
||ProjectId (Integer)&lt;br /&gt;
||Returns project id where the filter belongs to.&lt;br /&gt;
|-&lt;br /&gt;
||PublishMode (String)&lt;br /&gt;
||Returns publish mode of the filter, one of the following: &#039;&#039;&#039;Private&#039;&#039;&#039;, &#039;&#039;&#039;Public&#039;&#039;&#039;, or &#039;&#039;&#039;Default&#039;&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
||Rules (Dictionary)&lt;br /&gt;
||Returns a dictionary containing the filter rules in the filter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Filter functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||DeletePermanently&lt;br /&gt;
||(none)&lt;br /&gt;
||&lt;br /&gt;
Deletes the filter permanently. To delete own filters, the &#039;&#039;&#039;Filtering&#039;&#039;&#039; permission is needed, and to delete any filters the &#039;&#039;&#039;ManageViews&#039;&#039;&#039; permission is needed.&lt;br /&gt;
|-&lt;br /&gt;
||Modify&lt;br /&gt;
||Dictionary&lt;br /&gt;
||&lt;br /&gt;
Modifies filter properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: &#039;&#039;Name&#039;&#039;, &#039;&#039;Description&#039;&#039;, &#039;&#039;PublishMode&#039;&#039;, and &#039;&#039;Rules&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The function returns the updated filter object. Requires &#039;&#039;GenericWrite&#039;&#039; permission for the Project and global &#039;&#039;CreateModel&#039;&#039; permission.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FilterById(1)&lt;br /&gt;
	.Modify(#{&lt;br /&gt;
		&amp;quot;Name&amp;quot;: &amp;quot;My filter&amp;quot;,&lt;br /&gt;
		&amp;quot;Description&amp;quot;: &amp;quot;My description&amp;quot;,&lt;br /&gt;
		&amp;quot;PublishMode&amp;quot;: &amp;quot;Public&amp;quot;,&lt;br /&gt;
		&amp;quot;Rules&amp;quot;: #{&lt;br /&gt;
			&amp;quot;Items&amp;quot;: [&lt;br /&gt;
				#{&lt;br /&gt;
					&amp;quot;Type&amp;quot;: &amp;quot;IncludeCases&amp;quot;,&lt;br /&gt;
					&amp;quot;Items&amp;quot;: [&lt;br /&gt;
						#{&lt;br /&gt;
							&amp;quot;Type&amp;quot;: &amp;quot;CaseAttributeValue&amp;quot;,&lt;br /&gt;
							&amp;quot;Attribute&amp;quot;: &amp;quot;Account Manager&amp;quot;,&lt;br /&gt;
							&amp;quot;StringifiedValues&amp;quot;: [&lt;br /&gt;
								&amp;quot;0Mary Wilson&amp;quot;&lt;br /&gt;
							]&lt;br /&gt;
						}&lt;br /&gt;
					]&lt;br /&gt;
				}&lt;br /&gt;
			]&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Function to get filter id:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||FilterById&lt;br /&gt;
||&lt;br /&gt;
* Filter id (Integer)&lt;br /&gt;
||&lt;br /&gt;
Returns Filter object corresponding to the provided filter id.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Model==&lt;br /&gt;
Notes:&lt;br /&gt;
* For in-memory models that are offline, the object counts represent the situation when the model was last time online (loaded into the memory). &#039;&#039;null&#039;&#039; is returned if the model has never been loaded into the memory.&lt;br /&gt;
* If [[Case_Level_Permissions|Case permissions]] are used for the model, and user doesn&#039;t have &#039;&#039;&#039;GenericWrite&#039;&#039;&#039; permission for the model, &#039;&#039;null&#039;&#039; is returned for data security reasons. Users that have the &#039;&#039;&#039;GenericWrite&#039;&#039;&#039; permission, see null when the model is offline, and when online, they see counts where the case level permissions settings are applied.&lt;br /&gt;
* Properties &#039;&#039;CaseAttributes&#039;&#039;, &#039;&#039;EventAttributes&#039;&#039; and &#039;&#039;Eventlog&#039;&#039; 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.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Model properties&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||AllFilters (Filter*)&lt;br /&gt;
||Returns an array of all [[#Filter|filters]] in the model where the user has access to. In addition to the &#039;&#039;Filters&#039;&#039; property, &#039;&#039;AllFilters&#039;&#039; also returns private filters of other users. The &#039;&#039;ManageViews&#039;&#039; permission is required to use this property.&lt;br /&gt;
|-&lt;br /&gt;
||Calendars (BusinessCalendar*)&lt;br /&gt;
||&lt;br /&gt;
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.&lt;br /&gt;
|-&lt;br /&gt;
||CaseAttributes (AttributeType*)&lt;br /&gt;
||[[#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&#039;s loaded when this property is used.&lt;br /&gt;
|-&lt;br /&gt;
||CasesDatatable (Datatable)&lt;br /&gt;
||Returns the Datatable the model uses as a datasource for cases. Returns &#039;&#039;null&#039;&#039; if the cases Datatable is not defined or if model uses other than the Datatable datasource.&lt;br /&gt;
|-&lt;br /&gt;
||Configuration (Dictionary)&lt;br /&gt;
||Returns the Model configuration as dictionary. Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(123).Configuration.DataSource.Events.DataTableName&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||ConfigurationJson (String)&lt;br /&gt;
||Returns the Model configuration as JSON string.&lt;br /&gt;
|-&lt;br /&gt;
||CreatedBy (User)&lt;br /&gt;
||User who created the model.&lt;br /&gt;
|-&lt;br /&gt;
||CreatedDate (DateTime)&lt;br /&gt;
||Timestamp when the model was created.&lt;br /&gt;
|-&lt;br /&gt;
||DefaultCalendar (BusinessCalendar)&lt;br /&gt;
||Returns the default [[Business_Calendar|business calendar]] of the Model. Returns &#039;&#039;null&#039;&#039;, 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.&lt;br /&gt;
|-&lt;br /&gt;
||DefaultFilter (Filter)&lt;br /&gt;
||Default filter of the model. Returns &#039;&#039;null&#039;&#039; if the model does not have a default filter.&lt;br /&gt;
|-&lt;br /&gt;
||DefaultFilterId (Integer)&lt;br /&gt;
||Default filter id of the model. Returns &#039;&#039;null&#039;&#039; if the model does not have a default filter.&lt;br /&gt;
|-&lt;br /&gt;
||Description (String)&lt;br /&gt;
||Model description. The model description may contain line breaks.&lt;br /&gt;
|-&lt;br /&gt;
||DeletedDate (DateTime)&lt;br /&gt;
||Timestamp when Model was deleted (moved to the recycle bin).&lt;br /&gt;
|-&lt;br /&gt;
||DeletedBy (User)&lt;br /&gt;
||User how deleted the Model.&lt;br /&gt;
|-&lt;br /&gt;
||Diagrams (Diagram*)&lt;br /&gt;
||Returns an array of all [[Diagram_in_Expression_Language|diagrams]] in the model.&lt;br /&gt;
|-&lt;br /&gt;
||EstimatedMemory (Integer)&lt;br /&gt;
||Returns an estimation of how much memory in bytes the model requires.&lt;br /&gt;
|-&lt;br /&gt;
||EventsDatatable (Datatable)&lt;br /&gt;
||Returns the Datatable the model uses as a datasource for events. Returns &#039;&#039;null&#039;&#039; if the events Datatable is not defined or if model uses other than the Datatable datasource.&lt;br /&gt;
|-&lt;br /&gt;
||EventAttributes (AttributeType*)&lt;br /&gt;
||[[#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&#039;s loaded when this property is used.&lt;br /&gt;
|-&lt;br /&gt;
||EventLog (EventLog)&lt;br /&gt;
||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&#039;s loaded when this property is used.&lt;br /&gt;
|-&lt;br /&gt;
||Filters (Filter*)&lt;br /&gt;
||Returns an array of all public [[#Filter|filters]], the default filter (if any) and the user&#039;s own private filters in the model. Note that the other users&#039;s private filters are not returned even for administrators.&lt;br /&gt;
|-&lt;br /&gt;
||Id (Integer)&lt;br /&gt;
||Model Id. Model Id is generated by QPR ProcessAnalyzer when the model is created.&lt;br /&gt;
|-&lt;br /&gt;
||IsValidInMemoryModel (boolean)&lt;br /&gt;
||Returns &#039;&#039;true&#039;&#039; if all the following conditions are met:&lt;br /&gt;
* CheckModelValidity function doesn&#039;t return any issues (because invalid models are assumed to be Snowflake models).&lt;br /&gt;
* Model is not an object-centric model.&lt;br /&gt;
* Data source of the model is &#039;&#039;ODBC&#039;&#039; or &#039;&#039;Expression&#039;&#039;, or the referred datatable has &#039;&#039;DataSourceType&#039;&#039; either &#039;&#039;Local&#039;&#039; or &#039;&#039;SqlServer&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedBy (User)&lt;br /&gt;
||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.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedDate (DateTime)&lt;br /&gt;
||Timestamp when the model was modified the last time.&lt;br /&gt;
|-&lt;br /&gt;
||Name (String)&lt;br /&gt;
||Model name.&lt;br /&gt;
|-&lt;br /&gt;
||NCache (Integer)&lt;br /&gt;
||Number of objects related to the model when the model is loaded into the memory.&lt;br /&gt;
|-&lt;br /&gt;
||NCaseAttributes (Integer)&lt;br /&gt;
||Number of [[#AttributeType|CaseAttributes]] in model. Works only for in-memory models.&lt;br /&gt;
|-&lt;br /&gt;
||NCases (Integer)&lt;br /&gt;
||Number of [[#Case|Cases]] in the model. Works only for in-memory models.&lt;br /&gt;
|-&lt;br /&gt;
||NEventAttributes (Integer)&lt;br /&gt;
||Number of [[#AttributeType|EventAttributes]] in model. Works only for in-memory models.&lt;br /&gt;
|-&lt;br /&gt;
||NEvents (Integer)&lt;br /&gt;
||Number of [[#Event|Events]] in model. Works only for in-memory models.&lt;br /&gt;
|-&lt;br /&gt;
||NEventTypes (Integer)&lt;br /&gt;
||Number of [[#EventType|EventTypes]] in the model. Works only for in-memory models.&lt;br /&gt;
|-&lt;br /&gt;
||Project (Project)&lt;br /&gt;
||[[#Project|Project]] where the model belongs to.&lt;br /&gt;
|-&lt;br /&gt;
||ProjectId (Integer)&lt;br /&gt;
||[[#Project|Project]] id where the model belongs to.&lt;br /&gt;
|-&lt;br /&gt;
||Status (String)&lt;br /&gt;
||&lt;br /&gt;
Memory availability status of the model. There are the following statuses:&lt;br /&gt;
* &#039;&#039;&#039;Loading&#039;&#039;&#039;: The model is currently loading into the memory. When the loading is ready, the status changes to &#039;&#039;online&#039;&#039;. If the loading fails, the status changes to &#039;&#039;offline&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Offline&#039;&#039;&#039;: 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).&lt;br /&gt;
* &#039;&#039;&#039;Online&#039;&#039;&#039;: The model is in the memory and ready for analysis calculation. If the model is dropped from the memory, its status changes to &#039;&#039;offline&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
||UsedDatatables (Datatable*)&lt;br /&gt;
||Returns all datatables the model uses as a datasource.&lt;br /&gt;
&lt;br /&gt;
Example: List datatables used by a model:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
StringJoin(&amp;quot;, &amp;quot;, OrderByValue(ModelById(1).UsedDataTables.Name))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Model functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||CalendarByName (BusinessCalendar)&lt;br /&gt;
||&lt;br /&gt;
name (String)&lt;br /&gt;
||&lt;br /&gt;
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 &#039;&#039;null&#039;&#039;, if a calendar with the provided name is not stored to the model.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(123).CalendarByName(&amp;quot;MyCalendar&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||CreateDiagram (Diagram)&lt;br /&gt;
||Parameters dictionary&lt;br /&gt;
||&lt;br /&gt;
Creates a [[Diagram_in_Expression_Language|diagram]] to the model. Parameters is a dictionary containing diagram properties. Following properties are available:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039; (string): Diagram name that distinguishes diagrams in a model.&lt;br /&gt;
* &#039;&#039;&#039;Description&#039;&#039;&#039; (string): Diagram description text.&lt;br /&gt;
* &#039;&#039;&#039;Content&#039;&#039;&#039; (dictionary): Diagram content as dictionary.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(1)&lt;br /&gt;
  .CreateDiagram(#{&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;My diagram&amp;quot;,&lt;br /&gt;
    &amp;quot;Description&amp;quot;: &amp;quot;This is my new diagram&amp;quot;,&lt;br /&gt;
    &amp;quot;Content&amp;quot;: #{ ... },&lt;br /&gt;
  })&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||CreateFilter (Filter)&lt;br /&gt;
||Parameters dictionary&lt;br /&gt;
||Creates a filter to a model. Requires &#039;&#039;GenericWrite&#039;&#039; permission for the project and global &#039;&#039;CreateModel&#039;&#039; permission. If a filter with that name already exists in the model, an exception is thrown.&lt;br /&gt;
The parameters dictionary may have the following properties:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039;: Name of the filter. This property is mandatory.&lt;br /&gt;
* &#039;&#039;&#039;Description&#039;&#039;&#039;: Description of the filter. This property is optional.&lt;br /&gt;
* &#039;&#039;&#039;Rules&#039;&#039;&#039;: Filter rules for the filter defined as a dictionary according to the [[Filtering_in_QPR_ProcessAnalyzer_Queries|filter json format]]. This property is mandatory.&lt;br /&gt;
* &#039;&#039;&#039;PublishMode&#039;&#039;&#039;: Publish mode of the filter which is one of the following: &#039;&#039;Private&#039;&#039;, &#039;&#039;Public&#039;&#039; or &#039;&#039;Default&#039;&#039;. This property is optional, and the default value is &#039;&#039;Private&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let newFilter = modelById(1).CreateFilter(#{    &lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My Filter&amp;quot;,&lt;br /&gt;
  &amp;quot;Rules&amp;quot;: #{&lt;br /&gt;
    &amp;quot;Items&amp;quot;: [#{&lt;br /&gt;
      &amp;quot;Type&amp;quot;: &amp;quot;IncludeCases&amp;quot;,&lt;br /&gt;
      &amp;quot;Items&amp;quot;: [#{&lt;br /&gt;
        &amp;quot;Type&amp;quot;: &amp;quot;CaseAttributeValue&amp;quot;,&lt;br /&gt;
        &amp;quot;Attribute&amp;quot;: &amp;quot;Account Manager&amp;quot;,&lt;br /&gt;
        &amp;quot;StringifiedValues&amp;quot;: [ &amp;quot;0Robert Miller&amp;quot; ]&lt;br /&gt;
      }]&lt;br /&gt;
    }]&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;PublishMode&amp;quot;: &amp;quot;Public&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||DeletePermanently&lt;br /&gt;
||(none)&lt;br /&gt;
||Deletes the Model permanently. The model doesn&#039;t need to be in the recycle bin to be able to delete it permanently.&lt;br /&gt;
|-&lt;br /&gt;
||Modify (Model)&lt;br /&gt;
||Dictionary&lt;br /&gt;
||&lt;br /&gt;
Modifies model properties. The parameter is a dictionary containing the properties to be changed. Following properties can be changed: &#039;&#039;Name&#039;&#039;, &#039;&#039;Description&#039;&#039;, &#039;&#039;ProjectId&#039;&#039;, and &#039;&#039;Configuration&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The function returns the updated model object. Requires the &#039;&#039;GenericWrite&#039;&#039; permission for the project and the global &#039;&#039;CreateModel&#039;&#039; permission.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(1)&lt;br /&gt;
	.Modify(#{&lt;br /&gt;
		&amp;quot;Name&amp;quot;: &amp;quot;My model&amp;quot;,&lt;br /&gt;
		&amp;quot;Description&amp;quot;: &amp;quot;My description&amp;quot;,&lt;br /&gt;
		&amp;quot;ProjectId&amp;quot;: 2,&lt;br /&gt;
		&amp;quot;Configuration&amp;quot;: #{&lt;br /&gt;
			&amp;quot;DataSource&amp;quot;: #{&lt;br /&gt;
				&amp;quot;Cases&amp;quot;: #{&lt;br /&gt;
					&amp;quot;DataSourceType&amp;quot;: &amp;quot;datatable&amp;quot;,&lt;br /&gt;
					&amp;quot;DataTableName&amp;quot;: &amp;quot;My cases datatable&amp;quot;,&lt;br /&gt;
					&amp;quot;Columns&amp;quot;: #{&lt;br /&gt;
						&amp;quot;CaseId&amp;quot;: &amp;quot;Case Name&amp;quot;&lt;br /&gt;
					}&lt;br /&gt;
				},&lt;br /&gt;
				&amp;quot;Events&amp;quot;: #{&lt;br /&gt;
					&amp;quot;DataSourceType&amp;quot;: &amp;quot;datatable&amp;quot;,&lt;br /&gt;
					&amp;quot;DataTableName&amp;quot;: &amp;quot;My events datatable&amp;quot;,&lt;br /&gt;
					&amp;quot;Columns&amp;quot;: #{&lt;br /&gt;
						&amp;quot;CaseId&amp;quot;: &amp;quot;Case Name&amp;quot;,&lt;br /&gt;
						&amp;quot;EventType&amp;quot;: &amp;quot;Event Type&amp;quot;,&lt;br /&gt;
						&amp;quot;Timestamp&amp;quot;: &amp;quot;Start Time&amp;quot;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||ResetModelCache&lt;br /&gt;
||(none)&lt;br /&gt;
||&lt;br /&gt;
Synchronously clears all cached model data. For a Snowflake model, deletes all cache tables related to the model from Snowflake. For an in-memory model, drops the model from the memory and also drops all other model related caches from the memory. &lt;br /&gt;
|-&lt;br /&gt;
||ResetPreprocessings&lt;br /&gt;
||(none)&lt;br /&gt;
||&lt;br /&gt;
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.&lt;br /&gt;
|-&lt;br /&gt;
||Restore&lt;br /&gt;
||(none)&lt;br /&gt;
||Restores the Model from the recycle bin back to the original location.&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;ToSqlDataFrame&amp;quot;&amp;gt;ToSqlDataFrame&amp;lt;/span&amp;gt;&lt;br /&gt;
||In-memory dataframe&lt;br /&gt;
||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.&lt;br /&gt;
&lt;br /&gt;
Example: Select matching cases from events data using in-memory dataframe:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let model = ModelById(1);&lt;br /&gt;
let dfEvents = model.EventsDatatable.SqlDataFrame;&lt;br /&gt;
let inMemoryDf = ToDataFrame(&lt;br /&gt;
  [[&amp;quot;1&amp;quot;], [&amp;quot;2&amp;quot;], [&amp;quot;3&amp;quot;]],&lt;br /&gt;
  [#{&amp;quot;Name&amp;quot;: &amp;quot;id&amp;quot;, &amp;quot;DataType&amp;quot;: &amp;quot;String&amp;quot;}]&lt;br /&gt;
);&lt;br /&gt;
model.ToSqlDataFrame(inMemoryDf)&lt;br /&gt;
  .Join(dfEvents, [&amp;quot;id&amp;quot;: &amp;quot;CaseId&amp;quot;])&lt;br /&gt;
  .SelectDistinct([&amp;quot;CaseId&amp;quot;])&lt;br /&gt;
  .Collect();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;TriggerNotifications&amp;quot;&amp;gt;TriggerNotifications&amp;lt;/span&amp;gt; (Boolean)&lt;br /&gt;
||Notification names (String*)&lt;br /&gt;
||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.&lt;br /&gt;
&lt;br /&gt;
The function return &#039;&#039;true&#039;&#039; if any notification were triggered, otherwise &#039;&#039;false&#039;&#039;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(123).TriggerNotifications([&amp;quot;Notification 1&amp;quot;, &amp;quot;Notification 2&amp;quot;]);&lt;br /&gt;
Triggers notifications Notification 1 and Notification 2 in model id 123.&lt;br /&gt;
&lt;br /&gt;
ModelById(123).TriggerNotifications();&lt;br /&gt;
Triggers all notifications in model id 123.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;CheckModelValidity&amp;quot;&amp;gt;CheckModelValidity&amp;lt;/span&amp;gt; (Object array)&lt;br /&gt;
||CheckData field in dictionary&lt;br /&gt;
||Checks the model validity and returns found issues. The returned data is an array of objects where each object represents one validity error and contains the following properties:&lt;br /&gt;
* &#039;&#039;&#039;IssueType&#039;&#039;&#039; (String): Specifies the issue type.&lt;br /&gt;
* &#039;&#039;&#039;ContextType&#039;&#039;&#039; (String): Context in which the issue was found, and it can be &#039;&#039;&#039;EventDataSource&#039;&#039;&#039;, &#039;&#039;&#039;CaseDataSource&#039;&#039;&#039;, &#039;&#039;&#039;OcelDataSource&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Details&#039;&#039;&#039; (Dictionary): Additional details which depend on the type of the issue.&lt;br /&gt;
&lt;br /&gt;
There are two types of checks available (based on whether the &#039;&#039;&#039;CheckData&#039;&#039;&#039; parameter is defined):&lt;br /&gt;
* &#039;&#039;Lightweight check&#039;&#039;: The check is based on only the configuration data stored in QPR ProcessAnalyzer. This check is very quick and does not require running queries in datasource (e.g., in Snowflake).&lt;br /&gt;
* &#039;&#039;Full check&#039;&#039;: The check is comprehensive and it&#039;s able to detect any validity issues the model may have. The full check requires running queries to the actual data which makes the check slower, and in case of Snowflake, it uses the Snowflake warehouse to run the queries.&lt;br /&gt;
&lt;br /&gt;
The lightweight check is performed automatically by the [[QPR_ProcessAnalyzer_Project_Workspace|Workspace]], so if there are any validity issues that the lightweight check can detect, the Workspace notifies about them immediately. If there are any problems with the model calculation results, it might be a good idea to run the full validity check to confirm whether the problems are due to the model being invalid.&lt;br /&gt;
&lt;br /&gt;
Example: Lightweight check:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ToJson(ModelById(1).CheckModelValidity())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Full check:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ToJson(ModelById(1).CheckModelValidity(#{ &amp;quot;CheckData&amp;quot;: true }))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||CortexAgentsQuery&lt;br /&gt;
||&lt;br /&gt;
||Creates a Snowflake Cortex semantic model (see &#039;&#039;GetSemanticModel&#039;&#039; function) for the process mining model and makes a natural language query on it using Snowflake Cortex Agents. More information: https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents. &lt;br /&gt;
&lt;br /&gt;
There are the following parameters:&lt;br /&gt;
# &#039;&#039;&#039;Parameters&#039;&#039;&#039;: Dictionary parameters given to the Cortex Agents REST API query (https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-rest-api). There is a special handling for the following parameters:&lt;br /&gt;
#* &#039;&#039;&#039;model&#039;&#039;&#039;: If not defined, uses the default Cortex Agents model name configured into the database, or if that is not defined, uses &amp;quot;llama3.1-70b&amp;quot;.&lt;br /&gt;
#* &#039;&#039;&#039;_tools&#039;&#039;&#039;: Additional tool_spec of type &amp;quot;cortex_analyst_text_to_sql&amp;quot; will be added to this value with a reference to the generated semantic model.&lt;br /&gt;
#* &#039;&#039;&#039;_tool_resources&#039;&#039;&#039;: Generated semantic model is added as an additional resource.&lt;br /&gt;
# &#039;&#039;&#039;Filter configuration&#039;&#039;&#039;: Can be a string containing filter JSON or a dictionary containing the filter configuration. The semantic model is created for the filtered eventlog. If not defined, the entire model eventlog will be used.&lt;br /&gt;
# &#039;&#039;&#039;Event column role nappings&#039;&#039;&#039;: Mappings to apply for event columns. If not defined, default column mappings are used.&lt;br /&gt;
# &#039;&#039;&#039;Case column role mappings&#039;&#039;&#039;: Mappings to apply for case columns. If not defined, default column mappings are used.&lt;br /&gt;
&lt;br /&gt;
The function returns a dictionary with the following keys:&lt;br /&gt;
# &#039;&#039;&#039;Response&#039;&#039;&#039;: Actual response as a dictionary returned by the Cortex Agents.&lt;br /&gt;
# &#039;&#039;&#039;Response items&#039;&#039;&#039;: Contains processed response consisting of an array of objects having the following properties:&lt;br /&gt;
#* &#039;&#039;&#039;Text&#039;&#039;&#039;: Textual response.&lt;br /&gt;
#* &#039;&#039;&#039;Sql&#039;&#039;&#039;: Response SQL query string. Not mandatory.&lt;br /&gt;
#* &#039;&#039;&#039;SqlDataFrame&#039;&#039;&#039;: SqlDataFrame created for the SQL query in the Sql property. Only present if Sql is present.&lt;br /&gt;
|-&lt;br /&gt;
||GetSemanticModel&lt;br /&gt;
||&lt;br /&gt;
||Creates a Snowflake Cortex Analyst semantic model for the process mining model and returns it as a dictionary. More information: https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-analyst/semantic-model-spec.&lt;br /&gt;
&lt;br /&gt;
There are the following parameters:&lt;br /&gt;
# &#039;&#039;&#039;Filter configuration&#039;&#039;&#039;: Can be a string containing filter JSON or a dictionary containing the filter. The semantic model is created for the filtered eventlog. If not defined, the entire model eventlog will be used.&lt;br /&gt;
# &#039;&#039;&#039;Event column role mappings&#039;&#039;&#039;: Mappings to apply for event columns. If not defined, default column mappings are used.&lt;br /&gt;
# &#039;&#039;&#039;Case column role mappings&#039;&#039;&#039;: Mappings to apply for case columns. If not defined, default column mappings are used.&lt;br /&gt;
&lt;br /&gt;
Examples: Returns a semantic model without any filtering applied.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(1).GetSemanticModel();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Function to get Model by model id:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||ModelById&lt;br /&gt;
||&lt;br /&gt;
* Model id (Integer)&lt;br /&gt;
||&lt;br /&gt;
Returns [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Model|Model]] object corresponding to the provided model id.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Object-centric model==&lt;br /&gt;
Object-centric models additionally have the following properties and functions.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Object-Centric model properties&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||IsOcelModel (boolean)&lt;br /&gt;
||Returns &#039;&#039;true&#039;&#039; when the model is an OCEL model.&lt;br /&gt;
|-&lt;br /&gt;
||OcelEvents (Datatable)&lt;br /&gt;
||Datatable containing event data for the OCEL model. Value &#039;&#039;null&#039;&#039; is returned if event datatable has not been configured for the model. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
|-&lt;br /&gt;
||OcelEventToObject (Datatable)&lt;br /&gt;
||Datatable containing event-to-object relations data for the OCEL model. Value &#039;&#039;null&#039;&#039; is returned if event-to-object relation datatable has not been configured for the model. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
|-&lt;br /&gt;
||OcelEventTypes (Dictionary)&lt;br /&gt;
||Returns a dictionary containing event type names as keys and the datatables holding event data for that event type in this OCEL model as value. An empty array is returned if event types datatable has not been configured for the model. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
&lt;br /&gt;
Example: Get datatable for &amp;quot;Create order&amp;quot; events:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(1).OcelEventTypes.Get(&amp;quot;Create order&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||OcelObjects (Datatable)&lt;br /&gt;
||Datatable containing objects data for the OCEL model. Value &#039;&#039;null&#039;&#039; is returned if object datatable has not been configured for the model. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
|-&lt;br /&gt;
||OcelObjectToObject (Datatable)&lt;br /&gt;
||Datatable containing object-to-object relations data for the OCEL model. Value &#039;&#039;null&#039;&#039; is returned if object-to-object relation datatable has not been configured for the model. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
|-&lt;br /&gt;
||OcelObjectTypes (Dictionary)&lt;br /&gt;
||Returns a dictionary containing object type names as keys and the datatables holding data for that object type in this OCEL model as value. An empty array is returned if object types have not been configured for this model. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Object-centric model functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||OcelEventType&lt;br /&gt;
||Event type name (String)&lt;br /&gt;
||&lt;br /&gt;
Datatable containing event type attributes of given event type in this OCEL model. Value &#039;&#039;null&#039;&#039; is returned if a datatable is not configured for this model for given event type. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
&lt;br /&gt;
Example: Get datatable for &amp;quot;Create order&amp;quot; events:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ModelById(1).OcelEventType(&amp;quot;Create order&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||OcelObjectType&lt;br /&gt;
||Object type name (String)&lt;br /&gt;
||Datatable containing object type attributes of given object type in this OCEL model. Value &#039;&#039;null&#039;&#039; is returned if a datatable is not configured for this model for given object type. Throws an unsupported operation exception if the model is not an OCEL model.&lt;br /&gt;
|-&lt;br /&gt;
||OcelObjectTypeConfiguration&lt;br /&gt;
||Object type name (String)&lt;br /&gt;
||Returns a matching configuration object with the following properties:&amp;lt;br&amp;gt;&lt;br /&gt;
# Datatable: name of the datatable&lt;br /&gt;
# Unit: unit label for object type items&lt;br /&gt;
&#039;&#039;Null&#039;&#039; is returned if the given object type is not found in the model configuration.  &lt;br /&gt;
If the object type name is not specified or &#039;&#039;null&#039;&#039;, the function returns a dictionary containing configurations for all defined object types.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Project properties&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||CreatedBy (User)&lt;br /&gt;
||User who created the Project.&lt;br /&gt;
|-&lt;br /&gt;
||CreatedDate (DateTime)&lt;br /&gt;
||Timestamp when the Project was created.&lt;br /&gt;
|-&lt;br /&gt;
||Configuration (Dictionary)&lt;br /&gt;
||Project settings as Dictionary object. See example in &#039;&#039;ConfigurationJson&#039;&#039; property.&lt;br /&gt;
|-&lt;br /&gt;
||ConfigurationJson (String)&lt;br /&gt;
||Project settings as json string.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;DefaultLocationInDataSource&amp;quot;: {&lt;br /&gt;
    &amp;quot;Database&amp;quot;: &amp;quot;MyDatabase&amp;quot;,&lt;br /&gt;
    &amp;quot;Schema&amp;quot;: &amp;quot;MySchema&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;ConnectionStringKeys&amp;quot;: {&lt;br /&gt;
    &amp;quot;Snowflake&amp;quot;: &amp;quot;MyKey1&amp;quot;,&lt;br /&gt;
    &amp;quot;SqlServer&amp;quot;: &amp;quot;MyKey2&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||Dashboards (Dashboard*)&lt;br /&gt;
||Returns all [[Dashboard_in_Expression_Language|dashboards]] in the project.&lt;br /&gt;
|-&lt;br /&gt;
||Datatables (Datatable*)&lt;br /&gt;
||Returns all Datatables in the project.&lt;br /&gt;
|-&lt;br /&gt;
||DeletedDate (DateTime)&lt;br /&gt;
||Timestamp when the Project was deleted (moved to the recycle bin).&lt;br /&gt;
|-&lt;br /&gt;
||Description (String)&lt;br /&gt;
||Project description. The project description may contain line breaks.&lt;br /&gt;
|-&lt;br /&gt;
||DeletedBy (User)&lt;br /&gt;
||User who deleted the Project (moved to the recycle bin).&lt;br /&gt;
|-&lt;br /&gt;
||Id (Integer)&lt;br /&gt;
||Id of the Project.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedBy (User)&lt;br /&gt;
||User who last modified the Project.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedDate (DateTime)&lt;br /&gt;
||Timestamp when the Project was last modified (refers to the project name, description and parent, not the contents of the project).&lt;br /&gt;
|-&lt;br /&gt;
||Name (String)&lt;br /&gt;
||Name of the Project.&lt;br /&gt;
|-&lt;br /&gt;
||Models (Model*)&lt;br /&gt;
||Models that are in the Project.&lt;br /&gt;
|-&lt;br /&gt;
||Parent (Project)&lt;br /&gt;
||Parent project, i.e. a Project where the Project is located in the hierarchy of Projects. Returns &#039;&#039;null&#039;&#039; for root level Projects. Throws an error if user doesn&#039;t have access to the parent project.&lt;br /&gt;
|-&lt;br /&gt;
||ParentProjectId (Integer)&lt;br /&gt;
||Parent project id. Returns &#039;&#039;null&#039;&#039; for root level Projects. The parent project id is returned even if user doesn&#039;t have access to the parent project.&lt;br /&gt;
|-&lt;br /&gt;
||Scripts (Script*)&lt;br /&gt;
||Scripts that are in the Project.&lt;br /&gt;
|-&lt;br /&gt;
||Secrets (Dictionary*)&lt;br /&gt;
||Returns array of all [[Storing_Secrets_for_Scripts|secrets]] in the project as Dictionary with following properties:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039; (string): Name of the secret.&lt;br /&gt;
* &#039;&#039;&#039;Type&#039;&#039;&#039; (string): Type of the secret which is one of the following: &amp;quot;odbc&amp;quot;, &amp;quot;sap&amp;quot;, &amp;quot;salesforce&amp;quot;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Project functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||CreateDashboard (Dashboard)&lt;br /&gt;
||Parameters dictionary&lt;br /&gt;
||Creates a dashboard to the project. &#039;&#039;EditDashboards&#039;&#039; permission to the project is required. The parameter is dictionary with following supported dashboard properties:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039; (String): Name of the dashboard.&lt;br /&gt;
* &#039;&#039;&#039;Identifier&#039;&#039;&#039; (String): Identifier of the dashboard.&lt;br /&gt;
* &#039;&#039;&#039;Description&#039;&#039;&#039; (String): Description of the dashboard.&lt;br /&gt;
* &#039;&#039;&#039;Content&#039;&#039;&#039; (Dictionary): Content of the dashboard.&lt;br /&gt;
&lt;br /&gt;
Example: Create empty dashboard.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1)&lt;br /&gt;
  .CreateDashboard(#{&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;My dashboard&amp;quot;,&lt;br /&gt;
    &amp;quot;Identifier&amp;quot;: &amp;quot;MyDashboard&amp;quot;&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Create dashboard with a chart.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1)&lt;br /&gt;
  .CreateDashboard(#{&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;My dashboard&amp;quot;,&lt;br /&gt;
    &amp;quot;Content&amp;quot;: #{&lt;br /&gt;
      &amp;quot;version&amp;quot;: 4,&lt;br /&gt;
      &amp;quot;typeName&amp;quot;: &amp;quot;View&amp;quot;,&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;My dashboard&amp;quot;,&lt;br /&gt;
      &amp;quot;subElements&amp;quot;: [&lt;br /&gt;
        #{&lt;br /&gt;
          &amp;quot;position&amp;quot;: #{&lt;br /&gt;
            &amp;quot;x&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;y&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;width&amp;quot;: 0.5,&lt;br /&gt;
            &amp;quot;height&amp;quot;: 0.5,&lt;br /&gt;
            &amp;quot;zOrder&amp;quot;: 0&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;element&amp;quot;: #{&lt;br /&gt;
            &amp;quot;typeName&amp;quot;: &amp;quot;Chart&amp;quot;,&lt;br /&gt;
            &amp;quot;configuration&amp;quot;: #{&lt;br /&gt;
              &amp;quot;root&amp;quot;: #{&lt;br /&gt;
                &amp;quot;expressionType&amp;quot;: &amp;quot;Cases&amp;quot;,&lt;br /&gt;
                &amp;quot;expressionParameters&amp;quot;: #{}&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;measures&amp;quot;: [#{&lt;br /&gt;
                &amp;quot;expressionType&amp;quot;: &amp;quot;Count&amp;quot;,&lt;br /&gt;
                &amp;quot;expressionParameters&amp;quot;: #{}&lt;br /&gt;
              }]&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;CreateDatatable&amp;quot;&amp;gt;CreateDatatable&amp;lt;/span&amp;gt; (Datatable)&lt;br /&gt;
||&lt;br /&gt;
* Parameters dictionary&lt;br /&gt;
||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:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039; (string): Name of the datatable. This parameter is mandatory.&lt;br /&gt;
* &#039;&#039;&#039;Description&#039;&#039;&#039; (string): Description for the datatable. This parameter is optional.&lt;br /&gt;
* &#039;&#039;&#039;NameInDataSource&#039;&#039;&#039; (string): Table name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.&lt;br /&gt;
* &#039;&#039;&#039;SchemaNameInDataSource&#039;&#039;&#039; (string): Schema name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.&lt;br /&gt;
* &#039;&#039;&#039;DatabaseNameInDataSource&#039;&#039;&#039; (string): Database name in the datasource (e.g., in Snowflake) which this datatable is linked to. This parameter is optional.&lt;br /&gt;
* &#039;&#039;&#039;Type&#039;&#039;&#039; (string): Defines where the data for the datatable is located. Available values are &#039;&#039;&#039;Snowflake&#039;&#039;&#039;, &#039;&#039;&#039;SqlServer&#039;&#039;&#039;, and &#039;&#039;&#039;Local&#039;&#039;&#039;.  This parameter is optional and default value is defined by the [[PA_Configuration_database_table#General_Settings|DefaultDataSource]] setting.&lt;br /&gt;
* &#039;&#039;&#039;Connection&#039;&#039;&#039;: Connection object for the datatable. This parameter is optional.&lt;br /&gt;
&lt;br /&gt;
Example: Create a new datatable:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).CreateDatatable(#{&lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My datatable&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Create Snowflake datatable linked to a custom table:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).CreateDatatable(#{&lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My datatable&amp;quot;,&lt;br /&gt;
  &amp;quot;Description&amp;quot;: &amp;quot;My description&amp;quot;,&lt;br /&gt;
  &amp;quot;NameInDataSource&amp;quot;: &amp;quot;MyTable&amp;quot;,&lt;br /&gt;
  &amp;quot;SchemaNameInDataSource&amp;quot;: &amp;quot;MySchema&amp;quot;,&lt;br /&gt;
  &amp;quot;DatabaseNameInDataSource&amp;quot;: &amp;quot;MyDatabase&amp;quot;,&lt;br /&gt;
  &amp;quot;Type&amp;quot;: &amp;quot;Snowflake&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Create Snowflake datatable where connection string is stored as a [[Storing_Secrets_for_Scripts|secret]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).CreateDatatable(#{&lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My datatable&amp;quot;,&lt;br /&gt;
  &amp;quot;Type&amp;quot;: &amp;quot;Snowflake&amp;quot;,&lt;br /&gt;
  &amp;quot;Connection&amp;quot;: ProjectById(1).CreateSnowflakeConnection(#{ &amp;quot;OdbcConnectionStringKey&amp;quot;: &amp;quot;MyKey&amp;quot; })&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||CreateMeaConnection&lt;br /&gt;
||&lt;br /&gt;
||&lt;br /&gt;
Creates an object representing connection to QPR MEA (QPR Suite) Web Service. The parameter is an optional dictionary specifying connection parameters. Supported parameters are:  &lt;br /&gt;
* &#039;&#039;&#039;ConnectionStringKey&#039;&#039;&#039;: If given, this string will be used to connect to the target cluster using ODBC.&lt;br /&gt;
               1. The actual value of the used QPR MEA connection string (#2603041520319#) is stored into the secure value store using &amp;quot;QprMea&amp;quot; item type.&lt;br /&gt;
&lt;br /&gt;
Example to create the connection:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let connectionObject = ProjectByName(&amp;quot;MyProject&amp;quot;)&lt;br /&gt;
  .CreateMeaConnection( #{&amp;quot;ConnectionStringKey&amp;quot;: &amp;quot;MyMeaConnection&amp;quot;} );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example to use the connection:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
connectionObject.QueryObjects(&lt;br /&gt;
  &amp;quot;[PG.785401983.683494101]&amp;quot;,&lt;br /&gt;
  &amp;quot;name, typename&amp;quot;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||CreateModel (Model)&lt;br /&gt;
||&lt;br /&gt;
* Parameters dictionary&lt;br /&gt;
||Creates a model to a project. Requires &#039;&#039;GenericWrite&#039;&#039; permission for the Project and global &#039;&#039;CreateModel&#039;&#039; permission. If a model with that name already exists, an exception is thrown.&lt;br /&gt;
&lt;br /&gt;
Parameters dictionary has the following properties:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039;: Name of the model. This property is mandatory.&lt;br /&gt;
* &#039;&#039;&#039;Description&#039;&#039;&#039;: Description of the model. This property is optional.&lt;br /&gt;
* &#039;&#039;&#039;Configuration&#039;&#039;&#039;: Configuration dictionary for the model. This property is technically optional, but a working model requires at least datasource settings to be defined.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).CreateModel(#{    &lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My model&amp;quot;,&lt;br /&gt;
  &amp;quot;Description&amp;quot;: &amp;quot;My description&amp;quot;,&lt;br /&gt;
  &amp;quot;Configuration&amp;quot;: #{&lt;br /&gt;
    &amp;quot;DataSource&amp;quot;: #{&lt;br /&gt;
      &amp;quot;Cases&amp;quot;: #{&lt;br /&gt;
        &amp;quot;DataSourceType&amp;quot;: &amp;quot;datatable&amp;quot;,&lt;br /&gt;
        &amp;quot;DataTableName&amp;quot;: &amp;quot;My cases datatable&amp;quot;,&lt;br /&gt;
        &amp;quot;Columns&amp;quot;: #{&lt;br /&gt;
          &amp;quot;CaseId&amp;quot;: &amp;quot;Case Name&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;Events&amp;quot;: #{&lt;br /&gt;
        &amp;quot;DataSourceType&amp;quot;: &amp;quot;datatable&amp;quot;,&lt;br /&gt;
        &amp;quot;DataTableName&amp;quot;: &amp;quot;My events datatable&amp;quot;,&lt;br /&gt;
        &amp;quot;Columns&amp;quot;: #{&lt;br /&gt;
           &amp;quot;CaseId&amp;quot;: &amp;quot;Case Name&amp;quot;,&lt;br /&gt;
           &amp;quot;EventType&amp;quot;: &amp;quot;Event Type&amp;quot;,&lt;br /&gt;
           &amp;quot;Timestamp&amp;quot;: &amp;quot;Start Time&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;CreateProject&amp;quot;&amp;gt;CreateProject&amp;lt;/span&amp;gt; (Project)&lt;br /&gt;
||&lt;br /&gt;
* Parameters dictionary&lt;br /&gt;
||Create a project as a sub-project of the context project. Returns the created project. Requires the &#039;&#039;ManageProject&#039;&#039; permission.&lt;br /&gt;
&lt;br /&gt;
Parameters dictionary has the following properties:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039; (string): Name of the project. This property is required.&lt;br /&gt;
* &#039;&#039;&#039;Description&#039;&#039;&#039; (string): Description of the project.&lt;br /&gt;
* &#039;&#039;&#039;ParentProjectId&#039;&#039;&#039; (integer): Id of the parent project where the new project is created. This parameter is usually not needed because the parent project is the context project. The CreateProject function is also available in the generic context where the &#039;&#039;ParentProjectId&#039;&#039; parameter is needed to create sub-projects.&lt;br /&gt;
* &#039;&#039;&#039;DatabaseNameInDataSource&#039;&#039;&#039; (string): Snowflake database the project is linked to. Data for the datatables in this project will be located in this database.&lt;br /&gt;
* &#039;&#039;&#039;SchemaNameInDataSource&#039;&#039;&#039; (string): Snowflake schema the project is linked to. Data for the datatables in this project will be located in this schema. If the schema is defined, also the &#039;&#039;DatabaseNameInDataSource&#039;&#039; needs to be defined.&lt;br /&gt;
* &#039;&#039;&#039;SnowflakeConnectionStringKey&#039;&#039;&#039; (string): Snowflake connection string key to be used for the datatables in this project. &lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).CreateProject(#{&lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My project&amp;quot;, &lt;br /&gt;
  &amp;quot;Description&amp;quot;: &amp;quot;My description&amp;quot;, &lt;br /&gt;
  &amp;quot;DatabaseNameInDataSource&amp;quot;: &amp;quot;My database&amp;quot;, &lt;br /&gt;
  &amp;quot;SchemaNameInDataSource&amp;quot;: &amp;quot;My schema&amp;quot; &lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||DatatableByName (Datatable)&lt;br /&gt;
||Datatable name (String)&lt;br /&gt;
||&lt;br /&gt;
Returns Datatable by its name located in the project. Returns null, if Datatable with that name does not exist in the project.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(123).DatatableByName(&amp;quot;MyDatatable1&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Get datatable by name, and create it if it doesn&#039;t exist:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let project = ProjectById(123);&lt;br /&gt;
let datatableName = &amp;quot;MyDatatable1&amp;quot;;&lt;br /&gt;
let datatable = project.DatatableByName(datatableName);&lt;br /&gt;
if (datatable == null) {&lt;br /&gt;
  datatable = project.CreateDatatable(datatableName);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||DeletePermanently&lt;br /&gt;
||(none)&lt;br /&gt;
||Deletes the Project permanently. Note that the Project doesn&#039;t need to be in the recycle bin to be able to delete it permanently.&lt;br /&gt;
|-&lt;br /&gt;
||Export (String)&lt;br /&gt;
||(none)&lt;br /&gt;
||Exports the project and its content to a json string. The json format is described in [[Projects Export File Format]].&lt;br /&gt;
&lt;br /&gt;
Example: Export project id 1 to json data:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).Export();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||Import&lt;br /&gt;
||JSON string&lt;br /&gt;
||Creates one or several projects from a json string. The project(s) are created as child projects of the context project. The json format is described in [[Projects Export File Format]]. The function returns the created project objects. In case the project names already exist, the import operation automatically adjusts the names to be unique.&lt;br /&gt;
&lt;br /&gt;
Example: Create project from json data (as child of project id 1):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let jsonData = `{ &amp;quot;Projects&amp;quot;: [ { &amp;quot;Name&amp;quot;: &amp;quot;My project&amp;quot; } ] }`;&lt;br /&gt;
let result = ProjectById(1).Import(jsonData);&lt;br /&gt;
let createdProjectId = result[&amp;quot;Projects&amp;quot;][0].Id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||Restore&lt;br /&gt;
||(none)&lt;br /&gt;
||Restores the Project from the recycle bin back to the original location.&lt;br /&gt;
|-&lt;br /&gt;
||ModelByName (Model)&lt;br /&gt;
||Model name (String)&lt;br /&gt;
||&lt;br /&gt;
Returns Model by its name located in the project. Returns null, if Model with that name does not exist in the project.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(123).ModelByName(&amp;quot;My Model 1&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;ModifyProject&amp;quot;&amp;gt;Modify&amp;lt;/span&amp;gt; (Project)&lt;br /&gt;
||Dictionary of settings to change&lt;br /&gt;
||&lt;br /&gt;
Change project settings. Following settings are supported:&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039; (String): Name of the project.&lt;br /&gt;
* &#039;&#039;&#039;Description&#039;&#039;&#039; (String): Description text of the project.&lt;br /&gt;
* &#039;&#039;&#039;ParentProjectId&#039;&#039;&#039; (Integer): Parent project id. Changing this effectively moves the project into different parent project.&lt;br /&gt;
* &#039;&#039;&#039;DatabaseNameInDataSource&#039;&#039;&#039;: Name of the Snowflake database where the project&#039;s datatables are located. The database needs to exist in the same Snowflake account configured in the Snowflake connection string. When defining this setting, define also the &#039;&#039;SchemaNameInDataSource&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;SchemaNameInDataSource&#039;&#039;&#039;: Name of the Snowflake schema where the project&#039;s datatables are located. The schema needs to exist in the same Snowflake account configured in the Snowflake connection string. When defining this setting, define also the &#039;&#039;DatabaseNameInDataSource&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;SnowflakeConnectionStringKey&#039;&#039;&#039; (String): Snowflake connection string key for the project. Snowflake datatables in the project will use connection string behind this key (unless specified by the datatatable).&lt;br /&gt;
* &#039;&#039;&#039;SqlServerConnectionStringKey&#039;&#039;&#039; (String): SQL Server connection string key. SQL Server datatables in the project will use connection string behind this key (unless specified by the datatatable).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ManageProject&#039;&#039; permission is needed to change project properties.&lt;br /&gt;
&lt;br /&gt;
Example: Change project name and move project into other parent project:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1)&lt;br /&gt;
  .Modify(#{&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;Project 1&amp;quot;&lt;br /&gt;
    &amp;quot;ParentProjectId&amp;quot;: 2&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Set Snowflake connection string key for the project:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1)&lt;br /&gt;
  .Modify(#{&lt;br /&gt;
    &amp;quot;SnowflakeConnectionStringKey&amp;quot;: &amp;quot;MyKey1&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||ScriptByName (Script)&lt;br /&gt;
||Script name (String)&lt;br /&gt;
||&lt;br /&gt;
Returns Script by its name located in the project. Returns null, if Script with that name does not exist in the project.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(123).ScriptByName(&amp;quot;MyScript1&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;SetSecret&amp;quot;&amp;gt;SetSecret&amp;lt;/span&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
# Secret type (string)&lt;br /&gt;
# Secret name (string)&lt;br /&gt;
# Secret value (string)&lt;br /&gt;
||Sets or adds a [[Storing_Secrets_for_Scripts|secret]] for the project. Setting the secret value to &#039;&#039;null&#039;&#039; 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 &#039;&#039;ManageProject&#039;&#039; permission.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
# &#039;&#039;&#039;Type&#039;&#039;&#039; (string): Secret type which is one of the following:&lt;br /&gt;
#* &amp;quot;externaldatatableconnection&amp;quot;: Snowflake ODBC connection string for datatables.&lt;br /&gt;
#* &amp;quot;odbc&amp;quot;: ODBC connection string (e.g., to extract data in scripts, or load an in-memory model).&lt;br /&gt;
#* &amp;quot;oledb&amp;quot;: OleDB connection string (e.g., to extract data in scripts, or load an in-memory model).&lt;br /&gt;
#* &amp;quot;sap&amp;quot;: SAP password.&lt;br /&gt;
#* &amp;quot;salesforce&amp;quot;: Salesforce password.&lt;br /&gt;
#* &amp;quot;sql&amp;quot;: SQL Server connection string.&lt;br /&gt;
#* &amp;quot;qprmea&amp;quot;: QPR MEA connection string.&lt;br /&gt;
# &#039;&#039;&#039;Name&#039;&#039;&#039; (string): Secret name, used to refer to the secret in the commands.&lt;br /&gt;
# &#039;&#039;&#039;Value&#039;&#039;&#039; (string): Secret value which contains the confidential information.&lt;br /&gt;
&lt;br /&gt;
Example: Set SAP password:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).SetSecret(&amp;quot;sap&amp;quot;, &amp;quot;MySapPassword&amp;quot;, &amp;quot;I l0ve 5AP!&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Remove SAP password:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).SetSecret(&amp;quot;sap&amp;quot;, &amp;quot;MySapPassword&amp;quot;, null);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Functions to get project:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||ProjectById&lt;br /&gt;
||Project id (Integer)&lt;br /&gt;
||&lt;br /&gt;
Returns project object corresponding to the provided project id.&lt;br /&gt;
|-&lt;br /&gt;
||ProjectByName&lt;br /&gt;
||Project name (String)&lt;br /&gt;
||&lt;br /&gt;
Returns project object by given project name. If there is no such project or user doesn&#039;t have access to it, &#039;&#039;null&#039;&#039; value is returned. If there are multiple projects with the same name, one of them is returned.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let project = ProjectByName(&amp;quot;My Project&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Functions to create project:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;CreateProject&amp;quot;&amp;gt;CreateProject&amp;lt;/span&amp;gt; (Project)&lt;br /&gt;
||Parameters dictionary&lt;br /&gt;
||Create a project. This is a similar function as the [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#CreateProject|CreateProject function]] in the project context. This function in the generic context is needed to create root-level projects (which don&#039;t have parent project).&lt;br /&gt;
&lt;br /&gt;
Example: create a root project:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CreateProject(#{&lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My project&amp;quot;&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: create a sub-project:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CreateProject(#{&lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;My project&amp;quot;&lt;br /&gt;
  &amp;quot;ParentProjectId&amp;quot;: 1&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;Import&amp;quot;&amp;gt;Import&amp;lt;/span&amp;gt; (Project*)&lt;br /&gt;
||JSON string&lt;br /&gt;
||Creates one or several projects from a json string. The project(s) are created as the root level projects. The json format is described in [[Projects Export File Format]]. The function returns the created project objects. In case the project names already exist, the import operation automatically adjusts the names to be unique.&lt;br /&gt;
&lt;br /&gt;
Example: Create a root level project from json data:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let jsonData = `{ &amp;quot;Projects&amp;quot;: [ { &amp;quot;Name&amp;quot;: &amp;quot;My project&amp;quot; } ] }`;&lt;br /&gt;
let result = Import(jsonData);&lt;br /&gt;
let createdProjectId = result[&amp;quot;Projects&amp;quot;][0].Id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Script ==&lt;br /&gt;
Scripts are entities that contain executable code, that can be run. Usually scripts contains ETL routines but also other kind of tasks are possible.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Script properties&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||Code (String)&lt;br /&gt;
||Script code.&lt;br /&gt;
|-&lt;br /&gt;
||CreatedBy (User)&lt;br /&gt;
||User who created the Script.&lt;br /&gt;
|-&lt;br /&gt;
||CreatedDate (DateTime)&lt;br /&gt;
||Timestamp when the Script was created.&lt;br /&gt;
|-&lt;br /&gt;
||CurrentRunStart (DateTime)&lt;br /&gt;
||Timestamp of the current run start. Null if the script is currently not running.&lt;br /&gt;
|-&lt;br /&gt;
||Description (String)&lt;br /&gt;
||Description of the Script.&lt;br /&gt;
|-&lt;br /&gt;
||Id (Integer)&lt;br /&gt;
||Id of the Script.&lt;br /&gt;
|-&lt;br /&gt;
||Language (String)&lt;br /&gt;
||Either of the following scripting language: &#039;&#039;&#039;Expression&#039;&#039;&#039; or &#039;&#039;&#039;SQL&#039;&#039;&#039;. 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).&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedBy (User)&lt;br /&gt;
||User who last modified the Script.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedDate (DateTime)&lt;br /&gt;
||Timestamp when the Script was last modified.&lt;br /&gt;
|-&lt;br /&gt;
||LastRunEnd (DateTime)&lt;br /&gt;
||Timestamp of the last completed script run end (either successful completion or failure). Null if the Script hasn&#039;t been run yet.&lt;br /&gt;
|-&lt;br /&gt;
||LastRunResult (String)&lt;br /&gt;
||Result of the last run. Options are:&lt;br /&gt;
* &#039;&#039;&#039;Completed&#039;&#039;&#039;: The last run was completed successfully.&lt;br /&gt;
* &#039;&#039;&#039;Failed&#039;&#039;&#039;: An error occurred during the last run, so likely the script did not complete as intended.&lt;br /&gt;
* &#039;&#039;&#039;Aborted&#039;&#039;&#039;: Script run was manually stopped prematurely by a user, so the script did not proceeded in the end.&lt;br /&gt;
&lt;br /&gt;
Null if the Script hasn&#039;t been run yet.&lt;br /&gt;
|-&lt;br /&gt;
||LastRunStart (DateTime)&lt;br /&gt;
||Timestamp of the last completed script run start time. Null if the Script hasn&#039;t been run yet.&lt;br /&gt;
|-&lt;br /&gt;
||Name (String)&lt;br /&gt;
||Name of the Script.&lt;br /&gt;
|-&lt;br /&gt;
||OperationId (Integer)&lt;br /&gt;
||Id of the operation which runs the Script. Null if the script is currently not running.&lt;br /&gt;
|-&lt;br /&gt;
||Project (Project)&lt;br /&gt;
||Project where the Script is located. Null if the script is in the global context.&lt;br /&gt;
|-&lt;br /&gt;
||ProjectId (Integer)&lt;br /&gt;
||Id of the project where the Script is located. Null if the script is in the global context.&lt;br /&gt;
|-&lt;br /&gt;
||Status (String)&lt;br /&gt;
||Current status of the script. Options are:&lt;br /&gt;
* &#039;&#039;&#039;Ready&#039;&#039;&#039;: Script is not running. In this status, the script can be started (changing the status to &#039;&#039;Running&#039;&#039;).&lt;br /&gt;
* &#039;&#039;&#039;Running&#039;&#039;&#039;: Script is running. In this status, the script can be stopped (changing the status to &#039;&#039;Stopping&#039;&#039;). Calling stop just requests a script to stop, and the actual stopping occurs some time later.&lt;br /&gt;
* &#039;&#039;&#039;Stopping&#039;&#039;&#039;: Script has been requested to be stopped, but it&#039;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 &#039;&#039;Ready&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Script functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||Run (Object)&lt;br /&gt;
||Dictionary of parameters&lt;br /&gt;
||&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
For SQL scripts, the passed parameters are available in the script as variables in format &#039;&#039;&#039;@_parameter_&amp;lt;ParameterName&amp;gt;&#039;&#039;&#039; where &amp;lt;ParameterName&amp;gt; is the name of the parameter, e.g. &#039;&#039;parameter_myParameter1&#039;&#039;. Only string type of parameters can be used, so any other type of data in parameter values is converted into strings.&lt;br /&gt;
&lt;br /&gt;
The return value of the script is returned by the Run function. Expression scripts return a value with the &#039;&#039;return&#039;&#039; 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 &#039;&#039;_empty&#039;&#039;. 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 &#039;&#039;--#ShowReport&#039;&#039; command or the &#039;&#039;Show&#039;&#039; parameter).&lt;br /&gt;
&lt;br /&gt;
When a script is called using the Run function, the called script status does not change, because it&#039;s the parent script that is &#039;&#039;Running&#039;&#039;. Also the called script log is not filled, but instead the logging goes to the calling script.&lt;br /&gt;
&lt;br /&gt;
It&#039;s possible to call a script using the Run function several times simultaneously.&lt;br /&gt;
&lt;br /&gt;
If there is an error when running the called script, the Run function throws the error to the calling script.&lt;br /&gt;
&lt;br /&gt;
Scripts are run in the script entity context, so for example the following properties are available:&lt;br /&gt;
* Id: Script id&lt;br /&gt;
* Name: Script name&lt;br /&gt;
* Project.Id: Project id where the script is located&lt;br /&gt;
* Project.Name: Name of the project where the script is located&lt;br /&gt;
&lt;br /&gt;
Example: Following script (id 123) raises a specified number to a specified power:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
return Pow(numberToRaise, exponent);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The script can be called as follows (returning 16):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let runResult = ScriptById(123).Run(#{&lt;br /&gt;
  &amp;quot;numberToRaise&amp;quot;: 4,&lt;br /&gt;
  &amp;quot;exponent&amp;quot;: 2&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;span id=&amp;quot;Start&amp;quot;&amp;gt;Start&amp;lt;/span&amp;gt;&lt;br /&gt;
||Dictionary of parameters&lt;br /&gt;
||Starts the script. The function call doesn&#039;t wait for the script run to complete (i.e., asynchronous behavior) which is same as starting the script in the [[Managing_Scripts#Starting_Script|Workspace]].&lt;br /&gt;
&lt;br /&gt;
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 &#039;&#039;null&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Example: Start script (without parameters) and store the script run id:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let runId = ScriptById(1).Start();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Start script with passing parameters:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ScriptById(1).Start(#{&lt;br /&gt;
  &amp;quot;variable1&amp;quot;: &amp;quot;val1&amp;quot;,&lt;br /&gt;
  &amp;quot;variable2&amp;quot;: 5&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||Stop&lt;br /&gt;
||&lt;br /&gt;
||Stops the script. The operation doesn&#039;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.&lt;br /&gt;
&lt;br /&gt;
Return value is the script run id (integer) if the script was running. If the script isn&#039;t running, the return value is &#039;&#039;null&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let runId = ScriptById(1).Stop();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Function to get a script by the script id:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||ScriptById&lt;br /&gt;
||&lt;br /&gt;
* Script id (Integer)&lt;br /&gt;
||&lt;br /&gt;
Returns Script object corresponding to the given script id. If script with the given id doesn&#039;t exist or user doesn&#039;t have permissions to it, an error is given.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== User/Group ==&lt;br /&gt;
User objects represents users and user groups. Note that some properties can only be used for users and some for groups.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;User/group properties&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||CreatedBy (User)&lt;br /&gt;
||Returns the user who created the user.&lt;br /&gt;
|-&lt;br /&gt;
||CreatedDate (DateTime)&lt;br /&gt;
||Returns the date when the user was created.&lt;br /&gt;
|-&lt;br /&gt;
||DefaultDashboard (String)&lt;br /&gt;
||Returns the configured [[User_Settings#Starting_dashboard|starting dashboard]] (&amp;quot;default dashboard&amp;quot;) identifier for a group (for users, the starting dashboard cannot be configured). The starting dashboard is automatically opened when a user logs in.&lt;br /&gt;
|-&lt;br /&gt;
||Description (String)&lt;br /&gt;
||Description of the user.&lt;br /&gt;
|-&lt;br /&gt;
||EffectiveDefaultDashboard (String)&lt;br /&gt;
||Returns the [[User_Settings#Starting_dashboard|starting dashboard]] of a user. Value &#039;&#039;null&#039;&#039; means that the user doesn&#039;t have a starting dashboard. The starting dashboard comes from the user&#039;s groups. If multiple of user&#039;s groups have the starting dashboard defined, the user&#039;s starting dashboard will be taken from a group having alphabetically the first name.&lt;br /&gt;
|-&lt;br /&gt;
||Email (String)&lt;br /&gt;
||Email address of the user.&lt;br /&gt;
|-&lt;br /&gt;
||FullName (String)&lt;br /&gt;
||Full name of the user or group name.&lt;br /&gt;
|-&lt;br /&gt;
||GlobalPermissions (String*)&lt;br /&gt;
||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.&lt;br /&gt;
|-&lt;br /&gt;
||GroupMemberNames (String*)&lt;br /&gt;
||Array of names of members of a user group. This property is available for groups.&lt;br /&gt;
|-&lt;br /&gt;
||GroupMembers (User*)&lt;br /&gt;
||Array of members of a user group. This property is available for groups.&lt;br /&gt;
|-&lt;br /&gt;
||GroupNames (String*)&lt;br /&gt;
||Array of names of user groups the user belongs to. This property is available for users.&lt;br /&gt;
|-&lt;br /&gt;
||Groups (User*)&lt;br /&gt;
||Array of user groups the user belongs to. This property is available for users.&lt;br /&gt;
|-&lt;br /&gt;
||HasPassword (Boolean)&lt;br /&gt;
||Returns true if user has a password defined in QPR ProcessAnalyzer and thus user can authenticate using the password. If user doesn&#039;t have a password, the SAML authentication is the only way to log in. &#039;&#039;ManageUsers&#039;&#039; permission is needed to access this property for other users.&lt;br /&gt;
|-&lt;br /&gt;
||Id (Integer)&lt;br /&gt;
||Id of the user, which is unique for every user.&lt;br /&gt;
|-&lt;br /&gt;
||IsActive (Boolean)&lt;br /&gt;
||Returns true only if the user is active (not disabled).&lt;br /&gt;
|-&lt;br /&gt;
||IsGroup (Boolean)&lt;br /&gt;
||Returns true if the user is a user group.&lt;br /&gt;
|-&lt;br /&gt;
||IsLocked (Boolean)&lt;br /&gt;
||Returns true if user account is currently [[User_Session_Management#Preventing_password_guessing_attacks|locked]]. &#039;&#039;ManageUsers&#039;&#039; permission is needed to access this property.&lt;br /&gt;
|-&lt;br /&gt;
||LastLockedDate (DateTime)&lt;br /&gt;
||Returns date when user account was locked the last time. Returns &#039;&#039;null&#039;&#039; if the user account has never been locked. &#039;&#039;ManageUsers&#039;&#039; permission is needed to access this property.&lt;br /&gt;
|-&lt;br /&gt;
||LastLoginDate (DateTime)&lt;br /&gt;
||Returns date when the user made last successful login. &#039;&#039;ManageUsers&#039;&#039; permission is needed to access this property for other users.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedBy (User)&lt;br /&gt;
||Returns the user who last modified this user.&lt;br /&gt;
|-&lt;br /&gt;
||LastModifiedDate (DateTime)&lt;br /&gt;
||Returns the date when the user was last modified.&lt;br /&gt;
|-&lt;br /&gt;
||Name (String)&lt;br /&gt;
||Login name of the user or group.&lt;br /&gt;
|-&lt;br /&gt;
||Roles (Object**)&lt;br /&gt;
||&lt;br /&gt;
Returns all roles of the user (both global and project roles) as a nested array structure.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ToJson(Users.Where(name == &amp;quot;qpr&amp;quot;).Roles)&lt;br /&gt;
Returns (for example):&lt;br /&gt;
[&lt;br /&gt;
  [{&amp;quot;calcId&amp;quot;: &amp;quot;Project:1&amp;quot;}, &amp;quot;Administrator&amp;quot;],&lt;br /&gt;
  [{&amp;quot;calcId&amp;quot;: &amp;quot;Project:2&amp;quot;}, &amp;quot;Analyzer&amp;quot;],&lt;br /&gt;
  [{&amp;quot;calcId&amp;quot;: &amp;quot;Project:3&amp;quot;}, &amp;quot;Viewer&amp;quot;],&lt;br /&gt;
  [null, &amp;quot;RunScripts&amp;quot;],&lt;br /&gt;
  [null, &amp;quot;Administrator&amp;quot;]&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;User/group functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||EffectivePermissionsFor (String Array)&lt;br /&gt;
||&lt;br /&gt;
* Project to get permissions&lt;br /&gt;
||&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Permissions for the EffectivePermissionsFor function are as follows:&lt;br /&gt;
* All users can query their own permissions&lt;br /&gt;
* To get permissions for any user, the user needs to have [[Roles_and_Permissions|ManageUsers permission]].&lt;br /&gt;
&lt;br /&gt;
Note that &#039;&#039;inactive&#039;&#039; users don&#039;t have any effective permissions, so the EffectivePermissionsFor function does not return any permissions for those users.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
UserById(1).EffectivePermissionsFor(ModelById(2).Project)&lt;br /&gt;
Returns (for example): [&amp;quot;EditDashboards&amp;quot;, &amp;quot;Filtering&amp;quot;, &amp;quot;GenericRead&amp;quot;]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||GetAttribute&lt;br /&gt;
||&lt;br /&gt;
||&lt;br /&gt;
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&#039;t exist, null is returned.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
# &#039;&#039;&#039;Attribute name&#039;&#039;&#039; (String): Name of the attribute.&lt;br /&gt;
# &#039;&#039;&#039;Attribute context&#039;&#039;&#039; (Project/Model/Dashboard): Optional context object the attribute is linked to.&lt;br /&gt;
&lt;br /&gt;
Users have permissions to get attributes for themselves, and also (administrator) users with global &#039;&#039;ManageUsers&#039;&#039; permission can get attributes for all users. In addition, if using the context object, the &#039;&#039;GenericRead&#039;&#039; permission is required for the context object.&lt;br /&gt;
&lt;br /&gt;
Example: Get user attribute MyDataValue for myself:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CurrentUser&lt;br /&gt;
  .GetAttribute(&amp;quot;MyDataValue&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Get user attribute MyDataValue for user John:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Users&lt;br /&gt;
  .Where(Name==&amp;quot;John&amp;quot;)&lt;br /&gt;
  .GetAttribute(&amp;quot;MyDataValue&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Get user attribute MyDataValue for user 1 related to dashboard id 1:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
UserById(1)&lt;br /&gt;
  .GetAttribute(&amp;quot;MyDataValue&amp;quot;, DashboardById(1));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||SetAttribute&lt;br /&gt;
||&lt;br /&gt;
||&lt;br /&gt;
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 &#039;&#039;null&#039;&#039;, the user attribute is removed. Required permissions are same as in the GetAttribute function.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
# &#039;&#039;&#039;Attribute name&#039;&#039;&#039; (String): Name of the attribute.&lt;br /&gt;
# &#039;&#039;&#039;Attribute value&#039;&#039;&#039; (String/Integer/Float/DateTime): Attribute value to be stored.&lt;br /&gt;
# &#039;&#039;&#039;Attribute context&#039;&#039;&#039; (Project/Model/Dashboard): Optional context object the attribute value is linked to.&lt;br /&gt;
&lt;br /&gt;
Example: Set user attribute MyDataValue for myself:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CurrentUser&lt;br /&gt;
  .SetAttribute(&amp;quot;MyDataValue &amp;quot;, &amp;quot;value&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Set value 123 as user attribute MyDataValue for user John:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Users&lt;br /&gt;
  .Where(Name==&amp;quot;John&amp;quot;)&lt;br /&gt;
  .SetAttribute(&amp;quot;MyDataValue&amp;quot;, 123);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Set current time as user attribute MyDataValue for user 1 related to dashboard id 1:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
UserById(1)&lt;br /&gt;
  .GetAttribute(&amp;quot;MyDataValue&amp;quot;, Now, DashboardById(1));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Function to get User by user id:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Functions&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||UserById (User)&lt;br /&gt;
||&lt;br /&gt;
* User id (Integer)&lt;br /&gt;
||&lt;br /&gt;
Returns User object that has the provided user id. Also groups can be queried with this function. Returns an access denied error if the user with given id does not exist or the current user does not have access to it.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
	<entry>
		<id>https://wiki.onqpr.com/pa/index.php?title=Storing_Secrets_for_Scripts&amp;diff=28027</id>
		<title>Storing Secrets for Scripts</title>
		<link rel="alternate" type="text/html" href="https://wiki.onqpr.com/pa/index.php?title=Storing_Secrets_for_Scripts&amp;diff=28027"/>
		<updated>2026-04-08T12:39:38Z</updated>

		<summary type="html">&lt;p&gt;Ollvihe: /* Using secrets */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Secrets provide a method to store passwords and other confidential data in QPR ProcessAnalyzer, and use them without being able to see the stored secret values. For example in scripts, SAP, Salesforce and ODBC passwords can be stored as secrets, which can be referred by their names in the script commands.&lt;br /&gt;
&lt;br /&gt;
There are project-specific and global secrets. To use a secret, the user needs to have &#039;&#039;GenericRead&#039;&#039; permission to the project (or global &#039;&#039;GenericRead&#039;&#039; to use global secrets). To define a secret, the &#039;&#039;ManageProject&#039;&#039; permission to the project is needed (or global &#039;&#039;ManageProject&#039;&#039; to define global secrets). If both a global and a project-specific secret with the same name and type are set, the project-specific secret will be used in that project, and thus the global secret is unavailable for that project.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Setting secrets ==&lt;br /&gt;
Secrets can be set by calling the [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#SetSecret|SetSecret]] function for the project, or the corresponding generic context [[Generic_Functions_in_QPR_ProcessAnalyzer#SetSecret|SetSecret]] function. Project secrets can also be defined in the [[Project_Properties_Dialog#Secrets|Project Properties Dialog]].&lt;br /&gt;
&lt;br /&gt;
Example: Set a project secret (for project id 1):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProjectById(1).SetSecret(&amp;quot;sap&amp;quot;, &amp;quot;SapAdminPassword&amp;quot;, &amp;quot;I l0ve 5AP!&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: Set a global secret:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SetSecret(&amp;quot;sap&amp;quot;, &amp;quot;SapReaderPassword&amp;quot;, &amp;quot;I l0ve 5AP!&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Listing secrets ==&lt;br /&gt;
To list all secrets in the project, use the [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Project|Secrets]] property for the project. For the global secrets, there is the corresponding global [[Generic_Properties_in_Expression_Language#Secrets|Secrets]] property. Note that the secret value cannot be retrieved even by system administrators.&lt;br /&gt;
&lt;br /&gt;
Example: List project secrets (for project id 1):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ToJson(ProjectById(1).Secrets);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: List global secrets:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ToJson(Secrets);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Using secrets ==&lt;br /&gt;
Secrets can be used in the following commands:&lt;br /&gt;
* [[SQL Scripting Commands|SQL scripting commands]]: ImportOdbcQuery, ImportSalesforceQuery and ImportSapQuery&lt;br /&gt;
* [[QPR_ProcessAnalyzer_Model_Datasources#Loading_Data_from_ODBC_Datasource|ODBC datasources of model]]&lt;br /&gt;
* [[DataFrame_in_Expression_Language#ImportOdbcSecure|ImportODBCSecure]] function (expression language)&lt;br /&gt;
* [[Generic_Functions_in_QPR_ProcessAnalyzer#CreateSnowflakeConnection|CreateSnowflakeConnection]] function expression language&lt;br /&gt;
* [[QPR_ProcessAnalyzer_Objects_in_Expression_Language#Project#:~:text=CreateMeaConnection|CreateMeaConnection]] function in expression language&lt;br /&gt;
&lt;br /&gt;
Note: Currently [[SQL Scripting Commands#--.23ImportSqlQuery|ImportSqlQuery]] and [[SQL Scripting Commands#--.23ImportOleDbQuery|ImportOleDbQuery]] don&#039;t yet support the secrets.&lt;/div&gt;</summary>
		<author><name>Ollvihe</name></author>
	</entry>
</feed>