Appearance
Reporting Sheet
The reporting spreadsheet is a separate Google file from the database. It contains human-facing dashboards built with Google Sheets formulas. The bot never reads or writes this file.
Architecture
Database Sheet (bot reads/writes)
↓
IMPORTRANGE (via IMPORT_DB named function)
↓
Hidden mirror sheets (one per database tab)
↓
Visible dashboard tabs (built with LET/FILTER/MAP formulas)Each database tab is mirrored into a hidden sheet in the reporting spreadsheet. Visible dashboard tabs pull from these mirrors — not directly from the database sheet.
IMPORT_DB formulas
Place in cell A1 of each hidden mirror sheet:
01. Time Entries: =IMPORT_DB("01. Time Entries!A:H")
02. Projects: =IMPORT_DB("02. Projects!A:L")
03. Users: =IMPORT_DB("03. Users!A:G")
04. Clients: =IMPORT_DB("04. Clients!A:D")
05. Tasks: =IMPORT_DB("05. Tasks!A:C")
06. Project_Tasks: =IMPORT_DB("06. Project_Tasks!A:D")
07. Budgets: =IMPORT_DB("07. Budgets!A:I")
08. Disciplines: =IMPORT_DB("08. Disciplines!A:C")
10. Pending_PTO: =IMPORT_DB("10. Pending_PTO!A:I")
11. Unresolved_Items: =IMPORT_DB("11. Unresolved_Items!A:I")
12. Company_Calendar: =IMPORT_DB("12. Company_Calendar!A:D")
13. Rate_History: =IMPORT_DB("13. Rate_History!A:D")
14. Liabilities: =IMPORT_DB("14. Liabilities!A:H")
22. Projects Master: =IMPORT_DB("'22. Projects Master'!A:P")IMPORT_DB is a named function wrapping IMPORTRANGE with the database sheet URL. Only 22. Projects Master uses single quotes inside the string.
Dashboard tabs
| Tab | Purpose |
|---|---|
00. Dashboard | KPI cards + portfolio health table |
01. Summary | Client-level aggregation |
02. Projects Master | Full project list with financials |
03. Project Performance | Per-project delivery metrics |
04. FP Variance | Fixed Price margin analysis |
05. Retainer Analysis | Burn rate and hours remaining |
06. League Table | PM performance rankings |
07. Financials | Revenue, cost, margin by project type |
08. Historical | Rolling 12-month trends |
09. Rate Tables | Rate history per team member |
10. Export | Raw time entries with resolved names |
See the column headers and formula patterns for each tab below.
Tab headers
00. Dashboard
Project Name, Client, Type, Hours Logged, Hours Budget, % Budget Used, Health Status
01. Summary
Client Name, Active Projects, Total Hours Logged, Total Hours Budget, % Budget Used
02. Projects Master
Project Name, Client, Project Type, Billable, Contract Value ($), Hours Budget, Actual Hours, Labor Cost ($), Hour Variance (hrs), Cost Variance ($), Variance %, Billing Rate ($/hr)
03. Project Performance
Project Name, Client, Project Type, Hours Logged, Hours Budget, % Budget Used, Hour Variance, Cost Variance ($), Health Status
04. FP Variance
Project Name, Client, Contract Value ($), Hours Budget, Actual Hours, % Complete, Earned Revenue ($), Actual Cost ($), Margin ($), Margin Variance ($)
05. Retainer Analysis
Project Name, Client, Contract Value ($), Hours Budget, Hours Used, Burn Rate, Hours Remaining
06. League Table
Project Manager, Active Projects, Under Budget, Under Budget %, At Warning, Warning %, Over Budget, Over Budget %, Avg Utilisation, Performance Score
07. Financials
Project Name, Client, Project Type, Billable, Contract Value ($), Hours Logged, Revenue ($), Cost ($), Margin ($), Margin %
08. Historical
Month, Total Hours, Time Entries, Avg Hours per Entry
09. Rate Tables
Team Member, Employment Type, Hourly Cost ($), Effective From
10. Export
Date, Team Member, Project Name, Task Name, Hours Logged, Notes, Billable
Percentage convention
All formulas output percentages as decimals (e.g. 0.85, not 85). Format the column as "Percent" in Google Sheets to display as 85%.
Threshold comparisons use pct >= threshold/100 (thresholds are stored as whole numbers like 80). Over-budget = pct >= 1.
Status values
The Projects Master status column uses "Active" (capital A). The 02. Projects sheet uses "active" (lowercase).
- FILTER
=is case-insensitive — both work - QUERY
WHEREis case-sensitive — use'Active'not'active'in QUERY clauses
See Formula Rules for the full list of Google Sheets constraints.
Further reading
- The Dashboard Is Always Current — the two-spreadsheet architecture that keeps client-facing views safe from accidental edits