> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ravenna.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Reporting and briefs

> Report on your service desk in Ravenna: start with prepackaged dashboards, build the four cards worth building, understand AI Outcome, and ship a weekly brief to Slack.

Most service desk reporting is a wall of charts nobody looks at. This playbook builds the opposite: one dashboard that answers the questions your leadership actually asks, delivered to Slack so nobody has to remember to open it.

<Info icon="list-check">
  **Prerequisites:** a few weeks of real tickets. Dashboards on a week of test data are misleading in both directions.
</Info>

## 1. Read the prepackaged dashboards first

Before building anything, spend twenty minutes in **Analytics** in the left sidebar. Seven dashboards ship ready: **Tickets**, **Agents**, **Efficiency**, **Forms**, **SLAs**, **CSAT**, and **Knowledge Base Analytics**.

They usually answer the question you were about to build a custom dashboard for. Build custom only when you know which specific number is missing.

<Tip>
  Click any data point on a chart built on the Tickets data source to open the tickets behind it. This is the single most useful thing in Analytics and the least discovered. A spike on a trend line becomes a list of tickets you can read.
</Tip>

<Callout icon="link" color="#6B7280">Learn more about [prepackaged dashboards](/documentation/measure/analytics#prepackaged-dashboards) and [drilling into chart values](/documentation/measure/analytics#drilling-into-chart-values)</Callout>

## 2. Understand AI Outcome before you report on it

AI Outcome is the metric leadership will ask about, and it is easy to misread. Every ticket where an AI agent participated is classified as one of:

| Value          | Means                                                                 |
| -------------- | --------------------------------------------------------------------- |
| Resolved       | The agent handled the ticket end to end                               |
| Assisted       | A human used or built on the agent's work                             |
| Escalated      | The agent's output was unusable and a human resolved it independently |
| Not Applicable | Nobody asked for help: spam, bounces, monitoring alerts               |
| Not Computed   | The classifier has not reached the ticket yet                         |

Three things worth knowing before you put this on a slide:

* **Escalated requires evidence.** When the record does not show whether a human used the agent's output, the ticket is Assisted, not Escalated. So Escalated is a floor, not a ceiling.
* **Historical values can shift.** Classifier updates reclassify previously closed tickets, so a number you screenshotted last quarter may not reproduce.
* **Unpublished AI-only conversations count in charts but not in ticket lists.** Clicking through an AI Outcome segment can open fewer tickets than the chart says, and AI Outcome filters on views miss them entirely.

If you want a cleaner rate, **Resolution path** is deterministic rather than classified: **human touched**, **AI resolved**, **workflow only**, or **unclassified**, with human touch always winning. Use AI Outcome for quality, Resolution path for volume.

<Callout icon="link" color="#6B7280">Learn more about [AI Outcome and Resolution path](/documentation/measure/analytics#prepackaged-dashboards)</Callout>

## 3. Build one custom dashboard

Create a dashboard and add four cards. This is a deliberately short list. You can always add more, and you probably should not.

<Steps>
  <Step title="Ticket volume over time">
    A **Trend** card, count of tickets, grouped by channel. This is the context every other number needs.
  </Step>

  <Step title="Share resolved without a human">
    A **Metric** card, **Percent of** aggregation, grouped by **Resolution Path**. The share sitting in **AI Resolved** and **Workflow Only** is the automation number.
  </Step>

  <Step title="SLA compliance">
    A **Metric** card, **Percent of**, grouped by **SLA > Outcome**. Met versus Breached, with tickets that have no SLA appearing as their own slice.
  </Step>

  <Step title="A watchlist">
    A **Table** card, sorted by **Created** ascending, with conditions for unassigned and open. Table cards show ticket rows rather than an aggregate, so this is a work list on the dashboard, not a statistic. Clicking a row opens the ticket.
  </Step>
</Steps>

<Callout icon="link" color="#6B7280">Learn more about [card types](/documentation/measure/analytics#card-types)</Callout>

## 4. Get the percentages right

**Percent of** is where dashboards quietly start lying. The rule: widget conditions scope the numerator only. The denominator stays the full filtered population set by the dashboard filters and date range.

So a widget scoped to AI Outcome **Resolved** reports the share of *all* tickets in range that were AI-resolved, including spam and unclassified tickets.

Usually that is not what you want. Turn on **Exclude empty from total**, which appears as **Hide Empty Values** on non-percentage aggregations. It drops tickets with no computed value and tickets classified as **Not Applicable** from the denominator, so the percentage describes the classified population instead of everything that arrived.

To check what a number is actually measured against, hover it. The tooltip shows the exact denominator, for example **Out of 142 tickets**.

<Callout icon="link" color="#6B7280">Learn more about [aggregation and percentages](/documentation/measure/analytics#configuration-options)</Callout>

## 5. Turn on CSAT

CSAT is per channel, not workspace-wide. Go to the channel's **Settings** > **Slack** and enable **Send CSAT on Ticket Resolution**. Surveys then go to requesters when tickets in that channel resolve.

The score lands on the ticket itself, which makes it useful beyond the dashboard:

* Filter any view by **CSAT score**, including filtering for tickets with no score to find resolved tickets that never got feedback
* Add the **CSAT score** column in table views and sort it to surface your worst resolutions

Read the one-star tickets. The aggregate score tells you nothing you can act on, and five individual tickets usually tell you exactly what to fix.

<Callout icon="link" color="#6B7280">Learn more about [finding tickets by CSAT score](/documentation/measure/csat#find-tickets-by-csat-score)</Callout>

## 6. Ship a weekly brief to Slack

A dashboard nobody opens is not reporting. AI Briefs generate a narrative summary of a custom dashboard and post it to Slack on a schedule.

<Steps>
  <Step title="Open your custom dashboard">
    Briefs work on custom dashboards only, not the prepackaged ones. It needs at least one widget.
  </Step>

  <Step title="Click AI Brief in the dashboard header">
    Select one or more Slack channels. The Ravenna bot has to be a member of each.
  </Step>

  <Step title="Pick a cadence and time">
    Daily, weekly, or monthly. Times are set in UTC, so convert for your team.
  </Step>

  <Step title="Write the prompt">
    This is the part that decides whether people read it. Something like: focus on week-over-week changes, call out anything concerning, and keep it to five bullets for a leadership audience.
  </Step>
</Steps>

Weekly on Monday morning is the cadence that survives. Daily briefs get muted.

<Callout icon="link" color="#6B7280">Learn more about [AI briefs](/documentation/measure/ai-briefs)</Callout>

## 7. Let Copilot do the building

You do not have to configure widgets by hand. Ask Copilot:

<Prompt description="Build me a dashboard for the IT channel with ticket volume over time, SLA compliance as a percentage, and a table of the ten oldest unassigned tickets.">
  Build me a dashboard for the IT channel with ticket volume over time, SLA compliance as a percentage, and a table of the ten oldest unassigned tickets.
</Prompt>

Copilot is also the right tool when you want raw data on a schedule rather than a narrative summary:

<Prompt description="Every weekday at 9am, DM me my top five open tickets by priority.">
  Every weekday at 9am, DM me my top five open tickets by priority.
</Prompt>

That builds a scheduled workflow, not an AI Brief. Use briefs for narrative, Copilot workflows for data.

<Callout icon="link" color="#6B7280">Learn more about [scheduled Slack reports](/documentation/automate/copilot/build-automations#walkthrough-scheduled-slack-reports-of-ticket-data) and [Copilot recipes](/guides/how-to/copilot-recipes)</Callout>

## Where teams get this wrong

<AccordionGroup>
  <Accordion title="Building custom dashboards first">
    The prepackaged ones answer most questions. Build what is missing, not what you can imagine.
  </Accordion>

  <Accordion title="Reporting AI Outcome without Exclude empty from total">
    Spam in the denominator makes your automation rate look worse than it is.
  </Accordion>

  <Accordion title="Treating Escalated as a failure count">
    It is a floor. Ambiguous cases land in Assisted.
  </Accordion>

  <Accordion title="Never reading the low CSAT tickets">
    The score is a signal, the tickets are the information.
  </Accordion>

  <Accordion title="A dashboard with no brief">
    If nobody is pushed the numbers, nobody sees the numbers.
  </Accordion>
</AccordionGroup>

## Next

<CardGroup cols={2}>
  <Card title="Close knowledge gaps" icon="book-open" href="/guides/how-to/close-knowledge-gaps" horizontal>
    Turn the questions the agent could not answer into articles.
  </Card>

  <Card title="Copilot recipes" icon="sparkles" href="/guides/how-to/copilot-recipes" horizontal>
    Prompts for triage, drafting, automation, and charts.
  </Card>
</CardGroup>


## Related topics

- [SLAs and business hours](/guides/playbooks/slas-and-business-hours.md)
- [Tooling requests](/guides/playbooks/revops/tooling-requests.md)
- [Employee offboarding](/guides/playbooks/hr/employee-offboarding.md)
- [Close knowledge gaps](/guides/how-to/close-knowledge-gaps.md)
- [Playbooks](/guides/playbooks/overview.md)
