<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Tracking Dashboard Usage in Report Server in Report Server</title>
    <link>https://community.fabric.microsoft.com/t5/Report-Server/Tracking-Dashboard-Usage-in-Report-Server/m-p/4091614#M36364</link>
    <description>&lt;P&gt;I am working with a team that is proficient in SQL, so we can explore this option. We have also reviewed your GitHub; thank you for the good work. I'll come back here if this is successful.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;In the meantime, I will go with another alternative. I have observed that the execution stages repeat 5 times for each login account, so I have decided to count them all and divide by 5.&lt;/P&gt;</description>
    <pubDate>Fri, 09 Aug 2024 11:36:46 GMT</pubDate>
    <dc:creator>tmhalila</dc:creator>
    <dc:date>2024-08-09T11:36:46Z</dc:date>
    <item>
      <title>Tracking Dashboard Usage in Report Server</title>
      <link>https://community.fabric.microsoft.com/t5/Report-Server/Tracking-Dashboard-Usage-in-Report-Server/m-p/4084040#M36307</link>
      <description>&lt;P&gt;Hello team,&lt;/P&gt;&lt;P&gt;I am trying to use&amp;nbsp;&lt;SPAN&gt;&lt;FONT face="courier new,courier"&gt;ExecutionLog2&lt;/FONT&gt;&amp;nbsp;from the ReportServer database, so it can help to track dashboard usage. However, I have failed to understand what the&amp;nbsp;&lt;FONT face="courier new,courier"&gt;ExecutionId &lt;FONT face="arial,helvetica,sans-serif"&gt;is tracking because when I was trying to open a dashboard just once I see like 5 records of my &lt;FONT face="courier new,courier"&gt;username&lt;/FONT&gt; repeated with a unique&amp;nbsp;&lt;FONT face="courier new,courier"&gt;ExecutionId &lt;FONT face="arial,helvetica,sans-serif"&gt;which is becoming difficult to know how many users accessed the report/dashboard.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&lt;FONT face="courier new,courier"&gt;&lt;FONT face="arial,helvetica,sans-serif"&gt;&lt;FONT face="courier new,courier"&gt;&lt;FONT face="arial,helvetica,sans-serif"&gt;If I try to use a distinct &lt;FONT face="courier new,courier"&gt;username&lt;/FONT&gt; it will not be realistic because one username is used by multiple users. Can anyone suggest the idea here?&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 06 Aug 2024 11:40:17 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Report-Server/Tracking-Dashboard-Usage-in-Report-Server/m-p/4084040#M36307</guid>
      <dc:creator>tmhalila</dc:creator>
      <dc:date>2024-08-06T11:40:17Z</dc:date>
    </item>
    <item>
      <title>Re: Tracking Dashboard Usage in Report Server</title>
      <link>https://community.fabric.microsoft.com/t5/Report-Server/Tracking-Dashboard-Usage-in-Report-Server/m-p/4085474#M36319</link>
      <description>&lt;P&gt;I have a github project that has reports that query the system tables for usage for the report server.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://github.com/SQL-Server-projects/Reporting-Services-examples" target="_blank" rel="noopener nofollow noreferrer"&gt;https://github.com/SQL-Server-projects/Reporting-Services-examples&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here's the SQL for the execution log report&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;DECLARE @StartDate	    DATETIME = '06-AUG-2024';
DECLARE @EndDate	    DATETIME = '07-AUG-2024';
DECLARE @all_value	    NVARCHAR(100) = '&amp;lt;ALL&amp;gt;';
DECLARE @ReportFolder   NVARCHAR(100) = @all_value;
DECLARE @ReportName	    NVARCHAR(100) = @all_value;
DECLARE @LogStatus	    NVARCHAR(100) = @all_value;
DECLARE @StatusGroup    NVARCHAR(100) = @all_value;
DECLARE &lt;a href="https://community.fabric.microsoft.com/t5/user/viewprofilepage/user-id/13890"&gt;@username&lt;/a&gt;	    NVARCHAR(100) = @all_value;
DECLARE @GroupByColumn  NVARCHAR(100) = NULL;
DECLARE @Anonymous_value    NVARCHAR(100) = @all_value;
DECLARE @ReportServerUrl NVARCHAR(100) = 'https://your_server.your_domain.com/';
DECLARE @ExcludeAdmins BIT = NULL;
DECLARE @ExecutionExcludedUsers NVARCHAR(100) = '';

WITH
report_status
AS
(
    SELECT tbl.* FROM (VALUES
    ( 'rrRenderingError', 'Failure')
    , ( 'rsHttpRuntimeClientDisconnectionError', 'Failure')
    , ( 'rsInternalError', 'Failure')
    , ( 'rsInvalidDataSourceCredentialSetting', 'Failure')
    , ( 'rsProcessingAborted', 'Failure')
    , ( 'rsProcessingError', 'Failure')
    , ( 'rsRenderingExtensionNotFound', 'Failure')
    , ( 'rsReportServerDatabaseError', 'Failure')
    , ( 'rsSuccess', 'Success')
    ) tbl ([StatusName], [StatusGroup])
)
,
report_users
AS
(
    SELECT 
		 [UserID]
	    , [UserName]
	    , [SimpleUserName] = LOWER(RIGHT([UserName], (LEN([UserName]) - CHARINDEX('\', [UserName]))))
    FROM 
	   [dbo].[Users] WITH(NOLOCK)
)
,
report_catalog
AS
(
    SELECT
	   rpt.[ItemID]
	   , rpt.[CreatedById]
	   , rpt.[ModifiedById]
	   , rpt.[Type]
	   , rpt.[Name]
	   , [ReportName] = rpt.[Name]
	   , rpt.[Description]
	   , rpt.[Parameter]
	   , [CreationDate] = CONVERT(DATETIME, CONVERT(VARCHAR(11), rpt.[CreationDate], 13))
	   , [ModifiedDate] = CONVERT(DATETIME, CONVERT(VARCHAR(11), rpt.[ModifiedDate], 13))
	   , [ReportFolder] = SUBSTRING(rpt.[Path], 2, Len(rpt.[Path])-Len(rpt.[Name])-2)
	   , rpt.[Path]
	   , [URL_ReportFolder] = @ReportServerUrl + 'Reports/Pages/Report.aspx?ItemPath=%2f'  + SUBSTRING(rpt.[Path], 2, Len(rpt.[Path])-Len(rpt.[Name])-2)  + '&amp;amp;ViewMode=List'
	   , [URL_Report] = @ReportServerUrl + 'Reports/Pages/Report.aspx?ItemPath=%2f'  + SUBSTRING(rpt.[Path], 2, Len(rpt.[Path])-Len(rpt.[Name])-2)  + '%2f' + rpt.[Name]
	   , [ReportDefinition] = CONVERT(VARCHAR(MAX), CONVERT(VARBINARY(MAX), rpt.[Content]))
    FROM
	   [dbo].[Catalog] AS rpt WITH (NOLOCK)
    WHERE
	   1=1
	   AND rpt.[Type] IN(2, 4, 13)
)
,
execution_log
AS
(
    SELECT
	   el.[ReportID]
	   , el.[Status]
	   , el.[UserName]
	   , el.[TimeDataRetrieval]
	   , el.[TimeProcessing]
	   , el.[TimeRendering]
	   , el.[TimeStart]
	   , el.[RowCount]
	   , el.[ByteCount]
	   , el.[Format]
	   , [Parameters] = CONVERT(VARCHAR(2000), el.[Parameters])
    FROM
	   [dbo].[ExecutionLog] AS el WITH (NOLOCK)
	   LEFT JOIN report_users AS usr ON el.[UserName] = usr.[UserName]
    WHERE
	   1=1
	   AND (@StartDate IS NULL OR el.[TimeStart] &amp;gt;= @StartDate)
	   AND (@EndDate IS NULL OR el.[TimeStart] &amp;lt;= @EndDate)
	   AND (@ExcludeAdmins = 0 OR usr.[SimpleUserName] NOT IN(@ExecutionExcludedUsers))
    UNION
    SELECT
	   [ReportID] = rpt.[ItemID]
	   , el.[Status]
	   , el.[UserName]
	   , [TimeDataRetrieval] = 0
	   , [TimeProcessing] = 0
	   , [TimeRendering] = NULL
	   , el.[TimeStart]
	   , el.[RowCount]
	   , el.[ByteCount]
	   , el.[Format]
	   , [Parameters] = CONVERT(VARCHAR(2000), el.[Parameters])
    FROM
	   [dbo].[ExecutionLog2] AS el WITH (NOLOCK)
	   LEFT JOIN report_catalog AS rpt ON rpt.[Path] = el.[ReportPath]
	   LEFT JOIN report_users AS usr ON el.[UserName] = usr.[UserName]
    WHERE
	   1=1
	   AND el.[ByteCount] != 0 
	   AND el.[Format] IN('PBIX', 'DataModel')
	   AND (@ExcludeAdmins = 0 OR usr.[SimpleUserName] NOT IN(@ExecutionExcludedUsers))
)
SELECT
    GroupBy1 =
	   CASE
		  WHEN @GroupByColumn = 'Report Name' THEN rpt.[ReportName]
		  WHEN @GroupByColumn = 'Report Folder' THEN rpt.[ReportFolder]
		  WHEN @GroupByColumn = 'Employee' THEN ISNULL(usr.[SimpleUserName], @Anonymous_value)
		  ELSE '&amp;lt;N/A&amp;gt;'
	   END
    , rpt.[Path]
    , rpt.[ReportFolder]
    , rpt.[Name]
    , rpt.[URL_ReportFolder]
    , rpt.[URL_Report]
    , [URL_Report_Filtered] = rpt.URL_Report + '&amp;amp;rs:Command=Render&amp;amp;' + CONVERT(VARCHAR(2000), el.[Parameters])
    , el.[Status]
    , el.[TimeStart]
    , el.[RowCount]
    , el.[ByteCount]
    , el.[Format]
    , el.[UserName]
    , [EmployeeName] = usr.[SimpleUserName]
    , [Parameters] =
	   REPLACE(
	   REPLACE(
	   REPLACE(
	   REPLACE(
	   REPLACE(CONVERT(NVARCHAR(MAX), el.[Parameters])
	   , '%20', ' ')
	   , '%2F', '-')
	   , '%3C', '&amp;lt;')
	   , '%3E', '&amp;gt;')
	   , '%3A', ':')
    , [TotalSeconds] = DATEADD(ms, (el.[TimeDataRetrieval] + el.[TimeProcessing] + el.[TimeRendering]), 0)
    , [TimeDataRetrieval] = DATEADD(ms, el.[TimeDataRetrieval], 0)
    , [TimeProcessing] = DATEADD(ms, el.[TimeProcessing], 0)
    , [TimeRendering] = DATEADD(ms, el.[TimeRendering], 0)
    , [TotalSecondsNbr] = (el.[TimeDataRetrieval] + el.[TimeProcessing] + el.[TimeRendering])
    , [TimeDataRetrievalNbr] = el.[TimeDataRetrieval]
    , [TimeProcessingNbr] = el.[TimeProcessing]
    , [TimeRenderingNbr] = el.[TimeRendering]
    , [OrderbyDate] = CAST([TimeStart] AS DATETIME)
    , rpt.[Type]
FROM
    report_catalog AS rpt
    LEFT JOIN execution_log AS el ON el.[ReportID] = rpt.[ItemID]
    LEFT JOIN report_status AS rs ON el.[Status] = rs.[StatusName]
    LEFT JOIN report_users AS usr ON el.[UserName] = usr.[UserName]
WHERE
    1=1
    AND (@StartDate IS NULL OR el.[TimeStart] &amp;gt;= @StartDate)
    AND (@EndDate IS NULL OR el.[TimeStart] &amp;lt;= @EndDate)
    AND (@all_value IN (@ReportFolder) OR rpt.[ReportFolder] IN(@ReportFolder))
    AND (@all_value IN(@ReportName) OR rpt.[ReportName] IN(@ReportName))
    AND (@all_value IN(@LogStatus) OR el.[Status] IN(@LogStatus))
    AND (@all_value IN(@StatusGroup) OR rs.[StatusGroup] IN(@StatusGroup))
    AND (@all_value IN(@UserName) OR usr.[SimpleUserName] IN(@UserName));&lt;/LI-CODE&gt;</description>
      <pubDate>Wed, 07 Aug 2024 01:45:32 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Report-Server/Tracking-Dashboard-Usage-in-Report-Server/m-p/4085474#M36319</guid>
      <dc:creator>aduguid</dc:creator>
      <dc:date>2024-08-07T01:45:32Z</dc:date>
    </item>
    <item>
      <title>Re: Tracking Dashboard Usage in Report Server</title>
      <link>https://community.fabric.microsoft.com/t5/Report-Server/Tracking-Dashboard-Usage-in-Report-Server/m-p/4085585#M36321</link>
      <description>&lt;P&gt;Hi,&amp;nbsp;&lt;a href="https://community.fabric.microsoft.com/t5/user/viewprofilepage/user-id/367096"&gt;@tmhalila&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The ExecutionId in the ReportServer database table tracks each instance of the report execution. ExecutionLog2 means that even if you open the dashboard once, multiple entries may be logged due to different stages of report processing, such as data retrieval, rendering, and export.&lt;/P&gt;
&lt;P&gt;Rather than relying solely on ExecutionId, you can track sessions by using ExecutionId in conjunction with other fields, such as TimeStart and TimeEnd, to group related executions.&lt;BR /&gt;You can also implement custom logging in your reports to capture user-specific details and actions. This helps distinguish between different users who share the same username.&lt;BR /&gt;If possible, record the IP address of the user accessing the report. This helps distinguish between different users who share the same username. Consider using a view, which may provide more detailed or user-friendly fields that can help with better tracking and analysis. You can check the following link:&lt;/P&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/sql/reporting-services/report-server/report-server-executionlog-and-the-executionlog3-view?view=sql-server-ver16" target="_blank"&gt;Report server ExecutionLog and the ExecutionLog3 view - SQL Server Reporting Services (SSRS) | Microsoft Learn&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;A title="https://community.powerbi.com/t5/community-blog/how-to-get-your-question-answered-quickly/ba-p/38490" href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fcommunity.powerbi.com%2Ft5%2FCommunity-Blog%2FHow-to-Get-Your-Question-Answered-Quickly%2Fba-p%2F38490&amp;amp;data=05%7C02%7Cv-yohua%40microsoft.com%7Ce1106bfabecb4734a5cc08dc2305bc51%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C638423754744679080%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C0%7C%7C%7C&amp;amp;sdata=24%2BceC5sFd3n3%2FhFDYILWFcNjCwVClBD%2BPBsSLVfJGk%3D&amp;amp;reserved=0" target="_blank" rel="noopener nofollow noreferrer"&gt;How to Get Your Question Answered Quickly&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Best Regards&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Yongkang Hua&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;If this post&amp;nbsp;&lt;STRONG&gt;helps&lt;/STRONG&gt;, then please consider&amp;nbsp;&lt;STRONG&gt;Accept it as the solution&lt;/STRONG&gt;&amp;nbsp;to help the other members find it more quickly.&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 07 Aug 2024 02:51:53 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Report-Server/Tracking-Dashboard-Usage-in-Report-Server/m-p/4085585#M36321</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2024-08-07T02:51:53Z</dc:date>
    </item>
    <item>
      <title>Re: Tracking Dashboard Usage in Report Server</title>
      <link>https://community.fabric.microsoft.com/t5/Report-Server/Tracking-Dashboard-Usage-in-Report-Server/m-p/4091600#M36363</link>
      <description>&lt;P&gt;Thank you for the suggestions. I tried using the ExecutionId with other fields, like TimeStart and TimeEnd, for group-related executions, but it didn't work because some stage executions are delayed for the same user.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The second and third options require admin privileges, so we can add IP tracking or implement custom logging. I will check with the team to see if these are possible. In the meantime, I will go with another alternative as I have observed execution stages repeat 5 times for each login account so I decided to count all and divide by 5.&lt;/P&gt;</description>
      <pubDate>Fri, 09 Aug 2024 11:30:35 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Report-Server/Tracking-Dashboard-Usage-in-Report-Server/m-p/4091600#M36363</guid>
      <dc:creator>tmhalila</dc:creator>
      <dc:date>2024-08-09T11:30:35Z</dc:date>
    </item>
    <item>
      <title>Re: Tracking Dashboard Usage in Report Server</title>
      <link>https://community.fabric.microsoft.com/t5/Report-Server/Tracking-Dashboard-Usage-in-Report-Server/m-p/4091614#M36364</link>
      <description>&lt;P&gt;I am working with a team that is proficient in SQL, so we can explore this option. We have also reviewed your GitHub; thank you for the good work. I'll come back here if this is successful.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;In the meantime, I will go with another alternative. I have observed that the execution stages repeat 5 times for each login account, so I have decided to count them all and divide by 5.&lt;/P&gt;</description>
      <pubDate>Fri, 09 Aug 2024 11:36:46 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Report-Server/Tracking-Dashboard-Usage-in-Report-Server/m-p/4091614#M36364</guid>
      <dc:creator>tmhalila</dc:creator>
      <dc:date>2024-08-09T11:36:46Z</dc:date>
    </item>
    <item>
      <title>Re: Tracking Dashboard Usage in Report Server</title>
      <link>https://community.fabric.microsoft.com/t5/Report-Server/Tracking-Dashboard-Usage-in-Report-Server/m-p/4118220#M36531</link>
      <description>&lt;P&gt;Hi,&amp;nbsp;&lt;a href="https://community.fabric.microsoft.com/t5/user/viewprofilepage/user-id/367096"&gt;@tmhalila&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Have you solved your problem? If so, can you share your solution here and mark the correct answer as a standard answer to help other members find it faster? Thank you very much for your kind cooperation!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Best Regards&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Yongkang Hua&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 26 Aug 2024 08:36:44 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Report-Server/Tracking-Dashboard-Usage-in-Report-Server/m-p/4118220#M36531</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2024-08-26T08:36:44Z</dc:date>
    </item>
    <item>
      <title>Re: Tracking Dashboard Usage in Report Server</title>
      <link>https://community.fabric.microsoft.com/t5/Report-Server/Tracking-Dashboard-Usage-in-Report-Server/m-p/4121048#M36549</link>
      <description>&lt;P&gt;Thanks for the reminder.&lt;/P&gt;&lt;P&gt;The solution I applied was quite simple. In my case, I have 10 dashboards on the Power BI Server. I noticed that when any dashboard report is accessed, it returns 5 execution records if the dashboard is fully opened. So, I counted all the records and divided them by 5.&lt;/P&gt;</description>
      <pubDate>Tue, 27 Aug 2024 15:27:48 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Report-Server/Tracking-Dashboard-Usage-in-Report-Server/m-p/4121048#M36549</guid>
      <dc:creator>tmhalila</dc:creator>
      <dc:date>2024-08-27T15:27:48Z</dc:date>
    </item>
  </channel>
</rss>

