Engagement Dashboards
building a reporting dashboard for persistent charts and deeper analysis, build a dashboard using charthop's dashboard builder the core function for pulling engagement survey data is findresponsesbyassessment, which scopes results to a specific survey cycle findresponsesbyassessment('survey name', 'form name') mean{answervalue\['\<questionid>']} you can group by demographic findresponsesbyassessment('survey name', 'form name') groupby{submitperson department} mean{answervalue\['\<questionid>']} charts using answervalue need to be created and saved through the charthop ui using advanced query mode — they can't be saved via the api due to a current cql validation limitation see the ask charthop section below for how to use ai to scaffold the dashboard for you enps (employee net promoter score) enps is not a separate question type it's a standard numeric scale question with 11 options (0–10) charthop automatically applies enps scoring logic and displays an nps indicator on any numeric scale chart with 11 options scoring promoters = 9–10, passives = 7–8, detractors = 0–6 formula (promoters − detractors) / total respondents add a numeric scale question to your form with 11 options (0–10) a common prompt "on a scale of 0–10, how likely are you to recommend \[company] as a place to work?" charthop's cql includes a built in nps() method for calculating enps in dashboard charts findanswers('your enps question name') nps{it value} scoped to a specific cycle and grouped by demographic findanswersbyformassessment('\<formid>', '\<surveyname>', '\<formname>') groupby{submitperson team} nps{value} you can also run nps scoring on any individual question scored 0–10, not just your enps question use findanswers with the specific question name, and you get a separate nps score per question findanswers('my question name') nps{it value} using ask charthop to build your dashboard once your survey has launched — or even before responses come in — you can use ask charthop to scaffold your reporting dashboard describe what you want, and it will build the chart structure with the cql expressions you need a good starting prompt "build me an engagement survey dashboard for our \[survey name] survey include overall participation rate, average score per question, scores broken down by department, and an enps chart " for more detail "create an engagement dashboard for \[survey name] i want a participation chart using findformtasksbyassessment, average scores for each question grouped by department, an enps chart using the nps() method, and a heatmap showing scores across all questions by manager " ask charthop will create placeholder text blocks containing complete, correct cql expressions to activate each chart, open the placeholder, change the chart type to the one specified, enable advanced query mode , and paste in the expression the hard work is done — you're just switching the chart type and saving using ask charthop to explore and compare results ask charthop can also answer natural language questions about your survey results without building anything once responses are in, try "summarize the engagement survey results for the engineering department " "which department had the lowest average score on the q1 engagement survey?" "what were the most common themes in open text responses from the april engagement survey?" "how did enps change between the december 2025 and april 2026 engagement surveys?" "which questions had the biggest score differences between managers and individual contributors?" be specific about the survey name, time period, and what you want to know ask charthop respects the same access rules as the rest of charthop — for de identified surveys, it won't surface individual identity even if asked ask charthop is best for on the fly exploration and quick reads on results for persistent charts and saved dashboards, use the dashboard builder comparing results across survey cycles how you compare cycles depends on how you set up your surveys the recommended approach reuse the same form, create a new survey each cycle since findresponsesbyassessment is scoped by assessment name, each cycle's data is already separated to compare, duplicate the chart and update the assessment name to the prior cycle side by side charts give you a clean before/after view // this cyclefindresponsesbyassessment('q1 2026 engagement survey', 'engagement survey') mean{answervalue\['\<questionid>']} // last cycle — on a second chart findresponsesbyassessment('q4 2025 engagement survey', 'engagement survey') mean{answervalue\['\<questionid>']} if you duplicate the form each cycle (for example, to update questions), be aware that every dashboard chart references the form by name if the form name changes, every chart that referenced the old name will break and return no data before you launch a new cycle with a duplicated form, update the form name reference in every chart on your engagement dashboard if charts break and you can't identify why, switching to ids instead of names is the most reliable fix findresponsesbyassessment('\<assessmentid>', '\<formid>') mean{answervalue\['\<questionid>']} ids are in the url when editing a form or survey in charthop they don't change when names do, so they're the safest reference for long lived dashboards the key rule form names in charts must exactly match the form name in charthop any rename — even adding a year — breaks every chart that references it until updated
