داشبورد و مقاله مانیتورینگ داشبورد های Power BI

مدیریت ، نگهداری ونظارت داشبورد های پابلیش شده Power BI یکی از اساسی ترین وظایف طراحان داشبورد، مدیران  و کارشناسان IT برای  داشبورد می باشد .

چرا؟ وقتی تعداد داشبوردها و دسترسی کاربران به آن هم زیاد می شود مانیتورینگ داشبورد اهمیت بسزایی دارد.

  • آیا کاربران داشبورد را مشاهده می کنند؟
  • در چه ساعاتی و رزوهایی داشبورد بیشتر یا کمتر دیده می شود ؟
  • بیشترین و کمترین بازدید برای کدام داشبوردها ثبت شده است؟
  • آیا همه کاربرانی که به داشبورد تخصیص داده شده اند داشبورد را مشاهده می کنند؟
  • کدام داشبورد مورد استقبال کاربران نیست؟
  • وضعیت دسترسی کاربران به داشبوردها چگونه است؟
  • آیا زمانبندی بروزرسانی داشبوردها با موفقیت انجام می شود؟ اگر به خطا خورده است دلیل خطا چیست؟
  • آخرین زمانی که یک داشبورد مشاهده شده است چه زمانی بوده است؟
  • وضعیت ایجاد شدن داشبوردها از منظر تاریخ ایجاد ، تاریخ ویرایش ، کاربر ایجاد کننده ، کاربر ویرایش کننده چگونه بوده است؟
  • وضعیت گزارش های Paginated Report چگونه است ؟
  • و تعداد زیادی سوال که ما می خواهیم در این مقاله به آن برسیم!

ما در این مقاله می خواهیم  آموزش رسیدن به جواب های این سوالات  را بدهیم همچنین یک داشبورد کامل هم برای آن طراحی کرده ایم که فقط با تنظیم دیتابیس ریپورت سرور و آدرس بانک اطلاعاتی تمام داشبورد با دیتا های شما کامل می شود.

طبیعتا در Power BI برای  طراحی داشبورد می توانیم از Power BI Desktop استفاده کنیم و برای پابلیش کردن آن در سطح اینترنت یا اینترانت از Power BI report Server استفاده کنیم . (روی صحبت این مقاله به محیط کلود ماکروسافت برای طراحی داشبورد و پابلیش آن نیست).

به طور پیش فرض وقتی Power BI Report Server را نصب می کنیم دو دیتابیس هم ایجاد می گردد به نامهای

  • ReportServer
  • ReportServerTempDB

البته که نام این دیتابیس را می توان تغییر داد اما به طور پیش فرض وقتی SQL Server را باز کنید این دو دیتابیس را مشاهده خواهید کرد.

تمام اطلاعات هر داشبورد اعم از اینکه چه داشبورد هایی پابلیش شده اند (کاربر ایجاد کننده ، تاریخ ، زمان ، حجم و..) همچنین چه دسترسی هایی به داشبورد داده شده است ، نحوه به روز رسانی داشبورد چگونه است ، نحوه بازدید چگونه است و… همه و همه در دیتابیس ReportServer وجود دارد. در تصویر زیر شما نمایی از جداول این دیتابیس را مشاهده می کنید و همچنین داخل دیتابیس ReportServerTempDB داده های داشبورد به صورت cache  شده برای بالا بردن کارایی به جهت استفاده همزمان کاربران را در خود جای داده است.

از طریق داده های این دیتابیس می توان به خروجی های زیر رسید  در تصویر زیر می توانیم مشاهده کنیم ،  چه تعداد کاربران داشبورد را مشاهده می کنند ، بیشترین و کمترین  داشبورد که مشاهده شده است کدام داشبورد می باشد  ، وضعیت نمایش در ساعات ، روزها ، ماهها ، فصل ها و سالها چگونه بوده است ، مشاهده داشبورد بر اساس پارامتر های های داینامیک همچون مشاهده داده های امروز ، یک روز گذشته ، هفت روز گذشته، ۳۰ روز و ۹۰ روز گذشته و … .، همچنین تعداد دفعاتی که جاب های به روز رسانی داشبورد به خطا خورده اند و اجرا نشده اند یا با موفقیت کارشان را به پایان رسانیده اند.

 

همچنین در این تصویر نمایی دیگر از داشبورد را مشاهده می کنید ، در این تصویر وضعیت دسترسی کاربران را به داشبورد مشاهده می کنید همچنین نمایش داشبورد ها برای هر کاربر چند درصد از کل داشبورد ها می باشد .

همچنین می توان جزییات هر داشبورد را مشاهده کرد به طور مثال چه زمانی ایجاد شده است ، آخرین وضعیت به روز رسانی چگونه بوده است، که در این تصویر می بینیم که پکیج به خطا خورده است ، چه کاربرایی داشبوردها را مشاهده می کنند

ومقدار زیادی از اطلاعات که می توان با یک نگاه به خروجی رسید به طور مثال آیا داشبورد به صورت کاربردی پیاده سازی شده است و…

حالا بریم برسی کنیم اطلاعات داخل دیتابیس ReportServer.

  • جدول [Catalog] اطلاعاتی همچون داشبورد ها ، مسیر ذخیره سازی ، تاریخ ایجاد ، تاریخ تغییر و همچنین اگر داشبورد در داخل فولدری باشد  و …

  • کویری زیر اطلاعات جالبی را از جدول کاتالوگ ایجاد می کند .
SELECT
  ItemID -- Unique Identifier
, [Path] --Path including object name
, [Name] --Just the objectd name
, ParentID --The ItemID of the folder in which it resides
, CASE [Type] --Type, an int which can be converted using this case statement.
    WHEN 1 THEN 'Folder'
    WHEN 2 THEN 'Report'
    WHEN 3 THEN 'File'
    WHEN 4 THEN 'Linked Report'
    WHEN 5 THEN 'Data Source'
    WHEN 6 THEN 'Report Model - Rare'
    WHEN 7 THEN 'Report Part - Rare'
    WHEN 8 THEN 'Shared Data Set - Rare'
    WHEN 9 THEN 'Image'
       WHEN 11 THEN 'KPI'
     WHEN 13 THEN 'Power BI report'
    ELSE CAST(Type as varchar(100))
  END AS TypeName
--, content
, LinkSourceID --If a linked report then this is the ItemID of the actual report.
, [Description] --This is the same information as can be found in the GUI
, [Hidden] --Is the object hidden on the screen or not
, CreatedBy.UserName CreatedBy
, CreationDate
, ModifiedBy.UserName ModifiedBy
, ctg.ModifiedDate
FROM 
  dbo.[Catalog] CTG
    INNER JOIN 
  dbo.Users CreatedBy ON CTG.CreatedByID = CreatedBy.UserID
    INNER JOIN
  dbo.Users ModifiedBy ON CTG.ModifiedByID = ModifiedBy.UserID;

  • جدول [Users] لیست کاربران و گروههای که داشبورد را مشاهده می کنند.

  • جدول [Roles] در این جدول اطلاعات نقش ها داخل آن نگهداری می شود .

  • جدول [Subscriptions] و [SubscriptionHistory] در این جدول اطلاعات تعریف زمانبندی برای هر داشبورد و همچنین در صورتی که زمانبندی به روز رسانی با موفقیت انجام شود یا به خطا بخورد در جدول SubscriptionGistory ذخیره می شود.

  • جدول [Favorites] در صورتی که داشبوردی به عنوان داشبورد مورد علاقه قرار بگیرد دیتای آن در این جدول قرار می گیرد
  • جدول [ExecutionLogStorage] اطلاعات بازدید کاربران از داشبورد ها در این جدول ذخیره می شود.البته در لیست ویو های این دیتابیس می توان از ویو  [dbo].[ExecutionLog3] استفاده کرد

  • جدول [PolicyUserRole] رابطه بین کابران و نقش ها در این جدول مشخص می شود

 

 

  • کویری زیر اطلاعات جالبی را از کاربر ، سطح دسترسی و داشبورد هایی که دسترسی دارد را بر می گرداند .
select top 100 percent u.UserName, r.RoleName, r.Description, c.Path, c.Name 
from dbo.PolicyUserRole pur
   inner join dbo.Users u on pur.UserID = u.UserID
   inner join dbo.Roles r on pur.RoleID = r.RoleID
   inner join dbo.Catalog c on pur.PolicyID = c.PolicyID
order by u.UserName

  • جدول [Schedule] اطلاعات زمانبندی داشبورد ها در این جدول قرار می گیرد

 

به طور مثال این قطعه کد اطلاعات مناسبی را راجع به زمانبندی در اختیار شما قرار می دهد

SELECT
    e.name AS ReportName
    ,e.path AS ReportPath
    ,d.description as SubscriptionName
    , a.SubscriptionID
    , d.laststatus
    , d.eventtype
    , d.LastRunTime
    ,j.date_created AS ScheduleCreatedDate
    ,j.date_modified AS ScheduleModifiedDate
    ,CASE j.[enabled]
        WHEN 1 THEN 'Yes'
        WHEN 0 THEN 'No'
    END AS Job_Enabled
    ,CASE sch.[enabled]
        WHEN 1 THEN 'Yes'
        WHEN 0 THEN 'No'
    END AS Schedule_enabled,

    CASE sch.freq_type
        WHEN 1 THEN 'Once'
        WHEN 4 THEN 'Daily'
        WHEN 8 THEN 'Weekly'
        WHEN 16 THEN 'Monthly'
        WHEN 32 THEN 'Monthly relative'
        WHEN 64 THEN 'When SQLServer Agent starts'
    END AS Frequency, 
    CASE sch.active_start_date
        WHEN 0 THEN null
        ELSE
        substring(convert(varchar(15),sch.active_start_date),1,4) + '-' + 
        substring(convert(varchar(15),sch.active_start_date),5,2) + '-' + 
        substring(convert(varchar(15),sch.active_start_date),7,2)
    END AS ScheduleStartDate,
    CASE len(sch.active_start_time)
        WHEN 3 THEN cast('00:0' 
                + Left(right(sch.active_start_time,3),1)  
                +':' + right(sch.active_start_time,2) as char (8))
        WHEN 4 THEN cast('00:' 
                + Left(right(sch.active_start_time,4),2)  
                +':' + right(sch.active_start_time,2) as char (8))
        WHEN 5 THEN cast('0' 
                + Left(right(sch.active_start_time,5),1) 
                +':' + Left(right(sch.active_start_time,4),2)  
                +':' + right(sch.active_start_time,2) as char (8))
        WHEN 6 THEN cast(Left(right(sch.active_start_time,6),2) 
                +':' + Left(right(sch.active_start_time,4),2)  
                +':' + right(sch.active_start_time,2) as char (8))
    END AS ScheduleStartTime

    
    ,CASE jsch.next_run_date
        WHEN 0 THEN null
        ELSE
        substring(convert(varchar(15),jsch.next_run_date),1,4) + '-' + 
        substring(convert(varchar(15),jsch.next_run_date),5,2) + '-' + 
        substring(convert(varchar(15),jsch.next_run_date),7,2)
    END AS nextRunDate,
    CASE len(jsch.next_run_time)
        WHEN 3 THEN cast('00:0' 
                + Left(right(jsch.next_run_time,3),1)  
                +':' + right(jsch.next_run_time,2) as char (8))
        WHEN 4 THEN cast('00:' 
                + Left(right(jsch.next_run_time,4),2)  
                +':' + right(jsch.next_run_time,2) as char (8))
        WHEN 5 THEN cast('0' 
                + Left(right(jsch.next_run_time,5),1) 
                +':' + Left(right(jsch.next_run_time,4),2)  
                +':' + right(jsch.next_run_time,2) as char (8))
        WHEN 6 THEN cast(Left(right(jsch.next_run_time,6),2) 
                +':' + Left(right(jsch.next_run_time,4),2)  
                +':' + right(jsch.next_run_time,2) as char (8))
    END AS NextRunTime
FROM dbo.ReportSchedule a 
        LEFT OUTER JOIN dbo.ReportSchedule c
            ON a.ScheduleID = c.ScheduleID
        LEFT OUTER JOIN dbo.Subscriptions d
            ON c.SubscriptionID = d.SubscriptionID
        LEFT OUTER JOIN dbo.[Catalog] e
            ON d.report_oid = e.itemid
        LEFT OUTER JOIN msdb.dbo.sysjobs j
            ON CAST(a.ScheduleID AS VARCHAR(100)) = j.name
        LEFT OUTER JOIN msdb.dbo.sysjobschedules jsch
            ON j.job_id = jsch.job_id
        LEFT OUTER JOIN msdb.dbo.sysschedules sch
            ON sch.schedule_id = jsch.schedule_id

در تصویر زیر ارتباط بین جداول را مشاهده می کنید

 

 

در صورتی که تمایل به تهیه این داشبورد دارید می توانید از لینک زیر استفاده کنید .

 

 

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *