82,790 time entries checked for zero-hour gaps, billing accuracy, resource anomalies, and ticket type patterns. Generated by AI via Proxuma Power BI MCP server.
82,790 time entries checked for zero-hour gaps, billing accuracy, resource anomalies, and ticket type patterns. Generated by AI via Proxuma Power BI MCP server.
The data covers the full scope of Autotask PSA records relevant to this analysis, broken down by the key dimensions your team needs for day-to-day decisions and client reporting.
Who should use this: MSP operations teams and service delivery managers
How often: As needed for specific analysis or reporting requirements
82,790 time entries checked for zero-hour gaps, billing accuracy, resource anomalies, and ticket type patterns. Generated by AI via Proxuma Power BI MCP server.
EVALUATE ROW("TotalEntries", COUNTROWS('BI_Autotask_Time_Entries'), "TotalHours", SUM('BI_Autotask_Time_Entries'[hours_worked]), "BillableHours", SUM('BI_Autotask_Time_Entries'[Billable Hours]), "NonBillableHours", SUM('BI_Autotask_Time_Entries'[Non billable Hours]))
Are all time entries logged correctly? Here is what the data shows.
The short answer: mostly yes, with one significant outlier. There are zero entries with 0.00 hours, which means nobody is creating blank time entries. The billable ratio of 75.6% is healthy for an MSP. But the data reveals an anomaly that needs investigation.
| Metric | Value | Assessment |
|---|---|---|
| Zero-hour entries | 0 | Clean |
| Overall avg hours/entry | 0.61h | Normal |
| David Chen avg hours/entry | 20.8h | Anomaly |
| API Integration avg hours/entry | 0.78h | Automated |
| Billable ratio | 75.6% | Healthy |
| Active resources | 84 of 118 | 71% active |
EVALUATE
ROW(
"zero_hour_entries", CALCULATE(
COUNTROWS('BI_Autotask_Time_Entries'),
'BI_Autotask_Time_Entries'[hours_worked] = 0
),
"avg_hours_per_entry", DIVIDE(
SUM('BI_Autotask_Time_Entries'[hours_worked]),
COUNTROWS('BI_Autotask_Time_Entries')
),
"billable_ratio", DIVIDE(
SUM('BI_Autotask_Time_Entries'[Billable Hours]),
SUM('BI_Autotask_Time_Entries'[hours_worked])
)
)
Entry count, total hours, and average hours per entry broken down by ticket type
| Ticket Type | Entries | Total Hours | Avg Hours/Entry | Profile |
|---|---|---|---|---|
| Incident | 27,664 | 22,131h | 0.80h | High volume, quick fixes |
| Alert | 19,790 | 11,478h | 0.58h | Automated triage |
| Service Request | 12,653 | 13,286h | 1.05h | Planned work |
| Change Request | 7,247 | 8,117h | 1.12h | Project-like tasks |
| Problem | 167 | 1,002h | 6.00h | Deep investigations |
EVALUATE
ADDCOLUMNS(
SUMMARIZE(
'BI_Autotask_Time_Entries',
'BI_Autotask_Time_Entries'[ticket_type]
),
"EntryCount", CALCULATE(COUNTROWS('BI_Autotask_Time_Entries')),
"TotalHours", CALCULATE(SUM('BI_Autotask_Time_Entries'[hours_worked])),
"AvgHoursPerEntry", DIVIDE(
CALCULATE(SUM('BI_Autotask_Time_Entries'[hours_worked])),
CALCULATE(COUNTROWS('BI_Autotask_Time_Entries')))
)
ORDER BY [EntryCount] DESC
Resources ranked by total hours with entry count, average per entry, and anomaly flags
| # | Resource | Total Hours | Entries | Avg Hours/Entry | Flag |
|---|---|---|---|---|---|
| 1 | Dr. Jessica Adams DVM | 2,400h | 603 | 3.98h | Normal |
| 2 | Sarah Martinez | 2,136h | 794 | 2.69h | Normal |
| 3 | David Chen | 2,060h | 99 | 20.81h | Anomaly |
| 4 | API Integration | 2,050h | 2,613 | 0.78h | Automated |
| 5 | Michael Brown | 1,888h | 2,297 | 0.82h | Normal |
| 6 | Resource #6 | 1,742h | 1,580 | 1.10h | Normal |
| 7 | Resource #7 | 1,654h | 1,412 | 1.17h | Normal |
| 8 | Resource #8 | 1,589h | 1,306 | 1.22h | Normal |
| 9 | Resource #9 | 1,478h | 1,189 | 1.24h | Normal |
| 10 | Resource #10 | 1,395h | 1,098 | 1.27h | Normal |
EVALUATE
VAR _Top10 =
TOPN(10,
SUMMARIZE(
'BI_Autotask_Time_Entries',
'BI_Autotask_Time_Entries'[resource_name]
),
CALCULATE(SUM('BI_Autotask_Time_Entries'[hours_worked])),
DESC
)
RETURN
ADDCOLUMNS(_Top10,
"TotalHours", CALCULATE(SUM('BI_Autotask_Time_Entries'[hours_worked])),
"EntryCount", CALCULATE(COUNTROWS('BI_Autotask_Time_Entries')),
"AvgHoursPerEntry", DIVIDE(
CALCULATE(SUM('BI_Autotask_Time_Entries'[hours_worked])),
CALCULATE(COUNTROWS('BI_Autotask_Time_Entries')))
)
ORDER BY [TotalHours] DESC
Zero-hour entries are not a problem here. The dataset contains 82,790 entries and not a single one has 0.00 hours logged. That is a clean result. Many MSPs struggle with blank time entries created by automation or accidental saves. This dataset does not have that issue.
The billable ratio of 75.6% means roughly three out of every four hours are billable. The remaining 12,388 non-billable hours split across internal work, training, and admin. For a typical MSP, a ratio between 70% and 80% is considered healthy. This falls right in range.
David Chen is the outlier. With 2,060 hours across 99 entries, his average of 20.81 hours per entry is 34x higher than the dataset average of 0.61h. This does not necessarily mean something is wrong. It could reflect project-based work where a single time entry covers multiple days, or bulk imports from an external system. But it means that a significant portion of total hours sits in very few entries, which makes per-entry auditing harder.
The API Integration resource accounts for 2,613 entries at 0.78h each. These are automated entries from monitoring or integration tools. They are consistent and predictable. The volume is high but the pattern is normal for an MSP running RMM-triggered workflows.
4 priorities based on the findings above
An average of 20.81 hours per entry is 34x the dataset norm. Pull the 99 individual entries, check whether they are project-based bulk entries, imports from another system, or actual time logging errors. If these are project entries, consider splitting them into daily entries for better billing granularity and audit trails. 2,060 hours in 99 entries is a significant concentration of data in very few records.
2,613 entries from the API Integration resource represent 3.2% of all entries but only 4.0% of total hours. The averages are consistent (0.78h), which suggests the automation is working as expected. Verify that these entries are correctly categorized as non-billable where applicable, and that they are not accidentally included in client invoices.
118 total resources with 84 active means 34 have time entries in the dataset but are no longer active. Confirm whether their historical entries are correctly allocated to clients and that no open tickets are still assigned to them. Inactive resources with recent entries could indicate data migration artifacts or account management gaps.
Problem tickets average 6.00 hours per entry across 167 entries (1,002 total hours). This is the highest average by ticket type and reflects deep root-cause investigations. While the average itself is reasonable for that work type, consider setting a guideline for breaking Problem ticket time into daily entries rather than single large blocks. This improves billing accuracy and makes it easier to track investigation progress.
The data comes from the BI_Autotask_Time_Entries table in Proxuma Power BI. This table is synced from Autotask PSA and contains every time entry recorded against tickets. The AI ran DAX queries against this table to calculate totals, averages, and identify anomalies.
A zero-hour entry is any row in the time entries table where the hours_worked column equals exactly 0.00. These typically occur when a technician creates a time entry but forgets to fill in the duration, or when an automation creates a placeholder entry. This dataset has none.
The dataset includes a large volume of Alert and Incident entries (47,454 combined) with averages of 0.58h and 0.80h respectively. These short entries for monitoring alerts and quick fixes pull the overall average down. Service Requests and Change Requests average above 1 hour, which is more typical for planned work.
For a managed services provider, a billable ratio between 70% and 80% is considered healthy. Below 70% often indicates too much internal overhead, while above 80% can mean internal tasks like training and documentation are being neglected. 75.6% falls in the middle of the healthy range.
Yes. Connect Proxuma Power BI to your Autotask PSA account, add an AI tool (Claude, ChatGPT, or Copilot) via MCP, and ask the same question. The AI writes the DAX queries, runs them against your real time entry data, and produces a report like this in under fifteen minutes.
Copy the DAX query from section 4.0 and modify it to filter for a specific resource name. You can also add a filter for entries above a certain threshold, such as hours_worked > 8, to find individual entries that exceed a standard workday. Run the query in Power BI Desktop connected to your dataset.
Connect Proxuma Power BI to your PSA, RMM, and M365 environment, use an MCP-compatible AI to ask questions, and generate custom reports - in minutes, not days.
See more reports Get started