Check your eligibility for this 50% exam voucher offer and join us for free live learning sessions to get prepared for Exam DP-700.
Get StartedDon't miss out! 2025 Microsoft Fabric Community Conference, March 31 - April 2, Las Vegas, Nevada. Use code MSCUST for a $150 discount. Prices go up February 11th. Register now.
I am working on a report to monitor certain things on the Power BI report Server. I was wondering what items others may be monitoring on reports. I am willing to share what I have done so far.
Listed below are the items I am currently monitoring:
A. Whether the scheduled data refreshes failed or succeeded.
a. Would love to be able to get the failure message.
B. What is the average response time of a query.
a. Is there a way to determine when the report is first opened. I would like to calculate initial load time.
C. What was the longest response time of a query per day.
D. How many times a query took longer than 5 seconds.
Hey there,
There are several queries on the web that will help you combine all that static analytics. Depending on the tool you use to report themout, you may end up creating a virtual dimensional model. I have twicked some from the web to do my bit of report tracking i hope it helps.
Subscription tracking query (what's missing can be collected and staged from the logfiles, something I have not worked on yet) :
select
convert(varchar(1000),case
when Cat.Type = 13 then 'Hyperlink to dashboard'
else 'Hyperlink to Paginated reports'
end) collate Latin1_General_CI_AS as RootPath ,
convert(varchar(1000),CAT.[Path]) collate Latin1_General_CI_AS as Path,
CAT.Name,
S.[SubscriptionID],
S.[Report_OID],
S.[DeliveryExtension],
S.[ExtensionSettings],
Owner.[UserName] as OwnedBy,
Modified.[UserName] as ModifiedBy,
S.[ModifiedDate],
S.[Description],
case when left(S.[LastStatus],9) = 'Completed' then 'Y' else 'N' end as IsRefreshSuccessful,
S.[LastStatus],
S.[EventType],
S.[Parameters],
S.[DataSettings],
A.[TotalNotifications],
A.[TotalSuccesses],
A.[TotalFailures],
S.[LastRunTime],
CAT.[Type]
from
ReportServer.dbo.[Subscriptions] S
inner join ReportServer.dbo.[Catalog] CAT on S.[Report_OID] = CAT.[ItemID]
inner join ReportServer.dbo.[Users] Owner on S.OwnerID = Owner.UserID
inner join ReportServer.dbo.[Users] Modified on S.ModifiedByID = Modified.UserID
left outer join ReportServer.dbo.[SecData] SD on CAT.[PolicyID] = SD.[PolicyID] AND SD.AuthType = Owner.AuthType
left outer join ReportServer.dbo.[ActiveSubscriptions] A with (NOLOCK)
on S.[SubscriptionID] = A.[SubscriptionID]
where
(S.[ReportZone] = 0)
and (S.[EventType] = 'RefreshCache'
OR S.[EventType] = 'DataModelRefresh' )
Report Stats:
with ExecutionLog3Marce
as
(
SELECT
c.itemid,
c.Name as ReportName,
InstanceName,
COALESCE(CASE(ReportAction)
WHEN 11 THEN AdditionalInfo.value('(AdditionalInfo/SourceReportUri)[1]', 'nvarchar(max)')
ELSE C.Path
END, 'Unknown') AS ItemPath,
convert(varchar(1000),case
when C.Type = 13 then 'Hyperlink to dashboard'
else 'Hyperlink to Paginated reports'
end) +
COALESCE(CASE(ReportAction)
WHEN 11 THEN AdditionalInfo.value('(AdditionalInfo/SourceReportUri)[1]', 'nvarchar(max)')
ELSE C.Path
END, 'Unknown')
as ReportWebPath,
UserName,
ExecutionId,
CASE(RequestType)
WHEN 0 THEN 'Interactive'
WHEN 1 THEN 'Subscription'
WHEN 2 THEN 'Refresh Cache'
ELSE 'Unknown'
END AS RequestType,
-- SubscriptionId,
Format,
Parameters,
CASE(ReportAction)
WHEN 1 THEN 'Render'
WHEN 2 THEN 'BookmarkNavigation'
WHEN 3 THEN 'DocumentMapNavigation'
WHEN 4 THEN 'DrillThrough'
WHEN 5 THEN 'FindString'
WHEN 6 THEN 'GetDocumentMap'
WHEN 7 THEN 'Toggle'
WHEN 8 THEN 'Sort'
WHEN 9 THEN 'Execute'
WHEN 10 THEN 'RenderEdit'
WHEN 11 THEN 'ExecuteDataShapeQuery'
WHEN 12 THEN 'RenderMobileReport'
WHEN 13 THEN 'ConceptualSchema'
WHEN 14 THEN 'QueryData'
WHEN 15 THEN 'ASModelStream'
WHEN 16 THEN 'RenderExcelWorkbook'
WHEN 17 THEN 'GetExcelWorkbookInfo'
WHEN 18 THEN 'SaveToCatalog'
WHEN 19 THEN 'DataRefresh'
ELSE 'Unknown'
END AS ItemAction,
TimeStart,
TimeEnd,
TimeDataRetrieval,
TimeProcessing,
TimeRendering,
CASE(Source)
WHEN 1 THEN 'Live'
WHEN 2 THEN 'Cache'
WHEN 3 THEN 'Snapshot'
WHEN 4 THEN 'History'
WHEN 5 THEN 'AdHoc'
WHEN 6 THEN 'Session'
WHEN 7 THEN 'Rdce'
ELSE 'Unknown'
END AS Source,
Status,
ByteCount,
[RowCount]
--, AdditionalInfo
FROM ReportServer.dbo.ExecutionLogStorage EL WITH(NOLOCK)
LEFT OUTER JOIN ReportServer.dbo.Catalog C WITH(NOLOCK) ON (EL.ReportID = C.ItemID)
)
select
LDAP.Name as EmployeeName,
EmployeeID,
convert(int,convert(varchar(10),TimeStart,112)) as ReportStartDateKey,
convert(int,convert(varchar(10),TimeEnd,112)) as ReportEndDateKey,
RepLog.*
from ExecutionLog3Marce RepLog
inner join SHLReporting.dbo.SHLLDAPUsers LDAP
on replace(Replog.UserName,'Your Windows Domain','') = sAMAccountName collate Latin1_General_100_CI_AS_KS_WS
and Username <> 'Admin account'
where
RepLog.ItemAction in ('ConceptualSchema', 'Render')
@4Eric,
You can also monitor the following items.
Reference:
https://insightsquest.com/2018/01/29/power-bi-report-server-monitoring/
Regards,
Lydia
This is a great solution!
March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount!
Check out the January 2025 Power BI update to learn about new features in Reporting, Modeling, and Data Connectivity.