SQL Scripting for ETL: Difference between revisions
No edit summary |
No edit summary |
||
Line 81: | Line 81: | ||
--#GetAnalysis | --#GetAnalysis | ||
SELECT * FROM [#AnalysisResult] | SELECT * FROM [#AnalysisResult] | ||
--#ImportEvents | --#ImportEvents | ||
Line 135: | Line 135: | ||
--#GetAnalysis | --#GetAnalysis | ||
SELECT * FROM [#AnalysisResult] | SELECT * FROM [#AnalysisResult] | ||
--#ImportEvents | --#ImportEvents | ||
Line 155: | Line 155: | ||
--#ImportCaseData | --#ImportCaseData | ||
</pre> | </pre> | ||
== Example Load 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<br/> | |||
1. Clear the current contents of the model<br/> | |||
2. Select all events from another model defined with ViewId = 1234567. (note: change this Id to be an Id from the default Filter (previously called View) of the source model:<br/> | |||
* AnalysisType 6 => Event Table | |||
* MaximumCount 0 => Retrieve all events from the model | |||
* ViewId 1234567 => CHANGE THIS to be the Filter ID / ViewId 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 current model (#ImportEvents) | |||
4. Select all case attributes from the source model (defined with ViewId = 1234567) | |||
* AnalysisType 5 => Case Table | |||
* MaximumCount 0 => Retrieve all cases from the model | |||
* ViewId 1234567 => CHANGE THIS to be the Filter ID / ViewId 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 current model (#ImportCaseData) | |||
<pre> | |||
--#RemoveEvents | |||
(SELECT 'AnalysisType', '6') UNION ALL | |||
(SELECT 'MaximumCount', '0') UNION ALL | |||
(SELECT 'ViewId', '1234567') UNION ALL | |||
(SELECT 'SelectedEventAttributes', '*') UNION ALL | |||
(SELECT 'TargetTable', '#AnalysisResult') | |||
--#GetAnalysis | |||
SELECT * FROM [#AnalysisResult] | |||
--#ImportEvents | |||
(SELECT 'AnalysisType', '5') UNION ALL | |||
(SELECT 'MaximumCount', '0') UNION ALL | |||
(SELECT 'ViewId', '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 * FROM [#AnalysisResult2] | |||
--#ImportCaseData | |||
</pre> | |||
== Example Load Script: Create a copy of events and switch the ABPD dimension from original EventType to Event Attribute 'Organization' == | |||
The following Load Script will:<br/> | |||
1. Clear the current contents of the model<br/> | |||
2. Select all events from another model defined with ViewId = 1234567. (note: change this Id to be an Id from the default Filter (previously called View) of the source model:<br/> | |||
* AnalysisType 6 => Event Table | |||
* MaximumCount 0 => Retrieve all events from the model | |||
* ViewId 1234567 => CHANGE THIS to be the Filter ID / ViewId 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 current model (#ImportEvents) | |||
* 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 | |||
<pre> | |||
--#RemoveEvents | |||
(SELECT 'AnalysisType', '6') UNION ALL | |||
(SELECT 'MaximumCount', '0') UNION ALL | |||
(SELECT 'ViewId', '1234567') UNION ALL | |||
(SELECT 'SelectedEventAttributes', '*') UNION ALL | |||
(SELECT 'TargetTable', '#AnalysisResult') | |||
--#GetAnalysis | |||
SELECT [Case], [Organization], [Start Time], * FROM [#AnalysisResult] | |||
--#ImportEvents | |||
</pre> | |||
== Example Load Script: Create a new model from operation log == | == Example Load Script: Create a new model from operation log == |
Revision as of 18:54, 15 April 2013
It is possible to load raw data into QPR ProcessAnalyzer and do the data transformation and loading into QPR ProcessAnalyzer Service via Load 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 Load Script in the Model Properties dialog. The Load Script consists of SQL statements and QPR ProcessAnalyzer commands that take the preceding SQL statements as parameters.
Supported QPR ProcessAnalyzer Commands in Load Scripts
--#GetAnalysis
- Creates an analysis from the data which the preceding SQL statements given as parameters provide. The analysis parameters have to be defined in the SQL SELECT statements as follows:
SELECT '<Analysis Parameter>', '<Value>'
- See Analysis Parameters for a list of supported analysis parameters in QPR ProcessAnalyzer.
- The --#GetAnalysis command supports the following analysis types:
- Case Analysis (5)
- Event Analysis (6)
- Event Type Analysis (7) Note: analysis is in table format only.
- Variation Analysis (8) Note: analysis is in table format only.
- User Report (11)
- OperationLog Analysis (12)
- Flow Analysis (13)
- Influence Analysis (14)
- Integration Table Analysis (18)
--#ImportEvents
- Loads Events from the data which the preceding SQL statements given as parameters provide.
--#ImportCaseData
- Loads Case Attributes from the data which the preceding SQL statements given as parameters provide.
--#RemoveEvents
- Removes all events in the model, but retains Cases, Event Types, and Variations.
--#WriteLog
- Displays a log after the script execution is completed.
SQL Command Support
When transforming data, 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.
Terminating Load Scripts
A Load Script can be terminated by the following ways:
- The user running the script can click the Cancel button when the script is running.
- 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 Load 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 Load Script will not revert any changes the script has already done in the database before the Cancel button is clicked.
Example Load Script: Create a copy of existing model
The following Load Script will:
1. Clear the current contents of the model
2. Select all events from another model defined with ViewId = 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
- ViewId 1234567 => CHANGE THIS to be the Filter ID / ViewId 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 current model (#ImportEvents)
4. Select all case attributes from the source model (defined with ViewId = 1234567)
- AnalysisType 5 => Case Table
- MaximumCount 0 => Retrieve all cases from the model
- ViewId 1234567 => CHANGE THIS to be the Filter ID / ViewId 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 current model (#ImportCaseData)
--#RemoveEvents (SELECT 'AnalysisType', '6') UNION ALL (SELECT 'MaximumCount', '0') UNION ALL (SELECT 'ViewId', '1234567') UNION ALL (SELECT 'SelectedEventAttributes', '*') UNION ALL (SELECT 'TargetTable', '#AnalysisResult') --#GetAnalysis SELECT * FROM [#AnalysisResult] --#ImportEvents (SELECT 'AnalysisType', '5') UNION ALL (SELECT 'MaximumCount', '0') UNION ALL (SELECT 'ViewId', '1234567') UNION ALL (SELECT 'SelectedCaseAttributes', '*') UNION ALL (SELECT 'TargetTable', '#AnalysisResult2') --#GetAnalysis SELECT * FROM [#AnalysisResult2] --#ImportCaseData
Example Load 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 model
2. Select all events from another model defined with ViewId = 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
- ViewId 1234567 => CHANGE THIS to be the Filter ID / ViewId 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 current model (#ImportEvents)
4. Select all case attributes from the source model (defined with ViewId = 1234567)
- AnalysisType 5 => Case Table
- MaximumCount 0 => Retrieve all cases from the model
- ViewId 1234567 => CHANGE THIS to be the Filter ID / ViewId 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 current model (#ImportCaseData)
--#RemoveEvents (SELECT 'AnalysisType', '6') UNION ALL (SELECT 'MaximumCount', '0') UNION ALL (SELECT 'ViewId', '1234567') UNION ALL (SELECT 'SelectedEventAttributes', '*') UNION ALL (SELECT 'TargetTable', '#AnalysisResult') --#GetAnalysis SELECT * FROM [#AnalysisResult] --#ImportEvents (SELECT 'AnalysisType', '5') UNION ALL (SELECT 'MaximumCount', '0') UNION ALL (SELECT 'ViewId', '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 * FROM [#AnalysisResult2] --#ImportCaseData
Example Load 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 model
2. Select all events from another model defined with ViewId = 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
- ViewId 1234567 => CHANGE THIS to be the Filter ID / ViewId 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 current model (#ImportEvents)
4. Select all case attributes from the source model (defined with ViewId = 1234567)
- AnalysisType 5 => Case Table
- MaximumCount 0 => Retrieve all cases from the model
- ViewId 1234567 => CHANGE THIS to be the Filter ID / ViewId 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 current model (#ImportCaseData)
--#RemoveEvents (SELECT 'AnalysisType', '6') UNION ALL (SELECT 'MaximumCount', '0') UNION ALL (SELECT 'ViewId', '1234567') UNION ALL (SELECT 'SelectedEventAttributes', '*') UNION ALL (SELECT 'TargetTable', '#AnalysisResult') --#GetAnalysis SELECT * FROM [#AnalysisResult] --#ImportEvents (SELECT 'AnalysisType', '5') UNION ALL (SELECT 'MaximumCount', '0') UNION ALL (SELECT 'ViewId', '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 * FROM [#AnalysisResult2] --#ImportCaseData
Example Load Script: Create a copy of events and switch the ABPD dimension from original EventType to Event Attribute 'Organization'
The following Load Script will:
1. Clear the current contents of the model
2. Select all events from another model defined with ViewId = 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
- ViewId 1234567 => CHANGE THIS to be the Filter ID / ViewId 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 current model (#ImportEvents)
- 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
--#RemoveEvents (SELECT 'AnalysisType', '6') UNION ALL (SELECT 'MaximumCount', '0') UNION ALL (SELECT 'ViewId', '1234567') UNION ALL (SELECT 'SelectedEventAttributes', '*') UNION ALL (SELECT 'TargetTable', '#AnalysisResult') --#GetAnalysis SELECT [Case], [Organization], [Start Time], * FROM [#AnalysisResult] --#ImportEvents
Example Load Script: Create a new model from operation log
The following Load 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
--#RemoveEvents (SELECT 'AnalysisType', '12') UNION ALL (SELECT 'MaximumCount', '10000') UNION ALL (SELECT 'TargetTable', '#AnalysisResult') --#GetAnalysis ( 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 --#ImportCaseData