ویرگول
ورودثبت نام
رحمان
رحمان
رحمان
رحمان
خواندن ۵ دقیقه·۱ ماه پیش

محدودیت دسترسی به page ها در Power BI

احتمالا با مفهوم RLS یا Row Level Security در power bi آشنایی دارید. با توجه به این که یک داشبورد میتونه شامل دسترسی های متفاوتی باشه احتمالا براتون پیش اومده که از این قابلیت استفاده کنید تا محدودیت دسترسی برای کاربران در استفاده از داده ها رو اعمال کنید. اما اگر بخواهیم این محدودیت رو براساس نه نوع داده ها و نه ردیف داده ها بلکه صفحات ها داشبورد ها اعمال کنیم نیازمند این خواهیم بود که خودمون یک سیستم راهبری (Navigation) ایجاد کنیم. در این مقاله به بررسی روشی برای ایجاد محدودیت گروه کاربران به صفحات داشبوردها در power bi یعنی page ها می پردازیم. هر چند که این قابلیت هنوز به صورت مستقیم توسط مایکروسافت در power bi قرار داده نشده ولی میشه با استفاده از ابزارهای متفاوتی این محدودیت و سطح دسترسی رو در power bi پیاده سازی کرد.

قدم اول ایجاد یک جدول شامل ستون های تصویر زیر است. این جدول که شامل نام page های شما به همراه دسترسی گروه های کاربران به هر کدام از صفحات است. جدول ما با نام “Page Level Security” ساخته شد!

در مثال ما، گزارش از 5 صفحه تشکیل شده که مدیران (Managers) به تمامی صفحات دسترسی خواهند داشت و کارشناسان (Experts) تنها به 3 صفحه Home و Sales و Returns دسترسی دارند. حتما توجه داشته باشید نام page ها در جدول کاملا مشابه نام صفحات در داشبورد شما باشند.

به ازای هر صفحه یک Button ایجاد کنید. برای این کار از بخش Buttons نوع Blank رو انتخاب کنید. تنظیمات و ظاهر مورد نظر رو ایجاد کنید و چهار بار Button رو کپی کنید یا اگه از قبل هر 5 تا رو ایجاد کردید از format painter برای اعمال تغییرات ظاهری استفاده کنید.

که نتیجه نهایی برای مثال ما به صورت زیر شد البته بعدا رنگش رو با فرمول تغییر میدیم پس زیاد وقت نذارید 😁

حالا وقشته که کد رو بنویسیم!

کد زیر رو به صورت یک measure ایجاد کنید البته لازمه به ازای هر button یک measure تعریف کنید.

Button_Destination_1 = MAXX ( FILTER ( ADDCOLUMNS ( 'Page Level Security', "Rank", RANKX ('Page Level Security',[Order],,ASC) ), [Rank] = 1 ), 'Page Level Security'[Page] )

تشریح فرمول:  در فرمول بالا به جدول Page Level Security ستونی مجازی به نام Rank اضافه می شود که براساس ستون order یک رتبه عددی به هر کدام از سطر ها (صفحات) تخصیص داده میشه. پس از این که این ستون مجازی ساخته شد، فیلتری توسط تابع Filter انجام میشه که در صورتی که ستون Rank برابر مقدار 1 بود نام صفحه از ستون Page برگردونده میشه. برای درک بهتر خروجی فرمول، خروجی هر measure به صورت زیر خواهد بود.

فرمول button آخر هم به صورت زیر خواهد بود. دقت کنید Rank با توجه به شماره measure تغییر میکنه.

Button_Destination_5 = MAXX ( FILTER ( ADDCOLUMNS ( 'Page Level Security', "Rank", RANKX ('Page Level Security',[Order],,ASC) ), [Rank] = 5 ), 'Page Level Security'[Page] )

بر روی button اول کلیک کنید و در قسمت Button Text اولین measure رو انتخاب کنید.

با تنظیم همه نتیجه به صورت تصویر زیر خواهد بود :

اما تا این جا فقط نام هر button ایجاد شده و برای Navigation و ایجاد لینک لازمه measure ها رو به قسمت Action هم اضافه کنید. حتما یادتون باشه نوع Page Navigation انتخاب شده باشه.

برای ایجاد دسترسی هم تنها کافیه که از قسمت Manage Roles ستون دسترسی ها رو برابر یک بذاریم به طور مثال برای Experts خواهیم داشت :

حالا نوبت تست عملکرد موارد بالاست. به این منظور از قسمت View As نقش (Role) ایجادی رو انتخاب می کنیم.

و خواهیم دید فیلتر به درستی داره عمل میکنه :

و اما بخش buttons ها به چه صورت خواهد بود؟

آنچه مدیران (Managers) خواهند دید:

آنچه کارشناسان (Experts) خواهند دید:

فقط فراموش نکنید که باید page های غیر page اصلی یا ابتدایی رو مخفی (hide) کنید.

برای استفاده بر روی report server یا report service هم کافیه که هر role رو به گروه خودش یا کاربران مورد نظر اختصاص بدید. برای استفاده از حالت Dynamic RLS هم که دادن دسترسی در مدلسازی انجام میشه در ادامه به بررسی روش راحت تری برای Navigation خواهم پرداخت.

روش داینامیک تر و ساده تر

جداول و ارتباط ها

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

جدول کاربران (Users):

جدولی که شامل اطلاعات کاربری کاربران است و در مثال ما شامل اطلاعات زیر می باشد. فقط دقت داشته باشید که UserName ها دارای DomainName می باشند که شما با نام دامین سازمان خود یا نام Machine خود جایگزین می کنید.

جدول صفحات (Pages):

جدولی شامل نام صفحات و همچنین ستونی که نشان دهنده جایگاه هر صفحه در slicer خواهد بود.

این جدول شامل اطلاعات کاربران و نام صفحاتی که کاربران به آن ها دسترسی دارند می باشد. رابطه این جدول با جدول User ی; رابطه “چند به یک” می باشد که در حالت Single خواهد بود.

ولی در رابطه با جدول Pages نیاز است که یک رابطه دو طرفه باشد (Both) که در صورت فیلتر شدن، صفحات مجاز برای مشاهده در slicer نشان داده شود. و همچنین برای اعمال فیلتر حتما تیک گزینه apply security filter in both directions رو بزنید.

ایجاد slicer

  • یک slicer ایجاد کنید و از جدول pages ستونن نام صفحات آن را پر کنید. تنها نکته ای که باید در نظر داشته باشید اینه که فیلتر رو بر روی single select قرار دهید…

  • به منظور رفتن به صفحات دیگه از یک button استفاده می کنیم. در قسمت Action حالت page navigation رو با measure زیر تکمیل می کنیم.

PageNavigation = SELECTEDVALUE('Pages'[PageName])

بسیل

ایجاد دسترسی و تست

این بخش هم که مثله همیشه ایجاد یک دسترسی در قسمت manage roles هستش و به صورت زیر تکمیل میشه:

دو نکته آخر این که همه صفحات به غیر از صفحه home رو در حالت hidden قرار دهید و حتما مثله مقاله قبل دسترسی رو در RLS بخش Report Server یا Service ایجاد کنید.

در صورت تست دسترسی برای کاربریه خودم که 3 صفحه مجاز به دیدن داره خواهیم داشت:

البته در نسخه های جدید تر می تونید از قابلیت Navigation خود Power BI استفاده کنید که لازم به slicer یا shape نیست.













power biداشبورد مدیریتی
۰
۰
رحمان
رحمان
شاید از این پست‌ها خوشتان بیاید