نمایش جزئیات تراکنش در ماتریس Power BI با DAX
بهمن 29, 1404
ارسال شده توسط بنفشه رنجبر
12 بازدید
در گزارشهای Power BI اغلب نیاز داریم جزئیات مرتبط با یک تراکنش (مثل جزئیات فروش، مشتری، یا محصول) را نمایش دهیم. مشکل اینجاست که قرار دادن تکستون برای هر اطلاعات باعث میشود گزارش فضای زیادی اشغال کند و استفاده از اسکرول افقی ضروری شود. این مقاله نشان میدهد چگونه با استفاده از عبارتهای DAX میتوان چندین ستون مرتبط با یک تراکنش را در یک ستون واحد در ماتریس نمایش داد تا هم فضای گزارش حفظ شود و هم خوانایی بالا برود.
چرا نمایش چند ستون در ماتریس دشوار است؟
وقتی چندین ستون اطلاعاتی را مستقیماً در ماتریس میگذاریم:
سلسلهمراتب ردیفها پیچیده میشود
کاربران برای دیدن جزئیات عمق بیشتری باید “چند کلیک” کنند
عملکرد پرسوجو ممکن است کاهش یابد
بنابراین روش افزودن ستونهای جداگانه راهحل ایدهآل نیست.
ایدهٔ اصلی: نمایش جزئیات با یک Measure اختصاصی در DAX
راهحل پیشنهادی استفاده از Measure در DAX است که اطلاعات چند ستون را میگیرد و آنها را به یک رشتهٔ واحد در ستون Details تبدیل میکند. این رشته تنها زمانی نمایش داده میشود که سطح ماتریس در ردهٔ دقیق (مثلاً شناسهٔ سفارش) قرار داشته باشد، نه در سطوح بالاتر.
نحوهٔ ساخت measure – نسخههای مختلف
نسخهٔ اولیه – V0
در شروع، یک measure ساده میسازند که مقدار یک یا دو ستون (مثلاً کد ارز و نرخ تبدیل) را به هم متصل میکند:
Details v0.D =
IF(
ISINSCOPE(Sales[Order Number]),
CONCATENATEX(
FILTER(
{
VALUES(Sales[Currency Code]),
VALUES(Sales[Exchange Rate])
},
[Value] <> ""
),
[Value],
", "
)
)
نکتهها
تابع ISINSCOPE بررسی میکند که ردیف فعلی ماتریس در سطح سفارش است تا داده در ردیفهای دیگر ظاهر نشود.
CONCATENATEX مقدارهای غیرخالی را با یک جداساز مشخص (مثلاً , ) ترکیب میکند.
نسخهٔ کاملتر – V2
برای نمایش جزئیات مشتری مرتبط با هر سفارش، از روش بهینهتر استفاده میشود که:
با CALCULATETABLE و CROSSFILTER فیلتر سفارش را به جدول مشتری منتقل میکند
سپس با CONCATENATEX همهی فیلدهای مشتری را به صورت یک رشته نمایش میدهد
مثال DAX این نسخه:
Details V2.A =
IF(
ISINSCOPE(Sales[Order Number]),
CONCATENATEX(
CALCULATETABLE(
Customer,
CROSSFILTER(Sales[CustomerKey], Customer[CustomerKey], BOTH)
),
CONCATENATEX(
FILTER(
{
Customer[Country Code],
Customer[State Code],
Customer[City],
Customer[Name],
Customer[Age]
},
[Value] <> ""
),
[Value],
", "
),
" - "
)
)
مزایای این نسخه:
سرعت بهتر نسبت به نسخهٔ ۱
خلاصهنویسی سادهتر
نگهداری آسانتر کد برای افزودن ستونهای بیشتر به آینده گزارش
استفاده از توابع سفارشی برای سادگی بیشتر
برای کاهش تکرار کد، میتوان یک تابع محلی (UDF) تعریف کرد که:
لیست فیلدهای خالی را حذف کند
رشتهٔ خروجی را بسازد
مثال تابع:
Local.ConcatenateNonEmpty =
(fieldsListTable : TABLE VAL, fieldColumn : ANYREF EXPR) =>
CONCATENATEX(
FILTER(fieldsListTable, fieldColumn <> ""),
fieldColumn,
", "
)
سپس میتوان این تابع را در measure اصلی فراخوانی کرد و اندازهٔ کد را به شدت کاهش داد.
نتیجهگیری و توصیهها
بسیاری از روشها برای نمایش جزئیات چندین ستون در ماتریس وجود دارد، اما همهٔ آنها به یک اندازه کارا نیستند.
کد باید هم عملکرد خوب داشته باشد و هم خوانایی و قابل نگهداری بودن را حفظ کند.
بهترین رویکرد برای اکثر سناریوها روش نسخهٔ V2 است، زیرا پیچیدگی منطقی پایین و عملکرد مناسب دارد.
استفاده از توابع محلی میتواند کد را خواناتر و قابل استفادهٔ مجدد کند.
دیدگاهتان را بنویسید