SQL Scripting for ETL: Difference between revisions
(305702) |
(305654) |
||
Line 282: | Line 282: | ||
== Script Variables == | == Script Variables == | ||
The scripts have the following variables available: | The scripts have the following variables available: | ||
* '''@_ProjectId''': the Id of the project in whose context the script is being run. | * '''@_ProjectId''': the Id of the project in whose context the script is being run. BIGINT. | ||
* '''@_ModelId''': the Id of the model in whose context the script is being run. | * '''@_ModelId''': the Id of the model in whose context the script is being run. BIGINT. | ||
* '''@_FilterId''': the Id of the view in whose context the script is being run. | * '''@_FilterId''': the Id of the view in whose context the script is being run. BIGINT. | ||
* '''@_QPRProcessAnalyzerVersion''': the QPR Process Analyzer core dll version as string in the format: <major>.<minor>.<build>.<revision>. NVARCHAR(64). | |||
* '''@_ScriptingVersion''': The scripting version number that identifies the version which was used when script was saved. Can be used for indicating, for example, the version for which the script was originally planned. A script created for newer (bigger) scripting version doesn't necessarily work on a PA server supporting older (smaller) version. INT. | |||
* '''@_UserId''': the Id of the user running the script. INT. | |||
* '''@_ScriptId''': Id of the script being run. BIGINT. | |||
* '''@_EngineScriptingVersion''': The scripting version that identifies the functionalities available from QPR ProcessAnalyzer server. A script created for newer (bigger) scripting version doesn't necessarily work on a QPR ProcessAnalyzer server supporting older (smaller) version. INT. | |||
* '''#_ViewSettings''': The Settings shown in the right-hand pane in Excel used to generate the selected view. Note that this doesn't include analysis results or QPR ProcessAnalyzer Server related information, such as FilterId, TotalEventCount, or DatabaseId. Represented as a table two column table variable. The columns are: | |||
** Name: the name of the parameter. NVARCHAR(440). | |||
** Value: the value of the parameter. NVARCHAR(MAX). | |||
Note that even when a script context hasn't been selected, the variables get their values from a default filter. The default filter is the filter that was last used by the user in the model the user has last opened. If the user hasn't opened any model before, the default filter is taken from the last created model to which the user has access rights. | Note that even when a script context hasn't been selected, the variables get their values from a default filter. The default filter is the filter that was last used by the user in the model the user has last opened. If the user hasn't opened any model before, the default filter is taken from the last created model to which the user has access rights. | ||
Line 291: | Line 300: | ||
: The following script fragment defines the ProjectId, ModelId, and FilterId parameters by using the script variables: | : The following script fragment defines the ProjectId, ModelId, and FilterId parameters by using the script variables: | ||
:<code>SELECT @_ProjectId as ProjectId, @_ModelId as ModelId, @_FilterId as FilterId;</code> | :<code>SELECT @_ProjectId as ProjectId, @_ModelId as ModelId, @_FilterId as FilterId;</code> | ||
: '''Example''' | |||
: The following script gets the View Settings currently in use in the Settings pane in Excel and shows them as a table in a new Excel sheet: | |||
:<code>(SELECT * FROM #_ViewSettings) | |||
:(SELECT 'SheetName', 'ViewSettings') | |||
:--#ShowReport</code> | |||
: '''Example''' | |||
: The following script gets various information about the environment and shows them in a new Excel sheet: | |||
:<code>SELECT @_QPRProcessAnalyzerVersion as QPRProcessAnalyzerVersion, @_ScriptingVersion as ScriptingVersion, @_EngineScriptingVersion as EngineScriptingVersion, @_UserId as Userid, @_DatabaseId as DatabaseId | |||
:(SELECT 'SheetName', 'Info') | |||
:--#ShowReport | |||
== SQL Command Support == | == SQL Command Support == |
Revision as of 10:11, 30 September 2013
It is possible to load raw data into QPR ProcessAnalyzer and do the data transformation and loading into QPR ProcessAnalyzer Service via scripts using temporary database tables, so that the resulting transformed data can be used for analyses in QPR ProcessAnalyzer.
A user with the ManageIntegrations and RunScripts permissions can define a script via the Script Manager dialog. The script consists of SQL statements and QPR ProcessAnalyzer commands that take the preceding SQL statements as parameters.
Supported QPR ProcessAnalyzer Commands in Scripts
--#Exit
- Stops the execution of the script and gives a message to the user.
- Parameters
- The parameters defined in the SQL SELECT statements:
- 'Exit', '<Value>'
- Defines whether to stop the script execution:
- 1 = stop execution of the current script and call the script defined by the RunsScriptId parameter if it is given.
- 0 = if a value for the RunScriptId parameter is given, pause the execution of the current script and call the given script, then resume running the current script after the given script ends. If a value for RunScriptId is not given, do not pause or stop execution of the current script.
- 'MessageText', '<Text>'
- Text to be shown to the user after the script execution is finished if the script finished because of the Exit command, i.e. when Exit=1. The default value is "Script execution finished.", which is shown also when the script finished normally, i.e. when Exit=0. The text is also written to the script log.
- 'RunScriptId', '<Id>'
- Optional. The Id of the script to be run. Note that the script can call itself, so be careful not to create a looping script.
- Example
- The following example stops the script execution, gives a message, and runs a script with Id 12.
- (SELECT 'Exit', '1') UNION ALL
- (SELECT 'MessageText', 'Data from SAP not valid. Script execution will be terminated. Check source data. Running script Id 12.') UNION ALL
- (SELECT 'RunScriptId', '12')
- --#Exit
--#GetAnalysis
- Creates an analysis from the data which the preceding SQL statements given as parameters provide.
- Parameters
- The analysis parameters have to be defined in the SQL SELECT statements as follows:
- '<Analysis Parameter>', '<Value>'
- See Analysis Parameters for a list of supported analysis parameters in QPR ProcessAnalyzer.
- The --#GetAnalysis command supports the following analysis types:
- Flowchart Analysis (0)
- Variation Analysis in the Chart Mode (1)
- Path Analysis (3)
- Event Type Analysis in the Chart Mode (4)
- Case Analysis (5)
- Event Analysis (6)
- Event Type Analysis in the Table Mode (7)
- Variation Analysis in the Table Mode (8)
- Duration Analysis (9)
- Profiling Analysis (10)
- User Report (11)
- OperationLog Analysis (12)
- Flow Analysis (13)
- Influence Analysis (14)
- Data Table Analysis (18)
- 'TargetTable', '<#TableName>'
- The temporary table to which the analysis is to be stored. Note that only table format analyses can be stored to a temporary table.
- 'Show', '<Value>'
- Optional. If TRUE or 1, the analysis is opened after the script is run.
- 'Title', '<Value>'
- Optional. The title for the Excel sheet created when Show is TRUE or 1. Default value is the name of the analysis type.
- 'SheetName', '<Value>'
- Optional. The name of the Excel sheet created when Show is TRUE or 1. Default value is the name of the analysis type.
- Example
- The following example will get an Event analysis, open that analysis with "Analysis Title" as the title on a sheet named "Example Sheet Name", and store the Event analysis results to the "#ExampleTable" data table.
- (SELECT 'AnalysisType', '6') UNION ALL
- (SELECT 'MaximumCount', '0') UNION ALL
- (SELECT 'FilterId', '3') UNION ALL
- (SELECT 'SelectedEventAttributes', '*') UNION ALL
- (SELECT 'Show', '1') UNION ALL
- (SELECT 'Title', 'Analysis Title') UNION ALL
- (SELECT 'SheetName', 'Excel Sheet Name') UNION ALL
- (SELECT 'TargetTable' '#ExampleTable')
- --#GetAnalysis
--#ImportCaseAttributes
- Loads Case Attributes from the data which the preceding SQL statements given as parameters provide into the specified model.
- Parameters for the First Query
- The parameters defined in the SQL SELECT statements:
- 'ProjectId' or 'ProjectName', '<Value>'
- The id or the name of the project in which the target model exists. Defaults to the current project. If the given ProjectName doesn't exist, a new project is created.
- 'ModelId' or 'ModelName', '<Value>'
- The id or the name of the existing/new target model. Defaults to the current model. If ModelId is given, neither ProjectId nor ProjectName are used. If the given ModelName doesn't exist, a new model is created.
- 'Append', '<Value>'
- Defines what to do with an existing target model case attributes. TRUE or any other Integer than "0" = the existing case attributes in the target model are not deleted before import, FALSE or "0" = the existing case attributes of the target model are deleted before the import. If the target model is set to use another model as the Case Attribute Model, those case attributes are not deleted. Not used when creating a new model. Default value is TRUE.
- Parameters for the Second Query
- ''
- The database query whose results are to be imported.
--#ImportDataTable
- Imports data to a Data Table.
- Parameters
- The parameters defined in the SQL SELECT statements in the order they are listed below:
- 'ProjectId' or 'ProjectName', '<Value>'
- The id or the name of the project in which the target data table exists.
- 'DataTableId' or 'DataTableName', '<Value>'
- The id or the name of the existing/new target data table.
- 'Append', '<Value>'
- Defines what to do with an existing target data table contents. TRUE or any other Integer than "0" = the existing contents in the target data table are not deleted before import, FALSE or "0" = the existing contents of the target data table are deleted before the import. Not used when creating a new data table.
- ''
- The database query whose results are to be imported.
- Example
- The following example will load data from a model and put it into the "AnalysisResult" table and then add that data to the "ExampleTable" data table.
- SELECT 'START
- --#WriteLog
- (SELECT 'AnalysisType', '6') UNION ALL
- (SELECT 'MaximumCount', '0') UNION ALL
- (SELECT 'FilterId', '3') UNION ALL
- (SELECT 'SelectedEventAttributes', '*') UNION ALL
- (SELECT 'TargetTable', '#AnalysisResult')
- --#GetAnalysis
- SELECT 'DataLoaded'
- --#WriteLog
- SELECT count(*) from [#AnalysisResult]
- --#WriteLog
- (SELECT 'ProjectId', '1') UNION ALL
- (SELECT 'DataTableName', 'ExampleTable') UNION ALL
- (SELECT 'Append', '1')
- (SELECT * FROM [#AnalysisResult])
- --#ImportDataTable
- Example
- The following example will load data from the "ExampleTable" data table in the "ExampleProject" project, put that data into the "CSV1" table and then show the contents of the "CSV" table. In effect, it shows the contents of the "ExampleTable" data table.
- (SELECT 'AnalysisType', '18') UNION ALL
- (SELECT 'ProjectName', 'ExampleProject') UNION ALL
- (SELECT 'MaximumCount', '0') UNION ALL
- (SELECT 'DataTableName', 'ExampleTable') UNION ALL
- (SELECT 'TargetTable', '#CSV1')
- --#GetAnalysis
- (SELECT * FROM #CSV1)
- (SELECT 'Title', 'CSV Table') UNION ALL
- (SELECT 'MaximumCount', '0')
- --#ShowReport
--#ImportEvents
- Loads Events from the data which the preceding SQL statements given as parameters provide into the specified model.
- Parameters for the First Query
- The parameters defined in the SQL SELECT statements:
- 'ProjectId' or 'ProjectName', '<Value>'
- The id or the name of the project in which the target model exists. Defaults to the current project. If the given ProjectName doesn't exist, a new project is created.
- 'ModelId' or 'ModelName', '<Value>'
- The id or the name of the existing/new target model. Defaults to the current model. If ModelId is given, neither ProjectId nor ProjectName are used. If the given ModelName doesn't exist, a new model is created.
- 'Append', '<Value>'
- Defines what to do with the existing target model events. TRUE or any other Integer than "0" = the existing events in the target model are not deleted before import, FALSE or "0" = the existing events of the target model are deleted before the import. Not used when creating a new model. Default value is TRUE.
- Parameters for the Second Query
- ''
- The database query whose results are to be imported.
--#ImportSalesforceQuery
- Extracts data from Salesforce cloud and imports it into a data table as NVARCHAR(MAX) or SQL_VARIANT type data. Note that this command requires the Salesforce username and password to be visible in the script!
Parameters
- The parameters defined in the SQL SELECT statements in the order they are listed below:
Data Destination
- 'TargetTable', '<#TableName>'
- The temporary table to which the data is to be imported. If not used, define the target using the ProjectId/ProjectName, DataTableId/DataTableName, and Append parameters described below.
- 'ProjectId' or 'ProjectName', '<Value>'
- The id or the name of the project in which the target data table exists.
- 'DataTableId' or 'DataTableName', '<Value>'
- The id or the name of the existing/new target data table.
- 'Append', '<Value>'
- Defines what to do with an existing target data table contents. TRUE or any other Integer than "0" = the existing contents in the target data table are not deleted before import, FALSE or "0" = the existing contents of the target data table are deleted before the import. Not used when creating a new data table.
Salesforce Query Parameters
- 'SalesforceUser', '<Value>'
- Username for the Salesforce cloud.
- 'SalesforcePW', '<Value>'
- Password for the Salesforce cloud.
- 'SalesforceQueryMode', '<Value>'
- Optional. The Salesforce query function to be used. 1 (default) = queryall(), 2 = query(), 3 = describeSObject().
- 'SalesforceQuery', '<Value>'
- The query to be run in the Salesforce cloud. Note that "*" cannot be used in the query. See Salesforce API and SOQL Reference for more information.
- 'SalesforceQueryRetries', '<Value>'
- Optional. Number of retries to attempt if the Salesforce query doesn't succeed. Default value is 3.
- 'SalesforceQueryRetryWait', '<Value>'
- Optional. Number of milliseconds to wait between query retries. Default is 3000 ms.
- 'SalesforceBatchSize', '<Value>'
- Optional. The number of rows of data the query returns in one batch. Minimum = 200, Maximum = 2000, Default = 500. See Salesforce API for more information.
- Example
- The following example will load date data from the "Contact" table in the Salesforce cloud and will put that data into the "ExampleDataTable" data table in the "ExampleProject" project. It will then get the Data Table analysis from the "ExampleDataTable", put that into the "#TABLE" temporary table and then show the contents of that table.
- (SELECT 'ProjectName', 'ExampleProject') UNION ALL
- (SELECT 'DataTableName', 'ExampleDataTable') UNION ALL
- (SELECT 'Append', '0') UNION ALL
- (SELECT 'SalesforceUser', 'example.user@qpr.com') UNION ALL
- (SELECT 'SalesforcePW', 'examplepassword') UNION ALL
- (SELECT 'SalesforceQuery', 'SELECT CreatedDate FROM Contact')
- --#ImportSalesforceQuery
- (SELECT 'AnalysisType', '18') UNION ALL
- (SELECT 'ProjectName', 'ExampleProject') UNION ALL
- (SELECT 'MaximumCount', '0') UNION ALL
- (SELECT 'DataTableName', 'ExampleDataTable') UNION ALL
- (SELECT 'TargetTable', '#TABLE')
- --#GetAnalysis
- (SELECT * FROM #TABLE)
- (SELECT 'MaximumCount', '0')
- --#ShowReport
--#RemoveEvents
- Removes all events in the target model, but retains Cases, Event Types, and Variations.
- Parameters
- The parameters defined in the SQL SELECT statements:
- 'ProjectId' or 'ProjectName', '<Value>'
- The id or the name of the project in which the target model exists. Defaults to the current project.
- 'ModelId' or 'ModelName', '<Value>'
- The id or the name of the target model. Defaults to the current model. If ModelId is given, neither ProjectId nor ProjectName are used.
- Example
- The following example will remove all events in the model with Id "22931" in the project with Id "234".
- (SELECT 'ProjectId', '234') UNION ALL
- (SELECT 'ModelId', '22931')
- --#RemoveEvents
--#ShowReport
- Creates a new excel sheet containing a table that contains the results of the user specified SQL query. The result column names are the field names of the SQL query and the rows are the actual data rows of the SQL query. The report can be used to see, for example, the events that would be loaded into QPR ProcessAnalyzer before actually loading them. If the events have problems that cause errors when loaded it is useful to be able to see the row data in a report.
- Parameters
- The parameters defined in the SQL SELECT statements:
- ''
- Mandatory. The database query whose results are to be returned.
- '<Analysis Parameter>', '<Value>'
- Optional. The Analysis Parameters given for the operation. Some suggested parameters to be used:
- 'Title', '<Title of the report>'
- The title of the created report. If not given, "Report" will be used as a default.
- 'SheetName', '<Name for the sheet>'
- The name of the Excel sheet to be created.
- 'MaximumCount', '<Value>'
- The maximum number of rows to show (0 = all, default = 1000).
- Example
- The following example opens the data table identified by data table name "SqlTable" and project name "Test" as a report.
- (SELECT 'AnalysisType', '18') UNION ALL
- (SELECT 'ProjectName', 'Test') UNION ALL
- (SELECT 'DataTableName', 'SqlTable') UNION ALL
- (SELECT 'TargetTable', '#AnalysisResult')
- --#GetAnalysis
- SELECT * FROM #AnalysisResult;
- (SELECT 'Title', 'Report1') UNION ALL
- (SELECT 'SheetName', 'Sheet1') UNION ALL
- (SELECT 'MaximumCount', '0')
- --#ShowReport
--#WriteLog
- Adds the first column values from the preceding SQL statements to the log that is shown after the whole script execution is completed.
- In addition to the WriteLog command, you can also use the Print SQL statement to generate log entries into the script execution log. The difference to the WriteLog command is that the Print statement can use also variables.
- Example
- The following example will write "Script started", "Example", "Print Example" into the log.
- SELECT 'Script started'
- SELECT 'Example'
- --#WriteLog
- PRINT 'Print Example'
Script Variables
The scripts have the following variables available:
- @_ProjectId: the Id of the project in whose context the script is being run. BIGINT.
- @_ModelId: the Id of the model in whose context the script is being run. BIGINT.
- @_FilterId: the Id of the view in whose context the script is being run. BIGINT.
- @_QPRProcessAnalyzerVersion: the QPR Process Analyzer core dll version as string in the format: <major>.<minor>.<build>.<revision>. NVARCHAR(64).
- @_ScriptingVersion: The scripting version number that identifies the version which was used when script was saved. Can be used for indicating, for example, the version for which the script was originally planned. A script created for newer (bigger) scripting version doesn't necessarily work on a PA server supporting older (smaller) version. INT.
- @_UserId: the Id of the user running the script. INT.
- @_ScriptId: Id of the script being run. BIGINT.
- @_EngineScriptingVersion: The scripting version that identifies the functionalities available from QPR ProcessAnalyzer server. A script created for newer (bigger) scripting version doesn't necessarily work on a QPR ProcessAnalyzer server supporting older (smaller) version. INT.
- #_ViewSettings: The Settings shown in the right-hand pane in Excel used to generate the selected view. Note that this doesn't include analysis results or QPR ProcessAnalyzer Server related information, such as FilterId, TotalEventCount, or DatabaseId. Represented as a table two column table variable. The columns are:
- Name: the name of the parameter. NVARCHAR(440).
- Value: the value of the parameter. NVARCHAR(MAX).
Note that even when a script context hasn't been selected, the variables get their values from a default filter. The default filter is the filter that was last used by the user in the model the user has last opened. If the user hasn't opened any model before, the default filter is taken from the last created model to which the user has access rights.
- Example
- The following script fragment defines the ProjectId, ModelId, and FilterId parameters by using the script variables:
SELECT @_ProjectId as ProjectId, @_ModelId as ModelId, @_FilterId as FilterId;
- Example
- The following script gets the View Settings currently in use in the Settings pane in Excel and shows them as a table in a new Excel sheet:
(SELECT * FROM #_ViewSettings)
- (SELECT 'SheetName', 'ViewSettings')
--#ShowReport
- Example
- The following script gets various information about the environment and shows them in a new Excel sheet:
SELECT @_QPRProcessAnalyzerVersion as QPRProcessAnalyzerVersion, @_ScriptingVersion as ScriptingVersion, @_EngineScriptingVersion as EngineScriptingVersion, @_UserId as Userid, @_DatabaseId as DatabaseId
- (SELECT 'SheetName', 'Info')
- --#ShowReport
SQL Command Support
When transforming data in QPR ProcessAnalyzer Pro (i.e. when connected to the QPR ProcessAnalyzer Service), only temporary tables (#) should be used. Note that global temporary tables (##) should never be used in the SQL scripts, and using them is not allowed. When using QPR ProcessAnalyzer Xpress, these limitations do not apply.
Print
The Print SQL statement can be used to generate log entries into the script execution log.
Running Scripts
A script can be run in the following ways:
Running a Script from the Ribbon
- On the QPR ProcessAnalyzer tab of the ribbon, click Run.
- Select the script to be run from the Script Gallery that opens.
Running a Script from the Script Manager Dialog
- On the QPR ProcessAnalyzer tab of the ribbon, click Run > Manage Scripts.
- From the dialog, select the context in which the script you wish to run exists.
- Select the script you wish to run.
- Click Run.
Running a Script by Importing a .pasql File
- Write the script into a file that has a .pasql file format.
- On the QPR ProcessAnalyzer tab of the ribbon, click Project Workspace.
- Click Import.
- Select QPR ProcessAnalyzer File and click Next.
- Click Select and choose QPR ProcessAnalyzer SQL Script File (*.pasql) from the file type menu.
- Browse to the .pasql file containing the script, select it, and click Open.
- Click Next.
- Select the import target:
- Create New will create a new model and set it as the target of the script.
- Add to Existing will set the target of the script to the selected model.
- Either way, the script in the .pasql file will be set as the script of the target model.
- Click Import.
Terminating Scripts
A script can be terminated by the following ways:
- The user running the script can click the Cancel button when the script is running.
- The script can use the "--#Exit" command stop script execution.
- A QPR ProcessAnalyzer Administrator user can terminate the script via the Operations Log.
- The SQL Server System Administrator can kill the session using the script by using e.g. SQL Server Management Studio.
- The Internet Information Services Administrator can recycle the application pool if the script has caused it to hang. Note however, that this may also cause other requests by other users being processed at the same time to be aborted.
- The Windows Administrator can kill the w3wp.exe-process processing a problematic script. Note however, that this may also cause other requests by other users being processed at the same time to be aborted.
NOTE!
Terminating the script will not revert any changes the script has already done in the database before the Cancel button is clicked.
Things to Note About Scripts
When writing and using scripts, take the following things into account:
- Only those lines in the script that start with "--#" (without the quotes) are treated as QPR ProcessAnalyzer Commands, i.e. if there are leading whitespaces before the command, the line is treated as a comment.
- If you don't define a value for the MaximumCount parameter, 1000 will be used as default, i.e. only the 1000 first rows from a given table or model will be used.
- When doing more advanced operations with scripts, you may run into the error messages such as: "The data types sql_variant and varchar are incompatible in the add operation.", "Argument data type sql_variant is invalid for argument 1 of like function.", "Argument data type sql_variant is invalid for argument 1 of left function.". This is because case attributes, event attributes, and data inside data tables are sql_variant type data. In order to use them with more advanced operations (e.g. Add), you need to CONVERT or CAST them into some other data type before the operations. See this example.
Troubleshooting Scripts
Invalid Object Name
- "Invalid object name" exception is thrown when running a script with #GetAnalysis and #ImportEvents commands. What causes this?
- The issue may arise when there are no events to import, i.e. the #GetAnalysis command doesn't create any table. In this case, the missing event table needs to be created in the script between the #GetAnalysis and #ImportEvents commands:
- /*This is the GetAnalysis part */
- (SELECT 'AnalysisType', '6') UNION ALL
- (SELECT 'MaximumCount', '0') UNION ALL
- (SELECT 'FilterId', '10') UNION ALL
- (SELECT 'SelectedEventAttributes', '*') UNION ALL
- (SELECT 'TargetTable', '#AnalysisResult')
- --#GetAnalysis
- /*Here we create the event table, if it is missing */
- IF object_id('tempdb..#AnalysisResult') is null
- BEGIN
- CREATE TABLE #AnalysisResult (
- CaseName NVARCHAR(MAX),
- EventTypeName NVARCHAR(MAX),
- TimeStamp DATETIME,
- Cost FLOAT,
- TotalCost FLOAT
- );
- END
- /*Then we use the ImportEvents */
- (SELECT 'ProjectName', 'ExampleProject') UNION ALL
- (SELECT 'ModelName', 'ExampleModel')
- (SELECT * FROM [#AnalysisResult])
- --#ImportEvents
Example Scripts
Example Script: Create a copy of existing model
The following script will:
1. Clear the current contents of the target model
- ProjectName ExampleProject => CHANGE THIS to be the project in which the target model exists.
- ModelName ExampleModel => CHANGE THIS to be the name of the target model.
2. Select all events from another model defined with FilterId = 1234567. (note: change this Id to be an Id from the default Filter (previously called View) of the source model:
- AnalysisType 6 => Event Table
- MaximumCount 0 => Retrieve all events from the model
- FilterId 1234567 => CHANGE THIS to be the Filter ID / FilterId of the source model from which you want to make a copy
- SelectedEventAttributes * => Get all Event Attributes
- TargetTable #AnalysisResult => Store the result into a temporary SQL table named #AnalysisResult
- #GetAnalysis => Execute the query (stores the result into #AnalysisResult)
3. Import all events to the specified model (#ImportEvents)
- ProjectName ExampleProject => CHANGE THIS to be the project in which the target model exists.
- ModelName ExampleModel => CHANGE THIS to be the name of the target model.
4. Select all case attributes from the source model (defined with FilterId = 1234567)
- AnalysisType 5 => Case Table
- MaximumCount 0 => Retrieve all cases from the model
- FilterId 1234567 => CHANGE THIS to be the Filter ID / FilterId of the source model from which you want to copy case attributes
- SelectedCaseAttributes * => Get all Case Attributes
- TargetTable #AnalysisResult2 => Store the result into a new temporary SQL table named #AnalysisResult2
- #GetAnalysis => Execute the query (stores the result into #AnalysisResult)
5. Import all case attributes to the specified model (#ImportCaseAttributes)
- ProjectName ExampleProject => CHANGE THIS to be the project in which the target model exists.
- ModelName ExampleModel => CHANGE THIS to be the name of the target model.
(SELECT 'ProjectName', 'ExampleProject') UNION ALL
(SELECT 'ModelName', 'ExampleModel')
--#RemoveEvents
(SELECT 'AnalysisType', '6') UNION ALL
(SELECT 'MaximumCount', '0') UNION ALL
(SELECT 'FilterId', '1234567') UNION ALL
(SELECT 'SelectedEventAttributes', '*') UNION ALL
(SELECT 'TargetTable', '#AnalysisResult')
--#GetAnalysis
(SELECT 'ProjectName', 'ExampleProject') UNION ALL
(SELECT 'ModelName', 'ExampleModel')
(SELECT * FROM [#AnalysisResult])
--#ImportEvents
(SELECT 'AnalysisType', '5') UNION ALL
(SELECT 'MaximumCount', '0') UNION ALL
(SELECT 'FilterId', '1234567') UNION ALL
(SELECT 'SelectedCaseAttributes', '*') UNION ALL
(SELECT 'TargetTable', '#AnalysisResult2')
--#GetAnalysis
(SELECT 'ProjectName', 'ExampleProject') UNION ALL
(SELECT 'ModelName', 'ExampleModel')
(SELECT * FROM [#AnalysisResult2])
--#ImportCaseAttributes
Example Script: Create an extended copy of existing model with new case attributes
This scripts extends the simple model copying script by creating new case attributes from Case Table report
1. Clear the current contents of the target model
- ProjectName ExampleProject => CHANGE THIS to be the project in which the target model exists.
- ModelName ExampleModel => CHANGE THIS to be the name of the target model.
2. Select all events from another model defined with FilterId = 1234567. (note: change this Id to be an Id from the default Filter (previously called View) of the source model:
- AnalysisType 6 => Event Table
- MaximumCount 0 => Retrieve all events from the model
- FilterId 1234567 => CHANGE THIS to be the Filter ID / FilterId of the source model from which you want to make a copy
- SelectedEventAttributes * => Get all Event Attributes
- TargetTable #AnalysisResult => Store the result into a temporary SQL table named #AnalysisResult
- #GetAnalysis => Execute the query (stores the result into #AnalysisResult)
3. Import all events to the specified model (#ImportEvents)
- ProjectName ExampleProject => CHANGE THIS to be the project in which the target model exists.
- ModelName ExampleModel => CHANGE THIS to be the name of the target model.
4. Select all case attributes from the source model (defined with FilterId = 1234567)
- AnalysisType 5 => Case Table
- MaximumCount 0 => Retrieve all cases from the model
- FilterId 1234567 => CHANGE THIS to be the Filter ID / FilterId of the source model from which you want to copy case attributes
- SelectedCaseAttributes * => Get all Case Attributes
- SelectedActivityCounts * => Get the counts for all EventTypes
- SelectedEventAttributes * => Get the values for all EventAttributes consolidated to Case level
- ShowDurations 255 => Retrieve all duration columns
- ShowStarts 7 => Retrieve all Starts columns
- ShowEnds 7 => Retrieve all Starts columns
- ShowVariationIds => Retrive the Variation ID for each case
- ShowVariationPaths => Retrieve the ordered list of Event Type Strings for each case
- TargetTable #AnalysisResult2 => Store the result into a new temporary SQL table named #AnalysisResult2
- #GetAnalysis => Execute the query (stores the result into #AnalysisResult)
5. Import all case attributes to the specified model (#ImportCaseAttributes)
- ProjectName ExampleProject => CHANGE THIS to be the project in which the target model exists.
- ModelName ExampleModel => CHANGE THIS to be the name of the target model.
(SELECT 'ProjectName', 'ExampleProject') UNION ALL
(SELECT 'ModelName', 'ExampleModel')
--#RemoveEvents
(SELECT 'AnalysisType', '6') UNION ALL
(SELECT 'MaximumCount', '0') UNION ALL
(SELECT 'FilterId', '1234567') UNION ALL
(SELECT 'SelectedEventAttributes', '*') UNION ALL
(SELECT 'TargetTable', '#AnalysisResult')
--#GetAnalysis
(SELECT 'ProjectName', 'ExampleProject') UNION ALL
(SELECT 'ModelName', 'ExampleModel')
(SELECT * FROM [#AnalysisResult])
--#ImportEvents
(SELECT 'AnalysisType', '5') UNION ALL
(SELECT 'MaximumCount', '0') UNION ALL
(SELECT 'FilterId', '1234567') UNION ALL
(SELECT 'SelectedCaseAttributes', '*') UNION ALL
(SELECT 'SelectedActivityCounts', '*') UNION ALL
(SELECT 'SelectedEventAttributes', '*') UNION ALL
(SELECT 'ShowDurations', '255') UNION ALL
(SELECT 'ShowStarts', '7') UNION ALL
(SELECT 'ShowEnds', '7') UNION ALL
(SELECT 'ShowVariationIds', 'True') UNION ALL
(SELECT 'ShowVariationPaths', 'True') UNION ALL
(SELECT 'TargetTable', '#AnalysisResult2')
--#GetAnalysis
(SELECT 'ProjectName', 'ExampleProject') UNION ALL
(SELECT 'ModelName', 'ExampleModel')
(SELECT * FROM [#AnalysisResult2])
--#ImportCaseAttributes
Example Script: Create a copy of events and switch the ABPD dimension from original EventType to Event Attribute 'Organization'
The following script will:
1. Clear the current contents of the target model
- ProjectName ExampleProject => CHANGE THIS to be the project in which the target model exists.
- ModelName ExampleModel => CHANGE THIS to be the name of the target model.
2. Select all events from another model defined with FilterId = 1234567. (note: change this Id to be an Id from the default Filter (previously called View) of the source model:
- AnalysisType 6 => Event Table
- MaximumCount 0 => Retrieve all events from the model
- FilterId 1234567 => CHANGE THIS to be the Filter ID / FilterId of the source model from which you want to make a copy
- SelectedEventAttributes * => Get all Event Attributes
- TargetTable #AnalysisResult => Store the result into a temporary SQL table named #AnalysisResult
- #GetAnalysis => Execute the query (stores the result into #AnalysisResult)
3. Import all events to the specified model (#ImportEvents)
- ProjectName ExampleProject => CHANGE THIS to be the project in which the target model exists.
- ModelName ExampleModel => CHANGE THIS to be the name of the target model.
- SELECT [Case], [Organization], [Start Time], * FROM [#AnalysisResult] => Import the event by selecting the column [Organization] as the Event Type. Note: CHANGE this column to the desired dimension for ABPD analysis
(SELECT 'ProjectName', 'ExampleProject') UNION ALL
(SELECT 'ModelName', 'ExampleModel')
--#RemoveEvents
(SELECT 'AnalysisType', '6') UNION ALL
(SELECT 'MaximumCount', '0') UNION ALL
(SELECT 'FilterId', '1234567') UNION ALL
(SELECT 'SelectedEventAttributes', '*') UNION ALL
(SELECT 'TargetTable', '#AnalysisResult')
--#GetAnalysis
(SELECT 'ProjectName', 'ExampleProject') UNION ALL
(SELECT 'ModelName', 'ExampleModel')
(SELECT [Case], [Organization], [Start Time], * FROM [#AnalysisResult])
--#ImportEvents
Example Script: Create a copy of events and combine some event types to a new event type
The following script will:
1. Clear the current contents of the target model
- ProjectName ExampleProject => CHANGE THIS to be the project in which the target model exists.
- ModelName ExampleModel => CHANGE THIS to be the name of the target model.
2. Select all events from another model defined with FilterId = 1234567. (note: change this Id to be an Id from the default Filter (previously called View) of the source model:
- AnalysisType 6 => Event Table
- MaximumCount 0 => Retrieve all events from the model
- FilterId 1234567 => CHANGE THIS to be the Filter ID / FilterId of the source model from which you want to make a copy
- SelectedEventAttributes * => Get all Event Attributes
- TargetTable #AnalysisResult => Store the result into a temporary SQL table named #AnalysisResult
- #GetAnalysis => Execute the query (stores the result into #AnalysisResult)
3. Import all events to the specified model (#ImportEvents)
- ProjectName ExampleProject => CHANGE THIS to be the project in which the target model exists.
- ModelName ExampleModel => CHANGE THIS to be the name of the target model.
- SELECT [Case], 'COMBINED', [Start Time] FROM [#AnalysisResult] WHERE [Event Type] IN ('Sales Order', 'Shipment')
=> Select those event type that should be combined and use the new EventType name for them
=> This example replaces 'Sales Order' and 'Shipment' with new EventType name 'COMBINED'
- UNION ALL => Use this statement to build the events from several sub queries
- SELECT [Case], [Event Type], [Start Time] FROM [#AnalysisResult] WHERE [Event Type] NOT IN ( 'Sales Order', 'Shipment')
=> Select all other Event Types and include them as they are, ie. no change to these events
(SELECT 'ProjectName', 'ExampleProject') UNION ALL
(SELECT 'ModelName', 'ExampleModel')
--#RemoveEvents
(SELECT 'AnalysisType', '6') UNION ALL
(SELECT 'MaximumCount', '0') UNION ALL
(SELECT 'FilterId', '1234567') UNION ALL
(SELECT 'SelectedEventAttributes', '*') UNION ALL
(SELECT 'TargetTable', '#AnalysisResult')
--#GetAnalysis
(SELECT 'ProjectName', 'ExampleProject') UNION ALL
(SELECT 'ModelName', 'ExampleModel')
(SELECT [Case], 'COMBINED', [Start Time], * FROM [#AnalysisResult] WHERE [Event Type] IN ('Sales Order', 'Shipment')) UNION ALL
(SELECT [Case], [Event Type], [Start Time], * FROM [#AnalysisResult] WHERE [Event Type] NOT IN ( 'Sales Order', 'Shipment'))
--#ImportEvents
Example Script: Create a copy of events and define new event types based on old event types and an event attribute
The following script will:
1. Clear the current contents of the target model
- ProjectName ExampleProject => CHANGE THIS to be the project in which the target model exists.
- ModelName ExampleModel => CHANGE THIS to be the name of the target model.
2. Select all events from another model defined with FilterId = 1234567. (note: change this Id to be an Id from the default Filter (previously called View) of the source model:
- AnalysisType 6 => Event Table
- MaximumCount 0 => Retrieve all events from the model
- FilterId 1234567 => CHANGE THIS to be the Filter ID / FilterId of the source model from which you want to make a copy
- SelectedEventAttributes * => Get all Event Attributes
- TargetTable #AnalysisResult => Store the result into a temporary SQL table named #AnalysisResult
- #GetAnalysis => Execute the query (stores the result into #AnalysisResult)
3. Import all events to the specified model (#ImportEvents)
- ProjectName ExampleProject => CHANGE THIS to be the project in which the target model exists.
- ModelName ExampleModel => CHANGE THIS to be the name of the target model.
- SELECT [Case], convert(varchar(255),[Event Type]) + '_' + convert(varchar(255),[SAP_User]), [Start Time], * FROM [#AnalysisResult]
=> Create the new EventType by combining original Event Type, a string '_' and event attribute SAP_User
(SELECT 'ProjectName', 'ExampleProject') UNION ALL
(SELECT 'ModelName', 'ExampleModel')
--#RemoveEvents
(SELECT 'AnalysisType', '6') UNION ALL
(SELECT 'MaximumCount', '0') UNION ALL
(SELECT 'FilterId', '1234567') UNION ALL
(SELECT 'SelectedEventAttributes', '*') UNION ALL
(SELECT 'TargetTable', '#AnalysisResult')
--#GetAnalysis
(SELECT 'ProjectName', 'ExampleProject') UNION ALL
(SELECT 'ModelName', 'ExampleModel')
(SELECT [Case], convert(varchar(255),[Event Type]) + '_' + convert(varchar(255),[SAP_User]), [Start Time], * FROM [#AnalysisResult])
--#ImportEvents
Example Script: calculate the amount of events within same case with same timestamp
The following script will:
1.. Select all events from another model defined with FilterId = 1234567. (note: change this Id to be an Id from the default Filter (previously called View) of the source model:
- AnalysisType 6 => Event Table
- MaximumCount 0 => Retrieve all events from the model
- FilterId 1234567 => CHANGE THIS to be the Filter ID / FilterId of the source model from which you want to make a copy
- SelectedEventAttributes * => Get all Event Attributes
- TargetTable #AnalysisResult => Store the result into a temporary SQL table named #AnalysisResult
- #GetAnalysis => Execute the query (stores the result into #AnalysisResult)
2. Calculate the amount of events within same case with same timestamp
SELECT count(*) FROM [#AnalysisResult] AS AR1, [#AnalysisResult] AS AR2
=> Return the count(*) as the result of the query
WHERE AR1.[Case] = AR2.[Case] AND AR1.[Event Type] <> AR2.[Event Type] AND AR1.[Start Time] = AR2.[Start Time]
=> Case & Start Time are same in both events, Event Type is different
--#WriteLog
=> show the result to user
(SELECT 'AnalysisType', '6') UNION ALL
(SELECT 'MaximumCount', '0') UNION ALL
(SELECT 'FilterId', '10') UNION ALL
(SELECT 'SelectedEventAttributes', '*') UNION ALL
(SELECT 'TargetTable', '#AnalysisResult')
--#GetAnalysis
SELECT count(*) FROM [#AnalysisResult] AS AR1, [#AnalysisResult] AS AR2
WHERE AR1.[Case] = AR2.[Case] AND AR1.[Event Type] <> AR2.[Event Type] AND AR1.[Start Time] = AR2.[Start Time]
--#WriteLog
Example Script: Create a new model from operation log
The following script will read the operation log of QPR ProcessAnalyzer and create process model based on those log entries.
Comments:
- AnalysisType 12 => Operation Log
- MaximumCount 10000 => Retrieve only the 10000 most recent operations
- Import all events to the specified model (#ImportEvents)
- ProjectName ExampleProject => CHANGE THIS to be the project in which the target model exists.
- ModelName ExampleModel => CHANGE THIS to be the name of the target model.
(SELECT 'ProjectName', 'ExampleProject') UNION ALL
(SELECT 'ModelName', 'ExampleModel')
--#RemoveEvents
(SELECT 'AnalysisType', '12') UNION ALL
(SELECT 'MaximumCount', '10000') UNION ALL
(SELECT 'TargetTable', '#AnalysisResult')
--#GetAnalysis
(SELECT 'ProjectName', 'ExampleProject') UNION ALL
(SELECT 'ModelName', 'ExampleModel')
(
SELECT
[Session Id], 'InitializeConnection', DATEADD(ms, 3, [Start Time]), [Model Id], [Model Name],
(CASE WHEN ([Message] LIKE 'Exception of type:%') THEN
'Exception'
ELSE
NULL
END) AS [Error],
[Message], [Additional Data]
FROM
#AnalysisResult
WHERE
[Name] IN (
'SqlCore.InitializeConnection'
)
)
UNION ALL
(
SELECT
[Session Id], 'InitializeSessionManager', [Start Time], [Model Id], [Model Name],
(CASE WHEN ([Message] LIKE 'Exception of type:%') THEN
'Exception'
ELSE
NULL
END) AS [Error],
[Message], [Additional Data]
FROM
#AnalysisResult
WHERE
[Name] IN (
'SingletonSessionManager.InitializeSessionManager'
)
)
UNION ALL
(
SELECT
[Session Id], 'Start:' + [Name], [Start Time], [Model Id], [Model Name], NULL AS [Error], NULL AS [Message], [Additional Data]
FROM
#AnalysisResult
WHERE
[Name] NOT IN (
'SingletonSessionManager.InitializeSessionManager',
'SqlCore.InitializeConnection',
'SqlCore.Dispose'
)
)
UNION ALL
(
SELECT
[Session Id], 'End:' + [Name], DATEADD(ms, 3, [End Time]), [Model Id], [Model Name],
(CASE WHEN ([Message] LIKE 'Exception of type%') THEN
'Exception'
ELSE
NULL
END) AS [Error],
[Message], NULL AS [Additional Data]
FROM
#AnalysisResult
WHERE
[End Time] IS NOT NULL
AND [Name] NOT IN (
'SingletonSessionManager.InitializeSessionManager',
'SqlCore.InitializeConnection',
'SqlCore.Dispose'
)
)
--#ImportEvents
SELECT
[Session Id], [User Id], [User Name]
FROM
#AnalysisResult
GROUP BY
[Session Id], [User Id], [User Name]
HAVING
[User Id] <> 0
--#ImportCaseAttributes