Guidelines For Nemo Analyze Custom Queries October 2012
Guidelines For Nemo Analyze Custom Queries October 2012
SQL pros
Efficient for power users
Standard language
Scalability of the queries is good
Excellent tool for grouping and filtering of data
SQL cons
Requires SQL and database schema knowledge
Temporal relations between tables are difficult or impossible to build
Difficult or impossible to track sequence of events, and do other more advanced logic
KPI workbench pros
Graphical UI, no need for SQL knowledge
Possibility to create temporal correlations between tables
Possibility to create state machines, and other advanced sequences
KPI workbench cons
Currently data can be correlated only per file, e.g. MMS end to end delivery time cannot be
calculated from two separate files
Scalabilty is not as good as with SQL, may run into Japa heap space error with large datasets
Use SQL if you need to add complex filter or formatting for one of the exsiting queries in the
parameter tree
Use KPI workbench if you cannot do what you want with SQL
KPI workbench
The underlying data recording principle of all Nemo measurement tools is that the
data is
written to the log file only when values change, i.e. values are not written periodically.
More precisely, if any of the information elements of a given event change, the event
is
written to the log file.
Correlations
Previous, Current, and Next Value
Each row of the lefmost input dataset
is taken directly to the output
From other input datasets,
previous/current/next row from the
timestamp of each leftmost dataset
row is taken into the ouput
Useful when taking snapshots of the
network
E.g. value of each radio parameter in
the event of dropped call
Correlations
All Values Within Time Range
Useful when combining non-event type data (RSCP, RxLevel, Tx power,
etc) to one table
Scatter plots (Ec/N0 vs RSCP, Throughput vs. RxLevel, etc.)
Custom Events with multiple conditions: filter rows where Ec/N0 < x
AND RSCP > y AND etc..)
Correlations = Timestamp of a row in table
time
B4
B6
B7
Aggregate Functions
Call failure
Connecting call
Powerful tool for various applications:
Calculating delay of any signaling procedure, e.g. call
setup delay, handover delay Call Call
Alerting
disconnected dropped
Tracking certain signaling message sequence and
create event the occurence
Track call, or packet data transfer state, and calculate
statistics binned by call/data transfer e.g. Avg tput per
data transfer Call connected
Input: one dataset with the needed input data in time order
(UNION + Order by time)
Output: Row per each transition arrow in the state machine, if
output is set
start_time: timestamp of the transition
end_time: timestamp of the next transition
time_interval: time difference in milliseconds between
start_time and end_time, that is, the time spent in the
target state of the transition
Time_inter, with columns for the time spent in the old
state, running index number, and user-definable text
Configuring State Machine
Time shift node can be used to modify the timestamp and the time range of any input data.
One of the most relevant use cases of this node is when one wants to automatically capture
details before and/or after a particular event for custom root cause analysis purposes
Picture below illustrates capturing of RF details 4s before and after each dropped call using
time shift node
Resample node
...
Nemo Analyze Database Schema
Mapping of Fixed Size Events to DB Tables
Right way to do it
Timestamp in the Database
/* MEAS({measurement_file_name_1}:{file_extension}|
{measurement_file_name_2}:{file_extension}|....) */ Right way to do it
When using HINT, queries over certain file(s) are
always fast, regardless of the amount of other files
in the DB
JOIN can be done with regular SQL syntax also
This is needed only when data from Device, or
Measurement table is needed to return
Even in that case it is recommended to use HINT
to perform the actual filtering, because it makes
the query faster
When custom queries are made to Analyze UI,
measurement filtering MUST NOT BE DONE,
unless query is wanted to be statically limited to
certain measurement file(s)
HINT is added automatically to the query in
runtime
Value Enumeration
Connection types:
0="Unknown"
1="Voice"
2="Handover"
3="Attach"
Examples: 4="PDP contect
activation"
1. Get only those throughput samples that were 5="Data"
recorded during data transfer: 6="RRC"
7="Data transfer"
8="MMS"
9="SMS"
10="POC"
11="LAU"
12="RAU"
13="Ping"
Most tables do not have any relation between each other, but you may still want to join data between such
tables
Two type of JOINs can be made based on time:
1. Sample based correlation
- Each row of table x and a row from table y WHERE the timestamp of x row is within time range of the y
row
- E.g. Tx power vs. RSCP scatter
2. Time range condition
- Each row of table x WHERE the timestamp is in certain range, defined by some other tables.
E.g. Tx power samples between Attach request and Attach Accept L3 messages.
Correlating Tables Without Relation 2/3
Sample Based Correlation
1. List tables to be joined in FROM clause: FROM table x, table y
2. make x.time = y.time condition to WHERE clause
When x table is the first one in FROM clause:
- each y sample is taken, and checked, if there is a x sample that has the same timestamp as y sample OR if the x
timestamp falls to the validity time interval of the y sample
When y table is the first one in FROM clause, the comparison is vice versa
Comparison is not bi-directional! It there is a big difference in the sample periods of x and y, the one that has smaller
sample period, should be selected as y in order to get highest possible resolution
3. Make x.the_device = y.the_device condition to WHERE clause (this limits the time correlation within each measurement file,
improves the performance)
4. Add /* OPTIONS(USE_TIME_SCOPE) */ hint at the end of the sql query. This enables the time scope join.
For example: Get Tx power vs. RSCP, when RSCP < -95 dBm
Tx power is in Nemo.UMTS.TXPC table, RSCP is in Nemo.UMTS.ECNO.Cell table, no relation between the tables
All Tx power samples are taken and checked if they fall to the validity time interval of an RSCP sample that is < -95
Binary timestamp (time) can (and should) be returned in the SELECT row, UI converts it
automatically to readable timestamp
Binary timestamp MUST be used if query is wanted to see correctly in line and bar graph
This is because the validity time interval of the samples is needed also to plot correct graphs
Measurement file filter HINT must not be used in the query, unless it is wanted to be statically
limited to certain measurement file(s) UI filters the query results in runtime
VALUE_ENUM scalar is not needed, UI uses it automatically
Results have to be ordered by time (ORDER BY sql_time) in order to see results correct in
graphs and map
Adding Custom Queries to Analyze UI
Manual Query
Step-by-step procedure:
Select tables from where data is get
Select columns to be displayed from the table(s)
Select column for ordering the results, if time based
ordering is not sufficient
Set filtering conditions for results
Define aliases between controls and result columns
(which columns will be x and which will be y in graph
etc.)