QPR ProcessAnalyzer Expression Query Examples: Difference between revisions

From QPR ProcessAnalyzer Wiki
Jump to navigation Jump to search
mNo edit summary
mNo edit summary
Line 3: Line 3:
== Single ValueType Examples ==
== Single ValueType Examples ==


=== Example 1 ===
=== Events grouped by event attributes ===
The following analysis calculates:
The following analysis calculates:
# Number of cases
# Number of cases
Line 50: Line 50:
</pre>
</pre>


=== Example 2 ===
=== Cases grouped by case attributes ===
Same analysis for for case attributes:
Same analysis for for case attributes:
<pre>
<pre>
Line 88: Line 88:
</pre>
</pre>


=== Return only dimension values ===
The following analysis returns a list of all dimensions but doesn't calculate any KPI's:
The following analysis returns a list of all dimensions but doesn't calculate any KPI's:
<pre>
<pre>
Line 101: Line 102:
</pre>
</pre>


=== Return only single KPI value without dimensioning ===
The following analysis calculates a KPI for all filtered data but doesn't slice it to any dimensions:
The following analysis calculates a KPI for all filtered data but doesn't slice it to any dimensions:
<pre>
<pre>
Line 114: Line 116:
</pre>
</pre>


3 Grams
=== 3 Grams ===
<pre>
<pre>
{
{
Line 167: Line 169:
</pre>
</pre>


=== Case duration distribution by hours ===
Following analysis shows case duration distribution by hours (works like the [[Duration_Analysis_(PAPO)|Duration Analysis]])
Following analysis shows case duration distribution by hours (works like the [[Duration_Analysis_(PAPO)|Duration Analysis]])
<pre>
<pre>
Line 193: Line 196:
</pre>
</pre>


=== ;onthly average case duration ===
The following analysis calculates monthly average case duration. Case start month needs to be a dimension and KPI is the average case duration (also rounding is used).
The following analysis calculates monthly average case duration. Case start month needs to be a dimension and KPI is the average case duration (also rounding is used).
<pre>
<pre>
Line 220: Line 224:
== Dynamic ValueType Exampes ==
== Dynamic ValueType Exampes ==


=== Counts of different occurred events by time ===
The following analysis shows how many of different kinds of events occurred by time (works like the [[Event_Types#Event_Type_Analysis_in_the_Trends_Mode|Event Type Trend Analysis]]).
The following analysis shows how many of different kinds of events occurred by time (works like the [[Event_Types#Event_Type_Analysis_in_the_Trends_Mode|Event Type Trend Analysis]]).
<pre>
<pre>
Line 255: Line 260:
== Pivot ValueType Exampes ==
== Pivot ValueType Exampes ==


Event type ordering
=== Event type ordering ===
<pre>
<pre>
{
{
Line 294: Line 299:
</pre>
</pre>


Repeats
=== Repeats ===
<pre>
<pre>
{
{
Line 329: Line 334:
</pre>
</pre>


=== Workload per resouce ===
<pre>
{
"Root": "
TimeRange(DateTime(2012,1,1,12,0), DateTime(2012,1,1,13,0), TimeSpan(0, 0, 5))
",
"Dimensions": [
{
"Name": "Time",
"Expression": "_"
}
],
"Values": [
{
"Type": "Pivot",
"Expression": "
Def(\"ActiveEventUnitsAt\", \"at\",
Cases:GetAt(0, Events)
.RecursiveFind(
NextInCase,
TimeStamp <= at
&& (IsNull(NextInCase) || (NextInCase.TimeStamp > at))
)
.Unit
);
Let(\"CurrentTime\",
GetAt(
0,
_
),
Flatten(
EventLog
.ActiveEventUnitsAt(
CurrentTime
)
)
)
"
}
]
}
</pre>
[[Category: QPR UI]]
[[Category: QPR UI]]

Revision as of 09:51, 11 December 2017

This page contains example KPI Analyses.

Single ValueType Examples

Events grouped by event attributes

The following analysis calculates:

  1. Number of cases
  2. List of case names
  3. List of distinct case names (single case appears only once in the list)

for each event attribute Color and Category.

{
  "Root": "Events",
  "Dimensions": [
    {
      "Name": "Color",
      "Expression": "Color"
    },
    {
      "Name": "Category",
      "Expression": "Category"
    }
  ],
  "Values": [
    {
      "Name": "Count",
      "Expression": "Count(_)" 
    },
    {
      "Name": "Cases",
      "Expression": "StringJoin(\",\", _.Case.Name)" 
    },
    {
      "Name": "DistinctCases",
      "Expression": "StringJoin(\",\", Distinct(_.Case.Name))" 
    }
  ],
  "Ordering": [ 
    {
      "Name": "Color",
      "Direction": "Ascending"
    },
    {
      "Name": "Category",
      "Direction": "Descending"
    }
  ]
}

Cases grouped by case attributes

Same analysis for for case attributes:

{
  "Root": "Cases",
  "Dimensions": [
    {
      "Name": "Color",
      "Expression": "Color"
    },
    {
      "Name": "Category",
      "Expression": "Category"
    }
  ],
  "Values": [
    {
      "Name": "Count",
      "Expression": "Count(_)" 
    },
    {
      "Name": "Cases",
      "Expression": "StringJoin(\",\", _.Name)" 
    }
    ],
  "Ordering": [ 
    {
      "Name": "Color",
      "Direction": "Ascending"
    },
    {
      "Name": "Category",
      "Direction": "Ascending"
    }
  ]
}

Return only dimension values

The following analysis returns a list of all dimensions but doesn't calculate any KPI's:

{
  "Root": "Cases",
  "Dimensions": [
    {
      "Name": "Region",
      "Expression": "Region"
    }
  ]
}

Return only single KPI value without dimensioning

The following analysis calculates a KPI for all filtered data but doesn't slice it to any dimensions:

{
  "Root": "Cases",
  "Values": [
    {
      "Name": "Case count",
      "Expression": "Count(_)" 
    }
    ]
}

3 Grams

{
  "Root": "Cases",
  "Dimensions": [
    {
      "Name": "CaseId",
      "Expression": "Name"
    }
  ],
  "Values": [
    {
      "Expression": "
        Flatten(
          _
          .Array(
            StringJoin(\"->\", 
            Array(\"0\", 
              GetAt(0, Events).Type.Name, 
              If(
                Count(Events) > 1, 
                GetAt(1, Events).Type.Name, 
                \"0\"
                )
              )
            ),
            StringJoin(\"->\", 
              Events.Where(!IsNull(NextInCase))
              .Array(Type.Name, 
                NextInCase.Type.Name, 
                If(
                  !IsNull(NextInCase.NextInCase), 
                  NextInCase.NextInCase.Type.Name, 
                  \"0\"
                )
              )
            )
          )
        ).Where(_ != \"\")
      ",
      "DimensionOrderExpression": "OrderByValue(_)",
      "Type": "Pivot"
    }
  ],
  "Ordering": [ 
    {
      "Name": "CaseId",
      "Direction": "Ascending"
    }
  ]
}

Case duration distribution by hours

Following analysis shows case duration distribution by hours (works like the Duration Analysis)

{
  "Root": "Cases",
    "Dimensions": [
      {
        "Name": "Case Duration in Hours",
        "Expression": "Duration.TotalHours.Round(0)"
      }
    ],
    "Values": [
      {
        "Name": "Case Count",
        "Expression": "Count(_)" 
      }
    ],
    "Ordering": [ 
      {
        "Name": "Case Duration in Hours",
        "Direction": "Ascending"
    }
  ]
}

;onthly average case duration

The following analysis calculates monthly average case duration. Case start month needs to be a dimension and KPI is the average case duration (also rounding is used).

{
  "Root": "Cases",
  "Dimensions": [
    {
      "Name": "Start Month",
      "Expression": "StartTime.Month"
    }
  ],
  "Values": [
    {
      "Name": "Average Case Duration in Days",
      "Expression": "Round(Average(_.Duration.TotalSeconds) / 3600, 0)"
    }
  ],
  "Ordering": [
    {
      "Name": "Start Month",
      "Direction": "Ascending"
    }
  ]
}

Dynamic ValueType Exampes

Counts of different occurred events by time

The following analysis shows how many of different kinds of events occurred by time (works like the Event Type Trend Analysis).

{
  "Root": "EventTypes",
  "Dimensions": [
    {
      "Name": "Event Name",
      "Expression": "Name"
    }
  ],
  "Values": [
    {
      "Name": "Event Count",
      "Expression": "GetAt(0, _.Count)" 
    },
    {
      "NameExpression": "",
      "Name": "DateGroupDim",
      "ValueDimensionExpression": "TimeRange(DateTime(2012, 1, 1, 12), DateTime(2012, 1, 1, 13), TimeSpan(0, 0, 10))",
      "Expression": "GetAt(0, Count(_.Events.Where(TimeStamp.Round(TimeSpan(0, 0, 10)) == DateGroupDim)))",
      "Type": "Dynamic"
    }
  ],
  "Ordering": [ 
    {
      "Name": "Event Name",
      "Direction": "Ascending"
    }
  ]
}

Pivot ValueType Exampes

Event type ordering

{
  "Root": "Cases",
  "Dimensions": [
    {
      "Name": "CaseId",
      "Expression": "Name"
    }
  ],
  "Values": [
    {
      "Expression": "
        Flatten(
          _
          .Events
          .For(\"i\", IndexInCase + 1, i < Count(Case.Events), i + 1, 
            StringJoin(\">\", 
              Array(
                Type.Name, 
                GetAt(i, Case.Events).Type.Name
              )
            )
          )
        )
      ",
      "DimensionOrderExpression": "OrderByValue(_)",
      "Type": "Pivot"
    }
  ],
  "Ordering": [ 
    {
      "Name": "CaseId",
      "Direction": "Ascending"
    }
  ]
}

Repeats

{
  "Root": "Cases",
  "Dimensions": [
    {
      "Name": "CaseId",
      "Expression": "Name"
    }
  ],
  "Values": [
    {
      "Expression": "
        Flatten(
          _
          .FindRepeats(Events.Type.Name)
          .Repeat(
            Count(GetAt(1, _)) - 1, 
            StringJoin(\"->\", GetAt(0, _))
          )
        )
      ",
      "DimensionOrderExpression": "OrderByValue(_)",
      "Type": "Pivot"
    }
  ],
  "Ordering": [ 
    {
      "Name": "CaseId",
      "Direction": "Ascending"
    }
  ]
}

Workload per resouce

{
	"Root": "
TimeRange(DateTime(2012,1,1,12,0), DateTime(2012,1,1,13,0), TimeSpan(0, 0, 5))
", 
	"Dimensions": [
		{ 
			"Name": "Time",
			"Expression": "_"
		}
	], 
	"Values": [
		{
			"Type": "Pivot",
			"Expression": "
Def(\"ActiveEventUnitsAt\", \"at\", 
	Cases:GetAt(0, Events)
		.RecursiveFind(
			NextInCase,
			TimeStamp <= at 
			&& (IsNull(NextInCase) || (NextInCase.TimeStamp > at))
		)
		.Unit
);
Let(\"CurrentTime\", 
	GetAt(
		0, 
		_
	), 
	Flatten(
		EventLog
		.ActiveEventUnitsAt(
			CurrentTime
		)
	)
)
"
		}
	]
}