محدودیت دسترسی به page ها در Power BI – قسمت اول
احتمالا با مفهوم RLS یا Row Level Security در power bi آشنایی دارید. با توجه به این که یک داشبورد میتونه شامل دسترسی های متفاوتی باشه احتمالا براتون پیش اومده که از این قابلیت استفاده کنید تا محدودیت دسترسی برای کاربران در استفاده از داده ها رو اعمال کنید. اما اگر بخواهیم این محدودیت رو براساس نه نوع داده ها و نه ردیف داده ها بلکه صفحات ها داشبورد ها اعمال کنیم نیازمند این خواهیم بود که خودمون یک سیستم راهبری (Navigation) ایجاد کنیم. در این مقاله به بررسی روشی برای ایجاد محدودیت گروه کاربران به صفحات داشبوردها در power bi یعنی page ها می پردازیم. هر چند که این قابلیت هنوز به صورت مستقیم توسط مایکروسافت در power bi قرار داده نشده ولی میشه با استفاده از ابزارهای متفاوتی این محدودیت و سطح دسترسی رو در power bi پیاده سازی کرد.
قدم اول ایجاد یک جدول شامل ستون های تصویر زیر است. این جدول که شامل نام page های شما به همراه دسترسی گروه های کاربران به هر کدام از صفحات است. جدول ما با نام “Page Level Security” ساخته شد!
در مثال ما، گزارش از ۵ صفحه تشکیل شده که مدیران (Managers) به تمامی صفحات دسترسی خواهند داشت و کارشناسان (Experts) تنها به ۳ صفحه Home و Sales و Returns دسترسی دارند. حتما توجه داشته باشید نام page ها در جدول کاملا مشابه نام صفحات در داشبورد شما باشند.
به ازای هر صفحه یک Button ایجاد کنید. برای این کار از بخش Buttons نوع Blank رو انتخاب کنید. تنظیمات و ظاهر مورد نظر رو ایجاد کنید و چهار بار Button رو کپی کنید یا اگه از قبل هر ۵ تا رو ایجاد کردید از 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 برابر مقدار ۱ بود نام صفحه از ستون 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 رو انتخاب کنید.
با اعمال همه measure ها نتیجه به صورت تصویر زیر خواهد بود :
اما تا این جا فقط نام هر button ایجاد شده و برای Navigation و ایجاد لینک لازمه measure ها رو به قسمت Action هم اضافه کنید. حتما یادتون باشه نوع Page Navigation انتخاب شده باشه.
ایجاد دسترسی ها
برای ایجاد دسترسی هم تنها کافیه که از قسمت Manage Roles ستون دسترسی ها رو برابر یک بذاریم به طور مثال برای Experts خواهیم داشت :
حالا نوبت تست عملکرد موارد بالاست. به این منظور از قسمت View As نقش (Role) ایجادی رو انتخاب می کنیم.
و خواهیم دید فیلتر به درستی داره عمل میکنه و تنها سه سطر مورد نظر که برابر یک هستند نمایش داده می شوند.
و اما بخش buttons ها به چه صورت خواهد بود؟
آنچه مدیران (Managers) خواهند دید:
آنچه کارشناسان (Experts) خواهند دید:
فقط فراموش نکنید که باید page های غیر page اصلی یا ابتدایی رو مخفی (hide) کنید.
استفاده برای Publish
برای استفاده بر روی report server یا report service هم کافیه که هر role رو به گروه خودش یا کاربران مورد نظر اختصاص بدید. برای استفاده از حالت Dynamic RLS هم که دادن دسترسی در مدلسازی انجام میشه در مقاله بعد به بررسی روش بهتری برای Navigation خواهم پرداخت. از دست ندیدش 😉
عالی
بسیار جالب و حرفه ای
دکمه ها به صورت دستی اضافه شدند نه داینامیک چطور با توجه به نقش انتصاب داده شده اون ها رو کم یا زیاد میشه کرد؟
پیشنهاد می کنم این لینک را هم مشاهده کنید
https://radacad.com/page-level-security-workaround-in-power-bi