Custom Reports
Build custom analytics views and reports tailored to your game's specific KPIs and metrics.
12 min read
Overview
Custom reports let you answer specific questions about your game by querying event data with flexible parameters. Build once, save, and schedule reports for regular delivery.
Report Builder
Access the report builder at Dashboard → Analytics → Custom Reports → New Report.
Query Components
| Component | Description | Example |
|---|---|---|
| Metrics | What to measure | Count, Sum, Average, Unique |
| Dimensions | How to group | Date, Event, Player Attribute |
| Filters | Which data to include | Level > 10, Country = US |
| Time Range | When | Last 7 days, This month |
Query Examples
Daily Revenue by Country
Query Configuration
json
{class="code-string">"metrics": [{ class="code-string">"type": class="code-string">"sum", class="code-string">"field": class="code-string">"properties.amount", class="code-string">"name": class="code-string">"revenue" }],class="code-string">"dimensions": [{ class="code-string">"type": class="code-string">"date", class="code-string">"granularity": class="code-string">"day" },{ class="code-string">"type": class="code-string">"property", class="code-string">"field": class="code-string">"properties.country" }],class="code-string">"filters": [{ class="code-string">"field": class="code-string">"event_name", class="code-string">"operator": class="code-string">"eq", class="code-string">"value": class="code-string">"purchase_complete" }],class="code-string">"time_range": {class="code-string">"type": class="code-string">"relative",class="code-string">"value": class="code-string">"last_30_days"},class="code-string">"limit": 1000}
Conversion Funnel
Funnel Query
json
{class="code-string">"type": class="code-string">"funnel",class="code-string">"steps": [{ class="code-string">"event": class="code-string">"tutorial_start" },{ class="code-string">"event": class="code-string">"tutorial_complete" },{ class="code-string">"event": class="code-string">"first_game_start" },{ class="code-string">"event": class="code-string">"first_purchase" }],class="code-string">"time_range": {class="code-string">"type": class="code-string">"relative",class="code-string">"value": class="code-string">"last_7_days"},class="code-string">"conversion_window": class="code-string">"7d",class="code-string">"group_by": class="code-string">"properties.acquisition_source"}
Retention Cohort
Cohort Query
json
{class="code-string">"type": class="code-string">"cohort",class="code-string">"cohort_event": class="code-string">"first_open",class="code-string">"return_event": class="code-string">"session_start",class="code-string">"time_range": {class="code-string">"type": class="code-string">"relative",class="code-string">"value": class="code-string">"last_90_days"},class="code-string">"retention_periods": [1, 3, 7, 14, 30],class="code-string">"granularity": class="code-string">"week"}
Available Metrics
| Metric | Description | Syntax |
|---|---|---|
| Count | Number of events | count(*) |
| Unique | Unique players | count_unique(player_id) |
| Sum | Total of a property | sum(properties.score) |
| Average | Mean of a property | avg(properties.duration) |
| Min/Max | Extremes | min(properties.level) |
| Percentile | Distribution | p95(properties.load_time) |
Filter Operators
| Operator | Description | Example |
|---|---|---|
eq | Equals | country eq "US" |
neq | Not equals | platform neq "web" |
gt | Greater than | level gt 10 |
gte | Greater or equal | revenue gte 100 |
lt | Less than | session_count lt 5 |
in | In list | country in ["US", "CA"] |
contains | String contains | event_name contains "purchase" |
is_null | Is null/empty | email is_null |
Visualization Options
Chart Types
- Line Chart: Time series, trends
- Bar Chart: Comparisons, rankings
- Area Chart: Stacked metrics over time
- Pie/Donut: Distribution breakdown
- Table: Raw data with sorting
- Funnel: Conversion visualization
- Cohort Grid: Retention matrix
Saving & Sharing
Save reports for reuse and collaboration:
- Save: Store query configuration for later
- Favorite: Add to your quick-access list
- Share: Generate shareable link for teammates
- Duplicate: Clone and modify existing reports
Scheduled Reports
Automate report delivery via email:
Schedule Configuration
json
{class="code-string">"report_id": class="code-string">"rpt_abc123",class="code-string">"schedule": {class="code-string">"frequency": class="code-string">"weekly",class="code-string">"day": class="code-string">"monday",class="code-string">"time": class="code-string">"09:00",class="code-string">"timezone": class="code-string">"America/New_York"},class="code-string">"recipients": [class="code-string">"[email protected]",class="code-string">"[email protected]"],class="code-string">"format": class="code-string">"pdf",class="code-string">"include_csv": true}
API Access
Query reports programmatically:
Query via API
bash
curl -X POST class="code-string">"https:class="code-commentclass="code-string">">//api.ilara.ai/v1/analytics/query" \-H class="code-string">"X-API-Key: sk_live_xxx" \-H class="code-string">"Content-Type: application/json" \-d '{class="code-string">"metrics": [{class="code-string">"type": class="code-string">"count"}],class="code-string">"dimensions": [{class="code-string">"type": class="code-string">"date", class="code-string">"granularity": class="code-string">"day"}],class="code-string">"filters": [{class="code-string">"field": class="code-string">"event_name", class="code-string">"operator": class="code-string">"eq", class="code-string">"value": class="code-string">"session_start"}],class="code-string">"time_range": {class="code-string">"type": class="code-string">"relative", class="code-string">"value": class="code-string">"last_7_days"}}'
Rate Limits
Analytics queries are rate-limited. Use caching for frequently-accessed data.
Best Practices
- Start simple: Build basic queries first, then add complexity
- Use filters: Narrow data for faster queries and clearer insights
- Name clearly: Use descriptive report names for easy discovery
- Document: Add descriptions explaining what the report shows
- Review regularly: Archive reports that are no longer useful
Next Steps
- Data Export — Export to data warehouses
- Webhooks — Real-time event forwarding
- Events API — Query events programmatically