You are viewing an old version of this page. View the current version.
Compare with Current
View Page History
« Previous
Version 2
Next »
Initial analysis
As with any other map in Service Operations, the starting point is a rough understanding of what needs to be measured and how. For the sake of this example, we will be considering the following considerations:
As mentioned earlier, the status of the e-commerce site needs take into account three main angles: operational health, business performance, and user experience.
Key metrics identified are:
Operational status: platform errors per module or section in the website.
Business status: visits, conversion rate, and average ticket per sale.
User experience: user-side errors reported by individual users.
After a quick analysis of these requirements, the following map that breaks down the e-commerce site status into areas of interest and, ultimately, into concrete key performance indicators, would be as follows:
Data preparations
As previously mentioned, we will assume all data is available in the same table within Devo (demo.ecommerce.data), although it could come from any combination of data structures, look-ups, and so forth.
In the following table, we summarize how the status of all entities and KPIs are translated into LinQ queries:
Entity / KPI | LinQ query | Notes |
---|
Number of user errors, per user | from demo.ecommerce.data
where isnotnull(clientIpAddress)
select str(clientIpAddress) as clientIp
where startswith(clientIp, "98.2")
select ifthenelse(statusCode>=400 and statusCode<500,1.0,0.0) as clientError
group every 1h by clientIp
select sum(clientError) as clientErrors
| We consider user errors those events where the HTTP code = 40x |
Number of application errors, per module | from demo.ecommerce.data
where isnotnull(clientIpAddress)
select decode(true,
uri->"addtocart","addtocart",
uri->"purchase","purchase",
uri->"product.screen","product_details",
uri->"category.screen","category_details",
uri->"view","checkout",
"browse") as applicationModule
select ifthenelse(statusCode>=500,1.0,0.0) as applicationError
group every 1h by applicationModule
select sum(applicationError) as moduleErrors
| Counting the HTTP codes = 50x per module of the application |
Number of visits to the e-commerce site | from demo.ecommerce.data
where isnotnull(clientIpAddress)
select str(clientIpAddress) as clientIp
group every 1h
select round(hllppcount(clientIp)) as totalUsers
| We will simplify this by assuming each distinct clientIpAddress is a single visit to the website |
Visit / sales conversion rate | from demo.ecommerce.data
where isnotnull(clientIpAddress)
select str(clientIpAddress) as clientIp
select decode(true,
uri->"addtocart","addtocart",
uri->"purchase","purchase",
uri->"product.screen","product_details",
uri->"category.screen","category_details",
uri->"view","checkout",
"browse") as applicationModule
select ifthenelse(applicationModule="purchase" and method="POST" and statusCode=200,1.0,0.0) as completedPurchase
group every 1h by clientIp
select max(completedPurchase) as completedPurchase
group every 1h
select sum(completedPurchase) as totalPurchases
select count() as visits
select round(totalPurchases/visits*100,1) as conversionRate
| Count the total number of purchases by the visits to any part of the website. |
Average ticket value | from demo.ecommerce.data
where isnotnull(clientIpAddress)
select str(clientIpAddress) as clientIp
select decode(true,
uri->"addtocart","addtocart",
uri->"purchase","purchase",
uri->"product.screen","product_details",
uri->"category.screen","category_details",
uri->"view","checkout",
"browse") as applicationModule
select ifthenelse(applicationModule="purchase" and method="POST" and statusCode=200,1.0,0.0) as completedPurchase
where completedPurchase>0
group every 1h
select round(avg(timeTaken)/10,1) as averageTicket
| For the sake of this example, and to give an arbitrary value to sales, we will assume the ticket price per sale corresponds to the value of the timeTaken column divided by 10 |
Note that only LinQ queries have been set up for the lower level KPIs. The status of the rest of entities will be calculated automatically based on the correlation of the value of the KPIs.