• مسابقه Power BI
    • اولین مسابقه Power BI
    • دومین مسابقه Power BI
  • جدیدترین مطالب آموزشی
  • تحلیل داده نرم افزاری (فنّی)
  • تحلیل داده غیرفنّی
  • دوره‌های آفلاین
  • سبد خرید
  • تماس با ما
  • حساب کاربری

سبد خرید شما خالی است.

گروه تحلیلگری
  • مسابقات Power BI
    • اولین مسابقه Power BI ایران
    • دومین مسابقه Power BI ایران
  • مطالب آموزشی
    • تمام مطالب آموزشی
    • Excel
    • Power BI
    • Power Query
    • DAX
  • مسیرهای یادگیری
    • مسیر یادگیری تحلیل داده (فنی)
    • مسیر یادگیری غیرفنّی تحلیلگر داده
  • دوره‌های آموزشی
    • مهارت‌های غیرفنّی تحلیلگر داده
    • اکسل
    • Power BI
    • Power Query
    • SQL
    • تحلیل داده با پایتون
    • سبد خرید
  • ارتباط با ما
    • تماس
    • درخواست تغییرات
    • اینستاگرام
0
حساب کاربری

مقالات

مفهوم Context و انواع آن در زبان DAX

در این مطلب به معرفی مفهوم Context و انواع آن در زبان DAX پرداخته شده است. به طور کلی در زبان DAX مفهومی به نام Evaluation Context وجود دارد که خود شامل 2 مفهوم می شود: Row Context و Filter Context

این دو مفهوم از مهم ترین پایه های زبان DAX به شمار می روند. به طور خلاصه باید بدانید Filter Context وظیفه فیلتر کردن داده ها و Row Context وظیفه پیمایش (Iterating) جداول را به عهده دارد، که به طور کلی دو وظیفه و مفهوم جدا از هم به شمار می روند.

Evaluation Context

برای معرفی مفهوم Context و انواع آن در زبان DAX ابتدا به بررسی Evaluation Context می پردازیم.

منظور از Evaluation Context چیست؟ اگر چه هیچ ترجمه ای نمی تواند بیانگر مفهوم این عبارت باشد، اما به طور کلی منظور از این عبارت زمینه، شرایط یا محیطی است که یک عبارت DAX در آن مورد ارزیابی قرار می گیرد.

اگر مخاطب این مطلب هستید احتمالا فردی تازه کار در زمینه کار با Power BI و زبان DAX نیستید. حتما می دانید که هر عبارت DAX با توجه به شرایط و زمینه ها (همان Context) مختلف نتایج مختلفی به همراه خواهد داشت.

شما بدون خواندن این مطلب نیز به طور خودکار از این مفاهیم استفاده می کنید، اما ممکن است بعد از خواندن این مطلب بتوانید با علم و آگاهی بیشتری کد های خود را ایجاد کنید.

Filter Context

در ادامه معرفی مفهوم Context و انواع آن در زبان DAX به بررسی مفهوم Filter Context می پردازیم. بیایید از همین جا قرار بگذاریم هیچ ترجمه ای برای این مفاهیم استفاده نکنیم. هر فرمول DAX در یک Context مورد ارزیابی قرار می گیرد. در واقع Context محیط و شرایطی است که کد های DAX در آن مورد ارزیابی قرار گرفته و اجرا می شوند.

به مژر زیر دقت کنید.

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

این کد میزان فروش را محاسبه می کند. حال این مژر را در یک ویژوال Card مورد استفاده قرار می دهیم.

آموزش زبان DAX

عدد نمایش داده شده 33.69 میلیون دلار است. این عدد معادل کل فروش است. چرا مژر نوشته شده عدد کل را نمایش می دهد؟ چرا که هیچ گونه Context برای آن در نظر گرفته نشده است. هیچ شرایط و محیط خاصی برای این مژر در نظر گرفته نشده است.

حال بیاید یک Context یا شرایط دیگری برای این مژر در نظر بگیریم. می خواهیم در یک جدول میزان فروش هر برند را نمایش دهیم.

مفهوم Context و انواع آن در زبان DAX

همان طور که مشاهده می کنید بدون هیچ تغییری در کد DAX نتایج تغییر می کند. حال اعداد نمایانگر فروش هر برند هستند. در واقع بدون هیچ دستکاری در فرمول اعداد و ارقام به طور کلی تغییر می کنند، چرا که Context یا همان شرایط حاکم بر محاسبات تغییر کرده است.

همان طور که مشاهده می کنید در ردیف Total کماکان عدد 33.69 میلیون دلار نمایش داده می شود، عددی که در Card هم پیش از این دیده شد.

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

Context حاکم بر هر سلول با سلول دیگر متفاوت است و منجر به نتایج مختلف می شود. در واقع این نوع از  Context با نام Filter Context شناخته می شود و وظیفه آن Filter کردن جداول است.

آموزش DAX

همان طور که در تصویر مشاهده می کنید به طور مثال Filter Context برای ردیف اول A.Datum است، برای برای ردیف دوم Adventure Works، برای ردیف با رنگ بنفش Litware است. در واقع در هر ردیف جدول فروش تنها برای مقادیر همان ردیف فیلتر شده و محاسبه را انجام می دهد.

توجه داشته باشید برای ردیف آخر عدد نمایش شده جمع اعداد موجود در ویژوال نیست بلکه محاسبه تمامی مقادیر بدون وجود Filter Context است. پس گمان نکنید که ابتدا ردیف های مربوط به هر برند محاسبه شده و در نهایت جمع می شوند! بلکه کلیه مقادیر موجود در جدول بدون هیچ گونه فیلتری جمع می شوند.

حال بیایید Filter Context را تغییر دهیم. برای این منظور یک ماتریس ایجاد می کنیم و برند را در سطر و سال را در ستون قرار می دهیم.

مفهوم Context و انواع آن در زبان DAX

همان طور که مشاهده می کنید اعداد به کلی تغییر می کنند. در این ماتریس Filter Context برای سلول مشخص شده با شماره 1 چیست؟ آفرین! برند A.Datum و سال 2007

Filter Context برای سلول مشخص شده با عدد شماره 2، برند Proseware و سال 2008 است. برای عدد شماره 3، Filter Context تنها شامل برند Fabrikam است و هیج فیلتری روی سال وجود ندارد.

برای عدد شماره 4، Filter Context سال 2009 و هیچ فیلتری روی برند وجود ندارد. برای عدد شماره 5، هیچ گونه  Filter Context وجود ندارد و عدد محاسبه شده برابر با جمع کل است.

به مثال زیر توجه کنید.

مفهوم Context و انواع آن در زبان DAX

به گزارش های ایجاد شده دقت کنید. Filter Contextبرای عدد شماره 1، برند Fabrikam، سال 2008 و کشور United States است. در واقع مجموعه این فیلترها، Filter Context را تشکیل می دهد.

برای عدد شماره 2، Filter Context، کشور United States و سال 2008 است.

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

پس Filter Context به شرایط و محیط فراهم شده توسط ویژوال ها، اسلایسر ها و … اطلاق می شود که نحوه محاسبه فرمول ها را دستخوش تغییر قرار می دهد.

Row Context

در ادامه معرفی مفهوم Context و انواع آن در زبان DAX به مفهوم Row Context می رسیم. یکی از مفاهیم دیگری که در زیر مجموعه Evaluation Context قرار می گیرد، مفهوم Row Context است که به طور کلی با Filter Context متفاوت است.

چنان چه پیشتر گفته شد، Filter Context وظیفه محدود کردن جداول را به عهده دارد، در حالی که Row Context پیمایش جداول را به عهده می گیرد.

فرض کنید می خواهیم ستون محاسباتی در جدول فروش ایجاد کنیم که برای هر ردیف، تعداد را در قیمت ضرب کند. به طریق زیر این فرمول را می نویسیم.

=Sales[Quantity] * Sales[Unit Price]

مفهوم Context و انواع آن در زبان DAX

همان طور که مشاهده می کنید برای هر ردیف، تعداد در قیمت ضرب شده است و عدد متفاوتی برای هر ردیف درج شده است. این نتایج توسط Row Context ایجاد شده است.

Row Context در واقع جدول فروش را ردیف به ردیف پیمایش می کند و برای هر ردیف قیمت را در تعداد ضرب می کند. در واقع برای این محاسبه هیچ فیلتری انجام نمی شود بلکه این پیمایش جدول (iterate) است که نتیجه نهایی و متفاوت را ایجاد می کند.

در واقع وقتی یک ستون محاسباتی (Calculated Column) در یک جدول ایجاد می کنیم، به طور خودکار یک Row Context روی این جدول ایجاد می شود و محاسبه مورد نظر را ردیف به ردیف، انجام داده و نتیجه را در ستون جدید برای هر ردیف درج می کند.

آیا همیشه مانند ستون محاسباتی، Row Context به طور خودکار ایجاد می شود؟ آیا ستون محاسباتی تنها موردی است که در آن Row Context ایجاد می شود؟

جواب هر دو سوال منفی است. در مژر نیز می توان Row Context ایجاد کرد. گاهی اوقات باید خودمان Row Context را ایجاد کنیم.

سعی کنید مژری به صورت روبرو ایجاد کنید.

=
Sales[Quantity] * Sales[Unit Price]

این مژر با خطا مواجه خواهد شد. در واقع این مژر نمی تواند تشخیص دهد منظور شما محاسبه این فرمول برای کدام ردیف است؟ تا زمانی که شما Row Context ایجاد نکنید، محاسبه ای صورت نخواهد پذیرفت. شما باید به صورت دستی و با انتخاب توابع صحیح این Row Context را ایجاد کنید، این در حالیست که همین فرمول برای ستون محاسباتی به درستی عمل می کند چرا که در ایجاد ستون محاسباتی Row Context به طور خودکار ایجاد می شود.

برخی از توابع مانند SUMX جز توابع iterator به شمار می آیند. این توابع جدولی را به عنوان ورودی می گیرند و عملیاتی را روی ردیف به ردیف جدول انجام می دهند. در واقع این توابع این توانایی را دارند که در جدول شما یک Row Context ایجاد کنند.

به مثال زیر توجه کنید.

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

در این مثال جدول Sales به عنوان ورودی به تابع SUMX معرفی می شود و ردیف به ردیف عملیات ضرب تعداد در قیمت برای این جدول انجام شده و در نهایت عملیات جمع روی این مقادیر صورت می پذیرد. در واقع با انتخاب تابع SUMX، به صورت دستی یک Row Context بر روی جدول Sales ایجاد می کنیم.

جمع بندی

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

به خاطر بسپارید که مفهوم Filter Context به طور کلی از Row Context جداست. Filter Context عملیات فیلتر کردن و محدود کردن جداول را به عهده دارد در حالی که Row Context عملیات پیمایش جداول را به عهده دارد.

همچنین می توانید از طریق ویدئوری زیر به مشاهده محتوای ویدئویی این مطلب بپردازید.

در حال بارگذاری...

درباره حسین وثوقی

دانش آموخته مهندسی صنایع و مدیریت فناوری اطلاعات دانشگاه تهران، علاقه مند به تحلیل و ارائه راه حل برای مسائل و بهینه سازی راه حل ها هستم ...

نوشته های بیشتر از حسین وثوقی
در تلگرام
کانال ما را دنبال کنید!
در اینستاگرام
ما را دنبال کنید!
مطالب زیر را حتما بخوانید
  • کاربرد پارامتر در پاوربی آی
    کاربرد پارامتر و تحلیل حساسیت در پاور بی آی

    3.74k بازدید

  • استفاده از متغیر و تابع EARLIER در زبان DAX

    2.51k بازدید

  • پانزده تابع DAX که باید حتما یاد بگیرید

    3.58k بازدید

  • تابع IF و SWITCH در زبان DAX

    2.24k بازدید

  • رنگ بندی شرطی با زبان DAX
    رنگ بندی شرطی با زبان DAX

    1.57k بازدید

  • آموزش DAX در Power Bi قسمت سوم

    1.88k بازدید

عضویت
به دوستتان خبر دهید.
guest
تعداد ماههای سال به عدد
guest
8 نظر
قدیمی ها
جدید ها بیشترین رای
Inline Feedbacks
View all comments
Mohsen
Mohsen

عالی

0
پاسخ
حسین وثوقی
حسین وثوقی
نویسنده
در پاسخ به  Mohsen

ممنون از همراهی شما

0
پاسخ
hamid.6.shojaee
hamid.6.shojaee

عالی سپاس

0
پاسخ
علی اصغر علی نیا
علی اصغر علی نیا

ممنون از توضیحاتتون درباره این دو مفهوم که واقعا می بایست مورد توجه قرار بگیرد

0
پاسخ
هومن
هومن

عالی بود 🙏🏻

0
پاسخ
امید
امید

جناب مهندس وثوقی
بسیار سپاسگزارم از شما بابت مطالب علمی، کاربردی و مفهومی که به زبان ساده داخل سایت می‏ ذارین

0
پاسخ
فرهاد
فرهاد

با سلام و احترام و تشکر از جناب آقای مهندس وثوقی بزرگوار. من واقعا نمی توانستم مفهوم row context و filter context را درک کنم و در ابتدا گمان می کردم این دو مفهوم خاصیت های توایع DAX هستند. به طوریکه برخی توابع از نوع row context و برخی دیگر از نوع filter context هستند. ولی با مطالعه آموزش جامع و به زبان گویا و ساده شما متوجه معنای اصلی این مفاهیم شدم. با تجدید احترام

0
پاسخ
شیما
شیما

ممنون از توضیحاتتون.

0
پاسخ
جستجو
جستجو برای:
دسته بندی مطالب
  • Charts
  • DAX
  • Excel
  • Power BI
  • Power Query
  • تحلیل داده
  • هوش تجاری
پکیج های آموزشی
  • Data Analysis
  • Excel
  • Power BI
  • Power Query
  • Python
  • SQL
درباره گروه تحلیلگری

معتقدیم آموزش شروع یک تعهد بلند مدت است. این را از مشتریان ما سوال کنید.

اطلاعات تماس
  • تهران، خیابان مطهری، ابتدای خیابان سنایی، کوچه بیست و یکم
  • 42 12 600 - 0919 فقط تلگرام و واتساپ
  • info@tahlilgary.com
پیوندها
  • آموزش رایگان و اصولی اکسل
  • دوره رایگان آموزش Power BI | پاور بی آی
  • آموزش دستورات پایه SQL
  • آمار و تحلیل داده با پایتون
  • دومین مسابقه‌ Power BI ایران
دسته بندی محصولات
Data Analysis Excel Power BI Power Query Python SQL
wpDiscuz

ورود

رمز عبور را فراموش کرده اید؟

هنوز عضو نشده اید؟ عضویت در سایت