DAX-SUM-CALCULATE-Power BI-تجزیه و تحلیل داده‌ها-فیلتر کردن داده‌ها-محاسبات پیشرفته-Power Pivot-Analysis Services-FILTER-لاندا-شرکت مجریdax-لاندا مجری dax-آموزش Power BI، توابع پرکاربرد DAX-آموزش DAX

زبان DAX (Data Analysis Expressions) قلب محاسبات در Power BI ،Power Pivot و SSAS Tabular است. اگرچه در نگاه اول شبیه فرمول‌های اکسل به نظر می‌رسد، اما قدرت و پیچیدگی DAX به‌مراتب بیشتر است. در پروژه‌های واقعی، وقتی نیاز به تحلیل‌های چند بعدی، KPIهای پیچیده و گزارش‌های پویا داریم، DAX پیشرفته وارد میدان می‌شود.
در این مقاله، به‌صورت جامع و کاربردی، مفاهیم پیشرفته DAX را بررسی می‌کنیم؛ از Contextها (Row ,Filter ,Evaluation) گرفته تا توابع پیچیده مثل CALCULATE، FILTER، RANKX، EARLIER، TREATAS و Time Intelligence. هدف این است که شما بعد از مطالعه این متن، بتوانید مدل‌های تحلیلی قدرتمند و بهینه در Power BI بسازید.

۱. مرور سریع بر مفاهیم پایه DAX

قبل از ورود به مباحث پیشرفته، باید پایه‌ها را خوب بلد باشیم:

  • Calculated Columns: محاسباتی که در سطح ردیف انجام می‌شوند و در مدل داده ذخیره می‌گردند.
  • Measures: محاسباتی که در لحظه و بر اساس فیلترها اجرا می‌شوند (بهینه‌تر از ستون‌های محاسباتی).
  • Tables: جداول محاسباتی که می‌توانند بر اساس توابعی مثل FILTER یا ADDCOLUMNS ساخته شوند.

۲. مفهوم Context در DAX

یکی از ستون‌های اصلی درک DAX ،Context است. بدون فهم آن، نوشتن فرمول‌های پیشرفته عملاً غیرممکن است.

۲.۱ Row Context

وقتی یک محاسبه روی هر ردیف اعمال می‌شود. مثلاً در ستون محاسباتی:

Total Price = Sales[Quantity] * Sales[UnitPrice]

۲.۲ Filter Context

زمانی که گزارش یا Visual با فیلترها محدود می‌شود. مثلاً وقتی کاربر سال ۲۰۲۴ را انتخاب می‌کند.

۲.۳ Evaluation Context

ترکیبی از Row و Filter Context. وقتی از توابعی مثل CALCULATE استفاده می‌کنیم، Context تغییر پیدا می‌کند.

۳. CALCULATE – قلب DAX پیشرفته

تابع CALCULATE مهم‌ترین و پرکاربردترین تابع در DAX است، چون می‌تواند Context فیلتر را تغییر دهد.

Sales 2024 =
CALCULATE(
    SUM(Sales[Amount]),
    Sales[Year] = 2024
)

این تابع جمع فروش فقط برای سال ۲۰۲۴ را محاسبه می‌کند، حتی اگر کاربر سال دیگری انتخاب کرده باشد.

نکته کلیدی: CALCULATE همیشه ابتدا فیلترها را اعمال می‌کند و سپس محاسبه را انجام می‌دهد.

۴. Time Intelligence Functions (توابع هوش زمانی)

یکی از جذاب‌ترین کاربردهای DAX در تحلیل‌های زمانی است.

  • SAMEPERIODLASTYEAR → مقایسه با سال گذشته
  • TOTALYTD → محاسبه سال‌به‌تاریخ (Year-to-Date)
  • DATESINPERIOD → انتخاب بازه‌های زمانی متحرک
Sales Last Year =
CALCULATE(
    SUM(Sales[Amount]),
    SAMEPERIODLASTYEAR('Date'[Date])
)

۵. توابع پیشرفته فیلترینگ

۵.۱ FILTER

برای ایجاد فیلترهای پیچیده روی داده‌ها:

High Value Customers =
CALCULATE(
    COUNTROWS(Customers),
    FILTER(Customers, Customers[Revenue] > 100000)
)

۵.۲ ALL و ALLEXCEPT

برای حذف یا کنترل فیلترها:

All Sales =
CALCULATE(
    SUM(Sales[Amount]),
    ALL(Sales)
)

۵.۳ TREATAS

انتقال فیلتر از یک جدول به جدول دیگر:

Sales by Custom Mapping =
CALCULATE(
    SUM(Sales[Amount]),
    TREATAS(VALUES(Mapping[CustomRegion]), Sales[Region])
)

۶. EARLIER و EARLIEST

این توابع زمانی به کار می‌روند که نیاز به رجوع به ردیف قبلی در Row Context داشته باشیم.

مثال: رتبه‌بندی بر اساس فروش هر مشتری:

Rank by Customer =
RANKX(
    FILTER(Sales, Sales[CustomerID] = EARLIER(Sales[CustomerID])),
    Sales[Amount]
)

۷. توابع رتبه‌بندی و مقایسه

RANKX

برای رتبه‌بندی مقادیر:

Customer Rank =
RANKX(ALL(Customers), SUM(Sales[Amount]), , DESC)

TOPN

برای انتخاب N رکورد برتر:

Top 5 Products =
TOPN(5, SUMMARIZE(Products, Products[Name], "Sales", SUM(Sales[Amount])), [Sales], DESC)

۸. Advanced Table Functions

  • SUMMARIZE → ساخت جداول گروه‌بندی‌شده
  • ADDCOLUMNS → افزودن ستون‌های محاسباتی به جدول
  • GENERATE → ایجاد ترکیب از دو جدول
Customer Product Sales =
SUMMARIZE(
    Sales,
    Customers[Name],
    Products[Name],
    "Total Sales", SUM(Sales[Amount])
)

۹. بهینه‌سازی DAX

وقتی مدل داده‌ها و گزارش‌ها سنگین می‌شوند، سرعت اجرا اهمیت زیادی پیدا می‌کند. نکات مهم:

  • استفاده از Measures به جای Calculated Columns
  • حذف فیلترهای غیرضروری با ALL یا REMOVEFILTERS
  • استفاده از Variables برای خوانایی و عملکرد بهتر
Profit Margin =
VAR TotalSales = SUM(Sales[Amount])
VAR TotalCost = SUM(Sales[Cost])
RETURN
DIVIDE(TotalSales - TotalCost, TotalSales)

۱۰. کاربردهای واقعی DAX پیشرفته

  • محاسبه KPIهای پیچیده (سود تجمعی، رشد نسبت به سال قبل، میانگین متحرک)
  • طراحی Dynamic Segmentation (دسته‌بندی مشتریان بر اساس رفتار خرید)
  • ساخت What-if Analysis (تحلیل سناریوها با پارامترهای پویا)
  • طراحی داشبوردهای مالی، منابع انسانی و عملیات با معیارهای چندسطحی
سوالات متداول (FAQ)

۱. آیا استفاده زیاد از Calculated Columns خوب است؟
خیر، چون مدل داده را سنگین می‌کند. بهتر است بیشتر از Measures استفاده شود.

۲. چه زمانی باید از TREATAS استفاده کنیم؟
وقتی می‌خواهیم ارتباط منطقی بین دو جدول بسازیم که رابطه فیزیکی ندارند.

۳. EARLIER هنوز در نسخه‌های جدید کاربرد دارد؟
بله، ولی در بسیاری از موارد می‌توان از VAR و CALCULATE استفاده کرد که ساده‌تر و بهینه‌ترند.

۴. برای افزایش سرعت DAX چه کنیم؟
مدل داده را ساده نگه دارید، ستون‌های اضافه را حذف کنید و از متغیرها (VAR) استفاده کنید.

۵. کدام تابع DAX پرکاربردترین است؟
بدون شک CALCULATE چون امکان تغییر Context و اجرای محاسبات پیچیده را می‌دهد.

منابع و مقالات

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

تماس و مشاوره با لاندا

شرکت توسعه فناوری اطلاعات لاندا با تخصص در Power BI، مدل‌سازی داده و طراحی داشبوردهای هوش تجاری، آماده است تا برای سازمان شما:

همین حالا با لاندا تماس  بگیرید تا داده‌های خام شما به بینش‌های واقعی و ارزشمند تبدیل شوند.

نظری داده نشده

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

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