زبان DAX (Data Analysis Expressions) یکی از اجزای کلیدی در توسعه گزارش‌ها و داشبوردهای حرفه‌ای در Power BI است. این زبان، که شباهت‌هایی به توابع اکسل دارد، برای محاسبات پیچیده و تحلیل‌های داده‌ای در مدل‌های ستونی طراحی شده است.Context در DAX

یکی از مفاهیم بنیادی و در عین حال چالش‌برانگیز در DAX، مفهوم “کانتکست” یا “Context” است. بسیاری از کاربران حتی با تجربه، در درک و کاربرد صحیح این مفهوم دچار سردرگمی می‌شوند. این مقاله به بررسی دقیق مفاهیم Context، انواع آن، و تأثیر آن در رفتار توابع DAX می‌پردازد.

بخش اول:

تعریف Context در DAX در زبان DAX، Context به محیط یا شرایطی گفته می‌شود که در آن یک عبارت DAX ارزیابی می‌شود. این محیط تعیین می‌کند که چه داده‌هایی برای ارزیابی در دسترس هستند. دو نوع اصلی Context در DAX وجود دارد:

  1. Row Context (کانتکست سطری)
  2. Filter Context (کانتکست فیلتر)

هر یک از این کانتکست‌ها نقش متفاوتی دارند و درک صحیح آن‌ها برای نوشتن فرمول‌های دقیق ضروری است.

بخش دوم:

Row Context Row Context زمانی ایجاد می‌شود که یک عبارت DAX درون یک ردیف از جدول ارزیابی می‌شود. این نوع کانتکست معمولاً در محاسباتی مانند ستون‌های محاسبه‌شده (Calculated Columns) دیده می‌شود. برای مثال:

= [Price] * [Quantity]

در اینجا، فرمول در زمینه‌ی هر ردیف جداگانه از جدول ارزیابی می‌شود. این بدان معناست که DAX می‌داند باید مقادیر Price و Quantity مربوط به همان ردیف را دریافت کند.Context در DAX

اما وقتی از توابعی مانند SUMX استفاده می‌کنیم، Row Context به طور ضمنی به هر ردیف جدول منتقل می‌شود:

= SUMX(Sales, Sales[Price] * Sales[Quantity])

در این مثال، SUMX به هر ردیف از جدول Sales مراجعه می‌کند و حاصل‌ضرب Price و Quantity را محاسبه کرده و در نهایت جمع می‌زند.

بخش سوم:

Filter Context Filter Context زمانی ایجاد می‌شود که فیلترهایی از طریق ویژوال‌ها، اسلایسرها یا توابع مانند CALCULATE بر روی داده‌ها اعمال می‌شوند. این نوع Context تعیین می‌کند که کدام داده‌ها برای محاسبه در دسترس باشند.

برای مثال:

= CALCULATE(SUM(Sales[Revenue]), Sales[Region] = "West")

در اینجا، CALCULATE یک کانتکست فیلتر ایجاد می‌کند که فقط شامل ردیف‌هایی است که Region آن‌ها برابر با “West” است.

ترکیب CALCULATE با توابع فیلتر مانند FILTER، به کاربران اجازه می‌دهد کنترل کاملی بر محیط محاسبه داشته باشند:

= CALCULATE(SUM(Sales[Revenue]), FILTER(Sales, Sales[Year] = 2023))

Filter Context همچنین از طریق تعامل کاربر با اجزای گرافیکی Power BI مانند اسلایسرها (Slicers)، نمودارها، و فیلترهای صفحه (Page Filters) نیز ایجاد می‌شود. به عنوان مثال، اگر کاربر فقط یک ماه خاص را در یک ویژوال انتخاب کند، Filter Context به طور خودکار فقط داده‌های مربوط به همان ماه را شامل می‌شود.Context در DAX

بخش چهارم:

تداخل یا هم‌زیستی کانتکست‌ها در برخی موارد، Row Context و Filter Context به صورت همزمان وجود دارند. اما باید توجه داشت که Row Context به طور پیش‌فرض به Filter Context تبدیل نمی‌شود. برای این تبدیل، از تابع CALCULATE استفاده می‌شود.Context در DAX

برای مثال، استفاده از تابع EARLIER یا RELATEDTABLE به ما اجازه می‌دهد تا از Row Context بهره ببریم، اما اگر بخواهیم داده‌ها را فیلتر کنیم، باید آن را با Filter Context ترکیب کنیم.

در واقع، یکی از مفاهیم مهم دیگر در DAX، Context Transition (انتقال کانتکست) است. این فرآیند هنگامی رخ می‌دهد که Row Context به Filter Context تبدیل می‌شود، که اغلب در استفاده از CALCULATE مشاهده می‌شود. برای مثال:

= CALCULATE([Total Sales])

اگر این فرمول درون ردیف خاصی از جدول استفاده شود، CALCULATE باعث انتقال Row Context به Filter Context شده و نتیجه را بر اساس همان ردیف محاسبه می‌کند.

عدم درک درست از این تفاوت باعث ایجاد خطاهای محاسباتی و نتایج غیرمنتظره در مدل‌های Power BI می‌شود.

درک مفاهیم کانتکست Context در DAX در Power BI
درک مفاهیم کانتکست Context در DAX در Power BI

بخش پنجم:

مثال عملی از اهمیت Context فرض کنیم می‌خواهیم مجموع فروش را برای هر مشتری نمایش دهیم، ولی فقط برای محصولاتی که بیش از ۱۰۰۰ واحد فروش داشته‌اند. اگر از Context به درستی استفاده نشود، ممکن است محاسبه برای کل مشتریان انجام شود نه برای هر مشتری به صورت جداگانه.

استفاده صحیح:

= CALCULATE(SUM(Sales[Revenue]), Sales[Quantity] > 1000)

در این حالت، Filter Context اعمال‌شده فقط ردیف‌هایی را شامل می‌شود که بیش از ۱۰۰۰ واحد فروش داشته‌اند.

همچنین می‌توان از توابع شرطی مانند IF یا SWITCH نیز در ترکیب با Context استفاده کرد تا تصمیم‌گیری‌های محاسباتی را هوشمندانه‌تر کرد. برای مثال:

= IF(MAX(Sales[Quantity]) > 1000, [Total Revenue], BLANK())

در اینجا نیز درک صحیح از Context بسیار اهمیت دارد، زیرا نتیجه تابع MAX به فیلترهای جاری بستگی دارد.

بخش ششم:

ابزارهای کمکی برای درک Context برای درک بهتر Context در DAX، استفاده از ابزارهایی مانند DAX Studio، Performance Analyzer و گزینه Evaluate در Power BI بسیار مفید است. این ابزارها به توسعه‌دهندگان کمک می‌کنند تا Context را بررسی کرده و دلیل خروجی‌های غیرمنتظره را شناسایی کنند.

DAX Studio به‌ویژه برای تحلیل عملکرد کوئری‌ها و بررسی دقیق مقادیر intermediate (میانی) در محاسبات DAX استفاده می‌شود. با این ابزار می‌توان بررسی کرد که چه فیلترهایی در زمان اجرا فعال هستند.Context در DAX

همچنین استفاده از ابزار Performance Analyzer در محیط Power BI Desktop می‌تواند کمک کند تا بدانیم چه بخش‌هایی از مدل یا کد DAX کند عمل می‌کنند یا دارای تکرارهای غیرضروری هستند.

نتیجه‌گیری:

Context در زبان DAX یکی از کلیدی‌ترین مفاهیم برای موفقیت در توسعه مدل‌های داده‌ای و گزارش‌های پیشرفته در Power BI است. درک صحیح از Row Context و Filter Context، توانایی استفاده از توابع ترکیبی مانند CALCULATE، شناخت فرآیند Context Transition، و شناخت نحوه‌ی تأثیر این کانتکست‌ها بر خروجی نهایی، به توسعه‌دهندگان کمک می‌کند تا مدل‌هایی دقیق، قابل اعتماد و سریع ایجاد کنند.

بی‌توجهی به این مفهوم می‌تواند منجر به تحلیل‌های نادرست و تصمیم‌گیری‌های اشتباه شود. بنابراین، یادگیری عمیق Context باید در اولویت هر کاربر حرفه‌ای Power BI قرار گیرد. همچنین توصیه می‌شود که کاربران با تمرین عملی، استفاده از ابزارهای تحلیل و مطالعه مستندات رسمی Microsoft DAX، به تسلط کامل در این زمینه برسند.Context در DAX

بدون دیدگاه

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