The Playbook for the Workplace Analytics analyst is a guide for identifying the useful analyses or functions for exploring a particular area of Workplace Analytics. This guide is divided into the following sections.
For each individual function, you can click into the linked documentation for more information on how to run them and what outputs are returned.
Before proceeding below, you should have installed and loaded the R package as well as having loaded in your data sets. Read our Getting Started guide for more information on how to do this.
It is recommended that you start with running keymetrics_scan()
on a Standard Person Query, which returns a heat map table with an overview with all the key metrics in Workplace Analytics. For more detailed breakdowns, you may also run collaboration_report()
to establish the baseline of collaboration.
Here are a list of other individual plots that you can run: - Summary of metrics: - collab_sum()
- workloads_sum()
- email_sum()
- meeting_sum()
- Time dimension of metrics: - collab_area()
- any of the *_line()
or *_trend()
functions, which provide a view of metric change over time. Use create_line()
or create_trend()
to run the analysis for any metric. - You can also run collab_rank()
to view the top and bottom ranking values for each HR attribute for Collaboration_hours
. *_rank()
functions all come with multiple plot modes, and you can use create_rank()
to run the analysis for any metric.
One option to advance the analysis is to take a deep dive into meetings.
meeting_skim()
can be used to understand the overall % of meetings which are low quality. Hours can be expressed in terms of number of FTE-weeks (or months), or even dollar values for greater impact. Typical assumptions used are 40 employee-hours per week and 180 per month.meetingtype_dist()
can be used to understand the distribution of long or large meetings. Another alternative, meetingtype_summary()
can be used to visualize the proportion of long or large meetings as a bar plot (requires a Ways of Working Assessment query).meeting_tm_report()
can reveal patterns underlying meeting subject lines. The report is made of individual visualization functions, i.e.:meeting_quality()
creates a bubble plot that visualizes Low_quality_meeting_hours
on the x-axis and Meeting_hours
on the y-axis.Another option is to analyse collaboration metrics across a time dimension. - To understand detailed changes in collaboration metrics over time, you can use period_change()
to visualize the distribution across the population in a before vs after comparison. - To understand what metrics have changed the most with respect to time, you can use IV_by_period()
, which uses the before vs after as an outcome variable to calculate which Workplace Analytics metrics have had the greatest impact according to Information Value.
*_summary()
, *_line()
or *_trend()
, can be run between new hires and existing employees. The data can be wrangled to isolate the first n
person-weeks and compare such weeks with onboarded weeks.identify_tenure()
can be used at the beginning for understanding the distribution of employee tenure, provided that a valid HireDate
organizational variable is available.HireDate
(or its equivalent) in a person query from Date
.dplyr::mutate()
and dplyr::case_when()
, which can then be used in the hrvar
argument in most functions.The key metrics in relation to Employee Wellbeing are Work Week Span, Collaboration Hours, and After-hours collaboration hours, which can be visualized in a number of ways. You can start with the capacity_report()
which provides a baseline of this view.
workloads_rank()
, collab_rank()
, and afterhours_rank()
.*_fizz()
functions offer a way of quickly visualizing the distribution of the capacity metrics. For the traditionalist, you can also use create_boxplot()
for the given metric to create boxplot views. The distribution views are especially useful for identifying latent capacities.workpatterns_area()
. Interesting views include analysing Sent emails by time of day, which can illustrate whether employees are still highly active outside of work hours.workloads_*
, collab_*
and afterhours_*
functions.You can classify person-weeks or persons into individual archetypes with workpatterns_classify()
, which reveals break patterns in employees’ weeks. If you are unsure with where to start, you can also run workpatterns_report()
which combines a number of plots based on the classified archetypes. You will need an Hourly Collaboration query.
flex_index()
computes a Flexibility Index which is a measure of how flexible teams are working, based on three components, i.e.: - (i) whether they take breaks during the week, - (ii) whether they start their date at different times compared to the official time, and - (iii) whether they keep their total working hours under control.
By filtering on email and meeting subject lines in a Person Query, it is possible to compute the employee-hours that have been invested into a particular business process. To identify the right keywords to use in the filter, you can run meeting_tm_report()
or one of its component functions (tm_cooc()
, tm_freq()
, tm_wordcloud()
) to examine what keywords are related to the business process you have in mind.
Once the processes are identified, they can be visualized over time with create_line()
or collab_area()
to identify either bottleneck points or cyclicality.
Other ways of identifying solutions to improve employee experience include the following:
You can start with the coaching_report()
which provides a baseline of this view.
mgrrel_matrix()
: a two-by-two matrix describing manager relations styles experienced by the analysis group.one2one_*()
family, i.e.:Moving an employee from an IC to a Manager typically ‘costs’ 6-8 collaboration hours weekly. Optimizing the organizational structure can save many hours of weekly collaboration across the organization. One view is to produce a two-by-two matrix of Layer
vs NumberOfDirectReports
, visualizing the values as Collaboration Hours. An example might be:
library(wpa)
library(dplyr)
sq_data %>%
group_by(PersonId, Layer, NumberOfDirectReports) %>%
summarise(across(Collaboration_hours, ~mean(., na.rm = TRUE))) %>%
group_by(Layer, NumberOfDirectReports) %>%
summarise(across(Collaboration_hours, ~mean(., na.rm = TRUE))) %>%
pivot_wider(names_from = NumberOfDirectReports,
values_from = Collaboration_hours)
Optimization by consolidating direct reports can lead to valuable savings in collaboration hours.
Good manager coaching is a key factor for employee engagement and retention.
Employee sentiment analysis - To compute feature importance, you can leverage create_IV()
and IV_report()
for calculating Information Value, using Workplace Analytics metrics (including manager metrics) as predictor variables and employee sentiment scores as an outcome variable. - If employee churn and sentiment data is available, you can also use Workplace Analytics to build a model for understanding the most important reasons for churn. There currently isn’t a function for modelling in wpa, but you can make use of capabilities in the wider R universe, such as randomForest and tidymodels. The function identify_churn()
can be used to identify employees who have churned from the dataset.
- For more capabilities in calculating variable importance, you may reference the rwa and the vip packages.
You can start with the connectivity_report()
which provides a baseline of this view.
external_network_plot()
and internal_network_plot()
create_bar()
, create_boxplot()
, or create_fizz()
.create_scatter()
or create_bubble()
.Collaboration can be visualized as a network in several ways.
network_g2g()
. There are return
options for a simple network visualization or an interaction table.create_sankey()
to create a Group to Group collaboration visualnetwork_p2p()
.network_p2p()
. See function documentation for more information on methodology and usage.