ChartHop for Administrators
Dashboards

Advanced chart customization

You can utilize Carrot to customize your charts in addition to the dropdown menu.

How ChartHop dashboards calculate data

When displaying data in charts, ChartHop uses the following Carrot time parameters:

  • date: Specific date 
  • intervalFrom: The start of the interval you want to look at (starting with the first date on the date range)
  • intervalTo: The end of the interval you want to look at (end with the last date on the date range)

Change type queries are pulled for the entire interval, all others are counted at the end of the interval. If your dashboard date range ends before the end of the month, it will display the summed value for the last day specified in the date range. ChartHop will alert you when this is the case by displaying a partially filled circle on the last month.

Document image




Document image


The date range on the dashboard is looking for data from October 22, 2023 - April 22, 2024. 



Document image


Because headcount is not a change type query, and instead displays data as of the end of the month, there is no partial circle on “October ‘23”. In the chart below, we are looking at New Hires. Notice the partial circle on both “October ‘23” and “April ‘24”. 



Document image


You can customize this chart by clicking the “Advanced Query Mode” toggle



Document image


Then, at the bottom of the edit chart modal, you can choose whether you want to customize the series, or customize each item. 



Document image


Both options will use Carrot methods that are chained together. Take a look at the Carrot filter box at the bottom of the edit chart modal:



Document image


If we break this expression down, we have the following: 

  • db.job.find = look at jobs in the ChartHop database 
  • (jobFilter) = make sure to query any jobs that meet this specific criteria. This filter is found in the dashboard or chart level filters. 
Document image

  • .sum() = return the sum of entries for the field I’m looking at. Learn more about this and other methods here.

Grouping by values

groupBy allows you to view data by different variables. Below is a chart that looks at headcount by ethnicity, from October 22, 2024 to April 22, 2024. 



Document image


Group by values are dynamic- as your departments and other values change in ChartHop, any chart that looks at that attribute will automatically update with new values. 



Document image


For this chart, you can see we added the “groupBy” value. The chart is now displaying all jobs in the ChartHop database that meet the assigned filter, sorted by ethnicity. 

Grouping by 2 values 

You can group by up to 2 values in a non-time series chart. You would write that in the Carrot Expression like: 

db.job.find(jobFilter).groupBy{expression1, expression2}.sum{} 

For example, if you wanted to see headcount by gender and department:

db.job.find(jobFilter).groupBy{department, gender}.sum{headcount} 

Grouping by persons

You can now group by persons as well. For example, if you wanted to see metrics by recruiter, you could write:

db.job.find(jobFilter).groupBy{recruiter}.count()

This will group by the recruiter field, therefore updating as recruiters move through your organization. 

Common queries

We have simplified the syntax for our most commonly used queries. These work in other parts of the platform, like actions, profile tabs, and resources as well.

findHires(fromDate, untilDate) displays hires between the specified interval.

findHires('2024-01-01', '2024-02-01')returns all the hires that happened in the month of January of 2024. 

You can chain methods with these functions as well:

  • findHires('2024-01-01','2024-02-01'.filter{dept:engineering}.count()Returns the number of hires that happened in the month of January in the engineering department. 
  • findDepartures(fromDate, untilDate)- returns all departures within time frame
  • findMoves(fromDate, untilDate)- returns all moves within time frame
  • findPromotions(fromDate, untilDate)- returns all promotions within time frame
  • turnoverRate(intervalFrom, intervalUntil[, jobFilter[, depart filter][, groupBy])-returns turnover rate for the start date to end date on your dashboard range

Other ways to apply the turnover rate function: 

  • turnoverRate('-1y+1d', intervalUntil, jobFilter, null, {ethnicity})- returns annual turnover rate for a year from the end date on your dashboard range, for the specified job filter, organized by ethnicity. 
  • turnoverRate('-1y+1d', intervalUntil, jobFilter)- returns annual turnover rate for a year from the end date on your dashboard range, for the specified job filter. 

How we calculate turnover rate: 

turnoverRate('2023-01-01', '2023-06-01', jobFilter)

  • If headcount was 60 on 2023-01-01
  • And headcount was 100 on 2023-06-01
  • And 20 departures happened from 2023-01-01 through 2023-05-31
  • Turnover rate will be 20/mean(60,100) = 20/80 = 25%

Querying form responses

You can pull form responses into a dashboard easily as well. 

findAnswers(questionId, fromDate, untilDate)

findAnswers('downwardReviewRating', '2024-01-01','2024-02-01') returns the form answers to the question linked to the “downwardReviewRating” field that were submitted during the month of January, 2024. 

You can chain these with methods: 

findAnswers('downwardReviewRating','2024-01-01','2024-02-01').mean{value} returns the average downwardReviewRating score. 

You can also utilize groupBy if needed: 

findAnswers('downwardReviewRating','2024-01-01','2024-02-01').groupBy{submitPerson.department.mean{value} returns the average downwardReviewRating score, grouped by the department of the person who submitted the form. 

You can retrieve data from a specific assessment using findAnswers as well:

findAnswers(questionId, assessmentId, fromDate, untilDate)

Packages: Headcount Planning | Compensation Reviews | HRIS