ChartHop by ChartHop
Dashboards
Dashboards: How to Build & Customize
charthop dashboards how to build & customize what you can add to a dashboard true 330,331left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type key concepts & definitions jobfilter — the combination of filters a user has selected on the dashboard (e g , filtered to engineering, or new york) always include this in your formula so your chart responds to those selections intervalstart / intervaluntil — when a chart displays data over time (e g , month by month), each bar or data point represents one interval intervalstart is the first day of that period, and intervaluntil is the first day of the next period these are dynamic variables automatically set by the reporting engine for each period — you don't type dates manually here example for the january bar on a chart, intervalstart = '2026 01 01' and intervaluntil = '2026 02 01' for february, they shift automatically to '2026 02 01' and '2026 03 01' target — the person a form response is about (e g , the employee being reviewed) submit — the person who submitted the form response (e g , the manager filling out a review) groupby{} — groups results by a field (like department or location), automatically updating as your org changes no manual edits needed when teams are added or renamed value — the actual response value from a form (a score, rating, or text answer) chart types when adding a chart to your dashboard, you can choose how the data is displayed the formula you write determines what data shows up — the chart type determines how it looks true 330,331left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type time series charts any chart can be displayed as a time series — meaning charthop will calculate your formula for each time period (monthly, quarterly, etc ) and plot them together this is what powers "over time" reports like headcount growth, monthly new hires, or rolling turnover rate to make a chart work correctly as a time series, use intervalstart and intervaluntil in your change or form response functions the engine automatically calculates the right dates for each period example a bar chart using findhires(intervalstart, intervaluntil) count() will show a separate bar for each month, each reflecting only the hires from that month how chart formulas work every chart formula follows the same pattern db job find(jobfilter) \[optional groupby{field}] \[calculation] true 330,331left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type common chart formulas true 330,331left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type tracking hires, departures & promotions use these functions to report on workforce changes use intervalstart and intervaluntil as the date parameters in dashboard charts — the engine automatically substitutes the correct dates (e g , '2026 01 01', '2026 02 01') for each period true 330,331left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type turnover rate turnoverrate(fromdate, untildate\[, jobfilter]\[, departfilter]) calculated as departures ÷ average(headcount at start, headcount at end) true 330,331left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type analyzing form & survey responses terminology reminder target = the person the form is about (e g , the employee being reviewed) submit = the person who submitted the form (e g , the reviewing manager) pull responses from any form findanswers('fieldname', fromdate, untildate) the fieldname is the field id linked to the form question in charthop (e g , managerreviewrating) true 330,331left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type pull responses from a specific review or survey findanswersbyassessment('fieldname', 'assessment name') true 330,331left unhandled content type left unhandled content type left unhandled content type left unhandled content type fields available for filtering or grouping true 330,331left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type left unhandled content type text blocks dynamic & personalized content wrap any field in {{ }} and it populates with the viewer's own data you are part of the {{department}} department your manager is {{reportsto}} every employee sees their own information — no need to duplicate dashboards by team add an ai summary of any chart {{summarizechart(reportid, 'chart name exactly as it appears')}} the chart name must match exactly, including capitalization quick reference cheat sheet \# headcount snapshotdb job find(jobfilter) sum{headcount} \# headcount by department (auto updates) db job find(jobfilter) groupby{department} sum{headcount} \# new hires this period by department findhires(intervalstart, intervaluntil) groupby{department} count() \# voluntary turnover rate (rolling 12 months) turnoverrate(' 1y+1d', intervaluntil, jobfilter, {depart\ voluntary}) \# average performance rating by reviewee's department findanswers('performancerating', intervalstart, intervaluntil) groupby{target department} mean{value} \# ai summary of a chart {{summarizechart(reportid, 'headcount')}} \# personalized text for the viewer you are in the {{department}} department, reporting to {{reportsto}} tips building a column style table? temporarily disable the reporting engine, create your chart, then re enable it comparing to a prior period? use asof(' 1m', { }) to pull data from a past point in time and subtract from the current value chart not responding to filters? make sure jobfilter is included in your find() call
