نمایش مژر یا قلم محاسباتی (Measure) برای کاربران خاص در پاوربی آی Power Bi
مژر (Measure) چیست ؟
یک قلم محاسباتی در دکس Data Analysis Expressions (DAX) که یک زبان برنامه نویسی است که در سرتاسر Microsoft Power BI برای ایجاد ستون ها ، اندازه گیری ها و جداول سفارشی استفاده می شود. این مجموعه ای از توابع ، عملگرها و ثابت ها است که می تواند در یک فرمول یا عبارت برای محاسبه و برگرداندن یک یا چند مقدار استفاده شود. شما می توانید از DAX برای حل تعدادی از محاسبات و مشکلات تجزیه و تحلیل داده ها استفاده کنید ، که به شما کمک می کند اطلاعات جدیدی را از داده های موجود در مدل خود ایجاد کنید.
استفاده از نقش های کاربر (User Rule) عنصری اساسی برای محدود کردن یا جلوگیری از دسترسی به داده ها است. مقاله زیر امکان نمایش اقدامات فقط برای کاربران خاص را توصیف می کند.
اقدامات لازم :
چالش و مشکل اصلی
ایجاد نقش کاربر
فرمول DAX
کنترل نقش کاربر
نمایش مژر فقط برای کاربران خاص
تعریف اقدامات
نتیجه نهایی
خاتمه
چالش و مشکل اصلی
مدیریت می تواند همه چیز را ببیند.
مدیر فروش می تواند فروش همه کارمندان را ببیند ، اما همه اقدامات را نمی تواند مشاهده کند. به طور خاص ، اقدامات “بهای تمام شده محصول” ، “سود محصول” و “سود فروش” نباید دیده شود.
کارمندان ممکن است فقط فروش خود را ببینند و ممکن است به اقدامات ذکر شده دسترسی نداشته باشند.
راه حل باید به گونه ای طراحی شود که امکان دور زدن محدودیت ها برای کاربر نهایی وجود نداشته باشد.
عنوان “امنیت سطح پویا با دسترسی سطح مدیر در Power BI” مبنای این راه حل است.
ایجاد نقش کاربر
ابتدا ، جدول جدیدی به نام “RLS” در Power Query ایجاد میکنیم و نقش های مختلفی را به سه نفر اختصاص میدهیم. جدول جدید هیچ ارتباطی با جداول دیگر ندارد.
جدول RLS – امنیت سطح ردیف برای هر کاربر
این نقش چیزی را تعیین می کند که هر کاربر مجاز است ببیند. برای انجام این کار ، ما به نقش کاربر جدیدی نیاز داریم که اکنون در حال ایجاد آن هستیم. بر روی گزینه “مدیریت نقش” در فهرست “مدلسازی” کلیک کنید.
پنج مرحله را طی میکنیم مطابق شکل :
ابتدا بر روی “create” کلیک کنید.
نقش جدید را مطابق با سلیقه خود نامگذاری کنید. با کلیک روی سه نقطه سمت راست و تغییر نام ، می توانید نام را تغییر دهید.
جدول مورد نظر را برای فیلتر کردن انتخاب کنید.
از آنجا که می خواهیم بسته به کاربر وارد شده داده ها را فیلتر کنیم ، این جدول “DimEmployee” است.
بعد ، فرمول لازم DAX را که در ادامه توضیح داده ام وارد کنید.
برای ذخیره نقش کاربر جدید ، روی “ذخیره” کلیک کنید.
فرمول DAX
برای دستیابی به فیلتر پویا از طریق کاربر ، فرمول DAX در قالب [User] = Username()
این اطمینان می دهد که هر کاربر فقط می تواند داده های خود را ببیند.
در مثال ما ، باید چندین مرحله را بررسی کنیم:
چه کسی در حال حاضر وارد سیستم شده است؟
آیا کاربر در جدول “RLS” وارد شده است؟ در غیر این صورت ، او هیچ داده ای را نمی بیند.
اگر او وارد شود ، چه نقشی به او اختصاص داده می شود؟ آیا او در نقش “فروش” است و ممکن است فقط داده هایش را ببیند یا اینکه به یکی از دو نقش دیگر تعلق دارد و ممکن است همه داده ها را ببیند؟
ابتدا بررسی می کنیم چه کسی وارد سیستم شده است و آیا کاربر در جدول “DimEmployee” ثبت شده است یا خیر و آیا باید به داده ها دسترسی داشته باشد. این کار از طریق [EmailAddress]=USERNAME() انجام می شود.
ما آدرس ایمیل را انتخاب می کنیم زیرا کاربر از طریق آدرس ایمیل خود وارد Power BI می شود.
بعد ، ما باید جدول “RLS” را فیلتر کنیم. برای این کار از Filter(RLS, RLS[User]=USERNAME()) استفاده می کنیم.
توجه: برخلاف علامت گذاری معمول DAX در نسخه های Power BI آلمان ، نقطه ویرگول باید با کاما در تعریف نقش کاربر جایگزین شود. نمی دانم چرا ، دقیقاً همینطور است.
پس از اینکه کاربر این بررسی را نیز پشت سر گذاشت ، انتساب به نقش هنوز وجود ندارد. برای این کار ما از maxX (Filter(RLS, RLS[User]=USERNAME()) , [Role])
استفاده می کنیم
فرمول maxX در جدول “RLS” تکرار می شود و همراه با فیلتر قبلی ، نقش کاربر وارد شده را برمی گرداند. ما نتایج را برای دو گزینه “Board” و “GroupLeader” بررسی می کنیم.
اگر یکی از این دو شرط اعمال شود ، کاربر به همه داده ها دسترسی دارد. در غیر این صورت ، او فقط می تواند به داده های خود دسترسی پیدا کند. اگر در جدول کاربر وارد نشده باشید ، نمی توانید به آن دسترسی پیدا کنید.
اما چگونه می توانیم هنگام بررسی نام کاربری کاربر ، تمام داده ها را به اشتراک بگذاریم؟ خیلی ساده ، ما به فرمولی نیاز داریم که درست باشد. در ساده ترین شکل این فرمول ۱ = ۱ است ، نتیجه این محاسبه همیشه درست است.
فرمول DAX را بنویسید
وقتی همه چیز را کنار هم قرار می دهیم ، فرمول زیر را با کنترل شرایط بدست می آوریم:
if( maxx( Filter(RLS, RLS[User]=USERNAME() ) ,[Role]) = "Board" || maxx( Filter(RLS, RLS[User]=USERNAME() ) ,[Role]) = "GroupLeader", ۱ = ۱, [EmailAddress]=USERNAME() )
کنترل نقش کاربر
برای بررسی اینکه آیا فرمول DAX نیز کار می کند یا نه ، من نقش “linda3@adventure-works.com” را فعال می کنم.
درست در کنار “Manage Roles” ، “View as Roles” را پیدا خواهید کرد. پس از فعال سازی ، عبارت باز می شود که در آن شما باید وارد کاربر شوید و روی نقش کلیک کنید. نتیجه به شرح زیر است:
من مژر “کاربر” ایجاد کرده ام تا ببینم کاربر تغییر کرده است یا خیر. فرمول مژر“User”: User = USERNAME()
در زیر می توانید جدول “RLS” با نام کاربری و نقش و در پایین داده های کاربر انتخاب شده Linda را مشاهده کنید.
و دوباره ، در کنار یکدیگر برای تأکید بر تفاوت:
نمایش مژر فقط برای کاربران خاص
این امر ما را به آخرین الزام می رساند که مدیران فروش نباید هر مژر را ببینند ، اما اعضای مدیریت باید این کار را انجام دهند.
من همچنین در دو مرحله با کنترل کاربر به این مهم دست یافتم. ابتدا ستون سوم را به “RLS” اضافه کردم. این مشخص می کند که آیا کاربر ممکن است همه اقدامات (۱) را ببیند یا نه (۰).
در مرحله دوم ، من فرمول جدید DAX را در زیر “Manage Roles” برای جدول “RLS” ایجاد کردم:
if( maxx( Filter(RLS, RLS[User]=USERNAME() ) ,[Role]) = "Board" || maxx( Filter(RLS, RLS[User]=USERNAME() ) ,[Role]) = "GroupLeader", ۱ = ۱, RLS[User]=USERNAME() )
تعریف اقدامات
اول ، مژرهای ساده:
Sales Amount = SUM(FactResellerSales[ExtendedAmount])
Sales Units = SUM(FactResellerSales[OrderQuantity])
مژر “کمک” نمایش سه مژر باقی مانده را کنترل می کند:
RLS_Measure = LOOKUPVALUE( RLS[ShowMeasures]; RLS[User];USERNAME() )
اگر کاربر user (RLS[User]) با کاربر وارد شده [Username] مطابقت داشته باشد ، Lookupvalue از ستون “ShowMeasures” جدول “RLS” مقدار را برمی گرداند. مقدار برگشتی مطابق تعریف جدول ۱ یا ۰ است.
و با این مقدار می توان با ضرب نتیجه RLS_Measure در نتیجه مژر دیگر و در صورت لزوم ، بازگرداندن خالی صفر ، مژر باقی مانده را محاسبه کرد.
Product Cost = if( [RLS_Measure]=0 ; BLANK(); sum(FactResellerSales[TotalProductCost]) * [RLS_Measure] )
Profit pct = If ( [RLS_Measure]=0; BLANK(); DIVIDE([Sales Profit]*100;[Sales Amount]) * [RLS_Measure] )
Sales Profit = If ( [RLS_Measure]=0; BLANK(); SUM(FactResellerSales[SalesProfit]) * [RLS_Measure] )
نتیجه نهایی
و نتیجه تمام مراحل قبلی ، به شرح زیر است که مجاز است همه چیز را ببیند:
در اینجا به عنوان نمونه از نمودار میله ای استفاده می شود. من نتایج مربوط به هر سه نقش را کنار هم قرار داده ام
خاتمه
با استفاده از نقش های کاربر ، دانش جامع DAX و برخی تخیل ها ، سناریوهای پیچیده تری نیز قابل حل هستند.
دیدگاه خود را ثبت کنید
تمایل دارید در گفتگوها شرکت کنید؟در گفتگو ها شرکت کنید.